今回は深層学習の問題点である過学習の汎用的な対策として知られているドロップアウトと早期終了を取り上げてみたいと思います。
ニューラルネットワークの学習時に毎回ランダムに一部のノードを無効化する
テストデータに対する誤差が上昇し始めた時点でニューラルネットワークの学習を終了する
これらの対策の具体的な中身と過学習の抑制につながる理由を次章から順序だてて説明していきます。
なお、過学習が何だか知らない、または忘れてしまったという方は是非↓の記事を読んでから本記事を読み進めてみて下さい。
ドロップアウトとは?
例えば、以下のようなニューラルネットワークの学習を行なうとします。
最上部の入力層からデータを流して最下部の出力層までデータを流しますが、ドロップアウトでは、これらのノードの一部をランダムに無効化します。無効化されたノードからの出力はゼロと見なされるので、それらのノードは存在しないのと同じです。図で示すと次のようなイメージです。
点線になっているノードが無効化され出力がゼロになるので、これらは無いものとして学習がなされます。そして、この無効化されるノードは学習が繰り返される度に変化をします。
これがドロップアウトです。考え方はとてもシンプルですね。
どのくらいの割合のノードを無効化するのかは事前に決めておくハイパーパラメータです。適切な割合はニューラルネットワークのモデルに依ってくるので、実際にはいくつかの割合を設定して最適なものを探すことになります。
ここまで分かるように、ドロップアウトは対象がニューラルネットワークであれば、用途などに依らず幅広く簡単に適用することができます。また、パラメータが増えたりするわけではないので、計算の負荷が上がるわけでもありません。とても便利な方法です。
- ニューラルネットワークに幅広く簡単に適用することができる
- 計算の負荷を増加させない
ちなみに、以下の図がドロップアウトの有り・無しの比較結果です。横軸が重みの数、縦軸が誤差率です。様々な数の重み、すなわち様々なニューラルネットワークにおいて比較した結果、”With dropout”(ドロップアウト有り)の方が誤差が小さくなっていることがお分かりいただけると思います。
Figure 4 in “Dropout: A Simple Way to Prevent Neural Networks from Overfitting”
では、最後にドロップアウトが過学習を抑制できる理由を考えてみましょう。
過学習とは、一言で言えば、ニューラルネットワークのモデルが訓練データに過剰に適合して、汎用的な性能が悪化してしまうことでした。言い換えれば、モデルにある種の偏りが発生していると解釈できます。
ドロップアウトの「一部のノードをランダム無効化する」という性質を考えると、毎回異なるモデルで学習を行なうことになります。つまり、最終的に得られるニューラルネットワーク(重みなどのパラメータ)は異なるモデルで学習をした集大成ということです。
このような仕組みによって、先ほど述べたモデルの偏りを解消していると考えられています。ちなみに、このように複数のモデルを学習するような手法は一般的にアンサンブル学習と呼ばれています。
アンサンブル学習を詳しく知りたい方は是非↓の記事を参考にしてみて下さい。
早期終了(early stopping)とは?
早期終了は、その名前が示す通り、学習を早い段階で止めてしまうことです。
では、具体的にどの段階で学習を止めればよいのでしょうか?
それは、テストデータに対する誤差が上昇した始めた段階です。
以下のグラフがそのイメージを表しています。訓練データに対する誤差は下がり続けている一方で、テストデータに対する誤差はある時点から上昇に転じています。
訓練データに対する誤差だけが減少しているということは、訓練データだけに適合し始めているという兆候なので、過学習が始まっているといえます。従って、この段階で学習を止めることには過学習を抑制する効果があります。
そして、この早期終了もドロップアウトと同様に幅広い場面での利用が可能であるため、とても有用です。
ただし、近年の複雑なモデルの学習においては、次の図に示すようなテストデータの誤差が増えた後で再び減り始める二重降下現象があると言われています。従って、早期終了が必ずうまく機能するわけではないということを心に留めておく必要があります。
過学習対策のドロップアウトと早期終了に関する説明は以上です。
最後になりますが、より詳しく学んでみたいという方は、AIの基礎からAI搭載WEBアプリ開発まで学べるキカガク長期コースも活用してみてください!