第4章 残差连接与逐层归一化
本章主要内容:
1.逐层归一化
2.残差与残差分析
3.残差模块
4.残差连接在 LLM 中的应用
逐层归一化
BN 方法就是在深度神经网络训练过程中使每层神经网络的输入都保持相同的分布。因
为深层神经网络在进行非线性变换前的输入值(y=Wx+b,x 是输入,b 为偏置项)随着
网络深度加深或者在训练过程中,其分布逐渐发生偏移或变动。之所以训练深度神经网
络收敛越来越慢,一般是因为整体分布逐渐向非线性函数的取值区间的上下限两端靠近,
导致反向传播时低层神经网络的梯度消失。BN 方法就是通过一定的规范化手段,将每
层神经网络任意神经元的输入值的分布拉回到均值为 0、方差为 1 的标准正态分布,其
实就是将越来越偏的分布强制拉回到比较标准的分布。这样就使激活输入值落在非线性
函数对输入比较敏感的区域,网络的输出就可以得到比较大的梯度,避免梯度消失问题,
而且梯度变大表明学习收敛速度快,能加快训练速度。
BN 的主要步骤
输入:批量数据:B ={x1,…, xm}
学习参数:β,γ
输出:
BN步骤主要分为4步:
(1)计算每一批训练数据的均值;
(2)计算每一批训练数据的方差;
(3)使用求得的均值和方差对该批次的训练数据做规范化。其中ε是为了避免除数
为0时所使用的微小正数;
.
(4)尺度变换和偏移:将 乘以γ调整数值大小,再加上β增加偏移后得到yi
,γ是尺度因子,β是平移因子。这一步是BN的精髓,由于归一化后的xi基本被限
制在正态分布下,使得网络的表达能力下降。
进行平移和缩放处理引入了γ和β两个参数,这是可学习重构参数γ、β,让网络可
以学习恢复出原始网络所要学习的特征分布。变换重构,引入了可学习参数γ、β
,这算法关键之处:
因此引入了这个可学习重构参数γ、β,让网络可以学习恢复出原始网络所要学习
的特征分布。
层的作用:解决内部协变量偏移、使得梯度变平缓、优化激活函数、增强优
化器作用、解决梯度消失问题和使模型具有正则化效果。BN层的作用是对不同
样本的同一特征做归一化。主要作用如下:
(1)加快网络的训练和收敛的速度
(2)控制梯度爆炸防止梯度消失
(3)防止过拟合
BN层一般用在线性层和卷积层后面,而不是放在非线性单元后。因为非线性单
元的输出分布形状将在训练过程中变化,归一化无法消除他的方差偏移,相反,
全连接和卷积层的输出一般是一个对称、非稀疏的分布,更加类似高斯分布,对
它们进行归一化可产生更加稳定的分布。例如,像Relu这样的激活函数,如果输
入的数据是一个高斯分布,经过变换出来的数据能是小于0的被抑制,也就是分
布小于0的部分直接变成0,这样就更加类似高斯分布
残差与残差分析
1.残差定义
残差是模型已经拟合后,观测值与通过模型预测的值之间的差异。残差是可观测
的,因为它是基于实际数据和模型预测计算得出的。残差用于评估模型对数据的
拟合程度:
如果一个模型的残差较小,通常认为该模型拟合得较好。
如果残差较大或者呈现某种规律性(比如随着预测值的增加而系统性地增加或减
少),则说明模型可能不够准确或需要改进。
2.残差与误差的主要区别
(1)定义
·误差:真实值与模型预测值之间的差异。
·残差:观测值与模型预测值之间的差异。
(2)可观测性
·误差:通常是不可观测的,因为我们不知道真实值。
·残差:是可观测的,因为它是基于实际数据和模型预测计算得出的。
(3)应用
·误差:用于理论分析和模型设计,帮助我们理解模型的偏差和方差。
·残差:用于模型评估,帮助我们判断模型拟合的好坏。
.
在实际应用中,通过最小化残差来尝试减少误差,从而获得更准更准确的模型。
然而,即使残差很小,也不意味着误差就一定小,因为模型可能存在未观测到的
偏差。因此,在模型选择和评估过程中,需要综合考虑残差分析和交叉验证等多
种方法来评估模型的性能。
在数理统计中,残差是指实际观测值与估计值(拟合值)之间的差,残差蕴含了
有关模型基本假设的重要信息。如果回归模型正确的话,可以将残差看作误差的
观测值。将多次重复测量的各次测得值与平均值(数学期望)之差称之为残差。
残差是因变量的观测值yi’与根据估计的回归方程求出的预测yi之差,用e表示。反
映了用估计的回归方程去预测yi’而引起的误差。第i个观察值的残差为:
ei=yi’-yi
残差(或残差平方和)反映数据的离散程度。
2.残差分析
残差应符合模型的假设条件,且具有误差的一些性质。残差分析是指利用残差所
提供的信息,来考察模型假设的合理性及数据的可靠性。显然,有多少对数据,
就有多少个残差。残差分析就是通过残差所提供的信息,分析出数据的可靠性、
周期性或其它干扰。
.
残差蕴含了有关模型基本假设的重要信息。如果回归模型正确,则可以将残差看作
误差的观测值。它应符合模型的假设条件,且具有误差的一些性质。以某种残差为
纵坐标,其它变量为横坐标作散点图,即为残差图,它是残差分析的重要工具之一,
通常横坐标的选择有三种:
(1)因变量的拟合值;
(2)自变量;
(3)当因变量的观测值为一时间序列时,横坐标可取观测时间或观测序号。
残差图的分布趋势可以帮助判明所拟合的线性模型是否满足有关假设, 残差图是
以残差为纵坐标,以任何其它指定的量为横坐标的散点图,残差图的示意图如图4-1
所示。
残差模块
残差模块结构
1.残差模块的基本组成
神经网络模块如所示,X为输入、H(X)为输出。残差模块的结构如所示。
图4-2 图4-3
(1)残差模块比普通模块增加了右边的曲线,这条曲线为快捷方式连接或身份映射。
(2)H(x)=F(x,w)+x
(3)模型需要学习的是F(x,w)这个残差,而不是普通模块的H(x),公式则可以变换为:
F(x,w)=H(x)−x
(4)F(x)与x是直接相加,而不是在某个维度拼接,所以要求F(x)与x的形状相同。
(5)残差学习模块的输出结果是在 F(x)+x 之后再加Relu激活函数,而不是对 F(x) 进
行激活函数作用之后再加x,也就是F(x)+x在Relu激活函数之前。
.
对于普通模块,任意堆叠的两层网络,希望找到的是一个映射H(x)对应的残差元,添加
一个快捷连接,从输入到输出,这里的快捷连接默认为恒等映射,此时的问题就从寻找
映射H(x)到F(x);这类似于在数学上,直接去解一个方程较为复杂,就把它分解成两
个简单问题和的形式,分别去解决。如所示。
图4-4
对应于残差的初始定义,在统计学中,为实际观测值与估计值(拟合值)的差值,这里
则是直接的映射H(x)与快捷连接x的差值。
当没有从x到⨁的快捷连接时,残差学习模块就是一个普通的两层网络。残差模块中的
网络可以是全连接层。设第二层网络在激活函数之前的输出为 H(x)。如果在两层网络
中,最优的输出就是输入x,那么对于没有捷径连接的网络,就需要将其优化成 H(x)=x
。对于有捷径连接的网络,即残差模块,如果最优输出是x,则只需要将优化为:
F(x)=H(x)−x=0
显然,后者的优化比前者更简单,这也是残差的由来。
.
F(x)是求和前网络映射,H(x)是从输入到求和后的网络映射。例如,如果将5映射
到,那么引入残差前是F ’(5)=,引入残差后是H(5)=, H(5)=H(5)-5,
F(5)=。这里的F ’和F都表示网络参数映射,引入残差后的映射对输出的变化
更敏感。例如,输出从变到,映射F ’的输出增加了1/5=2%,而对于残差结
构输出从到,映射F是从到,增加了100%。明显后者输出变化对权重
的调整作用更大,所以效果更好。残差的思想都是去掉相同的主体部分,从而突
出微小的变化。可以对多堆叠层采用残差学习。
残差模块可以解决深层神经网络准确率下降的问题。对于一个神经网络模型,如
果该模型是最优的,那么训练就很容易将残差映射优化到0,此时只剩下身份映
射,那么无论怎么增加深度,理论上网络将一直处于最优状态。因为相当于后面
所有增加的网络都将沿着身份映射(自身)进行信息传输,可以理解为最优网络
后面的层数都是废掉的(不具备特征提取的能力),实际上没起什么作用。这样,
网络的性能也就不随着深度的增加而降低。
.
2.捷径连接
在残差网络中有很多的旁路将输入直接连接到后面的层,这种结构也称为捷径连接或者
跳过连接。捷径连接又分为 实线连接和虚线连接。
·实线连接
如果F和x维度相同,可以直接相加,不增加网络的参数以及计算复杂度,计算公式如下:y=F(x,
{Wi})+x
在这种情况下的捷径连接的图形表示采用实线连接。
·虚线连接
如果x和F的维度不同,需要先将x做一个变换,使特征矩阵形状相同,然后再相加。虚
线部分前后块前后的维度不一致,则体现在两个方面上
·空间不一致
在跳接部分给输入的x加上线性映射W
·深度不一致
如果深度不一致,则全0填充。
例4-1,虚线连接。
图4-4
跳接时加1×1卷积层升维,如图4-4所示,注意使用了虚线。实线的残差连接就是正常的
直接相加,虚线表示在右侧边分支内增加了一个 1x1 卷积核的卷积操作。利用1x1 卷积
核的卷积操作可以升维或者降维,在这里使用升维,从63维升到128维,这样使得主分
支与捷径连接的输出维数相同。
残差模块的类型.
残差学习模块分为基本型和瓶颈型两种。基本型残差模块由两个3x3的卷积网络串接在
一起组成的一个残差模块,瓶颈型残差模块是1x1、3x3、1x1的三个卷积网络串接在一
起组成的一个残差模块。如图4-5所示。
1. 基本型残差模块
(1)3x3卷积可以替代更大尺寸的卷积
在构建CNN时常使用3x3的卷积,而不是5x5,7x7等更大尺寸的卷积。这是由
于在保证具有同样大小的输出和感受野前提下,用3x3卷积可以替代更大尺寸的卷积。
两个3x3的卷积可以代替一个5x5的卷积;三个3x3的卷积可以代替一个7x7的卷积。所
以Vgg系列网络中全部使用了3x3的卷积构成。
假设图像大小为nxn,如果采用5x5卷积核的方案,stride=1,padding=0,其输
出维度为(n-5)/1+1=n-4。
.
采用3x3卷积的方案,同样图像大小为n*n,第1次3x3卷积后输出维度为:
(n-3)/1+1=n-2
第2次3x3卷积后输出维度为:
(n-2-3)/1+1=n-4。
可以看出,采用一个5x5卷积核和两个3x3卷积核,它们卷积后的输出维度相同,
输出的每一个像素的感受野也相等。这表明两个3x3的卷积可以代替一个5x5的卷
积。
(2)使用两个3x3卷积代替一个5x5卷积的优势分析
·两个3x3卷积可以代替一个5x5卷积网络,导致层数增加,也增加了网络的非线
性表达能力。
·两个3x3卷积可以代替一个5x5卷积网络,使得参数减少。两个3x3和一个5x5的
参数比例为3×3×2/(5×5)=,同样的三个3×3和一个7×7参数比例为
3×3×3/(7×7)=,将近一倍的压缩,这是很大提升。
考虑这两点,残差网络中多数采用了两个3x3的卷积的结构构成基本型残差模块,
如图4-4(1)所示。
.2. 瓶颈型残差模块瓶颈型残差模块由1x1、3x3、1x1的三个卷积网络串接在一起组成。
(1)1x1卷积的作用
1x1卷积又称为网中网,在残差模块中,经常使用1x1卷积,如图4-4(2)所示。
由两个1x1卷积和一个3x3卷积可构成瓶颈残差模块。在残差网中1x1卷积表面看
起来无作用,但是,其作用颇多,总结如下。
·实现跨通道的特征整合与信息交互
如果当前层和下一层都只有一个通道,那么1×1卷积核确实没有什么作用。例如,
输入6x6x1的矩阵,这里的1x1卷积形式为1x1x1,卷积核中的元素为3,经过1x1
卷积,输出结果也是6x6x1的矩阵。但输出矩阵中的每个元素值是输入矩阵中每
个元素值乘以3的结果,仅改变了原内容,如图4-6所示。
跨通道信息交互是通过通道的变换。使用1x1卷积核实现降维和升维的操作其实
就是通道间信息的线性组合变化,3x3x64通道的卷积核后面添加一个1x1x28通道
的卷积核,就变成了3x3x28通道的卷积核,原来的64个通道就可以理解为跨通道
线性组合变成了28通道,只是在通道维度上做线性组合,W和H上是共享权值的
滑动窗口。这就是利用通道间的变换完成了信息交互。
.
··降维或升维降维或升维
但是,如果它们分别为但是,如果它们分别为mm层和层和nn层,层,1×11×1卷积可以起到一个跨通道聚合的作用,也可以卷积可以起到一个跨通道聚合的作用,也可以
起到降维(或者升维)的作用、改变参数量。起到降维(或者升维)的作用、改变参数量。
由于由于 1×1 1×1 并不改变高度和宽度,改变通道的直观的结果,就是可以将原本的数据量进并不改变高度和宽度,改变通道的直观的结果,就是可以将原本的数据量进
行增加或者减少。改变的只是行增加或者减少。改变的只是 高度高度××宽度宽度× × 通道中的通道这一个维度的大小而已。降通道中的通道这一个维度的大小而已。降
维或升维的表示如图维或升维的表示如图4-74-7所示。所示。
使用1x1卷积核,实现降维和升维的操作其实就是通道间信息的线性组合变化。
例4-2,通道间的信息交互。
3x3x64通道的卷积核后面添加一个1x1x28通道的卷积核,就变成了3x3x28通道的卷积
核,原来的64个通道就可以理解为跨通道线性组合变成了28通道,这就是通道间的信
息交互。
·增加非线性
一个卷积核对应卷积后得到一个特征图,不同的卷积核具有不同的权重和偏置,卷积
以后得到不同的特征图,提取了不同的特征。1x1卷积核可以在保持特征图尺度不变
的(即不损失分辨率)的前提下,利用后接的非线性激活函数,大幅增加非线性特性,
同时网络也能做的越来越深。
在ResNet模块中,假设输入的特征图的维度是wh256,并且最后要输出的也是256个特
征图,则可以通过1x1、3x3、1x1的三个卷积网络串接完成。
残差模块的优势残差模块的优势
1.残差学习模块的主要作用
(1)加了残差结构后,给了输入x一个多的选择。如果神经网络学习到这层的参
数是冗余的时,它可以选择直接走这条“跳接”曲线(快捷方式连接),跳过这个
冗余层,而不需要再去拟合参数使得输出H(x)等于x。
(2)学习残差的计算量比学习输出等于输入要小。假设普通网络为A,残差网
络为B,输入为2,输出为2(输入和输出一样是为了模拟冗余层需要恒等映射的
情况),那么普通网络就是A(2)=2,而残差网络就是B(2)=F(2)+2=2,显然残差网
络中的F(2)=0。网络中权重一般初始化为0附近的数,则可很容易理解,为什么
让F(2)(经过权重矩阵)拟合0比拟合A(2)=2更容易。
(3)ReLU能够将负数激活为0,而正数输入等于输出。这相当于过滤了负数的
线性变化,让F(2)=0变得更加容易。
(4)残差网络可以表示成H(x)=F(x)+x,这就说明了在求输出H(x)对输入x的倒数
(梯度),也就是在反向传播的时,H(x)′=F(x)′+1,残差结构的这个常数1也能
保证在求梯度的时梯度不会消失。
.
2.残差模块的优点
(1)用恒等映射与残差相加,并没有增加模型的参数量,也没有增加计算复杂
度;
(2)增加残差模块后模型的收敛速度加快,即误差下降的梯度更大;
(3)可以解决退化问题,至少不比没有加深网络差;
(4)加了残差模块,网络就可以实现很深;
(5)准确率也有了很大的提升。
逐层归一化与残差链接在LLM中的应用
在LLM中,残差链接和逐层归一化是两种重要的技术,它们有助于提高模型的训
练效果和性能。
逐层归一化在LLM中的应用
逐层归一化是一种在每一层中对激活进行归一化的技术,与批量归一化相比,它
不依赖于小批量数据的大小,因此在动态批量大小或者在某些情况下更为适用。
在LLM中的应用主要包括如下。
1.稳定训练过程
通过归一化每层的激活,逐层归一化有助于减少内部协变量偏移,从而使得训练
过程更加稳定。
2.提高学习效率
归一化可以加速神经网络的训练,因为它限制了激活值的范围,使得优化算法可
以更快地收敛。
3.适应不同数据大小
由于逐层归一化不依赖于批次大小,因此它更适合于处理变长的序列数据,这在
语言模型中非常常见。
在Transformer模型中,逐层归一化通常紧跟在多头自注意力机制和前馈神经网络
之后,有助于提高模型性能。
.
残差链接在LLM中的应用
残差链接是一种允许梯度直接流向前面层的技术,通常用于深层神经网络中,以
解决梯度消失问题。在LLM中的主要应用包括如下。
1.缓解梯度消失
在非常深的网络中,梯度消失是一个常见问题,残差链接通过添加“短路”连接,
使得梯度可以直接流过这些连接,从而缓解这一问题。
2.提高训练效率
残差链接使得模型可以更容易地学习到身份映射,即输入可以直接传递到输出,
这在理论上可以让模型至少达到与浅层网络相同的性能。
3.加深网络深度
由于残差链接的存在,模型可以训练更深的网络而不会损失性能,这对于语言模
型来说尤其重要,因为它们需要捕捉复杂的语言结构和长期依赖关系。
在LLM中,残差链接通常与Transformer架构中的自注意力机制结合使用,形成了
Transformer模型的核心组件之一。
在LLM中,残差链接和逐层归一化通常是结合使用的。在每个残差块中,输入首
先通过自注意力层或前馈神经网络,然后进行逐层归一化,并通过残差链接与输
入相加。这种结构有助于Transformer模型在处理长序列时保持高效和稳定。
本章小结
神经网络的发展进入了几十层规模的阶段,而且,网络的层数越深,越有可能获
得优异的泛化能力。但是,当模型层数加大以后,网络变得越来越难以训练,这
主要是由于梯度消失和梯度爆炸所造成。为了解决多层神经网络训练出现的梯度
消失、梯度爆炸和网络性能退化问题,出现了数据标准化、权重初始化和BN层
等技术。应用残差方法可以解决网络性能退化问题,可以避免神经网络层数加深
导致损失函数值增大的问题。本章主要介绍LLM模型中所使用的逐层归一化与残
差链接的基本结构和算法、为实际应用建立基础。