Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

对PLE模型构架的一点疑问 #88

Open
Kakk7447 opened this issue Nov 21, 2024 · 4 comments
Open

对PLE模型构架的一点疑问 #88

Kakk7447 opened this issue Nov 21, 2024 · 4 comments

Comments

@Kakk7447
Copy link

开发者您好,非常感谢您对模型编写付出的努力。我对PLE模型框架中有一些疑问,为什么在forward过程中,没有share_expert_gate的构建呢?

@Baijiong-Lin
Copy link
Collaborator

share_expert_gate指的是什么

@Kakk7447
Copy link
Author

开发者您好,我在PLE原文中看到,构造PLE网络主要是两部分:Multi-level Extraction Networks,以及上层的PLE network。在Multi-level Extraction Networks中,提到了门控网络不仅仅包含针对于特定任务的门控网络,还有一个共享专家的门控网络。原文如下:'Besides gates for task-specific experts, the extraction network also employs a gating network for shared experts to combine knowledge from all experts in this layer.'
这意味着原始数据进入Multi-level Extraction Networks的需要经过三个门控网络(两个特殊任务网络+一个共享专家网络),
之后。
我以一个特殊任务网络的流程举例。
input——特殊专家1——输出1.
input——共享专家——输出share
input——特殊专家2——输出2.

(输出1+输出share)*gate_specific1=进入Multi-level Extraction Networks第二层的特殊专家1中。
这是一个特殊专家的信息传递过程。
但对于Multi-level Extraction Networks第二层的共享专家,输入的数据应该为
(输出1+输出share+输出2)*gate_share1=进入Multi-level Extraction Networks第二层的共享专家1中。

第二层中共享专家的输入会影响后续的输出。但我在您的代码中发现,传给Multi-level Extraction Networks第二层的共享专家的信息是(输出1+输出share)*gate_specific1而并非是(输出1+输出share+输出2)*gate_share1,这是我存在疑问的点。

‘It is worth noting that the selected matrix of the shared module in PLE is slightly different from task-specific modules, as it consists of all shared experts and task-specific experts in this layer.’

原文PLE的流程图如下,我的疑问在于图中同红色框标出的门控网络并没有在代码中显示。因为我看到您的代码中,仅规定了每一层的gate_specific
PLE

我还有第二个疑问,这与算法的正确无关,而是关于网络结构的问题。在class _transform_resnet_PLE(nn.Module)中和class PLE(AbsArchitecture)都规定了forward函数。我在class PLE(AbsArchitecture) 看到了这行代码:
self.encoder = _transform_resnet_PLE(self.encoder, task_name, self.img_size, self.num_experts, device)

这是否意味者在实例化PLE并且train时,运行这段代码会先将encoder的每一个值都计算出来呢?
然后再PLE(AbsArchitecture)的forward中,只是将encoder的内容进行了传入decoder计算最终值呢?

第三个疑问,我在您的代码中看到,您共给encoder编写了五个层,这个是人为规定的吗?因为我在原文中并未看到有关Multi-level Extraction Networks的介绍。

非常期待您的回复,谢谢!

@Baijiong-Lin
Copy link
Collaborator

(1) 我们的实现应该是少了shared expert gate. 后续我会更正这个错误. 感谢你指出这个问题.
(2) 这里只是实例化一个encoder

self.encoder = _transform_resnet_PLE(self.encoder, task_name, self.img_size,

这里才会调用_transform_resnet_PLE 的forward
gate_rep = self.encoder(inputs)

(3) 是的,我们这里用的是resnet,所以设定为5层

@Kakk7447
Copy link
Author

谢谢您的回答!祝好

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants