章海
2025-6-4 20:32:46
探秘Transformer系列之(14)--- 残差网络和归一化
目录
- 探秘Transformer系列之(14)--- 残差网络和归一化
- 0x00 概述
- 0x01 残差连接
- 1.1 问题
- 1.2 相关知识
- shortcut connections
- 恒等映射
- 1.3 网络结构
- 1.4 功用
- 0x02 归一化
- 0x03 BatchNorm
- 3.1 公式
- 3.2 作用
- 3.3 PyTorch使用
- 3.4 问题
- 0x04 layerNorm
- 4.1 解决方案
- 4.2 公式
- 4.3 作用
- 4.4 LN和BN的差异
- 4.5 Post-Norm VS Pre-Norm
- 概念
- 论文实现
- Post-Norm
- Pre-Norm
- 小结
- 0x05 扩展比对
- 5.1 Instance Norm
- 5.2 GroupNorm
- 5.3 比对
- 0x06 实现
- 0x07 优化与演进
- 7.1 RMSNorm
- 7.2 Deep Norm
- 7.3 PRepBN
- 7.4 RealFormer
- 7.5 nGPT
- 研究背景&动机
- 核心贡献
- 对比
- 层和块(LAYERS AND BLOCKS)
- 自注意力块
- MLP 块(MLP BLOCK)
- 切换
- 7.6 DyT
- 0xFF 参考
0x00 概述
可以把 Transformer 看作是一个通用的可微计算机,自注意力机制给这个计算机配置了类似消息传递的架构,提供了通用且强大,能够涵盖众多现实世界的算法,仅需少量计算步骤即可完成任务;残差连接、层归一化等设计,使其具备高效的学习和优化能力。在Transformer架构中,Add & Norm模块用于在多头自注意力机制和前馈神经网络之间添加残差连接和归一化操作。具体由Add和Norm两部分组成。
- Add指X+MultiHeadAttention(X)操作(残差连接),其来源于论文Deep Residual Learning for Image Recognition。残差连接把网络的输入和输出相加,得到网络的输出为F(x)+x。即将本层的输入张量与输出张量相加,从而得到一个残差向量。
- Norm是Layer Normalization操作(层归一化),其来源于论文Layer Normalization。归一化对残差向量进行归一化,以便更好地传递信息和控制梯度,避免梯度消失或爆炸的问题,从而提高模型的训练效率和性能。归一化可以采用不同的方法,如Layer Normalization或Batch Normalization。Transformer采用的是层归一化。
残差连接和归一化层的结合使得Transformer能够更有效地进行训练,并提高了模型的性能和稳定性。两者的结合是现代深度学习架构成功的重要因素之一。我们接下来通过几个问题来引导,在学习完本篇之后,我们会对这几个问题做出回答。
- Add & Norm在Transformer的位置是哪里?
- 为什么transformer块使用LayerNorm而不是BatchNorm?
- LayerNorm究竟应该放前面还是后面。
0x01 残差连接
我们首先给出将Transformer LM展开后,具有注意力和前馈网络块的扩展视图,包括模型权重(灰色)和残差流状态(绿色)。从中可以看出来残差连接在Transformer中的重要性。
1.1 问题
根据泛逼近定理(universal approximation theorem),只要给定足够的容量,单层的前馈网络也足以表示任何函数。但是,该层可能非常庞大,网络和数据易出现过拟合。因此,研究界普遍认为网络架构需要更多层。理论上,神经网络的层数越多,越能学习到复杂的特征,越能提升模型的性能。但是,事实上,当层数增加到一定程度之后,模型的性能会急剧下降。导致上述情形的主要是三个问题:
- 梯度消失(Vanishing Gradient):梯度消失是指在训练深度神经网络时,反向传播过程中的梯度逐渐变小,最终导致梯度接近于零的现象。梯度消失是在反向传播过程中使用的链式法则引起的。因为目前训练主要用的是基于梯度的优化器,梯度消失意味着我们没有很好的信号去调整优化前面的层。换句话说,前面的层也许几乎没有得到更新,一直保持随机初始化的状态。只有比较靠近输出的层才更新得比较好。但在前向传播中,这些更新较好层的输入是前面没有更新好的层的输出,所以更新较好层的输入质量可能会很糟糕(因为经过了一个近乎随机的变换),因此哪怕后面的层更新好了,总体效果也不好。最终的现象是:模型越深,效果越差。这就是权重退化,即在模型层数加深后新加入的层就学习不到什么东西了。
- 梯度爆炸(gradient exploding):梯度爆炸指的是在反向传播过程中,梯度值呈指数级增长,导致网络权重的大幅更新,从而使得网络变得不稳定,训练效果下降。在深层神经网络中,由于链式法则的应用,梯度需要通过多层进行反向传播。如果每一层的梯度都稍微增大一点,那么经过多层传播后,梯度值就会变得非常大,从而导致梯度爆炸。因此,网络层数的增加会加剧梯度爆炸的风险。
- 网络退化:理论上网络存在一个最优层数,如果模型超过这个层数,则多余层数带来的效果并不超过该最优层数下的模型效果,即这些冗余层数会带来网络退化。
何凯明大神提出的残差连接(Residual connection/skip-connect)可以有效缓解这些这些问题。从而使得拥有几十上百层的深度学习模型更加容易训练,在增加模型深度的同时还能保持甚至提高准确度。
1.2 相关知识
shortcut connections
残差连接的思想起源于中心化。在神经网络系统中,对输入数据等进行中心化转换,即将数据减去均值,被广泛验证是有利于加快系统的学习速度的。论文"Accelerated gradient descent by factor-centering decomposition"将这样的思想拓展到了梯度的反向传播中,不仅是输入和隐藏层单元的激活值要中心化,梯度误差以及权重的更新也可以中心化,这种将输入输出进行连接的操作被称为shortcut connection(为跳层连接)技术。具体而言,该论文提出了将网络分解为biased和centered两个子网络的思想,通过并行训练两个子网络,分别学习线性和非线性变换部分,不仅降低了各个网络的学习难度,也大大提升了梯度下降算法的训练速度。
而论文“Highway Networks" 提出了高速路网络(Highway Networks),其通过使用门控单元来学习管理信息,对深层神经网络使用了跳层连接,允许信息高速无阻碍的通过深层神经网络的各层,这样有效的减缓了梯度的问题。
恒等映射
Identity Mapping翻译成中文就是恒等映射,简单来说,就是输入和输出相同。恒等映射在神经网络中的作用很微妙。ResNet论文中者给出了例子如下图,56层的深层网络在训练集和测试集上的表现都不如20层的浅层网络。如果20层的浅层网络的性能已经足够好,那么就算后面36层网络什么都不做,也不至于比20层网络效果更差。但是,事实并非如此。为何会有如此退化的现象?论文判断是因为神经网络并不容易学习恒等映射。
1.3 网络结构
ResNet 的核心思想是引入一个「恒等快捷连接」(identity shortcut connection),直接跳过一个或多个层。从表象上来看,残差连接就是把网络的输入和输出相加,得到网络的输出为F(x)+x。具体来说,如果我们将子层的操作表示为F(x),把子层的输入记作x,那么残差连接的输出就是x + F(x),也是下一层网络模块的输入。ResNet有两篇论文,我们来看看论文的推导。
论文V1
首先,论文选取一个准确率饱和的浅层(shallower architecture)网络\(y=F(x)\),再加上一些恒等映射结构(identity mapping,
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|
|
|
相关推荐
|
|