【ニューラルネットワークの基礎研究20】
層数やユニット数による学習結果の違いについて6(関数の入力数と出力数を一致させた構造)の続き
前回の続きで、今度は中間層のユニット数を100として1層から10層まで増やして、学習回数に対する損失値をグラフ化して学習効果を確かめます。
【これまでの結果】
→ 1変数の2次関数の学習 1 2 3 4
→ 係数が変化する2次関数の学習 1 2 3 4
→ べきが変化するべき関数の学習 1 2 3
→ 学習効果を高めるにはディープ(層数)と並列数(ユニット数)のどちらが有効か?
→ 底が変化する指数関数の学習 1 2 3
→ 関数形ごとの学習成果の比較
→ 角振動数が変化する三角関数の学習 1 2
→ 関数の入力数と出力数を一致させた構造 1
ニューラルネットワークの基本パラメータ
・ニューラルネットワークの構造:順伝播型ニューラルネットワーク(FFNN)
・学習方法:通常の勾配法(学習率固定、逆誤差伝搬法)
・学習率:eta = 0.01;
・ミニバッチ数:100 (サンプルは無限に用意できるためミニバッチという概念は存在しませんが、ランダムに用意したミニバッチ数分のサンプルに対する平均を用いて学習を進める)
・活性化関数(中間層):ReLU(ランプ関数)
・活性化関数(出力層):恒等関数
・損失関数:2乗和
※独立したネットワークを10個用意してそれぞれ個別に学習させて、学習効果の高かった上位5つの「学習回数」vs「損失値」をグラフ化します。
※参考ページ
学習対象関数
本稿では角振動数が0から2まで変化する三角関数を学習させます。
次のグラフは角振動数を0.4, 0.8, 1.2, 1.6としたネットワークの計算結果です。
※後述する「102-100-100-100-100-100-100-100-100-100-100-101」ネットワークで学習した三角関数(学習回数100000回)
線が学習対象関数、点がネットワークで計算した結果です。
中間層のユニット数10のニューラルネットワーク(中間層数:1~10)
102-100-101(1層)
102-100-100-101(2層)
102-100-100-100-101(3層)
102-100-100-100-100-101(4層)
102-100-100-100-100-100-101(5層)
102-100-100-100-100-100-100-101(6層)
102-100-100-100-100-100-100-100-101(7層)
102-100-100-100-100-100-100-100-100-101(8層)
102-100-100-100-100-100-100-100-100-100-101(9層)
102-100-100-100-100-100-100-100-100-100-100-101(10層)
考察と次の課題
・過去の結果と比較して全体的に損失値が1/10程度へ低減することができた。
・しかもまだまだ学習が完了していない様子なので、学習方法を工夫することでより高精度を実現できそう。
次の課題
【メモ】入力値のaとx_0からx_Nまでの取り扱いが対等であることに違和感がある
→ 入力値 a の影響を強めるために、aユニットからのつながりを第2層目だけではなくその他の全ユニットとの結合とすることで、もしかしたらさらなる改善が図れるかもしれない。
プログラムソース(C++)
・http://www.natural-science.or.jp/files/NN/FFNNs_epoch_Functions2.zip
※VisualStudio2017のソルーションファイルです。GCC(MinGW)でも動作確認しています。