kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Scratch で機械学習を楽しめちゃう!「Scratch ではじめる機械学習」を読んだ

最近「Scratch ではじめる機械学習」を読んで,とても楽しめたので紹介したいと思う.本書は Scratch を使って「機械学習で実現できること」を実際に体験できる.そして「機械学習」をあまり意識せずに読むことができるので(特に前半),例えば「子供と一緒に楽しみながら読む」こともできる!読み方はいろいろ!

目次

目次を見ると難しく感じるけど,実際には Scratch を使って「体験ベース」で楽しめる.キャプチャも多く,文章量も少ないため,サクサク読める.正誤表や Scratch ファイル(.sb3 ファイル)も公開されている.

  • 序章 : 10分で体験できる機械学習
  • 1章 : [画像認識編] ジャンケンゲームを作ろう
  • 2章 : [音声認識編] 声を聞き分けるデジタルペットを作ろう
  • 3章 : [姿勢推定編] 体を使った楽器プログラムを作ろう
  • 4章 : [知識編] 機械学習について学ぼう
  • 5章 : [上級編] 遺伝的アルゴリズムでネコの動きを進化させよう
  • 付録 : その他の拡張機能を使った機械学習

www.oreilly.co.jp

カスタマイズされた Scratch

本書を読む前に「どうやって Scratch で機械学習を実現するんだろう?」と思ったけど,本書を読んでいたら「カスタマイズされた Scratch」を使っていた.以下の URL でアクセスすることができて,実際に「拡張機能」を見ると,見たことがない拡張機能が多くある.

stretch3.github.io

本書の「序章」には「画像認識」のサンプルがあり,簡単に機械学習を体験できるようになっている.具体的には「ImageClassifier2Scratch」「翻訳」を使って「物体認識をして日本語に翻訳」することができる.以下はサンプルとして「マグカップ」を試してみた.僕です...😇

f:id:kakku22:20210614211002p:plain

画像認識 : ジャンケンゲーム

1章「[画像認識編] ジャンケンゲームを作ろう」では,画像認識を使ったより実践的なサンプルとして「ジャンケンゲーム」を作る.最初に「ラベル(グー/チョキ/パー)」を認識するモデルを構築するところから試す.今回は「計60回」も撮影をして,結果的にうまく識別できるようになった.以下は「ラベル2(チョキ)」を認識できているところ.なお,少ない枚数で識別できるのは「転移学習」を使っている!からという解説も載っていた.

f:id:kakku22:20210614211038p:plain

姿勢推定 : 体を使った楽器

3章「[姿勢推定編] 体を使った楽器プログラムを作ろう」では,ポーズ(姿勢)推定ができる PoseNet と Scratch を組み合わせたサンプルを試せる.「目」「鼻」の場所を特定できるので,Scratch のスプライトと組み合わせるとメガネを付けられる!わいわい!もしかしたら「黒い布の Scratch スプライト」さえあれば五条悟(呪術廻戦)になれるのでは?(なれない🤞)本書ではこの後に PoseNet を使って「体の動きの検知」をして「右腕を横に伸ばしたら音を鳴らす」という楽器を実装する.

f:id:kakku22:20210614211029p:plain

単純パーセプトロン

本書を楽しむことにフォーカスして読むなら「3章」までで良いと思う.「4章」以降は難易度が高くなっていく.なお「4章」では「単純パーセプトロン」の概要を学ぶことができる.とても面白かったため,以下の記事で紹介した.合わせて読んでもらえると!

kakakakakku.hatenablog.com

遺伝的アルゴリズムを使って障害物をよけるネコ

最後に5章「[上級編] 遺伝的アルゴリズムでネコの動きを進化させよう」では「遺伝的アルゴリズム」を Scratch で実装していく.難易度はとても高くなる.テーマは「遺伝的アルゴリズムを使って障害物をよけるネコ」でとてもよく考えられて実装されているし,アルゴリズムの基本的な思想も理解できるようになった.もし試す場合は以下に公開されている.結構時間がかかるため Scratch の「ターボモード(Shift を押しながら緑色の旗をクリックする)」を使った方が良いと思う.

具体的にはネコの移動方向を「上 (U) 下 (D) 左 (L) 右 (R)」として,以下のように遺伝子を定義する(実際にはもっと長い).

DDDULDRDLURU

そして遺伝子と遺伝子を交叉(二点交叉)して世代を増やしたり,突然変異を作ったり,自然淘汰が行われたり,本当に Scratch で「遺伝的アルゴリズム」を楽しんで学べるようになっている.以下の例はデフォルト設定のまま「105 世代」まで増やしたところ.

f:id:kakku22:20210614194256p:plain

またデフォルト 3% に設定されている変数「突然変異が起こる確率 (%)」0% にすると,世代を増やすほどに優秀になっていく.以下は「155 世代」まで増やしたところ.現実的ではないかもしれないけど,実際に設定を変更しながら試すこともできる.

f:id:kakku22:20210614194806p:plain

Scratch プロジェクト自体も大規模に実装されているけど,本書にも重要な部分は解説が載っているため,理解を深めることができる.特に「ブロック定義」が重要なので1個1個調べていくと良さそう.

  • xy を交叉させる
  • 遺伝子を作る
  • 次世代の遺伝子を作る
  • 自然淘汰
  • 突然変異
  • etc

f:id:kakku22:20210614202949p:plain

まとめ

最近「Scratch ではじめる機械学習」を読んだ.本書は Scratch を使って「機械学習で実現できること」を実際に体験できる.とても楽しめた!「音声認識」など今回紹介しなかった Scratch プロジェクトもあるため,興味があれば本書を読んでみると良いのではないでしょうか!