一个完整的transformer结构可以切分成
Encoder-self attention(“E:SA”),
Encoder-Feed Forward(“E:FF”),
Decoder-Self Attention(“D:SA”),
Decoder-Encoder Attention(“D:EA”) ,
Decoder-Feed Forward(“D:FF”)
5个sub-layer结构。文中作者采用了两种度量方式确认这些sub-layer的重要程度。
实验结果表明:
-
Decoder self-attention layers是最不重要的,而Decoder feed-forward layers是最重要的;
-
离模型的输入和输出越近的sub-layer要比其他的重要些;
-
在decoder里越靠后的encoder-attention layer要比之前的重要。
这些结果对不同的度量方法,数据集,初始化种子以及模型容量都能保持一致性。
模块重要性分析
-
Contribution in information Flow,对于模型信息流的贡献程度
-
Criticality in Representation Generalization,模型的模块对参数的扰动表现出不同的鲁棒性
Contribution in Information Flow
Transformer 最初是用来做机器翻译任务的。所谓的information flow就是指数据如何从源语言经过Transformer的encoder和decoder最终成为目标语言的。如何衡量模型的每个部分对information flow做出的贡献呢? 最直观的想法就是去掉那个部分看看同样条件下模型的效果如何。如果去掉那个部分,模型效果没什么变化,那就说明该部分没做什么贡献,反之,如果删掉该部分,模型效果显著降低则说明它贡献卓著,没它不行。
Criticality in Representation Generalization
这里说的criticality指的是模型的模块对参数的扰动表现出不同的鲁棒性。比方说,如果将某个模块的参数重置为初始化参数,模型的表现变差,那么这个模块就是critical的,否则就是non-critical的。有人在理论上将这个criticality给公式化了,而且他们表明这个criticality可以反映神经网络的泛化能力。
总结
我们可以利用contribution score和criticality score评价模型中各个模块的重要性,知晓了模块的重要性程度后我们可以对不重要的模块进行剪枝或者参数回卷都能在一定程度上让原有模型得到优化。