じぶんメモ

プログラミングのメモ、日常のメモとか。

【ゼロから作るDeep Learning】要点まとめ 第6章

6章 - 学習に関するテクニック

勾配法の種類

  • 勾配法の種類はSGD, Momentum, AdaGrad, Adamがある。(AdaGrad,Adamが学習スピードが早い)

重みパラメータと活性化関数での出力値

  • 重みパラメータの初期値は小さくすることで過学習を防げるが、0にすると各層での誤差逆伝播法の出力が均等になってしまうので避けること。
  • 重みパラメータの初期値はランダムである必要がある。
  • 各隠れ層のアクティベーション(活性化関数で出力された値)が、0と1に傾くと勾配損失が発生し、層を深くする意味がなくなってしまう。
  • アクティベーションを分散させるには重みパラメータのスケール(標準偏差)にHeの定数、Xavierの定数を適用させる。
  • 活性化関数が線形(sigmoid, tanh等)の場合はXavierの定数、ReLUの場合はHeの定数が適している。
  • 強制的にアクティベーションの分布を制御するには活性化関数の前にBatch Normalization(正規化)をする。
  • 正規化をしない場合、適切なスケールを設定しないといつまでたってもしっかりと学習されない。
  • 正規化を使用すると重みの初期値にロバストする。(初期値に依存しない)

過学習

  • 特定の訓練データにだけ適応しすぎてしまい、訓練データに含まれないデータにはうまく対応できない状態。
  • 訓練データが少なかったり、パラメータが大量で表現力の高いモデル(隠れ層のノードが多い)場合に発生しやすい。
  • 過学習を避けるためには重みパラメータを抑制するためにWeigt Decay(荷重減衰)または、Dropoutを使用する。
  • Weight Decayは損失関数に対して重みの1.2ノルムを加算する。(ただしハイパーパラメータの設定が必要)
  • Dropoutはニューロンをランダムに消去しながら学習を行う。
  • ハイパーパラメータを適正な値に設定するには検証データを使用する。
  • テストデータをもとにしてハイパーパラメータを設定するのはNG。テストデータのみに適したハイパーパラメータになってしまうため。
  • 検証データを用意する最も簡単な方法は訓練データの20%を分離して使用すること。
  • 最適なハイパーパラメータを求めるには、ハイパーパラメータの範囲を定め、その範囲の中からランダムにサンプリングし、認識精度の評価を行う。それを数回繰り返して最適な値を狭めていく。