はじめに
この記事は、DeepLearning初心者が自分の理解の助けとするために、書いた記事です。
要するに一切の前提知識がないまま書かれているので嘘かもしれませんし。間違っている可能性があります。
小学生的に言えばDeepLearningの本を読んで分かったこと。と言った感じの記事です。
DeepLearningは答えを推定する問題ではない
DeepLearningが一つのバズワードになってます。
で、僕も流行に乗っちゃうぞーってことで「ディープラーニング 入門」でぐぐってみたわけで…
こんなのとか
いまさら聞けないDeep Learning超入門(1)
こんなのとか
そもそもディープラーニングとは何か?
つまりDeepLearningとは何か知らないけどたくさんの入力で学習して答えが未知の$x$に対して正しい推定値$ \hat{d} $を推定する問題なんだな。
と思いました。
で、じゃあ数理モデルは?といったところなかなか情報がなかったので本買って読んでいるのですが。
実はDeepLearningというか学習というのは入力の答えを推定する問題ではないということを理解しました。
それは、結果であって目的ではないです。
じゃあ目的は?というのがこの記事の本論です。
DeepLearningの目的
DeepLearningの目的が入力の答えを推定する問題ではないのだとしたら、何なのでしょうか。
僕の理解としては一言で言えば入力の答えを推定するための関数(手続き)を構成する問題です。
なんていうことでしょう。学習というのは推定するのは答えではなかったのです。
推定器や復号器の構成問題と理解したほうが良かったのです。
続けて、一体どういう問題なのかという話。
DeepLearningのモデル
さて、少し調べていくとこんな感じの図がある。
(graphvizで下付き文字作る方法あればお教えて下さい…)
これについて理解していきます。
ここでは、よく見るたくさんの手書きの数字の画像を0~9に振り分ける問題を考えることにします。
(以下暗黙で$\bf{x}$も$\bf{y}$いい感じに次元を拡張して議論します。他の文字も同様に…)
入力xと出力yの理解
まず$\bf{x}=(x_{1},x_{2},x_{3},...)$これはもちろん入力ここで言う手書き画像に当たり、
学習中はこれに正解$d$を人間が教えます。つまり学習中は$(\bf{x},d)$のペアを入力していく形になりますね。
次に$\bf{y}=(y_{1},y_{2},…)$これは$d$が$i$である確度、要するに$y_{i}$が大きければ大きいほど$d$は$i$と推定される。
以下$y_{i}$は正規化されていることにします。つまり$ \sum_{i} y_{i} = 1 $としましょう。
ここまでで、学習の目的は任意の$(\bf{x},d)$を入力したときに正しく$y_{d}$が1に近づき$y_{i} (i \neq d)$が0に近づくようにしたい。
人間が1と書いた画像$x$を入力した時は$\bf{y}=(0,1,0,0,0,0,0,0,0,0)$になって
人間が2と書いた画像$x$を入力した時は$\bf{y}=(0,0,1,0,0,0,0,0,0,0)$になって…
となって欲しいということがわかってきました。(あくまで理想)
じゃあどうやって近づけるかということが問題になってきますね!
ここを理解すれば、DeepLearningって何ということの理解になる!はず!
パラメータベクトルwの理解(大事)
ここでどうやって学習するのかをイメージします。
上の図で四角で囲ったノードは推定のためのノードです。
ここで何が行われるのかを理解していきます。
まずnode$i$に入ってきた$\bf{x}$から以下のように$u_{i}$を求めます。
u_{i} = \bf{x}\cdot\bf{w}_{i}+b
要するに$\bf{w}_{i}$との内積取っていい感じにするためのバイアス$b$を足します。
更に学習を設計するときに決めた(活性化)関数$f_{i}$を$u_{i}$に適用してこのノードの出力$z_{i}$を決定します
z_{i}=f_{i}(u_{i})
yの決定
ここまででノードの計算方法がわかりました。
今回はノードが1層しかないので各$z_{i}$を正規化して最終出力$\bf{y}$を得ます。
そして各$y_{i}$の中で最も大きい$y_{i}$が$y_{\hat{d}}$であったとき推定する答えが$\hat{d}$となるわけです。
でこれが$\hat{d}=d$なら完璧!最高!
ふう、わかったぞ
DeepLearningの目的
ここまでで僕達が自由に決めることのできるパラメータが分かります。
それは各ノードの$\huge{\bf{w}}$ですね。(あとバイアス$b$)
ということは学習の目的は、この$\huge{\bf{w}}$を決定することです。
これでこの記事の結論がでました。
ということは学習の目的は、$\huge{各ノードの\bf{w}を決定すること}$。
おまけ
今回は1層だけなのでDeepLearningではないのでちゃんとDeepLearningな図
で、どうやって学習するかって?
勉強中…