IT

【Dropout】hyperasでパラメーターチューニングをしてみる-part2

こんにちわ。Toruです。

今回は前回の続き、hyperasでパワメータチューニングをしてみる回です。今度はDropoutのチューニングに挑戦してみます。前回の記事を見ていない方はこちらからご覧ください。

【Dense】hyperasを使ってパラメータチューニングする-part1こんにちは。Toruです。 今回はディープラーニングで必要不可欠とされるパラメーターチューニングを勝手にやってくれるhyperas...

 

それでは早速やっていきまーす。

 

 



前回までのおさらい

前回はDenseのニューロン数をチューニングして最適な値を取得しました。前回、hyperasを使いDenseの最適なパラメータを設定したモデルがこちらです。

 

 

Denseの中の512と256、この2つの値をhyperasが自動で求めてくれました。今度はその次のDropoutの引数の最適値を求めていきます。

 

Dropoutとは

この章はDropoutについて、理解している方は読み飛ばしていただいて大丈夫です。Dropoutのドキュメントには「過学習を防止する効果がある」と記載されています。

 

イメージとしてはこういうことです。ディープラーニング のモデルは学習するうちに「暗記」をしようとします。ここでいう暗記というのは、「このデータはこの経路で行けばいい答えが出るでしょ」とモデル自体が予め決めつけてしまうことです。(イメージとして)

 

では、暗記がなぜダメなのか。

 

例えば、博多ラーメンのように細い麺のラーメンを「ラーメン」という正解ラベルとして、大量に学習させます。そのモデルに二郎系ラーメンを見せると、博多ラーメンを「ラーメン」と暗記しているモデルには「博多ラーメン以外はラーメンじゃない」と判断してしまいます。

(実際にこうなのかはわかりませんが…。)

 

このまま暗記が進んでいくと、もちろん過学習が起こり、一部のデータにしか適応できなくなってしまいます。これを防ぐのがDropoutです。やっていることは簡単で、ニューロンを指定された分だけ隠します。これだけ。

要するにニューロンを一時的に隠し、「回り道」をさせて学習をさせることで様々なパターンの入力データに対応できるようにします。たったこれだけで過学習を防げてしまいます。

 

hyperasでDropout

さあ、前置きが長くなりましたが実際に実装していきましょう。Dropoutの引数には通常、0〜1の間の値を入れます。これをhyperasで最適な値を求めるには以下のように入れます。

 

 

「0〜1の間で最適な値を教えて」これだけ。

 

じゃあ、これを入れたモデルを実際に実行してみましょう。上のやつを入れた今回のプログラムが以下になります。

 

 

このプログラムを実行した結果がこちら。

 

 

1つ目のDropoutの引数には0.4844455237320119

2つ目のDropoutの引数には0.026079803111884514

 

という結果が出てきました。この値は人間には出せませんね笑 ってか、前回と正解率変わってないやんけ…。



まとめ

  • 0〜1の間で最適な値を求めたい時は {{uniform(0, 1)}}
  • しかし引数を変える前と後では、正解率はほとんど変わっていない。ってか全く変わっていない。

ここから言える私の結論は、

 

実は正解率を上げるには、モデル自体のパラメーターにはさほど影響力は無く、そのほとんどは最適化アルゴリズムで決まるんじゃないか?

 

ということ。全くモデル自体に影響力がないということではありません。最適化アルゴリズムと比較するとおいうことです。ということで次回、hyperasを使って最適な最適化アルゴリズムを求めたいとおもいます。

 

参考サイト:

https://qiita.com/wataoka/items/f46224ccccc5321543bd







ABOUT ME
Toru
24歳。会社資料の文章力を鍛えるためにブログ開設。機械学習・ディープラーニング勉強中。プログラミング、デバイス、PC、ガジェット類について紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です