ディープラーニングとは何か。
目次
勾配降下法による最適化(学習効率化)
誤差関数の最小化を目指すにあたり、解析的に行うのではなく、アルゴリズムを用いて最適解を探索するアプローチが考えられ、その際に用いる手法として「勾配降下法」があります。
勾配降下法(gradient descent)
- 勾配に沿って降りていくことで解を探索する手法
- ここでいう”勾配”とは、微分値のこと
- 微分は”接線の傾き”であり、勾配に例えることができる
- 「イテレーション」:学習プロセスの繰り返し計算
- 「学習率」:ハイパーパラメータで、”勾配に沿って一度にどれだけ降りていくか”を決めるもの
バッチ勾配降下法
- 全データの予測誤差の総和を用いて更新式の計算をすること
- 「最急降下法」とも呼ばれる
- 「バッチ」:データの固まり
※1回の更新計算ですべてのデータを用いるため、バッチ勾配降下法と呼ばれる - 「バッチ学習」:バッチ勾配降下法による学習
確率的勾配降下法
- 扱うデータ数が大きい・次元数が大きいという理由から、誤差計算のためのメモリが足りなくなるという問題が生じることがある
- 問題への対処のため、データをシャッフルしてランダムに抽出し、そのデータの予測誤差だけで更新式を計算するというアプローチを取ることがある
→「確率的勾配降下法」 - 「オンライン学習」:都度、計算する手法
- 1回の更新ではなく、多く更新計算を行うことで最適解を目指す(シャッフルしつつすべてのデータを更新計算にかける)
- 「エポック」:全データを1回学習すること
※イテレーションは部分データを1回計算しても1回とカウントする
※バッチ学習は全データを1回で計算するため、エポック数とイテレーション数は一致する
ミニバッチ勾配降下法
- 「バッチ勾配降下法」と「確率的勾配降下法」の間を取った手法
- 全データをいくつかのデータセットに分割し、そのデータセットごとに更新計算を行う
- 「バッチ」は全データ、「ミニバッチ」は分割データ
- 「バッチサイズ」:各データセット内のデータ数のこと
- 実際の学習で最もよく使われる
- データを分割するためメモリ不足になりにくく、データによって探索方向がばらつくといったことが起こりにくい
- 「ミニバッチ学習」:ミニバッチ勾配降下法を用いた学習
勾配降下法の問題と改善
学習率の調整
- 勾配降下法では、「見せかけの最適解」を見抜くことができない
- 「局所最適解」:見せかけの最適解
- 「大域最適解」:本当の最適解
- 特に何も工夫をしないと、局所最適解に陥る可能性が高い
- 対処→「学習率の値を大きく設定」し、どこまでも探索させる
→最適解を飛び越えて探索し続けてしまう
→適切なタイミングで学習率の値を小さくしていく - 「鞍点」(3次元以上における停滞状態(プラトー))
→どの方向に沿って勾配を進んでいるときに学習率を大きく(小さく)すべきかを考える必要あり - 「モーメンタム」:最適化の進行方向に学習を加速させることで停滞を防ぐ
- 「Adagrad」「Adadelta」「Adam」「AdaBound」「AMSBound」などもある
:どの方向に学習を加速(収束)させればよいかを考えたもの
早期終了(early stopping)
- 過学習に対する対処のひとつで、正則化ではなく、「早期終了」
- 学習を早めに打ち切る
- 「ノーフリーランチ定理」:あらゆる問題で性能の良い汎用最適化戦略というものは、理論上不可能
(Beautiful FREE LUNCH) - 「二重降下現象」:テストデータに誤差が増えた後、再度誤差が減っていくという現象も確認されている
→どのタイミングで学習をストップすればよいかについては慎重に検討する必要あり
ハイパーパラメータの最適化
- ハイパーパラメータも最適化したい場合、実験して比較する必要がある
→「ハイパーパラメータチューニング」
- 「グリッドサーチ」:調整したいハイパーパラメータの値候補を指定し、すべての組み合わせに対して、学習・評価を行う(ある程度候補が絞られている場合に用いられることが多い)
- 「ランダムサーチ」::値の取り得る範囲を指定し、その範囲内で何らかの確率分布に基づく乱数を発生させ、その乱数をハイパーパラメータとして実験する
(取り得る範囲を広めにとっておけばある程度の探索ができる) - 「ベイズ最適化」
- 「遺伝的アルゴリズム」