ラベル Scratch の投稿を表示しています。 すべての投稿を表示
ラベル Scratch の投稿を表示しています。 すべての投稿を表示

2021年12月19日日曜日

画像の深層学習はどのような領域に着目しているのか

【what is this】ディープラーニングを用いた画像認識は、小学生による体験から実用レベルまで、利用が広がっています。そうなってくると、次の段階は、「どうやって認識しているのか」が気になるはずです。それに答えるのは簡単ではありませんが、少なくとも「画像のどこに着目して認識しているか」を示してくれれば、かなり良いです。簡単な原理でそれを実現する(子供向けの)Scratchプロジェクトがありました。大人でも試してみると楽しい!

■ 認識対象の例とTeachable Machineによる深層学習 
 画像認識の対象として、図1に示した4種の木製の小さな置物を取り上げます。それぞれを300枚程度、Webカメラの位置を変えたり、傾けたりしながら撮影します。それらにラベルをつけて学習させることは容易です。例えば、Google Teachable Machineを利用すれば誰にでもできます。
 その学習結果のモデルに対して、別途撮影した画像を入力した場合、それが4種類のどれであるかは、どの置物でも、99%程度の確かさ(conf = cofidence)で判別できます。

■ 深層学習では画像のどの領域に着目しているか 
 こんなに高いconfidenceで認識されても...  深層学習は画像のどの部分に注目して判断しているのでしょうか?それを調べるための簡単な原理が、Scratch3のプロジェクト「Explainable AI」に示されています。これは、子供向けのAIを開発しているML4K (Machine Learning for Kids) が公開しているものです。

 さっそく試してみましょう。図2(a)はAppleですが、適当なサイズの(紫色の)ブロックで、適当な領域を隠して撮影しています。「へた」の部分を隠した画像に対しての認識では、confidenceはほとんど変わらず99.5%でした。ところが、「中央」を隠した場合は、confidenceが50.1%まで大幅に低下しました。この観察から、「へた」よりも「中央の膨らみ」の方が、より重視されていると推定されます。


 図2(b) は、Salmonですが、「口先」よりも、「エラと腹部」が重要のようです。


 図2(c) は、Bearですが、「尻」よりも、「頭部」が重視されていることが分かります。これは、人間の感性からも納得できます。

■ 注目領域を自動的に検出して表示する 
 ここまでは、画像を隠す小さなブロックの位置を適当に手動で移動させながら調べました。それをもっと組織的にやってみましょう。そのやり方もこの「Explainable AI」に示されていますが、基本的には、手動で調べたのと同じ原理です。

 画像をメッシュにして、その各ブロック部をひとつづつ隠して行き、confidenceの低下を調べます。低下の度合いが大きい(すなわち、重要であった)部分ほど明るくすればよいのです。図3は、Bearの場合ですが、手動で調べた図2(c) のとおり、「目と耳の領域」を最も重視して認識していることが分かりました。こんな簡単な方法なのに素晴らしい!

■子供向けのScratchプロジェクトだが、学生などにも有用 
 上に述べたとおり、この方法は図4のScratchプロジェクトで実現されています。主に子供を対象としたものですが、かなり高度な内容と言えそうです。実際、図3を眺めていると、自然言語処理などでも注目されているアテンション(Attention)に通ずるように思います。

 この「Explainable AI」では、TensorFlowをラップして使いやすくしたTeachable Machineの学習結果を取り込みます。そして、それを使った予測(prediction)のための基本的なブロックが用意されていますので、図3のような解析と表示が簡単にできるようになっています。学生や大人にも十分有用だと思います。


2021年8月7日土曜日

Scratchプログラミングで強化学習の基礎(3)

【what is this】前回の「Scratchで強化学習(2)」の続編です。伊藤真著[1]にある、レベル3の例題を検討します。前回のレベル2では、開始状態から最終状態までの「エピソード」を扱いましたが、今回の例題は最終状態の無いゲームでの得点(報酬)を競うものです。予測報酬(=行動価値Q)の計算において、「割引率」を導入するのがひとつのポイントです。

■ レベル3例題:お化けの飛行訓練ゲーム
 このレベル3例題は、図1に示すように、4つのボタンのいずれかを押す毎に、報酬表にある報酬(-3から3までの整数値)が得られます。負数の場合は左へ、正数の場合は右へその絶対値を歩数として進みます。100回のボタン押下において、できるだけ多くの総報酬(右方向の遠くの位置)を得ようとするものです。

 ボタンnを押すという行動により現在の状態が状態nへ推移します。例えば、現在の状態(from)が状態1の時にボタン2を押すと、次の状態(to)としての状態2へ推移します。その際、報酬表(状態1, 状態2)の値(すなわち1)を報酬として得ます。報酬表の対角要素はすべて-1としてありますので、同じボタンを連続して押した場合は、いつも-1の報酬を得ます。


 報酬表の値は、ゲーム毎に変わりますが、もちろん、それらの値はプレイヤー(人間と「強化学習」)には知らされていません。

■ 「強化学習」プレイヤーの戦略
 今回の強化学習の戦略は、基本はレベル2の場合の学習則と同じです。しかし、冒頭に述べたとおり、今回は最終状態がなく、いつまでもボタン操作が続きます。状態の推移が巡回する場合もあります。(実際には、ここでは100回で打ち切りますが。)このため、得られる報酬がどんどん増大してしまい、行動価値Q(状態、行動)を従来の学習則のままで更新しようとしても収束しない恐れがあります。

 そこで、Q(状態、行動)を更新する際に、右辺のQの値に割引率γ(0.9とか0.8程度の値)を掛けて行き、遠くの報酬を少しづつ小さくします。それによって収束が期待できます。この割引率γを変更することで、遠くで得られる報酬の見積もりを(少なめに)調整することになります。あるQ(状態、行動)は、その絶対値よりも、他の(状態、行動)と比較して価値が高いかどうかが重要なので、この割引率の導入は妥当と思われます。(割引率導入の学習則の詳細は、参考文献[1]をご覧下さい。)

■行動価値Q(状態, 行動)の計算を観察する
 上記の割引率付きの学習則によるQ(状態、行動)の計算結果を観察してみます。上に述べたとおおり、Q(状態、行動) = Q(from-状態、to-状態)とみなすことができます。報酬は、図1に示した報酬表のとおりだとします。

 ボタン操作を100回で打ち切りますが、学習則にはランダム性が含まれているため、Q(from-状態、to-状態)の値は、一意には決まらず、無数に存在します。そのうちの2例を、図2aと図2bに示します。




 図2aと図2bの棒グラフの高さはまちまちのように見えますが、両者には共通の明確な特徴があります。すなわち、以下のような巡回があります。
  • 状態1では、最大Qはボタン2の場合であり、状態2へ。
  • 次に、状態2では、最大Qはボタン4の場合であり、状態4へ。
  • さらに、状態4では、最大Qはボタン1の場合であり、状態1へ。
 結論が出ました!学習により、次のようなボタン押下が最適だ!
ボタン1→ボタン2→ボタン4→ボタン1→ . . . 

■ 感想
 これまで、書籍[1]にあるレベル1,レベル2,レベル3の例題を実際に動かしながら、自分なりの詳細観察を行ってきました。エピソード的な場合と非エピソード的な場合の両方で、Q(状態、行動)とはどんなものかを知る上で、非常に有用と感じました。
 本書は、初心者向けに分かりやすく、との方針に基づき、著者独自のやさしい用語も用いた丁寧な説明に徹しています。しかし、第7章「まとめ」では、今後、強化学習を専門書でさらに深く学ぶ場合に備えて、それらの用語と専門用語の対応についても説明があります。これだけ親切な著書はみたことがありません!ありがとうございました。
参考資料
[1] 伊藤 真:ScratchでAIを学ぼう- ゲームプログラミングで強化学習を体験、日経BP、2020年8月11日第1版

2021年8月2日月曜日

Scratchプログラミングで強化学習の基礎(2)

 【what is this】前回の「Scratchで強化学習」の続編です。伊藤真著[1]にある、レベル2の例題を検討します。前回のレベル1では、「行動、報酬」だけでしたが、今回は「状態、行動、報酬」を扱う本格的な強化学習の仕組みが入っています。そこにおいて、各状態での行動に対する予測報酬(=行動価値Q)の計算を観察します。
[->続編はこちら]

■ レベル2例題:月面でダイヤ集めゲーム
 このレベル2例題は、図1に示すように、状態1〜状態3、および最終状態を持ちます。状態1から開始して、左右のどちらかを選択して次の状態へ達します。さらにその状態からふたたび左右のどちらかを選んで最終状態に達します。そこまでを1つのエピソードと呼びます。エピソードのなかで左右を選ぶ毎に、ある確率(報酬確率)でダイヤが出ます。ダイヤが出ると報酬1を、出ないと報酬0を得ます。例えば、50回のエピソードで、できるだけダイヤをたくさん集めて報酬の総計を大きくせよ、という問題です。

 場所によって報酬確率は異なります。図1の中の赤字の数値がそれです。もちろん、それらの確率は、プレイヤーには知らされていません。最も運が良ければ、1エピソードで得られる報酬は最大で2となります。


■ 「強化学習」プレイヤーの戦略
 今回の強化学習の戦略ですが、実は、状態2か、または状態3にいる場合は、前回のレベル1での戦略と同等です。しかし、状態1(開始状態)にいる場合には、左右どちらを選択した場合も、それによって直接得られる報酬に加えて、さらにその先の行動で得られる報酬も考慮する必要があります。例えば図1の場合、状態1においては、直接の報酬については、左が0.2で右が0.3なので右側の報酬確率が高いのですが、その先で得られる報酬の合計を考えると、逆に左側を選んだ方が得になります。

 このような判断を行うために、各状態において、各行動(右選択か左選択か)に対して、行動価値、すなわちQ(状態、行動)と呼ばれる値を学習によって求めることがキーポイントになります。この学習則についての詳細は、参考文献[1]を参照して下さい。このQ(状態、行動)は、その状態においてある行動を取った場合に、最終的にどれだけの総報酬が期待できるかという、期待値を計算するものです。したがって、このQの値が正確な値に近ければ、その状態で取るべき行動の指針となります。

■Q(状態, 行動)の計算を観察する
 以下では、このQ(状態、行動)の計算がどのように進行するのかを観察します。図1の底辺部分から始めます。まず、図2aは、状態2における行動価値Qの推移(エピソードの進行にともなう)を示しています。50エピソード時点でみると、Q(状態2, 左)=0.25、Q(状態2, 右)=0.86が得られています。状態2における実際の報酬確率は、左=0.20、右=0.90ですから、Qの計算結果はかなり正解に近いと言えます。素晴らしい、使える!という気になります。


 次の図2bは、状態3に対するものですが、上記と同様に、Qの計算結果はほぼ、実際の報酬確率に近いことが分かります。


 次の図2cは、状態1に対するものです。この図では、Qの値が、報酬確率とかなり離れているように見えますが、これで良いのです。というのは、冒頭で述べたとおり、状態1でのQの計算は、直後の報酬だけでなく、その先で得られる報酬の総和の期待値になっているからです。


 結論として言えることは、以下のように行動することが最善のようです。(もちろん、ゲーム毎に報酬確率の設定が異なりますので、図1のケースにおいてです。)

 状態1→左側選択→状態2→右側選択

 ただし、もしも、エピソード10が終わった時点で判断すると、図3cからも分かるように、状態1で右側を選んでしまうでしょう。そうすると、最終的に高い総報酬報酬は得られないはずです。どのくらい(エピソード数)学習させるべきかについては、十分な注意が必要でしょう。

■ 感想
 このレベル2の例題は、Q(状態、行動)とはどんなもの?という疑問に答えてくれと思います。そして、強化学習の入り口へ案内してくれるように感じます。
 なお、上のグラフですが、Scratchのリストはテキストファイルとして簡単に取り出せますので、それをExcelに与えて描画させました。

謝辞
著者の伊藤真氏からのご指摘で、記事の途中から「エピソード」が、誤って「エポック」になっていたことに気づき、訂正しました。

参考資料
[1] 伊藤 真:ScratchでAIを学ぼう- ゲームプログラミングで強化学習を体験、日経BP、2020年8月11日第1版

2021年7月26日月曜日

Scratchプログラミングで強化学習の基礎(1)

【what is this】子供向けと言われるScratchですが、伊藤真著[1]にはゲームの形で、強化学習(3段階に分けたQ学習)が、実に丁寧に説明されています。大人にも有用と思われます。本記事では、このうちの最初の例題(レベル1)を対象として、(小生独自の改造も加えて)強化学習を詳しく観察します。
[->続編はこちら]

■ レベル1例題:砂漠でダイヤ集めゲーム
 レベル1例題は、図1(a)に示す左右の穴を掘って、ダイヤをたくさん集めよ、というものです。左右の穴はダイヤが出る確率が異なりますが、その確率はプレーヤーには知らされていません。ダイヤが出れば報酬1、出なければ報酬0が与えられます。プレーヤーは「人間」と「強化学習」です。限定された試行回数において、総報酬(=得点)をできるだけ多くするには、どのような戦略で左右の穴を選択すべきでしょうか?


 図1(a)はオリジナルのステージデザインですが、(b)は、後述する「予測報酬確率」の推移をグラフ化するための改造版です。

■ 「人間」プレイヤーの戦略
 人間がプレイヤーの場合、色々な戦略が考えられます。全くデタラメに左右を選ぶのではなく、ここでは、ひとつの方法として、以下の戦略をとります。例えば、試行回数100回の場合、
  1. 最初の25回は左を選択し続けて、その穴のダイヤ出現確率を予測。
  2. 次の25回は右を選択し続けて、その穴のダイヤ出現確率を予測。
  3. 残りの50回は、上記の確率の高い方の穴を選択し続ける。
 この方法は、前半の50回を「探索」に、後半の50回を「活用」に費やすものであり、これでもある程度高い得点が得られるでしょう。

■ 「強化学習」プレイヤーの戦略
 この強化学習の戦略は、試行の度に、左右のダイヤの出る確率(予測報酬確率)を更新し、その時点で確率が高い方の穴を選択します。ただし、ある小さな確率(乱雑度ε)で、それには従わずにデタラメに右が左を選びます。図2がその概要です。この書籍では明記されていませんが、このような枠組みは、一般にε-greedyポリシーと呼ばれるものです。


 上記の左右の予測報酬確率は、図3に示す学習則で更新されます。左右どちらかの穴が選択される毎に、その穴に対する予測報酬確率が更新されます。小さな値の学習率を使って、予測報酬が実際の報酬に徐々に接近することが期待されます。なお、1回当たりの報酬は、図2に示すとおり、1か0です。


■ 報酬確率が途中で変更になった場合、どちらが有利?
 両方の戦略を実際に数回(いずれも試行回数100回で)試してみました。「強化学習」の方がやや優勢のようでしたが、それほどの差はないようです。「人間」の戦略でも、両方の穴の報酬確率は、25回の試行である程度正確に掴めるからでしょう。ただし、ここには、前提条件があります。つまり、両方の穴の報酬確率はもちろん知らされていないのですが、その報酬確率は途中で変わらないという前提です。

 もしも、報酬確率が途中で変わるとどうなるでしょうか。前半で左右の穴の報酬確率を予測、後半でそれを活用、という「人間」の戦略では、後半で報酬確率が大きく変動した場合、悲惨な結果となるでしょう。

■報酬確率が途中で変動しても対応できる「強化学習」
 このような、報酬確率が変動する場合でも、「強化学習」の方は対応できます。以下で、それを実際に確認します。図4(a)は、前半50回までの左右両穴の予測報酬確率の推移をグラフにしています。(実際の)報酬確率は左が0.7、右が0.4であり、予測報酬確率は、その付近を振動しています。そして、実際、左右の選択は、左が41回、右が9回であり、順当に進行しています。


 さて、ここで(51回目で)、左右の報酬確率が大きく変動しました。つまり、左右の報酬確率が入れ替わってしまいました。でもご心配なく。間もなく、予測報酬確率も、それに追随して減少(左の穴の場合)、増大(右の穴の場合)していることが分かります。右側の予測報酬確率の上昇により、右側の選択回数が上図の9回から38回まで増大しています。


 結論として、100回の試行において、上記の報酬確率(0.4〜0.7)のもとで、68点という良い得点が得られました。なるほど強化学習!という感じです。
(ただし、「途中で報酬確率が変わる」と言っても、変わった後の新しい報酬確率が一定期間持続するという前提においてです。全くデタラメに報酬確率が変化するのであれば、どんな戦略も有効とならないでしょう。)

■ 補足
 今回の例は、冒頭に述べたように、レベル1という初歩段階のものです。一般的な「強化学習」は、「状態、行動、報酬」を基に行われますが、今回は「状態」は扱わないものとなっています。レベル2,レベル3になると、「状態」も使った本格的な強化学習になって行きます。

■ 感想
 普段、PythonやJavaでプログラミングしている人にとっては、Scratchは別世界です。まどろっこしく感じる場面も多いです。しかし、本例のように、何かをもっと詳しく調査したい、その結果も素早くビジュアルにしたい、そういう場合はとても便利な開発環境だと感じました。そして、あまりプログラミングに馴れていない人に、説得力をもって説明する場合の助けになるとも思いました。

参考資料
[1] 伊藤 真:ScratchでAIを学ぼう- ゲームプログラミングで強化学習を体験、日経BP、2020年8月11日第1版

2019年5月1日水曜日

Scratch風の開発環境でTensorFlowを利用できる

 自分のPCに環境設定せずにTensorFlowを使いたいのならば、Google Colabですね。Gmailアカウントがあれば、Googleサーバ側のGPUだって指定して学習させられます。しかし、もっと別のものもあります。それが、Snap!([1]、[2])です。

 Snap!は、Scratch風のブロック型プログラミング環境ですが、ちょっと高級です。ラムダ式(高階関数)も使いますし、TensorFlowを使うためのブロックもあるからです。Google Colabと違って、アカウント開設も、環境設定も不要であり、ローカルマシンで学習を実行させます。そのため、GPU無しのマシンだとちょっと苦しい場合があるかも知れません。小規模な試行ならば問題ないですが。

 早速ですが、Snap!の資料[2]には、以下のような例題が含まれています。

(1)簡単なデモ:乱数(実数値)に対する平方根の学習と予測
An small example: Training a model to estimate square roots
(2)Tic Tac Toe(3目並べ)ゲーム戦略:D. Knuthは1958年に機械学習を作成
Learning to win at Tic Tac Toe
(3)実用アプリ:気候データからインフルエンザの流行の度合いを予測
Applying machine learning to real-world data

 このうち、ここでは、(1)の平方根の例題を取り上げます。元の例題のソースリスト(ブロック図)を少し変更したものを使って、どんなことができるかを、説明したいと思います。最初に、図1をご覧下さい。Snap!でのDeep Learningの画面です。Scratchと同様に、(a)に置かれた種々のブロックを、編集領域(b)で組み合わせてプログラムを作ります。(c)には、メッセージや学習結果、予測結果などを表示できます。なお、(d)は、Snap!とは直接関係ありませんが、Mac Book Pro (4コア、8ハイパースレッドだがGPUは無し)での学習実行の負荷状況です。


 平方根の学習のために、入力データ(0〜50までの実数値乱数を800個)と、その入力データに対する正解ラベル(関数srtの計算値)を用意します。図2において、関数sqrの引数が空白みたいになっていますが、これが、ラムダ式(高階関数)を使っているところです。これだけも、Snap!がScratchよりも高レベル(やや高い難易度)であることを臭わせます。


 次に、この入力を使った学習を行うための、ニューラルネットワークを構成します。そのためのブロックが用意されているのです。(現時点では、dense networkに限られているようですが)ニューラルネットワークを作るための、ハイパーパラメータ(層の数と各層のノード数、最適化の手法、誤差関数の種類など)を決めます。ここでは、(a)隠れ層が3層の場合と、(b)隠れ層が1層の場合の2つを、図3のように設定しました。赤色背景のlistの右側に並んでいる数値は、各層のノード数です。これらのハイパーパラメータの値は、通常、過去の試行経験などに基づいて決めらます。


 この後は、図4のように、学習を制御するブロックを設定します。ここでも、学習をどの程度長く行うかの反復回数や、学習係数、それと、学習時のテストのために使う入力データの割合(入力データ全体に対する比率)などのパラメータの値を決めます。そして、このブロックをマウスでクリックすると学習が開始されます。一般には、学習は長時間を要しますが、ここでは、短時間で済むようにパラメータを設定してあります。


 学習が終わった後に、入力データとは別に、評価用実数値を与えて、その出力結果を観察します。図5のとおり、4つの評価用データ(0.09, 9, 25, 49)を使います。これらに対する正解の平方根は(0.03, 3.0, 5.0, 7.0)です。図5では、図3で用意した2種類のニューラルネットワークが出力した結果を示しています。隠れ層が多い(a)が、少ない(b)よりもかなり良好な(ただし、0の近傍では良くない)結果を与えていることが分かります。このような層の深さに関しての性能傾向は一般的なことと思います。


 さて、ここまでやってみると、TensorFlowを知っている人は、Snap!ではTensorFlowをベースにしているのはないかと感じると思います。そのとおりのようです。実際、Snap!には、Open support panelと言うブロックを持っていて、これを使うとtensorflow.js(JavaScript版のTensorFlow)による学習状況などを観察できます。図6にその一例を示します。


 以上は、簡単なデモプログラムにすぎませんが、定番となっている「PythonでTensorFlow」とはちょっと違う観点を与えてくれる、Snap!の魅力を垣間見ることができたように思います。冒頭で示したとおり、Snap!の解説[2]には、より実用的なアプリの例題(インフルエンザ流行の予測)等もあり、生データを入力データへ加工することも含めたブロック図も示されています。また、当然ながら、画像や音も扱えます。今後これらについても調べて行きます。

 児童、生徒にもAI(人工知能)教育を。これは、小学校での英語、プログラミングの必修化に沿った流れのようです。ScratchやML4K(Machine Learning for Kids)はそのための具体的な環境です。そこでは、学習させる画像や音、テキストを自分自身で収集して学習させ(Neural Networkそのものには触れませんが)、未知のものに対する分類や予測を体験できます。

 今回のSnap!は、もう一歩深入りして、Neural Networkを具体的に構成し(ハイパーパラメータを自分で指定して)、その動作も観測(誤差の低減確認)するところまで進めています。したがって、これは、大学でのコンピュータサイエンス教育にも適していると考えられて、例えば、米国UCバークレイ校ではSnap!をベースにしたカリキュラム(苦痛ではなく、楽しみながら美しいと感じてもらえることを目指しているような)The beauty and joy of computing [3] も公開しています。

参考文献
[1] UCバークレイのSnap!サイト:https://snap.berkeley.edu
[2] Ken Kahn, A guide to building AI apps and artefacts:
https://ecraft2learn.github.io/ai/AI-Teacher-Guide/chapter-6.html
[3] The beauty and joy of computing, https://bjc.edc.org/bjc-r/course/bjc4nyc.html

2018年6月17日日曜日

ScratchでAI(人工知能)を教えるプロジェクト

Scratchは、小中高生向けのコンピュータサイエンス、プログラミング教育に益々利用が広がっているようです。大学のオープンキャンパスなどでも活用されています。そのScratchですが、外部ボードや機器との連携を強化するextensionsなどを装備したScratch-Xにも注目が集まっています。現在まだ実験版(ベータ版)のようですが。

このScratch-Xで、ゲームなどのプログラミングをさらに進めて、AI(人工知能)も教えるプロジェクトがありました。Deep Learningを使う訳ですが、もちろん、その理論や詳細な手順は見せません。IBM Watsonを利用していて、Visual RecognizerやAssistantサービスを呼び出すようになっていますが、Scratchのブロックで包み込んでいます。

https://offspring.lifehacker.com/teach-your-kid-machine-learning-with-these-free-lessons-1826836113/amp?__twitter_impression=true

Machine Learning Projects (ScratchX)
https://machinelearningforkids.co.uk/#!/worksheets

子供にもAIの活用技術に親しんでもらおう、という意図のようです。公開されているプロジェクトのうちの「コンピュータとのじゃんけん」を実際にやってみました。手の画像の認識をAIで行うということです。

  • 自分の手で、グー、チョキ、パーの3つをそれぞれ10回づつWebカメラでとる。
  • それにラベルを付けて、Watsonに学習させる。
  • かんたんな「じゃんけんの勝ち負けのルール」をScratchで作る。
  • 新たな手の画像(グー、チョキ、パーのどれか)を与えてボタンを押す。
  • コンピュータの手と比較して勝ち負けの結果がでる。

Deep Learningを利用したScratch-Xのじゃんけんアプリ


注意書きとして、「手を撮影するとき、自分の顔が映らないようにしてね」とあります。顔画像がどこかで悪用される危険性の回避のためです。このようなことも子供の時から教えておいた方がよい。ちょっと技術の負の面が出て来ているわけですが。

手の画像にラベル付けして学習させるという例でしたが、汎用性があります。例えば、手書きに文字認識も同様に行えるわけです。
Deep Learningの勉強、学習、研究の環境は色々出回っていますが、このScratch-Xによるものも教育面で可能性があるのではないでしょうか。