21
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ニュヌラルネッワヌクのハむパヌパラメヌタ最適化方法に぀いお Part1〜孊習率〜

21
Last updated at Posted at 2017-03-02

ニュヌラルネットのハむパヌパラメヌタを最適化する方法に぀いお、Pythonモデルで詊行錯誀しながら私なりの考えをたずめおいこうず思っおいたす。動䜜理解もかねおいるのでラむブラリを䜿わずPythonだけで曞いおいたす。ハむパヌパラメヌタの皮類によっおは局を深くしたディヌプニュヌラルネットモデルを扱うパヌトもありたす。

䜿甚したPythonモデルは公開しおいるのでアドバむスや間違いがあれば教えおください。

ハむパヌパラメヌタずは

孊習前に蚭定する以䞋のようなもので、孊習で自動調敎するパラメヌタ重み、バむアスずは区別しおいたす。

  • 孊習率 ← Part1
  • 重み初期倀±1, Xavier, Gaussian, He← Part2
  • 掻性化関数SigmoidTanh, ReLU← Part3
  • 䞀括重み曎新、逐次的重み曎新、ミニバッチ凊理 ← Part4
  • レむダヌ数、ニュヌロン数 ← Part5
  • パラメヌタの曎新方法SGD、Adam、AdGard、Momentam、SMPROS、RMSProp ← Part6
  • 正芏化 ← Part7

各ハむパヌパラメヌタは䞀぀づ぀Partに分けお扱っおいく予定です。本Partは前眮きず孊習率の話ずいうこずで。

ニュヌラルネットの性胜は入力デヌタず䞊述のパむパヌパラメヌタに䟝存しおおり、埌者はそれなりの詊行錯誀が必芁だず思いたす。今回以䞋のようなネットワヌク構成で、そのハむパヌパラメヌタ今回は孊習率をチュヌニングし孊習回数や誀差が改善されるずころを芋おいきたす。

・ニュヌラルネットワヌク図
ファむル名

・孊習回数ず誀差の遷移
サンプルグラフ

Pythonサンプルコヌド

TensorFlowやCaffeなどのニュヌラルネットラむブラリは䜿わず、Pythonで曞いおいたす。
動䜜確認したのは以䞋の環境ですが、Python2.7でも少しだけ動くこずをみおいたす。

  • Ubuntu 14.04.5 LTS
  • Python Version 3.6.0 |Anaconda 4.3.0 (64-bit)|
    • numpy==1.11.3
    • matplotlib==2.0.0

モデル䜜成時の参考曞籍は䞋蚘になりたす。
孊習ずニュヌラルネットワヌク 熊沢 逞倫(著)森北出版
ファむル名
この第6章でニュヌラルネットワヌクの仕組みや導出方法が詳しく説明しおありたす。サンプルのCプログラムも茉っおいたすが、Amazonの評䟡にもあるように曞籍に蚘茉の入力デヌタで実行するず収束したせん。ただ以䞋のように孊習回数20䞇回たで増やすず17䞇回皋床で収束したすので、この本通りに実行したのにうたくいかない方がいれば詊しおみおください。

appendix.txt
# define NUM_LEARN 200000   // 孊習の繰り返し回数をここで指定する

Pythonモデルで䞊蚘曞籍ず同様のハむパヌパラメヌタ蚭定をするず収束するたで玄11䞇回ずなりある皋床再珟できおいたす。ここ出発点ずしお最適化をしおいきたいず思いたす。

本皿の察象範囲に぀いお

本皿が察象にしおいるのは、叀兞的な局の浅いニュヌラルネットワヌクや局皋床のディヌプニュヌラルネットワヌクのハむパヌパラメヌタ探玢で、畳み蟌みニュヌラルネットワヌクに぀いおの詊行はしおいないです今埌詊したいですが。たた、ニュヌラルネットワヌクの動䜜や孊習方法ずいった動䜜説明もしおいたせん。こちらは䞊蚘であげた曞籍や以䞋で詳しく茉っおいたす。特に䞋蚘曞籍の誀差逆䌝播法を図を぀かっお説明する方法はずおもわかりやすかったです。

れロから䜜るDeep Learning
――Pythonで孊ぶディヌプラヌニングの理論ず実装 斎藀 康毅(著)O'Reilly Japan

ファむル名

本題の孊習率に぀いお

䞋蚘ハむパヌパラメヌタを初期倀改善の䜙地がある倀ずしおたずこの状態を確認しおいきたいず思いたす。

  • 孊習率 0.05
  • 重み初期倀 -1 ず 1 の亀互
  • 掻性化関数Sigmoid
  • 逐次的重み曎新方法
  • レむダヌ、ニュヌロン数 入力䞭間出力
  • パラメヌタ曎新方法SGD
  • 正芏化なし

図にするず以䞋のようになりたす。
chap01_2 (5).png

局のネットワヌク構成で、掻性化関数はSigmoidを぀かっおいたす。重みの初期倀は+1ず-1の亀互。蚓緎デヌタは぀しかなく、XDATA芁玠䞭のの個数が偶数であればYDATAをずしおいたす。倉数XDATA,YDATA,TDATA、W[]は゜ヌスコヌドず察応しおいるので远うずきの参考にしおください。

䞊蚘の図はフィヌドフォワヌド時の図なのでハむパヌパラメヌタのいく぀かは図䞭に出おきたせんがそのうちバックフォワヌドの図も曞く぀もりなのでそこで再床確認させおください。

実行結果です。぀の蚓緎デヌタすべおで誀差が0.01未満になるたで蚓緎したした。
暪軞は孊習回数、瞊軞は䞊段のグラフで誀差、残りの぀はn各局の重みW[0],W[1]の掚移です。
0.05

孊習の最初ず最埌あたりは倀が倧きく倉化しおいたすが、それ以倖のほずんどのずころ100000〜600000回あたりは誀差がある状態にも関わらずあたり倉化がなく孊習がすすんでいないこずを芋るこずができたす。この期間の孊習を加速するため、孊習率0.05→0.5→5→50ず倉曎しおみたした。゜ヌスコヌドは以䞋を修正しおください。初期倀はにしおありたす。

neuralnet.py
EPSILON = 5.0             # Learning Rate

孊習率を増やした時の孊習回数結果を察数グラフにしたした。サンプルは少しもの足りない気がしたので、その䞭間倀も蚈枬しおいたす。グラフをみるず暪軞孊習率に半比䟋しお瞊軞孊習回数が枛っおいるのがわかりたす。ただ孊習率50は倧きすぎるようで、誀差が収束しなかったためグラフにのせおいたせん。
figure_1.png

䞊蚘グラフの右から番めにあたる孊習率 5.0、孊習回数 564の時の孊習遷移グラフです。孊習率0.05のずきず比范するず孊習党䜓を通しお誀差が倉化しおいるのがわかり、効率よく孊習しおいるように芋えたす。
0.05

たずめ

最初に詊した孊習率0.05では、特定のトレヌニングデヌタオレンゞ色のtr:1で誀差が長期間残っおいたすが、最終的には収束しおいたす。そのこずから孊習率を倧きくしおこの募配を早く䞋ったずしおも最終的にはきちんず収束する可胜性があり、実際倧きくしたずころより早く収束し孊習回数も枛ったずいった圢でしょうか。この点に぀いおはモヌメンタム※等を導入したほうがよりスマヌトに孊習回数は枛るかもしれたせん。※モヌメンタムに぀いおはPart7で考察したいず思いたす。

孊習率が過倧(今回は50)の堎合はそもそも収束したせんが、それ以䞋であればどの倀でも孊習回数ず匕き換えに収束しおいるので、その点はハむパヌパラメヌタの調敎難易床でいうずの䜎い方なのかもしれたせん。

次回

次回取り扱うハむパヌパラメヌタは"重みの初期倀"です。䞭間局ず出力局の間の結線は本なので、䞊蚘グラフのW[1]には、ラむンが぀あるべきずころ぀しかありたせん。この点に぀いお重みの初期倀を倉曎するこずで察応しおきたす。たた今回のモデルより局を぀増やし、局にしたディヌプニュヌラルネットも扱いたす。

21
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?