【ニューラルネットワークの基礎研究】
層数やユニット数による学習結果の違いについて1(1変数の2次関数)の続き2
ニューラルネットワークを勉強した後に、実際の系を学習させる際に問題になるのがネットワークの構造です。
最初から複雑な系にてどのような構造が全く検討がつかないので、本稿では最も簡単な1変数関数を用意し、実際に様々なニューラルネットワーク構造で試してみます。
学習回数に対する損失値をグラフ化して学習効果を確かめます。
→ 層数やユニット数による学習結果の違いについて1(1変数の2次関数)の続きの続きで、各中間層のユニット数を10に固定したまま層数を増やした結果です。
ニューラルネットワークの基本パラメータ
・ニューラルネットワークの構造:順伝播型ニューラルネットワーク(FFNN)
・学習方法:通常の勾配法(学習率固定、逆誤差伝搬法)
・学習率:eta = 0.01;
・ミニバッチ数:100 (サンプルは無限に用意できるためミニバッチという概念は存在しませんが、ランダムに用意したミニバッチ数分のサンプルに対する平均を用いて学習を進める)
・活性化関数(中間層):ReLU(ランプ関数)
・活性化関数(出力層):恒等関数
・損失関数:2乗和
※独立したネットワークを10個用意してそれぞれ個別に学習させて、学習効果の高かった上位5つの「学習回数」vs「損失値」をグラフ化します。
※参考ページ
中間層のユニット数10のニューラルネットワーク(中間層数:1~10)
1-10-1(1層)
1-10-10-1(2層)
1-10-10-10-1(3層)
1-10-10-10-10-1(4層)
1-10-10-10-10-10-1(5層)
1-10-10-10-10-10-10-1(6層)
1-10-10-10-10-10-10-10-1(7層)
1-10-10-10-10-10-10-10-10-1(8層)
1-10-10-10-10-10-10-10-10-10-1(9層)
1-10-10-10-10-10-10-10-10-10-10-1(10層)
考察と次の課題
・層数によっては1層よりも学習効果が悪化する。
→ 2層:悪化、3層:同等、4層:同等、5層:同等、6層:良化(少し不安定)、7層:良化(損失値1/10倍)、8層:良化(損失値1/4倍)、9層:良化(損失値1/10倍)、10層:良化(損失値1/10倍、少し不安定)
・2次関数という単純な構造なためか、中間層の層数を増やしても劇的な改善は見られない。
プログラムソース(C++)
・http://www.natural-science.or.jp/files/NN/FFNNs_epoch_Functions.zip
※VisualStudio2017のソルーションファイルです。GCC(MinGW)でも動作確認しています。