ディープラーニングは学習させれば必ず賢くなるわけではありません。途中で学習が止まる原因と、その対処法を整理します。
こんにちは、zawato(@zawato7)です!
本記事はディープラーニング入門ロードマップの第12回です。
- 勾配消失問題とプラトーで学習が止まる仕組み
- SGDからAdamまで、最適化手法が進化してきた方向
- バッチサイズ・エポック数・イテレーションの関係と計算方法
学習が止まってしまう2つの原因
ディープラーニングの学習は、勾配(傾き)が小さくなると止まります。代表的なのが勾配消失問題(vanishing gradient problem)です。誤差逆伝播法は出力層から入力層へ微分値を掛け合わせて誤差を伝えるため、1より小さい値を掛け続けると勾配は0に近づきます。層が深いほど入力層側の重みが更新されなくなるのです。かつて主流だったシグモイド関数は微分値が最大0.25しかなく、これが使われなくなった理由です。代わりに微分値が1になるReLUが標準になりました。
もう1つがプラトーです。ある方向から見れば谷底、別の方向から見れば山頂という点を鞍点(あんてん)と呼びます。峠道の一番低い所が身近な例で、道に沿えば最低地点でも尾根方向には登り坂です。ここにはまると周囲の勾配が小さく抜け出せません。また学習率が小さすぎると、見せかけの最適解である局所最適解に捕まりやすくなります。本当に探したいのは全体で最も誤差が小さい大域最適解です。逆に勾配が大きくなりすぎる勾配爆発もあります。
最適化手法は「学習率の自動調整」へ進化した
パラメータの更新方法を最適化手法(オプティマイザ)と呼び、その進化は学習率を自動調整する方向に進んできました。学習率は大きすぎると誤差が振動し、小さすぎると学習が進みません。ちょうどよい値を人が探すのは大変なので、更新のしかた自体を工夫する手法が生まれました。
| 手法 | 特徴 |
|---|---|
| SGD(確率的勾配降下法) | 勾配に学習率を掛けて引く基本形 |
| モーメンタム | 過去の更新方向を加える。慣性がつき鞍点を抜けやすい |
| AdaGrad | 更新が進んだパラメータほど学習率を小さくする |
| RMSProp | 直近の勾配を重視して学習率を調整(AdaGradの改良) |
| Adam | モーメンタムとRMSPropの組み合わせ。現在の代表格 |
データの与え方はミニバッチ学習が基本
学習データは1件ずつでも全件まとめてでもなく、適度なかたまりで与えるのが標準です。1件ごとに更新するオンライン学習は直近のデータに引きずられ、全データで1回更新するバッチ学習はメモリを食ううえ更新頻度も低くなります。その中間がミニバッチ学習で、16〜128件程度がよく使われます。
| 用語 | 意味 |
|---|---|
| バッチサイズ | 1回の更新に使うデータ数 |
| エポック数 | 同じ学習データを何回繰り返して学習したか |
| イテレーション | パラメータを何回更新したか |
学習データ1,000件をバッチサイズ100で学習する場合、1エポック=10イテレーションです。エポック数が20なら全体で200イテレーションです。この3語の関係は最もつまずきやすい箇所です。一度自分で計算しておくと本番で迷いません。
ハイパーパラメータは人間が事前に決める値
重みやバイアスが学習で自動的に決まるパラメータなのに対し、人間が学習前に設定する値をハイパーパラメータと呼びます。中間層の数、ノード数、学習率、バッチサイズなどが該当し、この区別はG検定で頻出です。層やノードを増やせば細かい特徴まで捉えられますが、パラメータ数が急増して学習しきれず、少なすぎれば未学習になります。そこで次の探索手法が使われます。
- グリッドサーチ:候補値の組み合わせを総当たりで試す。確実だが試行回数が膨大
- ランダムサーチ:範囲を決めて無作為に試す。回数を決められるが運に左右される
- ベイズ最適化:良かった結果を手がかりに次の候補を絞り込む
まとめ
- 勾配消失問題は層が深いほど入力層側で起きやすく、シグモイド関数の微分値が最大0.25であることが一因。プラトーは鞍点にはまって学習が止まる現象
- 最適化手法はSGDから進化し、モーメンタムとRMSPropを組み合わせたAdamが現在の代表格
- ミニバッチ学習が基本。バッチサイズ・エポック数・イテレーションの関係と、人が決めるハイパーパラメータの探索手法を押さえる(1,000件÷100=1エポック10イテレーション)
よくある質問
Q. Adamを使えば学習率を気にしなくてよいのですか?
A. 自動調整はしてくれますが、出発点となる学習率は今も人が指定するハイパーパラメータです。ほかの手法より調整が楽になる、という理解が正確です。
Q. バッチサイズを大きくするとどうなりますか?
A. 1エポックあたりの更新回数(イテレーション)が減るため学習が進みにくくなり、メモリ消費も増えます。逆に小さすぎると更新が不安定になるため、バランスを取る必要があります。
Q. パラメータとハイパーパラメータの違いは何ですか?
A. パラメータは重みやバイアスのように学習の過程で自動的に決まる値、ハイパーパラメータは中間層の数や学習率のように人間が学習前に決める値です。



コメント