前面输入的 X 从 embedding 开始,到多头 QKV,再还原 Z,经过了多层的网络,每经过一层就会增加训练的性能要求,梯度下降的特别多,会剑走偏锋,第一部里 Loss Function 中梯度下降中,和 LR 类似,会跳过最优值,或者在最优值附近震荡,反复消耗资源,有个可视化训练的小工具很有意思建议大家玩耍一下在线课堂。
(在选择这个识别银河系一样的黄绿点范围的时候在线课堂,我们增加了 6 个隐藏层后,traning loss 在反复横跳,训练过程非常的长)
2015 年微软亚洲研究院提出了基于 CNN 架构的 ResNet,在 transformer 中可以借鉴来解决这个 “退化” 问题,核心是引入了 “跳跃连接” 或 “捷径连接”(训练场景,梯度直接反向传播最原始层),将输入除了做为 X 给每层外,还跳过这层网络直接和这层输出 Y 叠加,让后面的层可以学习到这层处理和原始输入的差异,而不是直接上层处理结果 Y,这种设计允许网络学习到恒等映射(identity mapping),即输出与输入相同,从而使得网络可以通过更简单的路径来学习到正确的映射关系在线课堂。
X 和 Y 因为维度相同在线课堂,这里叠加就是直接相加,,但每层的输出其实是对 X 不同维度和力度的调整,需归一成正态分布后再相加,实现原理也很简单:
1. 求矩阵每行所有列的均值(例如上面例子在线课堂,取 LL 的 768 维度的均值)
2. 算出每行所有列的方差
3. 最后用矩阵每行每列在线课堂,减去这行的均值,再除以这行的标准差(𝜖是一个小的常数,防止除 0),然后再引入 a 和 b 训练参数,抵消这个过程的损失
经过 ADD 和 Norm 后,Transformer 的第一段处理基本结束,因为前面都是线性处理,需要再增加一个非线性层进行变化,让结果更丰富(或者让训练能够有一定的 “基因突变”),这层非常的简单就是在第一部中讲的最简单的单向神经网络(f (x)=x*w+b),然后再过一次 Norm在线课堂。
小结一下第一阶段的所有流程,见下图,这个流程在 tranformer 里被独立出一个模块,叫 encoder,至此 tranformer 具备识别一个句子中每个词和整句的关联性,也就是每次 token 都包含了全部 token 信息以及关联度在线课堂。