機械学習の理論を理解しようと エクセルでニュートラルネットワークを作ってみた 〜画像認識 mnist 編〜

シリーズ目次

いろいろチャレンジしてみたが、成果が上がらないので、機械学習の理論を理解しようと思う

エクセルでニュートラルネットワークを作ってみた

はじめにソースコードをダウンロードします。
ソースはここにおいておきます。
$ git clone https://github.com/sasaco/excel_deeplearning.git

フォルダ構成

今回作成した エクセルファイル(mnist.xlsm) と 10種類のフォルダに分けた学習用のビットマップ画像(*.bmp)をたくさん用意しました

image.png

操作方法

モードは2つあります

  1. 学習をするモード
  2. 学習したニュートラルネットワークを試すモード

image.png

1. 学習をするモード の操作方法

上図 1 ~ 10 で指定したフォルダ内の 28 × 28 ピクセルの画像に対して学習を行います

学習 とは 下図の赤字の数値を更新することを意味しています。

image.png

重みリセットボタン をクリックすると 初期化します。

学習開始ボタン をクリックすると 上図 1 ~ 10 で指定したフォルダ内のすべての画像ファイルについて学習開始します

2. 学習したニュートラルネットワークを試すモード の操作方法

判定ボタン をクリックすると 判定したい画像ファイルを選択するウィンドウが表示されます

image.png

それまでに 学習したニュートラルネットワークによって 上図 1 ~ 10 から予測を示します。

image.png

ニュートラルネットワークのしくみ

入力層

入力は 28×28ピクセルのビットマップの各ピクセルの青色の強度を入力層にします

image.png

中間層

中間層は 32ノード × 3層 にします

下図の赤字は、重み係数で、前層の出力数分あります。

1つのノードの出力は ∑(前の層のすべての出力 × 重み係数) で出た数値(-0.762132364) を 1/(1 + e^-x) とした

image.png

出力

出力層は 1 ~ 10 で それぞれの出力が 学習した 1 ~ 10 の可能性を示している
下図の場合、7番目が 0.977058131 で最大となっているので、このニュートラルネットワークスは
入力に対して、7番目が一番可能性があると判断している

image.png

学習方法

今ある入力に対してこのニュートラルネットワークスは 7番目が一番可能性があると判断しているが
実際は 4番目が 1 それ以外 が 0 が正解です

image.png

出力層の出力 - 正解 を誤差 e として この誤差分 赤字の重み係数を更新します。

image.png

更新の方法は この本


ざっくり説明すると、後層の誤差を 重みの比率によって今の数値に加算する

注意

これ...素人が機械学習の理論を理解しようと作成したものなので
合っているかどうかわかりません

人工知能の本はどれも同じアプローチで

概念を説明する

python ,chainer あたりで mnist のサンプルを実行する

分かった気になる

こっから抜け出せないのです
それではと、エクセルで再現しようとしています。

ノってくれる人募集です

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.