我们接着学习Transformer相关内容,我们先回顾一下这个经典的图再开始我们的学习。
残差:
我们从底层向上看,最下面的x1和x2是我们的词向量,经过位置编码后加入了位置信息成了新的x1和x2,接下来经过自注意力层得到注意力结果z1和z2。
残差:我们可以看到我们会对z向量加上经过位置编码的x向量,这一步叫做残差。这意味着z向量和x向量的维度一致。
这一张图说明了残差的作用,即使序列再长经过求导以后梯度接近于0,但是仍有一个常数项1,不至于让模型收敛很慢,这也是如果用到了残差网络模型通常可以变得比较深的原因。
LayerNorm
在讲解LN之前我们首先复习一下BN(batch normlization),并且探讨一下为什么在序列预测中BN不如LN有用。
我们假设每一个紫色的列为一个样本,每一行为同一种特征,BN是在一个batch中不同样本的同一种特征做标准化(均值为0,方差为1), 并且用这个均值和方差来代表整个样本的均值和方差。
我有一个文章专门讲标准化和归一化感兴趣可以看一下。
BN的缺点:
- batch size小时,效果比较差,因为BN使用batch均值和方差代表整体样本均值方差,当batch size小时不具备普遍性。
- BN在NLP中效果比较差,当我们输入序列时,由于序列长短不同,我们需要将短的序列补0,这就导致做BN时有些词会被0平均的很小,影响后续的操作。而且当我们输入一个很长很长的序列需要做预测,模型学习的都是较短的序列的均值方差不能很好的适应新数据导致BN效果很差。
LayerNorm
和BN最大的区别是LN会在每一个样本自己内部做Norm处理,也就是序列中的每一个单词一起做标准化,这样的好处是每个序列的长度不同,不会影响新的序列的预测。
**这里LayerNorm讲的不是很清楚,我们后面再展开讨论
Decoder:
Maskd-Mutil Head Attention
由于Decoder和Encoder不同,它需要一个一个序列的输出,所以我当前时刻不能看到所有时刻的单词,这个mask的意思就是把当前时刻以后的单词全部mask掉,再实际操作中一般会将多头权重赋为很大的负值这样做softmax后就会趋近于0。
Decoder和Encoder的区别
每一个Eecoder的输出会同时给到每一个Decoder做输入,具体的做法是作为K和V向量传入到每一个Decoder中。而Q向量则是由上一次的多头注意力机制提供的。
Reference:
- 十分钟理解Transformer
- Bilibili Transformer从零详细解读
- Transformer论文逐段精读【论文精读】



