takeda_san’s blog

KotlinとVRを頑張っていく方向。

なぜ中間層(隠れ層)が増えるとDeep Learningなのか

前回のあらすじ

ニューラルネットワークの基本を勉強。
ニューラルネットワークとは?」、「学習(誤差逆伝搬法)」、「階層型ニューラルネットワーク」をなんとなく、ふわっと理解する。

takeda-san.hatenablog.com

やったこと

なぜ中間層(隠れ層)が増えると何がうれしい?

ここのページによると入力層、出力層あわせて4層以上がDeep Learningと言うらしい。

Java DeepLearngin4j ニューラルネットワークの基本|軽Lab

3層以下だと何がよろしくなくて、4層以上だと何がうれしいのだろうか。

2層のパーセプトロンだとなにがよろしくないのか?

入力層と出力層からなる単純なモデルのパーセプトロンは、2つのクラスを線形識別できる。
しかし、現実世界での課題はグラフ上に線を一本引いて2つに分類するだけで解決するものは少ない。
あまりこれでは実用性がなさそう。

じゃあ、隠れ層を増やして3層ならどうなのよ

非線形の問題に対応するために入力層と出力層の間に1層、隠れ層なるものをつけたしたのが多層パーセプトロンと呼ぶものらしい。
え、じゃあ最低で3層でええやんけ。
と思ったが、隠れ層が1層だけだと複雑なパラメータの調整ができないらしい。
そして、隠れ層が増えれば増えるほど複雑な問題に対処できて捗るぞ!らしい。
こういう脳みそ筋肉な考え方は大好きです。

じゃあ、なんで4層からDeep Learningなのさ

隠れ層を1層増やしたぐらいで、なぜDeep Learningなのか。
それは、数が理由でなく手法が理由。
脳筋で隠れ層を増やしたら、各隠れ層のパラメータ調整がうまくできなくなったらしい。
前回勉強した、学習手法「誤差逆伝搬法」で出力層から誤差を反映させていくと途中で誤差が消えてしまうことに理由があるらしい(このへんあんまり理解してない)。
で、学習の仕方を改めて入力層~出力層のネットワーク全体でなく、各層ごとに誤差を反映させるようしたらうまくいったぞ!、と。
この手法によって、隠れ層を増やしても正しく学習ができるようになった。

つまるところが、隠れ層と隠れ層の間のパラメータを個別に調整するのがDeep Learningということなのだろう。
それで隠れ層が2つ以上存在する、4層以上がDeep Learningと言っているのだろう。
お、それとなく納得。

今後の予定

・プログラミングのための線形代数を読む
・サンプルプログラム(Perceptron/LenetMnistExample)を読む
Mavenのpomの読み方