【论文】LayerNorm


【论文】Ba J L, Kiros J R, Hinton G E. Layer normalization[J].(pdf


我们在 BatchNorm 的分析中也指出 BatchNorm 存在两个问题,一是小批量采样太小会导致结果不稳定,二是对于 RNN 网络 BatchNorm 并不适合

于是,本文提出了 『层归一化』,一种独立于 batch_size 的算法,所以无论样本数多少都不会影响参与 LayerNorm 计算的数据

Layer normalization

设 H H H 是某一层中的隐藏结点的数量, l l l 表示层数,我们可以计算 LayerNorm 的归一化统计量 μ l \mu^l μl 和 σ l \sigma^l σl,如下 μ l = 1 H ∑ i = 1 H a i l σ l = 1 H ∑ i = 1 H ( a l − μ l ) 2 \mu^l=\frac{1}{H}\sum_{i=1}^Ha_i^l \\ \sigma^l=\sqrt{\frac{1}{H}\sum_{i=1}^H(a^l-\mu^l)^2} μl=H1​i=1∑H​ail​σl=H1​i=1∑H​(al−μl)2

其中 a l a^l al 表示一个中间输出结果的总和,这个总和可以通过权重矩阵 W l W^l Wl 和隐藏层全部输入 h l h^l hl 组成的一个线性变化计算得到,具体可以参考下面 a i l = w i l T h l h i l + 1 = f ( a i l + b i l ) a_i^l={w_i^l}^Th^l\\ h^{l+1}_i=f(a_i^l+b_i^l) ail​=wil​Thlhil+1​=f(ail​+bil​)

f f f 被视为一个非线性激活, i i i 表示该层中的第 i i i 个神经元。其实说简单点, a l a^l al 就表示层输入经过权重矩阵变换后的值

注意上面的统计量和样本数没有关系,而是和隐藏层的结点数有关,我们甚至可以使 batch_size = 1

于是,我们可以根据商量的统计量进行归一化处理, a ^ l = a l − μ l ( σ l ) 2 + ε \hat a^l=\frac{a^l-\mu^l}{\sqrt{(\sigma^l)^2+\varepsilon}} a^l=(σl)2+ε ​al−μl​

这是一个非常有意思的事情,我们对归一化的角度变了,BatchNorm 是按照小批量采样的结果进行归一化,而在 LayerNorm 中我们则按照一层神经元变换的结果进行归一化
【论文】LayerNorm

同样,在 LayerNorm 中我们也需要一组参数来保证归一化操作不会破坏之前的信息。在 LayerNorm 中这组参数叫做增益(gain)和偏置(bias),同 BatchNorm 中的 γ \gamma γ 和 β \beta β

还是假设激活函数为 f f f,最终 LayerNorm 的输出为 h l = f ( g l ⊙ a ^ l + b l ) h^l=f(g^l\odot \hat a^l+b^l ) hl=f(gl⊙a^l+bl),整理一下公式于是有 h l = f ( g ( σ l ) 2 + ε ⊙ ( a l − μ l ) + b ) h^l=f\left (\frac{g}{\sqrt{(\sigma^l)^2+\varepsilon}}\odot(a^l-\mu^l)+b\right ) hl=f((σl)2+ε ​g​⊙(al−μl)+b)

Layer normalized recurrent neural networks

在 RNN 中,我们可以非常简单的在每个时间片中使用 LayerNorm,而且在任何时间片我们都能保证归一化统计量是关于 H H H 个结点信息的统计。对于 RNN 时刻 t t t 时的结点,其输入是 t − 1 t-1 t−1 时刻的隐层状态 h t − 1 h^{t-1} ht−1 和 t t t 时刻的输入数据 x t x_t xt​,于是有 a t = W h h h t − 1 + W x h x t a^t=W_{hh}h^{t-1}+W_{xh}x^t at=Whh​ht−1+Wxh​xt 接着我们便可以在 a t a^t at 上采取和前面完全相同的归一化过程
h t = f [ g σ t ⊙ ( a t − μ t ) + b ] μ t = 1 H ∑ i = 1 H a i t σ t = 1 H ∑ i = 1 H ( a i t − μ t ) 2 h^t=f\left [\frac{g}{\sigma^t}\odot(a^t-\mu^t)+b\right ] \\ \mu^t=\frac{1}{H}\sum_{i=1}^Ha_i^t \\ \sigma^t=\sqrt{\frac{1}{H}\sum_{i=1}^H(a_i^t-\mu^t)^2} ht=f[σtg​⊙(at−μt)+b]μt=H1​i=1∑H​ait​σt=H1​i=1∑H​(ait​−μt)2

上一篇:【莫比乌斯反演】学习笔记


下一篇:概率论与数理统计——多维随机变量及其分布