External Memory

プログラミング周辺知識の備忘録メイン

ResNetとBatch Normalization

ResNet2

(https://arxiv.org/pdf/1603.05027.pdf)

前回のResNet(https://arxiv.org/abs/1512.03385)の同じ著者による考察、改善バージョン。全体的な構造はほとんど変わっていないが、Residual unit部分の構造に活性化関数層とconv層の順番に変更が見られる。
identity mappingの通り道に活性化関数を適用するかしないかに違いがある。


ResNetにおける"Residual Unit"は以下の式にて表現される。

y_l=h(x_l)+\mathcal{F}(x_l,\mathcal{W}_l)
x_{l+1}=f(y_l)

x_lはl番目のunitの入力、\mathcal{F}はresidual mapping部分の関数、
h(x)はidentity mapping(shortcut)部分の関数で従来のResNetではh(x)=x、fは非線形層(ReLU)である。

上式から分かるように、hまたはfがidentity mappingでなければ、次のunitへ直接恒等的に伝播されることはない。従来のResNetではfはReLUなのでshortcut部分もunit毎に非線形関数を通過することになる。
identity mappingとするには、f,hともに恒等関数でなければならない。

x_{l+1}=x_l+\mathcal{F}(x_l,\mathcal{W}_l)

これを再帰的に計算すると

\displaystyle x_L=x_l+\sum_{i=l}^{L-1}\mathcal{F}(x_i,\mathcal{W}_i)

l=0ならば、LはResidual Unit数となる。
よって、任意の位置lからLまでResidual形式で機能することになる。

また、逆伝播は以下の式で表現される。

 \displaystyle \frac{\partial \mathcal{E}}{\partial x_l}=\frac{\partial \mathcal{E}}{\partial x_L}
(1+\frac{\partial }{\partial x_l}\sum_{i=l}^{L-1}\mathcal{F}(x_i,\mathcal{W}_i))

\frac{\partial \mathcal{E}}{\partial x_L}項はすべてのunitへ直接伝播されることがわかる。
\frac{\partial }{\partial x_l}\sum_{i=l}^{L-1}\mathcal{F}はいつも-1になることはないので、重みが消失することがない。

よって、順/逆伝播の両方でsignalが直接伝播されることが分かる。


文献の前半ではhとfの部分を恒等関数とするのではなく、
scaling、gating、1*1 onvolutionなどを適用して挙動の観察を行い、identity mappingであることの重要性を検証確認している。
これらの結果は芳しくなくモデルの劣化(error率が増加)を引き起こしている。
著者はこのモデル劣化は特徴表現の能力よりも最適化の問題の寄与が大きいことを示唆していると述べている。


この結果により、従来のResNetではfはReLU関数であったがここを恒等関数にするためモデルの検討を行っている。
Residual部分に対してBNやReLUを適用する場所の検討を行い、residual関数の値域が(-∞,+∞)にすべきという考えを考慮して、full pre-activation構造を最終的に選択している。
full pre-activationはshotcutとResidual部分を足し合わせた後にReLUは適用せず、
Residual部分において、重みを掛け合わせる"前"に活性化関数(ReLU and BN)を適用する。

x_{l+1}=x_l+\mathcal{F}(\hat{f}(x_l),\mathcal{W}_l)

\hat{f}は活性化関数を表す。

これにより1000層以上の積層でもCIFAR10/100に対し精度が向上し続けている結果が得られている。
CIFAR10/100のerror率は4.62%、22.71%で人間の分類精度を超えている。



pre-activationにより見出された効果としては、最適化が比較的容易となったことと正則化効果がある。

最適化に関しては、従来のResNetはunitの度にReLUが適用されたが、
今回のidentity mappingはReLU層を通過しないので、負値による度重なる切り捨てが存在しない。実際ゼロでない割合が大きくなり、学習初期での学習速度が非常に遅かった現象が改善されている。

また、110層と164層モデルにおいて学習データとテストデータのloss差が減少している。
これはBNが正則化を引き起こしており、pre-activationの場合正規化後すぐに重み層に入力されるので正則化効果が大きくなっていると述べている。

ILSVRC 2012 validation setに対するtop-5 error率は4.8%が得られている。



ResNetで出てきたBatch Normalization(BN)について。

Batch Normalization

(https://arxiv.org/pdf/1502.03167.pdf)

Batch Normalizationは学習において
ネットワークのノード活性値の分布の変化であるinternal covariate shiftを減少させ、それにより学習速度を劇的に増加させる変換である。
ネットワーク間の勾配の伝播においてパラメータのスケールや初期値の勾配の依存性を低減させるので、発散のリスクなしに高い学習率を用いることが出来る。
また正則化効果によりドロップアウトが不必要となり、
さらにパラメータ増幅を抑えることから非線形関数の飽和領域に踏み入れることを抑制できる。
学習速度は対BN不適用モデルに対し、たった7%のstep数で同等の精度が得られるようになると述べている(つまり14倍程度の学習速度増)。


Batch Normalizationは各層の入力に対して、相関なしのゼロ平均、単位分散となるように線形変換(whitening)を行う。
Batch Normalizationの変換は以下のように表される。

\displaystyle BN_{\gamma,\beta}(x_i)=\gamma(\frac{x_i-\mu_{\mathcal{B}}}{\sqrt{\sigma^2_{\mathcal{B}}+\epsilon}})+\beta

mini-batch\mathcal{B}の要素x_iを正規化した後、scale:\gammashift:\betaを用いて元の活性値を復活させている。これにより恒等写像を表現することもできるので、ネットワークの表現能力を損なわない。
scale:\gammaとshift:\betaは学習可能なパラメータである。
またバッチごとに計算されるので確率的勾配降下法と同じく大まかな見積もり値である。
ここが正則化に影響を与える部分である。


学習時とinference時のBatch Nomalizationの適用の仕方に注意が必要である。
inference時は平均と分散は学習時のinputの移動平均を用い、γとβは学習後の値に固定する。
この文献では分散はその期待値にbatch size mに対しm/(m-1)を掛けた見積りを使用している。


ここでは入力値の分散の関係から非線形層の前にBN層を配置している。
非線形層前であれば、入力の分散が対称的でスパースでないガウシアン分布状であるので、安定した分布での正規化を行うことが出来る。

平均化時にバイアスは打ち消されるのでバイアス変数は必要なくなり、代わりにβがその役割を担う。
BN層はFully-connected、convolution層どちらでも使用可能であるが、
FC層の場合はunitごと、conv層の場合は特徴マップごとに正規化を行うのでそれぞれに学習すべきγとβのパラメータ(次元)が必要である。


深いネットワークでは学習率が大きいと勾配爆発や消失、局所的な極小値の固定が起こりやすいが、Batch Normalizationでは大きな学習率を使用することによる、パラメータスケールの増加を抑える。逆伝播によってパラメータスケールの影響を受けずパラメータ値を安定させるのである。
しかしまだ、勾配伝播に関してBatch Normalizationは改善の余地がありそうなことを述べている。

また、ミニバッチにより決定論的な値の入力ではなくなるので、ネットワークの普遍化効果が得られる。よって、過学習効果をもたらすドロップアウトのような要素を除去または削減することが出来る。


文献中4.2.1項に効果的なBatch Normalizationを用いたネットワークの運用方法が述べられている。
・学習率上乗せ
ドロップアウト除去
・L2重み正則化削減
・学習率減衰操作の加速
・LRNの除去
・学習データのshuffleの徹底
・測光歪みの削減



バッチサイズの大きさがネットワーク性能に及ぼす影響が大きくなりそうな気がするが、
そのあたりも考慮すべきかもしれない。