LeeSureman / Flat-Lattice-Transformer

code for ACL 2020 paper: FLAT: Chinese NER Using Flat-Lattice Transformer
1k stars 178 forks source link

关于代码中Add&Norm的问题 #83

Open emt-mygf opened 3 years ago

emt-mygf commented 3 years ago

大佬您好,我最近在学习您FLAT的代码,目前有个疑问是在Transformer-Encoder模块的前馈部分最后

output = self.layer_postprocess(output) output = self.layer_preprocess(output) output = self.ff(output) output = self.layer_postprocess(output)

这一段我推测是实现attn之后的Add&Norm->feed_forward->Add&Norm过程 但是layer_postprocess(output)似乎只是对(output+output)做了归一化,并没有把经过sublayer前的数据输入进网络,没有残余连接,请问这是有意为之吗,是因为网络层数少不需要残余连接还是别的原因呢,求教,谢谢

LeeSureman commented 3 years ago

对,是有bug,修复之后效果会更好

CrisJk commented 2 years ago

大佬您好,我最近在学习您FLAT的代码,目前有个疑问是在Transformer-Encoder模块的前馈部分最后

output = self.layer_postprocess(output) output = self.layer_preprocess(output) output = self.ff(output) output = self.layer_postprocess(output)

这一段我推测是实现attn之后的Add&Norm->feed_forward->Add&Norm过程 但是layer_postprocess(output)似乎只是对(output+output)做了归一化,并没有把经过sublayer前的数据输入进网络,没有残余连接,请问这是有意为之吗,是因为网络层数少不需要残余连接还是别的原因呢,求教,谢谢

我自己复现了下,加上这个残差效果没有明显提升,尤其是+BERT的时候,指标基本上就是和BERT一样了,我个人理解如果BERT这个复杂的结构的embedding直接加到transformer的输出上,基本上就是BERT在起作用了,一层的transformer就学不太好