ディープラーニング

DropoutとDropconnectでモデルの汎化性能を向上させる!

今日はニューラルネットワークでの過学習抑制手法であるドロップアウトドロップコネクトに関してまとめていきます。

ドロップアウトによる過学習の抑制

ニューラルネットワークでは層を厚くしたり、ノードを増やすことで簡単に表現力を高めることができます。しかし、ネットワークを大きくすることによりパラメータの数も増えるためその分過学習の危険性も大きくなってしまいます。

 

過学習を抑える方法としては正則化をしたり、訓練データと検証データの予測値の乖離から、学習を止めることなども考えられますが、kaggleでよく用いられる手法としてドロップアウトというものがあります。

 

ドロップアウトでは学習時に中間層のノードを任意の割合でランダムに取り除きながら(無視しながら)学習を行います。

DropOut examples

 Difference between DropOut and DropConnect 

左の図では1,3番目のノードが、右図では2,3番目のノードの活性化関数がマスクされた状態で学習が行われます。これを学習の段階ごとにランダムで行うことで、それぞれ別のネットワークを持つモデルを複数アンサンブル学習する効果があるため汎化性能の向上に繋がることが実験で示されています。

ドロップコネクトによる過学習の抑制

続いてドロップコネクトですが、ドロップアウトではノードを消したのに対して、こちらはランダムに重みにマスクをします。

DropConnect

 Difference between DropOut and DropConnect 

ドロップコネクトも実質同時にいくつものモデル(ノードの乗数個のモデル)を学習させて平均を取ることになり、多様性に富んだモデルになるためテストデータでの予測精度(汎化性能)の向上に寄与することがあります。

予測精度への影響の比較

どれくらい影響があるかに関して「Regularization of Neural Networks using DropConnect」で数字画像データMNISTを用いた実験結果が示されていました。

実験ではドロップアウトを使用していないモデルドロップアウトを使用したモデルドロップコネクトを使用したモデルの3つのモデルにおいて、各活性化関数を用いた結果が示されており、全てのケースにおいて何もしない場合より予測精度が向上していることがわかります。

yaaku

論文はいい結果しか載せないですが…

 

さらにドロップコネクトの結果を確認するために3つの実験結果が示されています。

 

1つ目の左図の実験が中間層のノードを増やした場合(パラメーターが増えた場合)の予測結果です。

何もしていないモデルがすぐに過学習しているのに対して、ドロップアウトもコネクトもパラメーターが増えていっても過学習が抑えられていることがわかります。

 

2つ目がドロップアウトとドロップコネクトでドロップ割合の変化による予測精度の影響を見ています。結果からは0.4~0.5付近で最も予測精度が向上していることがわかります。

 

3つ目は収束速度の違いを見ることができます。

収束速度はドロップコネクトの方が遅いですが、ドロップアウトだと過学習気味なのに対して、ドロップコネクトの方は過学習していない(ように見えて)、最終的な損失関数が低くなっていることがわかります。

・パラメータが増えた場合ドロップアウトorドロップコネクトは有効(必須?)

・ドロップの割合の値をチューニングする必要がある(0.1~0.5)

・収束速度はドロップアウト>ドロップコネクト(今回のケースでは)

まとめ

kaggleでニューラルネットワークを使用しているkernelを見るとほとんどの人がドロップアウトを使用しているように見えます。実装も簡単そうなので両方の方法で確かめてみるのが良いかもしれません。