Scratchでライブラリ等全く使わずにニューラルネットワークを開発する記録
スクラップの正しい使い方などが分かりませんが、記録程度にまとめていきます。
詳しいことはこちらに書いています。⬇️
Qiitaにも簡単にまとめてみました⬇️
拡張機能、ライブラリ等を一切使わずにニューラルネットワークを作り上げる。
ScratchにはそもそもライブラリなどがないのでNumPyなどの計算ライブラリなど全く使わずにニューラルネットワークを作ります。
ScratchのAI拡張機能も使っていません。(PENのみ使用)
PENはScratch2.0までは標準搭載だったのに3.0になってから拡張機能になりました。完全に拡張機能使っていないとは言い切れないので残念。
AIなどの拡張機能は全く使っていないため、今後拡張機能は使っていないと表現します。
実際の作品⬇️
必要なもの
・行列演算(NumPy再現)
・ソフトマックス関数
・シグモイド関数
・MNISTデータをScratchのリストに読み込ませる(重み、バイアス、テストデータ)
現段階でのニューラルネットワークの性能
・入力層が784個
・1つ目の隠れ層が50個
・2つ目の層が100個
・出力層が10個
まだ推論のみ。学習はできないので微分とかを使って実装したい。現段階での自分のレベルで実現可能な方法は、重み、バイアスの値を遺伝的アルゴリズムで求める方法。
遺伝的アルゴリズムだと比較的簡単に実装できる。微分をScratchでどうやってやるかが課題。
遺伝的アルゴリズムでどうやって実装するか。
・重み、バイアスの値をランダム生成
・一番成績の良かった個体を交叉させるなどしていいパラメーターを探すのみ
今後の課題
・Scratchで微分などをどう実装するか
・そもそも微分などの数学を勉強しなくてはいけない。
・純正のScratchだと処理速度が遅い→TWでJSにコンパイルしてもいいが、それでも重くなりそう
・重み、バイアスデータをどうやって保存するか→Scratchはリストの数が200,000個の制限がある
→リスト1項目に対しては制限がないのでどうにかして詰め込む?
現段階での課題
・テストデータが100個しかない(リストサイズ制限)
・推論しかできない(学習できない)
・コードが汚い
・文字が書きにくい(広範囲でドットいじれない)