【ニューラルネットワークの基礎研究】
層数やユニット数による学習結果の違いについて2(係数が変化する2次関数)の続き
ニューラルネットワークを勉強した後に、実際の系を学習させる際に問題になるのがネットワークの構造です。
本稿では係数が変化する2次関数を用意し、実際に様々なニューラルネットワーク構造で試してみます。
学習回数に対する損失値をグラフ化して学習効果を確かめます。
→ 層数やユニット数による学習結果の違いについて2(係数が変化する2次関数)の続きで、中間層を2層とした結果です。
ニューラルネットワークの基本パラメータ
・ニューラルネットワークの構造:順伝播型ニューラルネットワーク(FFNN)
・学習方法:通常の勾配法(学習率固定、逆誤差伝搬法)
・学習率:eta = 0.01;
・ミニバッチ数:100 (サンプルは無限に用意できるためミニバッチという概念は存在しませんが、ランダムに用意したミニバッチ数分のサンプルに対する平均を用いて学習を進める)
・活性化関数(中間層):ReLU(ランプ関数)
・活性化関数(出力層):恒等関数
・損失関数:2乗和
※独立したネットワークを10個用意してそれぞれ個別に学習させて、学習効果の高かった上位5つの「学習回数」vs「損失値」をグラフ化します。
※参考ページ
学習対象関数
本稿では係数が-1から1まで変化する2次関数を学習させます。
次のグラフはa=1, a=-1, a=0.1を与えたネットワークの計算結果です。
※後述する「2-300-300-1」ネットワークで学習した2次関数(学習回数100000回)
線が学習対象関数、点がネットワークで計算した結果です。
「2-N-N-1」型のニューラルネットワーク(中間層数:2)
2-10-10-1
2-50-50-1
2-100-100-1
2-200-200-1
2-300-300-1
考察と次の課題
・中間層のユニット数に依らず学習は安定している。
・どのユニット数でも層数を増やすことで学習成果が良化(10000回学習時)。
→ 10:良化(損失値1/2倍)、50:良化(損失値1/4倍)、100:良化(損失値1/3倍)、200:良化(損失値1/8倍)
・ユニット数が200でも損失値は1E-5よりも大きい、ユニット数300でようやく損失値は1E-5を切った。
※損失値が1E-5を切ると関数を概ね表現できている
次の課題
・中間層の層数を増やす。
プログラムソース(C++)
・http://www.natural-science.or.jp/files/NN/FFNNs_epoch_Functions2.zip
※VisualStudio2017のソルーションファイルです。GCC(MinGW)でも動作確認しています。