Transformer 使用 LayerNorm 不用 BatchNorm的原因

首先, Norm最开始被提出的时候是为了解决ICS(internal covariate shift,内部协变量转移)问题,但后来的研究发现,Norm起作用的本质是它平滑了Loss,保证了梯度下降过程中的稳定。

Batch Normalization

  • 1.1 背景

Batch Normalization(以下简称BN)的方法最早由Ioffe&Szegedy在2015年提出,主要用于解决在深度学习中产生的ICS(Internal Covariate Shift)的问题。若模型输入层数据分布发生变化,则模型在这波变化数据上的表现将有所波动,输入层分布的变化称为Covariate Shift,解决它的办法就是常说的Domain Adaptation。同理,在深度学习中,第L+1层的输入,也可能随着第L层参数的变动,而引起分布的变动。这样每一层在训练时,都要去适应这样的分布变化,使得训练变得困难。这种层间输入分布变动的情况,就是Internal Covariate Shift。而BN提出的初衷就是为了解决这一问题。

  •  1.1.1 ICS带来的问题

(1)在经过激活层的时候,容易陷入激活层的梯度饱和区,降低模型收敛速度

这一现象多出现于使用饱和激活函数(sigmod, tanh)时

 

当绝对值越大时,数据落入图中两端的梯度饱和区(saturated regime),造成梯度消失,进而降低模型收敛速度。当数据分布变动非常大时,这样的情况是经常发生的。当然,解决这一问题的办法可以采用非饱和的激活函数,例如ReLu。

(2)需要采用更低的学习速率,这样会降低模型的收敛速度

如前所说,由于输入变动大,上层网络需要不断调整去适应下层网络,因此这个时候的学习速率不宜设得过大,因为梯度下降的每一步都不是“确信”的

  • 1.1.2 解决ICS的常规方法

综合前面,在BN提出之前,有几种用于解决ICS的常规办法:

  • 采用非饱和激活函数
  • 更小的学习速率
  • 更细致的参数初始化办法
  • 数据白化(whitening)

其中,最后一种办法是在模型的每一层输入上,采用一种线性变化方式(例如PCA),以达到如下效果:

  • 使得输入的特征具有相同的均值和方差。例如采用PCA,就让所有特征的分布均值为0,方差为1
  • 去除特征之间的相关性。

然而在每一层使用白化,给模型增加了运算量。而小心地调整学习速率或其他参数,又陷入到了超参调整策略的复杂中。因此,BN作为一种更优雅的解决办法被提出了。

  • 1.2 BN实践

    • 1.2.1 思路

  • 对每一个batch进行操作,使得对于这一个batch中所有的输入数据,它们的每一个特征都是均值为0,方差为1的分布
  • 单纯把所有的输入限制为(0,1)分布也是不合理的,这样会降低数据的表达能力(第L层辛苦学到的东西,这里都暴力变成(0,1)分布了)。因此需要再加一个线性变换操作,让数据恢复其表达能力。这个线性变化中的两个参数 \gamma \beta 是需要模型去学习的。

 

上图所示的是2D数据下的BN,而在NLP或图像任务中,我们通常遇到3D或4D的数据,例如:

  • 图像中的数据维度:(N, C, H, W)。其中N表示数据量(图数),C表示channel数,H表示高度,W表示宽度。
  • NLP中的数据为度:(B, S, E)。其中B表示批量大小,S表示序列长度,F表示序列里每个token的embedding向量维度。

 

  • 1.2.2 训练过程中的BN

  •  1.2.3 测试过程中的的BN

在训练过程里,我们等一个batch的数据都装满之后,再把数据装入模型,做BN。但是在测试过程中,我们却更希望模型能来一条数据就做一次预测,而不是等到装满一个batch再做预测。也就是说,我们希望测试过程共的数据不依赖batch,每一条数据都有一个唯一预测结果。这就产生了训练和测试中的gap:测试里的均值 与方差 要怎么算呢?一般来说有两种方法。

(1)用训练集的均值和方差做测试机中均值和方差的无偏估计

(2)Monmentum: 移动平均法

  • 1.3 BN优势

    •  
    • 通过解决ICS的问题,使得每一层神经网络的输入分布稳定,在这个基础上可以使用较大的学习率,加速了模型的训练速度
    • 起到一定的正则作用,进而减少了dropout的使用。当我们通过BN规整数据的分布以后,就可以尽量避免一些极端值造成的overfitting的问题
    • 使得数据不落入饱和性激活函数(如sigmoid,tanh等)饱和区间,避免梯度消失的问题
  • 1.4 BN本质

以解决ICS为目的而提出的BN,在各个比较实验中都取得了更优的结果。但是来自MIT的Santurkar et al. 2019却指出:

  • 就算发生了ICS问题,模型的表现也没有更差
  • BN对解决ICS问题的能力是有限的
  • BN奏效的根本原因在于它让optimization landscape更平滑

Layer Normalization

2.1 背景

BN提出后,被广泛作用在CNN任务上来处理图像,并取得了很好的效果。针对文本任务,Ba et al. 2016 提出在RNN上使用Layer Normalization(以下简称LN)的方法,用于解决BN无法很好地处理文本数据长度不一的问题。例如采用RNN模型+BN,我们需要对不同数据的同一个位置的token向量计算 均值与方差,在句子长短不一的情况下,容易出现:

  • 测试集中出现比训练集更长的数据,由于BN在训练中累积  均值与方差 ,在测试中使用累计的经验统计量的原因,导致测试集中多出来的数据没有相应的统计量以供使用。 (在实际应用中,通常会对语言类的数据设置一个max_len,多裁少pad,这时没有上面所说的这个问题。但这里我们讨论的是理论上的情况,即理论上,诸如Transformer这样的模型,是支持任意长度的输入数据的)
  • 长短不一的情况下,文本中的某些位置没有足够的batch_size的数据,使得计算出来的均值与方差产生偏差。例如Shen et al. (2020)就指出,在数据集Cifar-10(模型RestNet20)和IWLST14(模型Transformer)的训练过程中,计算当前epoch所有batch的统计量 和当前累计(running)统计量 的平均Euclidean distance,可以发现文本数据较图像数据的分布差异更大:

2.2 思路

整体做法类似于BN,不同的是LN不是在特征间进行标准化操作(横向操作),而是在整条数据间进行标准化操作(纵向操作)。

  

2.3 训练和测试过程中的Layer Norm

LN使得各条数据间在进行标准化的时候相互独立,因此LN在训练和测试过程中是一致的。LN不需要保留训练过程中的 均值与方差 ,每当来一条数据时,对这条数据的指定范围内单独计算所需统计量即可。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值