Neural Network Consoleで遊んでみる～その1～

#はじめに
この記事は『Deep Learning初心者，プログラミング初心者だけどDeep Learningしてみたいな～でもやり方わからないしな～』といった人向けであります．

#動機
簡単にDeep Learningしたい．
C++とかPythonとかverilogとか，
ソフトウェアでもハードウェアでも実装してみましたけど，
設計からコーディングまで工程数が多いこと．．．

それが！なんと！！GUIでできる！！！とのこと．
SONYから提供されているNeural Network Console(NNC)！
これはやるしかない．やりましょう．
※2017年12月18日投稿時の話です．

#この記事の目的
NNCで(ある程度)任意のネットワークでMNISTデータセットの線形分類をできるようになる．
～その1～：インストール，とりあえず実行
[～その2～](https://qiita.com/szk1akhr/items/846943e32f3fa73439f7)：改造に挑戦

※MNISTデータセット：グレースケール手書き数字画像のデータセット．
　1つの画像の大きさは縦横28*28ピクセル．
　クラス数は10で学習用60000枚，テスト用10000枚(クラス毎に枚数は異なる)．
　クラス分類タスクの評価指標によく使われる．

#扱うNeural Network
～その1～：Multi-Lyaer Perceptron(MLP)
[～その2～](https://qiita.com/szk1akhr/items/846943e32f3fa73439f7)：Convolutional Neural Network(CNN)

#まずはNNCのインストール
今回はwindowsアプリ版を使います．
まずは[公式HP](https://dl.sony.com/ja/app/)にアクセス．
ここからインストール完了までの手順は3つ．
 1.メールを送ってインストーラの入手
 2.ダウンロード
 3.解凍するだけ
悔しいことに簡単です．
※.zipで993MB，解凍して2.34GBとまぁまぁ重いのでインストールする場所を選びましょう．

##環境
自分の環境は次の通りです．
OS：Windows 10 Education 64bit
CPU：Intel Core i7-4771
メモリ：8GB
GPU：なし

#既存のNN(MLP)でやってみる
とりあえず，定番中の定番『MNISTをMLPで分類』をやってみます．
と，その前にセットアップですね．
##セットアップ(スクショ取り忘れました)
neural_network_console.exeを初めて開くとSetupウィンドウが表示されます．
GPUも積んでいないので，とりあえず規約を読んでapplyしてみる．
<img src = "https://qiita-image-store.s3.amazonaws.com/0/165289/25ef7ddd-928b-48b5-531a-9f286b1972ed.png" width = 100%>

動きました．
※『Visual Studio 再頒布パッケージ2015がない』と言われた方は[こちら](https://www.microsoft.com/ja-jp/download/details.aspx?id=48145)から入手，インストールしてください．

##そもそもMLPとは？
Multi Layer Perceprtonの略です．
perceprton(パーセプトロン，神経細胞)があるlayer(層)をmulti(複数)並べたものです．
そのまんまですね．
こんな感じです．bは趣味で書いたので気にしないでください．
<img src = "https://qiita-image-store.s3.amazonaws.com/0/165289/24885653-4da6-7719-f00e-fadbe48890a5.png" width = 50%>

(入力データ，ラベル)←このセットで覚えさせます．
教師あり学習といいます．
理論について詳しくはまたいずれ..．
深層学習に使われる多くのニューラルネットワークの”基本形”ですね．

##動かします
HOME->PROJECT->10_deep_mlp.sdcprojと移動します．
※この時点でMNISTデータセットのインストールを求められます．気持ちよく引き受けましょう．
![NNCdeep_mlp.png](https://qiita-image-store.s3.amazonaws.com/0/165289/bc81d05a-a82d-46f8-5dce-5acf28a6123b.png)

学習させてみます．
この再生ボタンをポチるだけ．
![NNCdeep_mlp_result.png](https://qiita-image-store.s3.amazonaws.com/0/165289/1118e7a0-d52a-4bf5-63ec-f44a2cb5983e.png)

するとグラフがぬるぬると描かれます．
これは楽ちん．
赤い実線が学習できているかを表します．点線は汎化能力を試すためのものです．
ここでは過学習という現象が起きていますが，本題とは関係ないのでスルーしましょう．

評価もしてみましょう．
この再生ボタンをポチるだけ．
![NNCdeep_mlp_evaluate.png](https://qiita-image-store.s3.amazonaws.com/0/165289/cd642fdf-f739-2589-bd11-6bd58b9af5ca.png)

『4』と『9』...そうですか．
いや，この画面，なんぞや．

ここで，学習させたデータセットについてみてみましょう．
水色の丸のDATASETに移動します．
![NNCdeep_mlp_dataset.png](https://qiita-image-store.s3.amazonaws.com/0/165289/196efbd1-2900-fac0-55eb-2ab82de0686d.png)

前述の通り，MLPは(入力データ，ラベル)のセットで学習させます．
ここでは(4or9の画像，0or1)になっています．紺色の枠と赤の枠ですね．
さて，ラベルですが，黄色の丸の縦ライン示す通り，
 yが9じゃない(4)ならラベル0
 yが9ならラベル1
ですね．

※0から9まで全部学習させているのかと思いきや，4と9の2つだけでした．ご愛敬．

さて，これを踏まえて先ほどの評価結果を見てみましょう．
![NNCdeep_mlp_evaluate_detail.png](https://qiita-image-store.s3.amazonaws.com/0/165289/b49b4125-2eb0-5631-49ce-fb833cda57b5.png)

実は『y'』が出力値なんですけど(先に言えよ) 
index1の結果は『4の画像を入力したら0.00117776328698っていう値が出たからほぼ0だし分類的にはラベル0だと思います』ということですね．
一方で，
index3の結果は『9の画像を入力したら0.988236129284っていう値が出たからほぼ1だし分類的にはラベル1だと思います』ということですね．

ラベル0は4，ラベル1は9，と学習させたので...
えぇ，見事に分類できてますね．
とても簡単にDeepLearningできちゃいましたね．

さ！次は改造してみましょう．