継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

ゼロから始めるディープラーニング 6章

タダです。

今回は6章の学習に関するテクニックについての勉強まとめです。

※記事は理解ができるたびに何度もアップデートしていこうと思います。 www.oreilly.co.jp

目次

なお、各章の内容は次の通りです。

6.1

  • 過学習にならないように最適な重みパラメーターの探索方法、初期値の設定について学ぶ
  • ニューラルネットワークの学習の目的は、損失関数の値をできるだけ小さくするパラメータを見つけること
  • 最適なパラメーターを見つける方法に勾配を使っていた
  • SGDのメリット・デメリット
    • SGDは単純で実装も簡単
    • SGDのデメリットは、関数の形状が等方的ではないと非効率的な経路で探索することになる
  • SGDの欠点の代替手法として、Momentum、AdaGrad、Adamという3つの手法がある
  • Momentumのイメージは、ボールが地面の傾斜を転がるように動く(物理法則に準じる動きをする)
  • AdaGradは、パラメータ全体の学習係数を適応的な値を調整して学習を行う
    • オーダーメイドの値をこしらえる
    • 過去の勾配を2乗和として記録する
  • AdamはMomentumとAdaGradを融合したもの
    • 加えてバイアス補正を行う
  • SGD、Momentum、AdaGrad、Adamはいずれも優れた手法ではない
    • 適材適所で使い分ける

6.2

  • 重みの初期値がニューラルネットワークの学習で重要になる
  • ReLU関数を使う場合は「Heの初期値」、sigmoid関数やtanhなどのS字カーブの時は「Xavierの初期値」を使うのがベストプラクティス

6.3

  • 重みの初期値を適切に設定すれば、各層のアクティベーションの分布は適度広がりを持ち、学習がスムーズに行える
  • Batch Normlization(Batch Norm)は2015年に提案された手法
    • であるが、多くの研究者や技術者に使われている
    • Batch Normのメリットは学習係数を大きくすることができる、初期値にそれほど依存しない、過学習を抑制することがあげられる
  • Batch Normは学習を行う際のミニバッチを単位として、ミニバッチごとに正規化する
  • Batch Normを使えば学習の進行を促進し、重みの初期値にロバストになる

6.4

  • 機械学習で目指すことは、汎化性能
    • 過学習で特定の問題しか解けないようなものではなくて汎用的に問題を解けるモデルの生成を行う
  • 過学習が起きる原因として主に2つある
    • パラメータを大量にもち、表現んりょくの高いモデルであること
    • 訓練データが少ないこと
  • 過学習抑制のために用いる手法がWeight decay(荷重減衰)
    • 大きな重みを持つことに対してペナルティを与えることで過学習を抑制する(L2ノルムを加算する)
  • Weight decayで対応できない場合に、Dropoutと言う手法がよく使われる

6.5

  • ニューラルネットワークでは重みやバイアスとは別にハイパーパラメータが多く登場する
    • Weight decay、学習係数など
  • ハイパーパラメタは適切な値に設定しなければ性能の悪いモデルになる
  • ハイパーパラメータの範囲は、大まかに指定するのが有効
  • ハイパーパラメータの最適化での注意点は、ディープラーニングの学習には多くの時間が必要であるため、適切な値に設定できなさそうな時はその値を切り捨てる
    • ステップ0:ハイパーパラメータの範囲を設定する(ざっくり)
    • ステップ1:設定されたハイパーパラメータの範囲からランダムにサンプリングする
    • ステップ2:ステップ1でサンプリングされたハイパーパラメータの値を使用して学習を行い、検証データで認識精度を評価する(ただし、エポックは小さく設定)
    • ステップ3:ステップ1と2をある回数(100回とか)繰り返し、認識の結果からハイパーパラメータの範囲を狭める

次は7章になります。