Layer Normalization (2016)
June 17, 2023層正規化 (Layer Normalization) はニューラルネットワークのユニットへの入力の重みつきの和を正規化し、学習時間を短縮する。 各層ごとの重みを掛けた入力の総和の平均と標準偏差を求め、この2つの統計量で層の各ユニットの総入力を正規化する 先行研究のバッチ正規化は、ミニバッチごとに、各ユニットの入力の重みつき和の平均と分散を計算し、ユニットの総入力を正規化する。 バッチ正規化でも学習時間を短縮できるが、その効果はミニバッチのサイズに依存する。また、単純にはRNNに適用できない。
順伝搬ニューラルネットワークのユニットへの重みつき入力の和\(a_i\)は、\(l\)番目の中間層への入力を\(h^l\), 活性化関数を\(f\), \(i\)番目のユニットの重みを\(w^l_i\), バイアス項を\(b^l_i\)とおくと以下の式で表せる。 $$ a^l_i = {w^l_i}^{\top}h^l\ \ \ \ h^{l+1}_i = f(a^l_i + b^l_i) $$
層正規化では、同じ層のユニットは平均と標準偏差を共有する。 層のユニット数が\(H\)であるとき、層\(l\)の平均\(\mu^l\)と標準偏差\(\sigma^l\)は $$ \mu^l=\frac{1}{H}\sum^H_{i=1}a^l_i\ \ \ \ \sigma^l=\sqrt{\frac{1}{H}\sum^H_{i=1}(a^l_i-\mu^l)^2} $$ になる。 層正規化は、スケールを調整するためのハイパーパラメータを\(g^l_i\)として、層正規化は総入力を以下の\(\bar{a}^l_i\)に正規化する。 $$ \bar{a}^l_i=\frac{g^l_i}{\sigma^l_i}(a^l_i-\mu^l_i) $$
RNNでは、入力の重みつき和\(\boldsymbol{\rm a}^t\)は、時刻\(t\)における入力\({\rm x}^t\), \(t-1\)での隠れ層の状態\({\rm h}^{t-1}\), 中間層から中間への重み\(W_{hh}\), 入力層から中間層への重み\(W_{xh}\)で $$ \boldsymbol{\rm a}^t=W_{hh}h^{t-1}+W_{xh}{\rm x}^t $$ と表せる。
このとき、正規化した隠れ層の状態\({\rm h}^t\)は $$ \boldsymbol{h}^t = f\left[\frac{\boldsymbol{g}}{\sigma^t}\odot (\boldsymbol{a}^t-\mu^t )+\boldsymbol{b}\right] \ \ \ \ \mu^t=\frac{1}{H}\sum^H_{i=1}a^t_i\ \ \ \ \sigma^t=\sqrt{\frac{1}{H}\sum^H_{i=1}(a^t_i-\mu^t)^2} $$ になる。