「ゼロから作るDeep Leaning」6章:学習に関するテクニック

2017年11月8日


「ゼロから作るDeep Leaning」5章:誤差逆伝播法に引き続き、「ゼロから作るDeep Leaning」についてざっくりまとめていきます!

パラメーターの更新

「ゼロから作るDeep Leaning」4章:ニューラルネットワークの学習でまとめた手法は確率的勾配降下法(SGD)といわれるが、それよりもさらに効率的なパラメーター更新方法が存在する。それが以下の通りである。今のところ、全ての問題で最も優れているという手法は存在せず、適宜最適な手法を選ぶ必要がある。

Momentum

$$v←\alpha v – \eta\frac{\partial L}{\partial W}$$
$$W←W + v$$
ほぼSGDと同じだが、新しくvという変数が登場する。これは「速度」に対応し、物体が勾配方向に力を受け、その力によって物体の速度が加算されるという物理法則を表している。

AdaGrad

AdaGradは学習係数の減衰という方法をとっている。学習係数の減衰とは、学習が進むにつれて学習係数を小さくしていく方法である。これにより、学習の無駄が減る。

Adam

Adamは、上記のMomentumとAdaGradを融合させた手法。

重みの初期値

ニューラルネットワークの学習において、重みの初期値にどうするかということは重要事項である。重みの初期値を適切に設定すれば、活性関数の出力値(アクティベーション)の分布は適度な広がりを持ち、学習がスムーズに進む。
細かい説明は省くが、今のところ、活性化関数にReLUを用いる場合は「Heの初期値」、sigmoidを用いる場合は「Xavierの初期値」を使うというのが最適解。

Batch Normalization

Batch Normalizationとは、アクティベーションの分布が適切な広がりを持つように調整すること。以下の利点がある。

  • 学習係数を大きくする → 学習を早く進行させる
  • 初期値にそれほど依存しない
  • 過学習を抑制する → Dropoutなどの必要性を減らす

Batch Normalizationレイヤとして、ニューラルネットワークに挿入する。学習を行う際のミニバッチを単位として、ミニバッチごとに正則化を行う(データの分布が平均が0で分散が1になるように正則化を行う)。

過学習の抑制

単に過学習の抑制を行う方法として、以下のものがある。

Weight decay

過学習が起こる主な原因として、重みのパラメーターが大きな値を取ること。Weight decayは、大きな重みを持つことに対してペナルティーを与え、過学習を抑制する方法である。
具体的には、損失関数に重みの2乗ノルムを加算する。
$$\frac12\lambda W^2$$
λは、大きな重みを取ることに対するペナルティーの強さを表すパラメーターで、値が大きければ大きいほどペナルティーが強くなる。

Dropout

Weight decayは実装が簡単だが、ニューラルネットワークが複雑になると、Weight decayだけでは、対応が困難になってくる。そこで、登場するのがDropoutである。
Dropoutはニューロンをランダムに消去しながら学習する手法。テスト時には、すべてのニューロンの信号を伝達するが、各ニューロンの出力に対して、訓練時に消去した割合を乗算して出力する。

まとめ

■パラメータの更新方法にはSGDの他に、MomentumやAdaGrad、Adamなどがある。
■重みの初期値は、正しく学習を行う上で非常に重要。
■重みの初期値は、今のところ、活性化関数にReLUを用いる場合は「Heの初期値」、sigmoidを用いる場合は「Xavierの初期値」を使うというのが最適解。
■Batch Normalizationを用いることで、学習を早く進めることができ、初期値にそこまで依存せず、過学習を抑制することができる。
■過学習を抑制するための正則化の技術として、Weight DecayやDropoutがある。


PAGE TOP