kakakakakku blog

Weekly Tech Blog : Keep on Learning 👍

「単純パーセプトロン」を使った分類(フルーツのグループ分け)を体験できる Scratch プロジェクト

最近「Scratch ではじめる機械学習」を読んでいる.Scratch を使って「機械学習」を体験することができて,非常に楽しめている.書評記事はまた別に書く予定!本書の中で「第4章 : 機械学習について学ぼう」を読んでいたら「単純パーセプトロン」を使った分類(フルーツのグループ分け)を体験できる Scratch プロジェクトが紹介されていた.実際に試すことができるので紹介する!

フルーツのグループ分け(単純パーセプトロン) on Scratch

さっそく試す🍎🍌

緑色の旗🚩を押すとランダムに「10個」のリンゴ🍎が配置される.その中から自由にリンゴを1個選んでクリックするとバナナ🍌になり,そこから学習をする.最適な境界線を導き出すまで繰り返し学習をするので,その過程を見るのも面白い.最初は分類しやすい場所のリンゴを選ぶと良いと思う.最終的には境界線が収束する.他にもリンゴを選んでクリックするとバナナになり,その状態からもう1度学習をする.

f:id:kakku22:20210613154309p:plain
右上のリンゴを1個バナナにしたところ

f:id:kakku22:20210613154331p:plain
さらに3個のリンゴをバナナにしたところ

そして次に好きな場所で「スペース」を押すと,重みを計算してリンゴ🍎かバナナ🍌が配置される.以下は試しに中央あたりに追加してみた.このように境界線によってうまく分類(フルーツのグループ分け)できていることを確認できる.

f:id:kakku22:20210613154451p:plain
中央あたりに追加したらバナナに分類されたところ

「単純パーセプトロン」とは

そもそも今回紹介した Scratch プロジェクトのテーマになっている「単純パーセプトロン」とは,深層学習(ディープラーニング)に必要となるニューラルネットワークの基礎になるモデルで「複数の入力と重み」から「単一の出力 (0 or 1)」を返す.以下のような数式で表現できる.


y =
\begin{cases}
1  & (w_1x_1 + w_2x_2 \cdots w_nx_n \geq \theta ) \\
0 & (w_1x_1 + w_2x_2 \cdots w_nx_n < \theta )
\end{cases}

とは言え,あくまで「直線(線形分離)」になるため,うまく分類できないこともある.Scratch の例だと,リンゴとリンゴに挟まれた場合など,場所によってはうまく境界線を導き出すことができず,ずっと学習をし続けてしまうこともある.「単純パーセプトロン」に関しては解説記事などを読んでもらえればと!

www.slideshare.net

実装を確認する

Scratch プロジェクトの実装も簡単に調べられる.詳細な実装解説は「Scratch ではじめる機械学習」には載っていないけど,座標を入力値として繰り返し重みを修正していくなど「ブロック定義(学習する)」の解説は載っている.実装を全体的に確認して理解できないところもあったけど,勉強になる.またそもそも Scratch の実装 Tips としても参考になる部分も多く,拡張機能「ブロック(ペンを上げる/ペンを下げる)」を使って線を引いたり,「ブロック定義」を使ってモジュール化をしたり.

f:id:kakku22:20210613154605p:plain

まとめ

最近「Scratch ではじめる機械学習」を読んでいる.本書で「単純パーセプトロン」を使った分類(フルーツのグループ分け)を体験できる Scratch プロジェクトが紹介されていて,面白かったので紹介した.次は本書の書評記事を書く予定!