2016/03/26

[DL][cntk]NDLを書いてみよう (2)

Open Live Writerでソースコードを載せられるプラグインがあったので、使ってみよう。
あ、これってWordPress用だ。。。
Tableと組み合わせれば、まあまあいいかな。

 

・・・OpenLiveWriterではほどほどに見えていたのですが、アップしたら化け化けだったので消しました。


さて、このNDLとネットワーク図を見比べよう。

最初のInputであるfeaturesは、SDimになっている。
サンプルの行列はSDim行1列とあるから、こういうやつか。

image

ラベルは、label0かlabel1と書いてある。
じゃあ2次元やん、と思うけど、binary classficationで、p(y=0) = 1 – p(y=1)とも書いてある。
YESかYESではないか、ということで1次元というサンプルの意味になっているのかな?

ちなみに、このチュートリアルのトレーニングデータと、Simple2dのトレーニングデータは同じ並びで、3列のデータのうち、最初の2列がサンプルで、最後の1列がラベルになっている。
そして、ラベルはどちらも0か1だ。

だから、Simple2dも1次元でやることができるのだろうと思う。
データの認識の仕方が違うだけと言うことか。


これでデータの準備ができたようだ。

チュートリアルでは、ロジスティック回帰の評価式をこう定義している。

y = W_0 + W_1 x_1 + W_2 x_2 + ...

なんですっけ、マクローリン展開じゃないけど、ああいう感じがしますな。
ともかく、W_0がバイアスで「B」、W_1以降が重みで「W」と表現する、と。
それが、この部分。

B = Parameter(LDim, 1)
W = Parameter(LDim, SDim)

ナゼコウナッタ…

この辺りが、Logistic Regression(LR)として説明されているのだろうか。
英語だけわからないのであれば読んでみようと思うが、きっと確率論がわかっていないと理解できないんだ!と思い込んでしまったので、読む気にならない。。

ただ、そこに描かれているlogistic functionは、『深層学習』p.10の式と同じだ。
そういった共通の知識の下(たぶん確率論)で通じる話題なのだろう。

だから、今回は深読みせず、スルーだ。
これで決まったパラメータが、ようやくネットワークに出てくる。

t = Times(W, features)
z = Plus(t, B)

image

このTimesはパラメータW_1~の積和で、PlusはバイアスW_0を足すところですね。
この積和が、専用演算を持ってると1命令で計算できたりするので高速化できたのだったと思う。
積和というと、行列で物体を回転させたりとか平行移動するようなアフィン変換でも使われるので、ゲームとかの画像処理ではよく使うため、GPUでその辺りが強化されている・・・という流れで、深層学習でもGPUを使うものが多いんじゃなかろうか。


ネットワークの最後が、こう。

s = Sigmoid(z)

LR = Logistic(labels, s)
EP = SquareError(labels, s)

image

バイアスまで足した結果のzをシグモイド関数に突っ込んで、それがEPとLRのInputになっている。
EPとLRのInputはもう1つあって、それがlabelだ。
labelがInputになるということは、答え合わせだろう。

まずは、EP。
これは何の略だろう?
SquareErrorで検索すると、二乗誤差、とあった。
二乗誤差で検索すると、平均する結果が多く出てきた。
RMS、と略するらしい。

うーん・・・
labelは、(x1, x2)が1か0かという「正解」で、sはシグモイド関数の結果だから0.0~1.0の値だ。
ということは、シグモイド関数に通した結果が、0.0に近いのか1.0に近いのかという、分類分けの確率を想像した結果という意味になる。

えー、だって、掛けて足しただけやん!
それをシグモイド関数に通しただけで学習結果が得られるの??

もし結果が全部正解なら、誤差は0だから、二乗誤差も0になる。
そうでなくても、確率が高い方に寄っているなら、二乗誤差も小さいことになる。

 

じゃあ、LRはなんだ?
これはLogistic Regressionの略だろうけど、ロジスティック関数に通すのだろうか。
しかしそれならば、Inputは1つでいいはずだ。
うーーーん・・・

 

最終結果は、これのようだ。

Final Results: Minibatch[1-1]:
  Samples Seen = 603
  EP: SquareError/Sample = 0.032142105
  LR: Logistic/Sample = 0.22066998

EPは、まあわかる。1サンプル辺りの二乗誤差だ。RMSだ。
LRも「/Sample」だから1サンプル辺りなのだろうけど、よくわかりませんな。

次回だ、次回。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。