1. 引言
前面介绍了Batch Normalization的原理,我们知道,BN层在CNN中可以加速模型的训练,并防止模型过拟合和梯度消失。但是,如果将BN层直接应用在RNN中可不可行呢,原则上也是可以的,但是会出现一些问题,因为我们知道Batch Normalization是基于mini batch进行标准化,在文本中,不同的样本其长度往往是不一样的,因此,如果在每一个时间步也采用Batch Normalization时,则在不同的时间步其规范化会强行对每个文本都执行,因此,这是不大合理的,另外,在测试时,如果一个测试文本比训练时的文本长度长时,此时Batch Normalization也会出现问题。因此,在RNN中,我们一般比较少使用Batch Normalization,但是我们会使用一种非常类似的做法,即Layer Normalization,本文将具体介绍一下该方法的原理。
2. Layer Normalization原理介绍
Layer Normalization的思想与Batch Normalization非常类似,只是Batch Normalization是在每个神经元对一个mini batch大小的样本进行规范化,而Layer Normalization则是在每一层对单个样本的所有神经元节点进行规范化。
对于RNN的每个时间步,其输入都会包含两部分,即当前的输入 x t x^{t} xt和上一个时刻的隐藏状态 h t − 1 \mathbf{h}^{t-1} ht−1,记 a t = W h h h t − 1 + W x h x t \mathbf{a}^{t}=W_{h h} h^{t-1}+W_{x h} \mathbf{x}^{t} at=Whhht−1+W