Scratchでニューラルネットワークが作れちゃった!
より詳しくまとめた記事はこちら
はじめに
Scratch3.0で外部ライブラリ、独自拡張機能などを使わずにニューラルネットワークを作ってみました。
Pythonで最初にニューラルネットワークを作り、その後そのプログラムをもとにScratchでニューラルネットワークを作りました。
Python側で使った計算ライブラリはNumPyというものです。
ScratchにはもちろんNumPyなんてものはないので、NumPyのような計算プログラムを再現するところからニューラルネットワーク制作は始まりました。
制作期間
- 大体1~2週間?
Scratchで実装するのはそこまで難しくなくて、それよりもニューラルネットワークというものについて勉強しながらだったので、意外と時間がかかりました。Scratchで実装する部分で特に難しかった部分といえば、NumPyでやる行列演算ぐらいです。
簡単な自己紹介
簡単に自己紹介させていただきます。プログラミング勉強中、Scratchが一番得意、Web系のプログラマーになりたい高校生です。
最近勉強しすぎて頭がおかしくなっています。
今回の記事の詳しい内容はブログに載せています(プログラムの内容など)⬇️
ProtoPediaのヒーローズリーグ2021にも応募してみました⬇️
Qiita、書き方とか全体的に初心者すぎて何もわからないのですが、プログラミング界隈の方が多くみているのかなと思い、それなら自分がScratchで作ったニューラルネットワークが評価されるのではと思い、記事を書いてみました。
もしScratchでニューラルネットワークを作ろうとしている方はぜひ参考にしていただけると嬉しいです。
ニューラルネットワーク作ってみた
Scratchでニューラルネットワーク。独自拡張、ライブラリ、改造ブロックなど一切なし。
どうやって作ったのか
「ゼロから作るDeep Learning――Pythonで学ぶディープラーニングの理論と実装」という本を参考にしました。最初にPython、NumPyで作った後にNumPyをScratchで再現、そしてPythonのプログラムを再現しました。
性能
- 入力層の数:784個(28*28のピクセルデータの個数分)
- 中間層一つ目の数:50個
- 中間層二つ目の数:100個
- 出力層の数:10個(0~9の答えの個数分)
- 画像認識ができる(0~9のMNISTデータセットを90%以上の精度で認識)
- まだ学習機能は搭載していない
今後の使い道
- ScratchでもYouTubeにあるような機械学習ができる
- Scratchで作った作品に組み込める
- ゲームのAIとか
- ニューラルネットワークの仕組みの学習教材
- ディープラーニング制作
こだわったポイント
- 2*2以上?の行列演算ができるプログラム
- NumPyソースコードで行列作成ができる
- 多分ブロードキャストができる(忘れてしまった汗)
- 汎用性が高い
今後の課題
- 学習ができない
- ソースコードが汚い
- 画像認識以外のこともできるようにする
今後の課題の学習ができないについては、勾配降下法や遺伝的アルゴリズムを使って実装しようと思っています。個人的に実装が楽そうなのは遺伝的アルゴリズムなので、多分遺伝的アルゴリズムで実装すると思います。
まとめ
Scratchでもニューラルネットワークはライブラリ、独自拡張機能などなくても作れる。
作るのには数学の知識が必要になる。(微分、行列、シグマ等)遺伝的アルゴリズムを使えば学習機能を比較的簡単に実装できそう。
微分、スーパーウルトラグレートデリシャスワンダフルワカリヅレー!!!
ここまでよんでいただきありがとうございました。SNSシェアなどよろしくお願いします!