CNN学習時のDropoutの比率(DropoutRatio)についての知見

背景

つくばチャレンジにて、CNN、SlidingWindowを応用して、看板検出を行った。
今回は、学習時のDropout率をどう変えたらいいかについての知見をまとめる。
この辺りの小細工は当たり前に思いつくことだが、あまりまとめられていないように思う。

www.robotech-note.com

Dropoutの比率による正答率の変化

Dropoutの比率は大きければ大きいほど、モデルのロバスト性が上がると一般的には言われている。
当初は、その言葉を信じて各層に70%Dropoutさせて学習を進めていたが、全く正答率が上がらず困惑していた。
そこで、諦めてDropoutの比率を30%としたところ、急激に学習が進んだ。

Dropout70%、30%の学習結果を以下に示す。
2値分類の学習結果なので、Dropoutを70%とすると正答率は50%前後を推移しており全く学習が進んでいない、それに対し、Dropoutを30%とすると急速に学習が進んでいるのが見て取れる。

f:id:t_nkb:20161113120236p:plain

学習済みモデルに対し、Dropoutを増やして再学習させる

上記実験で、Dropout比率を下げることで学習が一気に進む場合があることがわかった。
しかし、”Dropoutの比率は大きければ大きいほど、モデルのロバスト性があがる”のならば、Dropoutの比率をさらに増やしたいと思うのが親心。
そこで、Dropout 30%で学習済みのモデルを使って、Dropout 70%で再学習してみた。
この再学習の学習結果を以下に示す。ここでは、上記実験でのDropout30% エポック20のモデルを使って再学習をさせている。

この結果を見ると、最初からDropout70%で学習させると全く学習しなかったものが、再学習ではしっかりと学習し、正答率100%近くまで上がっていることがみて取れる。
考察するに、Dropout比率を下げて学習させることで、autoencoderと同様の効果が得られているのだろう。

また、Dropout30%のものと、Dropout70%で再学習させたものを動画で比較すると、70%のものの方が、誤検知率が低く、優秀なモデルとなっていることが確認できた。

f:id:t_nkb:20161113120240p:plain

まとめ

Dropoutは最初は少なめで学習させる方が効率が良い。学習が進まないのならば、まずはDropoutを消して試してみる。
Dropoutを増やしたいのならば、ある程度学習させた後で増やすこと。収束に時間はかかるが、Dropoutを増やすと確かにロバスト性は上がる。