機械学習(ニューラルネット)をScratch 3.0で実装した[Advent Calendar合同企画]
こんにちは、K研究員です。今回はAdvent Calendarの企画です。Advent Calendarはこちら。
以前から、機械学習をプログラミング教育として子供たちに教えられないかなと思っていました。じゃあ機械学習の何の手法がいいだろうと考えた時に、線形判別分析ですら大学レベルの数学が必要で難しいなと。そうすると一番簡単なのはニューラルネットワークのデルタ学習かなと思ってトライしてみました。
作ったプログラムはこちらです。
結構簡単ですね。デルタ学習は、ニューロンの理想の出力と現在の出力の差に入力値を掛け算することで、重みの差分を計算します。
参考文献(文字化けしてるけど読めるはず)
今回はデータとして、数学のテストと英語のテストの点数から合格不合格を予測する問題として定義してみました。dataという名前のリストが数学の点数、data1と書いてあるリストが英語の点数、answerというリストが1なら合格、0なら不合格です。合計点が100を超えると合格というイメージでテストデータを作りました。実際学習を回すと、それっぽい結果が出ます。deltaもだんだん小さくなって学習が収束している様子が分かります。
本当に学習しているか見るために、データをちょっと変えて、不合格の場合の英語の点数を上げてみます。つまり英語はあんまり合格に関係なくなりました。そうすると
実際英語の重み(w2)は小さくなりましたね。
ニューロンとシナプスについて座学で学習してマカロックとピッツのモデルから作って、デルタ学習をしていろいろ応用してみるみたいな機械学習の講義ができそうな気がしてきました。
読んでいただきまして、ありがとうございます。
無料のプログラミングクラブCoderDojoを運営するにあたり寄付を受け付けています。お金は会場費・Wifiの費用・教科書に使用します。