takeda_san’s blog

JavaFXと機械学習を頑張る方向。

ニューラルネットワークの基本を勉強する

前回のあらすじ

環境構築がちゃんとできたかを確認するために、サンプルプログラムを実行。
なにやら結果が出たので一安心。

takeda-san.hatenablog.com

やったこと

ここのサンプルプログラムを読んで何をしているのかわかった気になりたかったが
そもそも、前段階のニューラルネットワークについて知っておかないといけないようだ。

Java DeepLearning4j 基本的な利用方法|軽Lab

というわけで、飛ばしていた「ニューラルネットワークの基本」に戻る。
「Deep Learning Javaプログラミング 深層学習の理論と実装」の2.5.1 パーセプトロンのあたりの内容を
さらにかみ砕いて説明してあるようだ。
ちょうどこのあたりで躓いていたのでありがたい。

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


ニューラルネットワークとは?」は、各入力のvとθをパラメータとして調整して
いい感じの出力を出して、二次関数を近似できますということを言っているんだと思う。
このいい感じの出力を出すためのパラメータの調整を学習と呼んでいるということか?

「学習(誤差逆伝搬法)」は、誤差関数よるパラメータの求め方。
出力から逆算していく必要があるからこのような名前である。

「階層型ニューラルネットワーク」は、ニューラルネットワークが多層になっているもの。
中間層(隠れ層)を積み重ねたものが、Deep Learningである。
「非階層型ニューラルネットワーク」は、上記のような階層上になっていないものを指す。


…と、ところどころ頭を抱えながら読み進めましたがちょっとは賢くなれたかな。
中間層が増えると、なぜDeep Learningなのかがイマイチよくわかってないので
「Deep Learning Javaプログラミング 深層学習の理論と実装」の2章をもう一回読んでみよう。

あと、今回のページもサンプルプログラムも基本的な数学知識を知ってないと読めなさそう。
プログラムを眺める限り行列っぽいものが。
線形代数をまたやることになるとは…
「プログラミングのための線形代数」という本を見つけたので読んでみようと思います。
(書籍版はプレミアがついているみたいなので電子版!)

今後の予定

・Deep Learning Javaプログラミング 深層学習の理論と実装の2章を読む
  (なぜ中間層(隠れ層)が増えるとDeep Learningなのか)
・プログラミングのための線形代数を読む
・サンプルプログラム(Perceptron/LenetMnistExample)を読む
Mavenのpomの読み方