HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > ゼロから作るDeep Learning

【ニューラルネットワークの基礎研究13】
層数やユニット数による学習結果の違いについて4(底が変化する指数関数)

文責:遠藤 理平 (2018年4月15日) カテゴリ:ゼロから作るDeep Learning(49)

ニューラルネットワークを勉強した後に、実際の系を学習させる際に問題になるのがネットワークの構造です。 本稿では底が変化する指数関数を用意し、実際に様々なニューラルネットワーク構造で試してみます。 学習回数に対する損失値をグラフ化して学習効果を確かめます。
【これまでの結果】
→ 1変数の2次関数の学習
→ 係数が変化する2次関数の学習
→ べきが変化するべき関数の学習
学習効果を高めるにはディープ(層数)と並列数(ユニット数)のどちらが有効か?
→ 底が変化する指数関数の学習

ニューラルネットワークの基本パラメータ

・ニューラルネットワークの構造:順伝播型ニューラルネットワーク(FFNN)
・学習方法:通常の勾配法(学習率固定、逆誤差伝搬法)
・学習率:eta = 0.01;
・ミニバッチ数:100 (サンプルは無限に用意できるためミニバッチという概念は存在しませんが、ランダムに用意したミニバッチ数分のサンプルに対する平均を用いて学習を進める)
・活性化関数(中間層):ReLU(ランプ関数)
・活性化関数(出力層):恒等関数
・損失関数:2乗和
※独立したネットワークを10個用意してそれぞれ個別に学習させて、学習効果の高かった上位5つの「学習回数」vs「損失値」をグラフ化します。
参考ページ

学習対象関数

本稿では底が0から2まで変化する指数関数を学習させます。
次のグラフはを0.4, 0.8, 1.2, 1.6としたネットワークの計算結果です。

f(x) = a^x


※後述する「2-500-1」ネットワークで学習した2次関数(学習回数100000回)
線が学習対象関数、点がネットワークで計算した結果です。

「2-N-1」型のニューラルネットワーク(中間層数:1)

2-10-1

2-50-1

2-100-1

2-200-1

2-500-1

2-1000-1

2-2000-1

2-10000-1

考察と次の課題

・中間層のユニット数に依らず学習は概ね安定している(20個, 200個, 2000個の場合だけ若干不安定)。
・100,000回学習後の学習効果は中間層のユニット数が1000個の場合が一番良い。
 → ユニット数は多いほど良いわけではない(これまでの場合と同じ)。
 → ただし、10000個の場合を見るとわかる通り、学習回数100,000回では学習が完了していない様子。
・1層(ユニット数10~10000)では損失値1E-5を切ることはできない。

次の課題

・中間層の層数を増やす。
【メモ】関数形による学習成果の違いを比較する。
【メモ】関数の引数と戻り値の個数を1:1とした場合を検証する。

プログラムソース(C++)

http://www.natural-science.or.jp/files/NN/FFNNs_epoch_Functions2.zip
※VisualStudio2017のソルーションファイルです。GCC(MinGW)でも動作確認しています。



▲このページのトップNPO法人 natural science トップ

関連記事

ゼロから作るDeep Learning







▲このページのトップNPO法人 natural science トップ




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました