【ニューラルネットワークの基礎研究】
層数やユニット数による学習結果の違いについて3(べきが変化するべき関数)の続き2
ニューラルネットワークを勉強した後に、実際の系を学習させる際に問題になるのがネットワークの構造です。
本稿ではべきが変化するべき関数を用意し、実際に様々なニューラルネットワーク構造で試してみます。
前回の続きで中間層のユニット数を100に固定したまま層数を増やした場合の学習回数に対する損失値をグラフ化して学習効果を確かめます。
【これまでの結果】
→ 1変数の2次関数の学習 1 2 3 4
→ 係数が変化する2次関数の学習 1 2 3 4
→ べきが変化するべき関数の学習 1 2
ニューラルネットワークの基本パラメータ
・ニューラルネットワークの構造:順伝播型ニューラルネットワーク(FFNN)
・学習方法:通常の勾配法(学習率固定、逆誤差伝搬法)
・学習率:eta = 0.01;
・ミニバッチ数:100 (サンプルは無限に用意できるためミニバッチという概念は存在しませんが、ランダムに用意したミニバッチ数分のサンプルに対する平均を用いて学習を進める)
・活性化関数(中間層):ReLU(ランプ関数)
・活性化関数(出力層):恒等関数
・損失関数:2乗和
※独立したネットワークを10個用意してそれぞれ個別に学習させて、学習効果の高かった上位5つの「学習回数」vs「損失値」をグラフ化します。
※参考ページ
学習対象関数
本稿では指数が0から3まで変化するべき関数を学習させます。
次のグラフは指数を0.5, 1.0, 2.0としたネットワークの計算結果です。
※後述する「2-100-100-100-100-100-100-100-100-1」(8層)ネットワークで学習した関数(学習回数100000回)
線が学習対象関数、点がネットワークで計算した結果です。
中間層のユニット数10のニューラルネットワーク(中間層数:1~10)
2-100-1(1層)
2-100-100-1(2層)
2-100-100-100-1(3層)
2-100-100-100-100-1(4層)
2-100-100-100-100-100-1(5層)
2-100-100-100-100-100-100-1(6層)
2-100-100-100-100-100-100-100-1(7層)
2-100-100-100-100-100-100-100-100-1(8層)
結果と課題
・中間層を多層化にすると学習が若干不安定化した。
・100,000回学習後の学習成果は概ね層数が多いほど高い。
→ ただし、学習成果は層数に比例しない(4~7層は余り変化なし)。
・中間層8層(ユニット数100)で損失値1E-5を切る事ができた。
→ 9層と10層は計算中。
・学習範囲(x=0から1)のx=0近傍は関数の変化が他の領域より大きいため、重点的に学習する必要がある。
今後の課題
・ネットワークの自由度(重みとバイアスの層数)が同等の場合の学習成果の比較を中間層1層と中間層2層で行う。
プログラムソース(C++)
・http://www.natural-science.or.jp/files/NN/FFNNs_epoch_Functions2.zip
※VisualStudio2017のソルーションファイルです。GCC(MinGW)でも動作確認しています。