深層畳み込みニューラルネットワークは、画像の多くの、小さくて重複した領域から非線形な関数を用いて、非常に抽象的な特徴を学習できます。しかしながら、それぞれのニューロンは1個の局所的なパターンのみしか認識しません。実際の課題では、各階層で多くのニューロンに多くの異なる局所パターンを認識させたいと考えます。必然的にパラメータの数は増加し、深層モデルを訓練するときに、場合によっては深刻な問題となる過学習に遭遇することとなります。
過学習の例
過学習(Overfitting)は、それぞれの学習データに完全にフィットするように学習を訓練しようとするがために、訓練データ以外のサンプルに対して上手く行かないような学習を意味します。究極の例としては、10個の手書き数字画像を深層CNNに与えたとして、数回のエポックで平均二乗誤差が0に収束したとします。このモデルはおそらく、10個の訓練画像を除いては認識することは出来ないでしょう。実際の性能では、当てずっぽうと変わらないものとなります。
この例で何が起こっているかを知るために、学習したモデルの中を見ると、ニューロンのほとんどが意味のある局所パターンとして学習できていないのです。10個の訓練データを認識するために、偶然選ばれたニューロンの組み合わせだけが最適化されていて、その他の局所パターンの殆どはランダムなままの状態なのです。
・その要因とは
このような過学習の要因の一つは、深層CNNのニューロンの重みのパラメータ数の大きさに対して、訓練データ数は10では十分でないことが考えられます。平均損失を最小化するために、実際のパラメータを操作することでモデルを訓練したことを思い出してみましょう。この時、モデルの中には多くのパラメータがありますが、10個のサンプルに対して単純な平均損失を最小化するだけの課題であれば損失を0にするのは僅かなパラメータを更新するだけの非常に簡単な操作になります。しかし、その結果、ほとんどのパラメータは初期時点のランダムな値とほとんど変わらない結果となってしまうのです。
この過学習を低減するには訓練データの数を増やす必要がありますが、複雑な問題に対応するためには巨大なネットワークのモデルを構築する必要があるため、その重みパラメータの数も膨大になります。この巨大なモデルを訓練するための数万〜数百万のラベル付きのサンプルを収集するためには非常にコストがかかり、なおかつ、この大量の訓練データを使った訓練は、私達が受け入れがたい位の時間がかかってしまいます。
過学習を防ぐドロップアウト
これから紹介するドロップアウト(Dropout)は、訓練データを増やさずに過学習を防ぐための、シンプルかつ便利な方法です。深層ニューラルネットワークでよく使われています。ドロップアウトではまず、ニューラルネットワークにドロップアウト層を挿入する必要があります。訓練時にドロップアウト層は入力値の一部分をランダムに選択し、例えば、半分の50%を選択し、その値を0に置き換えて、次の入力として出力します。
ドロップアウトでは訓練データを増やすことはしませんが、その代わりに訓練データから指定した割合でランダムに修正したデータを学習することになります。ドロップアウト層を通すことで、例えば50%の割合でサンプルの中の値がランダムに選ばれ、0と置き換えられて出力データが変形されるため、このモデルは、エポックごとに新たに入力データを学習し直していることになります。このため、訓練データを増やすこと無く過学習を低減できるというわけです。
ドロップアウトの利点
この他の理論的な説明として、ドロップアウト関数は学習対象のタスクに対して少しずつ違った小さなモデルをたくさん学習させていると言えます。ドロップアウトはそれぞれのニューラルネットワークの構造をランダムに選択し、検証していることに相当するので、これらの検証済みニューラルネットワークが、元のタスクについて学習できていることを裏付けています。損失(誤差)を評価するためのテストフェーズでは、検証済みニューラルネットワークの結果を平均した出力が、ニューラルネットワークの出力として得られるので、より頑健(ロバストな)予測性能が得られます。
最後に、ドロップアウト関数は共適応(Co-Adaption)と呼ばれる現象を防ぐことにもなります。ニューロンの出力の共適応とは、2つの局所パターンが畳み込み層によって同時に認識されることによって、画像のクラスレベルを推測できるようになる現象です。この状態に陥ると、片方の局所パターンのみでは正しく認識出来ず、正しく認識するためには常に2つの局所パターンを認識することが必要になってしまいます。また、これが 特定の画像に対して、2つの局所パターンを認識できた場合にのみ正しく認識できる状態を引き起こすので、過学習を引き起こす原因にもなります。
ドロップアウトは、ランダムにニューロンの出力を選択することによって、このような共適応を防ぎ、重要な局所パターンの1つで認識可能になるようにニューロンに学習させるため、過学習が防げるというわけです。