<メモ>DeepLearning ニューラルネットワークのチューニング観点

これまで株価予測(RNN)、強化学習(DQN)、画像認識(DNN)と3つやってみました。

これまでの経験で、どのハイパーパラメータをチューニングすると効果があるのかメモしました。

※ほとんど主観と断片的な知識で語っているので、間違いがあればご指摘ください。

ニューラルネットワークのノード数と層の厚み

重要度: ★★★★★

層が多ければ多いほどよいというものではなく、問題の複雑さを考慮に入れて決めるのがよさそうです。

例えば、単純な画像認識(mnist/手書き数字文字。28x28pxの画像)では、ノード数100×2層よりノード数30×2層のほうが学習スピードが高かったです。

一方、強化学習(cartpole)ではノード数16×3層では学習が収束せず、ノード数100×3層で学習が収束しました。ノード数200×3層だと、収束しませんでした。

ノード数や層が多ければ多いほどニューラルネットワークの表現力が強くなります。
その分、過学習してしまうみたいです。
なので、簡単な事象はニューラルネットワークの層やノード数を少なくするのがよいかもしれません。

学習率

重要度: ★★★

論文に書いてある学習率をそのまま使えば、概ね大丈夫そうです。
あまりここをチューニングする意味はなさそうです。

ニューラルネットワークの重み・バイアスの初期値

重要度: ★★★

分類問題の場合は、何も考えず「標準正規分布(平均=0,標準偏差=1)」でよさそうです。

回帰問題の場合は、「出力層で出力される値」に応じて重み付けを初期化する必要がありそうです。

cartpole(強化学習、回帰問題)の場合、出力層は-1〜1の間を想定していました。
この場合に重みの初期値が「標準正規分布(平均=0,標準偏差=1)」だと、出力層は-1〜1の値に収束しません。(ニューラルネットワークは掛け算なので、層を重ねるごとに数字が大きくなるためです)
この場合は、1以上の値と1以下の値がバランスよく散らばるような値に初期化してあげるとよいと思います。
cartpole問題は、平均=0,標準偏差=0.1で初期化してうまくいきました。

損失関数

重要度: ★

ほぼ、誤差二乗和法が最強です。 分類器の場合はCrossEntropyかな?

その他

  • Batch Normalization
  • Dropout

などニューラルネットワークの学習を効率化させる方法は、あまり組み込んでいないので語れないです。恥ずかしながら…