【ゼロから作るDeep Learning】6章 学習に関するテクニック

  • 本章では,ニューラルネットの学習のためのテクニックを学ぶ
    • 最適な重みパラメータを探索する最適化手法
    • 重みパラメータの初期値
    • ハイパーパラメータの設定方法
    • 過学習への対応策
      • Weight Decoy
      • Dropout
    • Batch Normalization

確率的勾配降下法SGD:stochastic gradient descent)の欠点

  • SGDの数式
    • {
W \leftarrow
W - \eta \frac{\partial L}{\partial W}
}
    • 更新する重みパラメータを{W}{W}に関する損失関数の勾配を{\frac{\partial L}{\partial W}}とする
    • {\eta}は学習係数を表す.
    • {\leftarrow}は右辺の値で左辺の値を更新することを表す

  • SGDの欠点
    • 問題によっては非効率
    • 関数の形状が等方的でないと,勾配が最小値を指さない.

  • SGDに代わる方法として以下の3つを順に紹介
    • Momentum
    • AdaGrad
    • Adam

Momemtum

  • Momentumは運動量のこと.
  • 数式では次のように表される
    • {
v \leftarrow
\alpha v - \eta \frac{\partial L}{\partial W}
}
    • {
W \leftarrow W + v
}
    • 更新する重みパラメータを{W}{W}に関する損失関数の勾配を{\frac{\partial L}{\partial W}}とする
    • {\eta}は学習係数を表す.
    • {v}は物理における速度に対応する
    • {\alpha v}は物体が何も力を受けないときに徐々に減速するための役割

  • vに過去のタイムステップでのvを保持しておくイメージ.

AdaGrad

  • ニューラルネットの学習では学習係数{\eta}の調整が重要
  • 学習係数の減衰(learning rate decay)が常套手段
    • 最初は大きく学習
    • 次第に小さく学習

  • 学習係数の減衰をさらに発展させたのがAdaGrad
    • 1つ1つのパラメータに対して,オーダーメイドの値を設定する
  • 数式
    • {
h \leftarrow h + \frac{\partial L}{\partial W} \odot \frac{\partial L}{\partial W}
}
      {
W \leftarrow W - \eta \frac{1}{\sqrt{h}} \frac{\partial L}{\partial W}
}
    • {h}は,これまで経験した勾配の二乗和を保持
    • パラメータ更新の際に,{\frac{1}{sqrt{h}}}を乗算することで学習のスケールを調整
      パラメータの要素の中でよく動いた要素は,学習係数が小さくなる.

Adam

  • MomentumとAdaGridを融合したものがAdam
    • Momentum
      • ボールがお椀を転がるように物理法則に準じる動きを再現
    • AdaGrid
      • パラメータの要素ごとに,適応的に更新ステップを調整

重みの初期値

  • 重みの初期値の設定の仕方で,ニューラルネットワークの学習の成否がわかれる
    • 重みパラメータが小さくなるように学習を行う
      • Weight decay(荷重減衰)
      • 過学習が起きにくい

  • 重みの初期値を0にしてはいけない
    • 重みが均一になってしまうと,重みを持つ意味がなくなる

  • ReLUを用いるときには,Xavierの初期値ではなく,Heの初期値を用いる
    • sigmoid関数やtanh関数と違って,左右対称でなく線形でないから
    • Heの初期値
      • 前層ノードの個数Nとしたとき,{\sqrt{ \frac{2}{N}}}標準偏差とする.

Batch Normalization

  • Batch Normalizationの利点
    • 学習を速く進行させることができる
    • 初期値にそれほど依存しない
    • 過学習を抑制する

  • Batch Normalizationのアルゴリズム
    • データを正規化
      • {
\mu_{B} \leftarrow \frac{1}{m} \sum_{i=1}^{m} x_{i}
}
        {
\sigma_{B}^2 \leftarrow \frac{1}{m} \sum_{i=1}^m  {( x_{i} - \mu_{B} )}^2
}
        {
\hat{x_{i}} \leftarrow \frac{x_{i} - \mu_{B}}{\sqrt{\sigma_{B}^2 + \epsilon}}
}

      • データの平均を0,分散を1にするよう正規化
    • 正規化されたデータに対して固有のスケールとシフトで変換する
      • {
y_{i} \leftarrow \gamma \hat{x_{i}} + \beta
}

      • {\gamma}{\beta}はパラメータ.
      • 最初は{\gamma}=1, {\beta}=

正則化

  • 過学習が起きる原因
    • パラメータを大量に持ち,表現力の高いモデルであること
    • 訓練データが少ないこと

  • 過学習抑制のための1つの方法としてWeight Decay(荷重減衰)が知られている
    • 過学習は重みパラメータが大きな値を取ることによって発生することが多い.
    • そこで,大きな重みを持つことにペナルティを課す
      • 具体的には,損失関数に重みの二乗ノルムを加える.

  • 過学習を避ける別の方法としてDropoutもある
    • ニューロンをランダムに消去ながら学習する
    • 訓練時
      • データが流れるたびに,消去するニューロンをランダムに選択する
    • テスト時
      • すべてのニューロンの信号を伝達するが,ニューロンの出力に対して,訓練時に消去した割合を乗算して出力する

ハイパーパラメータの検証

  • ハイパーパラメータとはたとえば,
    • ニューロンの数
    • バッチサイズ
    • パラメータ更新の学習係数
    • Weight decay

  • ハイパーパラメータの性能をテストデータを使って評価してはいけない.
    • テストデータに対して過学習してしまう
  • ハイパーパラメータ専用の検証データ(validation data)が必要

  • ハイパーパラメータの最適化のステップ
    1. ハイパーパラメータの範囲を設定する
    2. 設定されたハイパーパラメータの範囲から,ランダムにサンプリングする
    3. ハイパーパラメータの値を使用して学習を行い,検証データで認識精度を評価する
    4. 2と3を繰り返し,認識精度の結果からハイパーパラメータの範囲を狭める

本章で学んだこと

  • パラメータの更新方法には,SGDの他に有名なものとして,MomentumやAdaGrad,Adamなどの手法がある.
  • 重みの初期値の与え方は,正しい学習を行う上で非常に重要である.
  • 重みの初期値として,「Xavierの初期値」や「Heの初期値」などが重要である.
  • Batch Normalizationを用いることで,学習を速く進めることができ,また,初期値に対してロバストになる.
  • 過学習を抑制するための正則化の技術として,Weight decayやDropoutがある.
  • ハイパーパラメータの探索は,良い値が存在する範囲を徐々に絞りながら進めるのが効率の良い方法である.

更に踏み込んだ学習

  • Adamの詳細を見るために原著論文にあたる.

yusuke-ujitoko.hatenablog.com