Layer Normalization
June 17, 2023層正規化(Layer Normalization)は、ユニットへの入力の重みつきの和を正規化し、学習時間を短縮する手法である。 各層ごとにユニットへの入力の和の平均と標準偏差を求め、この2つの統計量で、その層にあるユニットへの入力を正規化する。 先行研究にはバッチ正規化がある。 バッチ正規化では、各ミニバッチにおいて、ユニットごとに入力の重みつき和の平均と分散を計算し、正規化する。 バッチ正規化でも学習時間を短縮できるが、その効果はミニバッチのサイズに依存し、また、RNNに簡単に応用することはできない欠点がある。
順伝搬ニューラルネットワークにおける層正規化を説明する。 中間層\(l^{\textit{th}}\)への入力を\(h^l\), 活性化関数を\(f\), \(i\)番目のユニットの重みを\(w_i\), バイアス項を\(b_i\)とおく。 このとき、ユニットへの入力の重みつき和\(a_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に層正規化を適用する場合を説明する。 RNNにおいては、入力の重みつき和\(\boldsymbol{\rm a}^t\)は、時刻\(t\)における入力\({\rm x}^t\)と\(t-1\)での隠れ層の状態\({\rm h}^{t-1}\)によって $$ \boldsymbol{\rm a}^t=W_{hh}h^{t-1}+W_{xh}{\rm x}^t $$ であらわせる。ただし、\(W_{hh}\)は中間層から中間への重みであり、\(W_{xh}\)は入力層から中間層への重みである。
このとき、正規化した隠れ層の状態\({\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} $$ である。