2.layer_normalization
1.Normalization
1.1 Batch Norm
为什么要进行BN呢?
- 在深度神经网络训练的过程中,通常以输入网络的每一个mini-batch进行训练,这样每个batch具有不同的分布,使模型训练起来特别困难。
- Internal Covariate Shift (ICS) 问题:在训练的过程中,激活函数会改变各层数据的分布,随着网络的加深,这种改变(差异)会越来越大,使模型训练起来特别困难,收敛速度很慢,会出现梯度消失的问题。
BN的主要思想: 针对每个神经元,使数据在进入激活函数之前,沿着通道计算每个batch的均值、方差,‘强迫’数据保持均值为0,方差为1的正态分布, 避免发生梯度消失。具体来说,就是把第1个样本的第1个通道,加上第2个样本第1个通道 … 加上第 N 个样本第1个通道,求平均,得到通道 1 的均值(注意是除以 N×H×W 而不是单纯除以 N,最后得到的是一个代表这个 batch 第1个通道平均值的数字,而不是一个 H×W 的矩阵)。求通道 1 的方差也是同理。对所有通道都施加一遍这个操作,就得到了所有通道的均值和方差。
BN的使用位置: 全连接层或卷积操作之后,激活函数之前。
BN算法过程:
- 沿着通道计算每个batch的均值
- 沿着通道计算每个batch的方差
- 做归一化
- 加入缩放和平移变量 γ \gamma γ和 β \beta β
加入缩放和平移变量的原因是:保证每一次数据经过归一化后还保留原有学习来的特征,同时又能完成归一化操作,加速训练。 这两个参数是用来学习的参数。
BN的作用:
- 允许较大的学习率;
- 减弱对初始化的强依赖性
- 保持隐藏层中数值的均值、方差不变,让数值更稳定,为后面网络提供坚实的基础;
- 有轻微的正则化作用(相当于给隐藏层加入噪声,类似Dropout)
BN存在的问题:
- 每次是在一个batch上计算均值、方差,如果batch size太小,则计算的均值、方差不足以代表整个数据分布。
- batch size太大: 会超过内存容量;需要跑更多的epoch,导致总训练时间变长;会直接固定梯度下降的方向,导致很难更新。
1.2 Layer Norm
LayerNorm是大模型也是transformer结构中最常用的归一化操作,简而言之,它的作用是 对特征张量按照某一维度或某几个维度进行0均值,1方差的归一化 操作,计算公式为:
y = x − E ( x ) Var ( x ) + ϵ ⋅ γ + β \mathrm{y} = \frac{\mathrm{x} - \mathrm{E}(\mathrm{x})}{\sqrt{\text{Var}(\mathrm{x}) + \epsilon}} \cdot \gamma + \beta y=Var(x)+ϵx−E(x)⋅γ+β
这里的 x x x 可以理解为** 张量中具体某一维度的所有元素**,比如对于 shape 为 (2,2,4) 的张量 input,若指定归一化的操作为第三个维度,则会对第三个维度中的四个张量(2,2,1),各进行上述的一次计算.
详细形式:
a i = ∑ j = 1 m w i j x j , y i = f ( a i + b i ) a_i = \sum_{j=1}^{m} w_{ij} x_j, \quad y_i = f\left(a_i + b_i\right) ai=j=1∑mwijxj,yi=f(ai+bi)
a ˉ i = a i − μ σ ⋅ g i , y i = f ( a ˉ i + b i ) \bar{a}_i = \frac{a_i - \mu}{\sigma} \cdot g_i, \quad y_i = f\left(\bar{a}_i + b_i\right) aˉi=σai−μ⋅gi,yi=f(

最低0.47元/天 解锁文章
1182

被折叠的 条评论
为什么被折叠?



