無限不可能性ドライブ

『ニューラルネットワーク自作入門』に刺激されてExcelVBAでニューラルネットワークを作ってみたものの、やっぱり数学やらなきゃと思い少しずつやってきたのもあって、自分の知識の整理とかそういった感じです。

【VBA編】設計

前回まででデータの読み込み処理の作成が完了しました。
今回からは実際にニューラルネットワークを作るフェーズに移っていきます。
その前に、どのように実装するかを簡単に見ていきましょう。

以前の記事もあわせて参考にしてください。
celaeno42.hatenablog.com

作成するニューラルネットワークのイメージ

f:id:celaeno42:20181201115558p:plain

今回作成するニューラルネットワークは、入力層1層、隠れ層2層、出力層1層からなり、それぞれを「classInputLayer(入力層クラス)」「classHiddenLayer(隠れ層クラス)」「classOutputLayer(出力層クラス)」(のインスタンス)として実装します。

入力層では「がくの長さ」「がくの幅」「花弁の長さ」「花弁の幅」の4つの入力を受け取る必要があるため、「classInputUnit(入力ユニットクラス)」を4つ定義します。

隠れ層1層めと2層めのユニット数は任意ですが、ここではそれぞれ3つと4つにしており、それぞれを「classUnit(ユニットクラス)」で定義します。

出力層では「Iris-setosa」「Iris-versicolor」「Iris-virginica」の3種類に分類するので、ユニットを3つ、「classUnit(ユニットクラス)」で定義しています。

入力層のユニットと隠れ層、出力層のユニットの実装クラスが異なるのは、入力層では入力値をそのまま次の層(隠れ層)に渡すだけで、特に演算等が不要なためです。

また、全体を通しての制御などは標準モジュールに「mdlSupervisor」モジュールを作成して行います。
他に、活性化関数の演算などは標準モジュールに「ML」モジュール(マシンラーニング用モジュール)を作成して行います。

では、必要な準備を整えておきましょう。

モジュールとシートの追加

上記であげた標準モジュール、クラスモジュールを追加しましょう。
今回追加するモジュールは以下の通りです。

【標準モジュール】

オブジェクト名 用途
mdlSupervisor 全体の制御に使用
ML マシンラーニングの演算に使用


【クラスモジュール】

オブジェクト名 用途など
classInputLayer 入力層の管理に使用
classHiddenLayer 隠れ層の管理に使用
classOutputLayer 出力層の管理に使用
classInputUnit 入力用ユニット
classUnit 隠れ層、出力層用ユニット


また、今後必要となるシートもあわせて追加しておきましょう。
シートはオブジェクト名も変えておくのを忘れないでください。
今回追加するシートは以下の通りです。

オブジェクト名 シート名 用途
ws_Test_Result テスト結果 テスト結果の出力に使用
ws_Train_Result 訓練結果 訓練結果の出力に使用
ws_W_H1 w_h1 隠れ層1層めの重みの出力に使用
ws_W_H2 w_h2 隠れ層2層めの重みの出力に使用
ws_W_Out w_out 出力層の重みの出力に使用
ws_WI_H1 wi_h1 隠れ層1層めの重みの初期値の出力に使用
ws_WI_H2 wi_h2 隠れ層2層めの重みの初期値の出力に使用
ws_WI_Out wi_out 出力層の重みの初期値の出力に使用


すべて追加するとこのようになります。
f:id:celaeno42:20181205214831p:plain

いよいよ次回からはニューラルネットワークのコードを書いていきます。


f:id:celaeno42:20181212233850p:plain