【DeepLearning】Excel VBAでニューラルネットワークを再現|Irisデータセット分類問題

このぺージでは機械学習の代表的なデータセットである「Irisデータセット」を使って、ディープラニングを行なっていきます。
(ディープラーニングの狭義としてニューラルネットワーク内のレイヤ(層)が4つ以上という場合もありますが、ここでは広い意味でとらえ4層以下の場合でもディープラーニングとしています)

本来、今回やる「Iris分類問題」はわざわざディープラーニングを行うほど難しい問題ではありませんが、あえてこの簡単な問題を扱うことでディープラーニングについて簡単に理解することができます。

ただ、簡単とはいってもディープラーニングの仕組みは初学者の人にとっては複雑です。
下記ページでニューラルネットワークの流れについて理解しておいた方が、本ページの内容をより理解できるので先に一読しておくことをオススメします。

Excel関数で学ぶニューラルネットワーク(順伝播編)
Excel関数で学ぶニューラルネットワーク(逆伝播編)

 

完成イメージ

本ページの内容をすべて行うことで以下gif画像のように、
ガクの長さ(sepal_length)、ガクの幅(sepal_width)、花弁の長さ(Petal_length) 、花弁の幅(petal_width)の4つの値からアヤメ(Iris)の種類を分類することが可能になります。

分類するアヤメの種類は『Setosa』『Versicolor』『Virginica』の3種です。

Irisデータセットを使った分類問題は機械学習の基礎問題です。
そのため、ディープラーニング以外にも「k最近傍法」「ロジスティック回帰」「サポートベクターマシン(SVC)」「ランダムフォレスト」などの様々の手法での機械学習を行うことができます。興味のある方はぜひ例に挙げたようなアルゴリズムについても調べてみて下さい。

 

ニューラルネットワークの構造

まずは今回作成していくニューラルネットワークの構造を記しておきます。

入力層: 1層 (ニューロン 4個)
隠れ層: 1層 (ニューロン 3個)
出力層: 1層 (ニューロン 3個)

隠れ層の活性化関数: ReLU (Sigmoidも実装)
出力層の活性化関数: Softmax
損失関数: 交差エントロピー
学習データ: Irisデータセット

正解ラベルは「one-hot表現」とし、VBAの配列使って表していきます。
正解が「1(Setosa)」の場合は「t(1,0,0)」
正解が「2(Versicolor)」の場合は「t(0,1,0)」
正解が「3(Virginica)」の場合は「t(0,0,1)」となっています。

 

ニューラルネットワーク作成編

ここからExcel VBAで実際にニューラルネットワークを作成していきます。Pythonの「Numpy」や「Class」の代わりにVBAでは「(1次元)配列」「2次元配列」「クラスモジュール」を多用します。ニューラルネットワークの内容だけでも複雑なので、それぞれの使い方をある程度理解してから進めることをオススメます。

1. Irisデータセットのダウンロード
2. Irisデータの前処理
3. Functionsモジュールの実装
4. Affineレイヤの実装
5. ReLUレイヤの実装
6. Sigmoidレイヤの実装
7. Softmax-with-Lossレイヤの実装
8. TwoLayerNetクラスの実装
9. メインモジュールの実装   (ニューラルネットワークの学習機能の実装)
10. Irisデータセットを学習させてみよう

 

ディープラーニング実行編

上記の項までではニューラルネットワークとIrisデータセットの学習を行いました。
ここでは学習済みのニューラルネットワークを使い、実際に任意の4つの数字(ガクの長さ / ガクの幅 / 花弁の長さ / 花弁の幅)が入力された際に、その入力値が正解が「Setosa」「Versicolor」「Virginica」の3種のうちどれに該当するのかを分類させます。(入力した4つの値が見当違いのものでも、必ず3種類のうちの中で最も確率の高い1つが導き出されます)

Iris分類問題でやっていること自体は「4つのの数字を入力し、3つの答えのいずれかを導き出す」ということだけです。ニューラルネットワークの仕組みさえ理解できればその他のデータセットを使用するとしても同じ考えで作ることができます。

11. 入力された値からIrisの種類を分類してみよう

全コードまとめ

 

参考書籍

2021年6月13日AI, Deep Learning, Excel, VBA

Posted by Lic