2016/03/06

[ai]『深層学習』の8章に挫折してCNTKを試す (7)

CNTKの2016/02/08版バイナリがリリースされていた。
https://github.com/Microsoft/CNTK/releases

とりあえずGPU版をダウンロードしておけば、あとは勝手に選択してくれるだろう、ということでWindows-64bit-GPU.zipを選んだ。
1bit-SGDはよくわからんので、やめておいた。高速になるとかじゃなかろうかね(てきとう)。


昨日試したグラフ出力だが、こちらでも同じ「??」だった。
残念。

ConfigもDataも同じものだが、ログを比較すると違いが多い。
たとえば、pass 1のログはこうなっていた。

[前]Validating for node CrossEntropyWithSoftmax. 20 nodes to process in pass 1.
[今]Validating network. 25 nodes to process in pass 1.

意味はわかってないけど、20と25と数字が変わってるから、何か変わったんだろう。
ただ、一番最後のErrorPrediction/Sampleは0.04145937と同じだったから、本質が変わったわけではないのだろう。


さて、次に私がやってわかりそうなことは何か・・・。
よくわからんグラフではあるが、これの元になるのはSimple.cntkしかないはず。
なので、Simple.cntkとグラフの対応をしていけば、何か見えてくるんじゃなかろうか。
第2回でも見たのだが、もう少し詳しく見ていこう。

 

ネットワークの具体的な形はこのファイルになさそうなので、SimpleNetworkBuilderが持ってるんじゃなかろうか。
「形」と私が思っているのは、何とか層、みたいなものの名前が処理する順番につながっているような何かだ。
予想では、SimpleNetworkBuilderが提供している「形」があって、そのパラメータだけがこのファイルに書かれている、なのだが。
たとえば、TutorialのPDFにある、こんな図があって、

image

「この変数は、図のこれと対応してます」みたいな説明を期待しているのだよ、私は。
せめて、GraphVizの出力も、こんな図の出方だったらわかったかもしれないのになぁ。

あ、でも一番下の

image

は、

image

と対応しているように見えないだろうか?
InputValueがMVNormalizedFeaturesノードに集まっているところが上の「X:Input」で、W0のLearnableParmeterが上の「W(1):Weight」だ。

その上の層の

image

は、

image

だ。「Times」「B」「Plus」などという名前も一致している。

そうやって対応づけていくと、こんな感じになるのかな。

image

理論的なところはわかっていないが、T→P→Sでワンセットのようだ。
SがOutputにならないところは、隠れ層(Hidden Layer)。

Simple.cntkのコメントには「2 input, 2 50-element hidden, 2 output」と書かれている。
「2 input」は、SimpleDataTrain.txtの(x, y)の2次元?
「2 output」は、ラベルの数だろうか。
hiddenも2つなのだけど、P→Sの(1)と(2)の2つなのか、(2)と(3)の2つなのか・・・PDFのOne Hidden Layerにならうなら、(1)と(2)がhiddenだ。

なので、Inputノードにウェイトを乗算するTimesノードと、Timesノードにバイアスを加算するPlusノード、Plusノードにシグモイド関数を当てはめて次のInputノードとなるSigmoidノード、これの繰り返しがSimpleNetworkBuilderでできるネットワークだと思う。

 

ここまで読んでて「シグモイドってなんだっけ?」となってしまった。
『深層学習』の2.2章にあるが、活性化関数・・・なのだけど、活性化関数ってのもよくわからないな。
掛けたり足したりを繰り返していくと値が発散するので、それを正規化しようとしているのだとは思う。
本に書かれている式でも、0~1.0とか、-1.0~+1.0とか、そういう範囲になっている。
ただ、最近はシグモイド関数に代わって正規化線形関数という、0以下は0、0以上はy=xという関数の話も書かれている。
まあ、細かいことは今後の課題だ。

SimpleNetworkBuilderで選択できる活性化関数は、

  • Sigmoid
  • Tanh
  • RectifiedLinear

の3種類。
Sigmoidが0~1.0の範囲で、Tanhは-1.0~+1.0、RectifiedLinearがさっきの正規化線形関数だ。

0 件のコメント:

コメントを投稿

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