ScratchでAIを勉強する①

Scratch

近年、AIという言葉をよく見るようになった。
私にとってAIはロボットのイメージがあり、またなんとなく難しそうで自分の世界とは全くかけ離れたものというイメージがあった。

でも、どうやらそんなことはないらしい・・・?ということを友人から聞き、興味を持ったのでこの本をもとにざっと勉強してみようと思う。

スポンサーリンク

AIとは何か

AIとは「人工知能」のことでもある。(Artificial Intelligence)
そして人工知能とは、人間の知能の働きを人工的に実現したもの、でもある。

例えばロボットもそうである。AIBOも同じ。

ただし、AIBOが本当に人工知能、つまり知能の働きを実現しているかどうかは意見が分かれるかもしれません

機械学習を知る

そして、AIを動かすためには「機械学習」が必要になってくる。
この機械学習はAIを動かすためのアルゴリズムでもある。

「人工知能」を実現する方法は、機械学習だけとは限らず、過去には、Prolog (https://ja.wikipedia.org/wiki/Prolog)のような推論機能を持ったプログラミング言語で人工知能を作ろうという研究もありました。
ただ、最近は、機械学習を用いた方法が最も広く使われるようになりました。

そしてその機械学習(アルゴリズム)には更に3つに分類することができる。
これが「教師あり学習」「教師なし学習」「強化学習」である。

次からはこれらの分類をそれぞれ説明していく。

教師あり学習

教師あり学習と聞いたとき「先生がいるのかな?」と思ってしまうが、実際は先生がいるわけではない。でも、やや「近いかな?」というのはある。

というのは、教師あり学習は「正解ラベル付きの学習データを使用する」からである。

その代表的な例として、例えば

① 0〜9の数字が書いた紙を大量に用意する。それぞれの紙には「正解ラベル」が付いている
② この紙を元に、数字の形と「正解ラベル」の関係を学習する
③ 正解ラベルが付いていない、新しい手書き数字に対して、対応する正解ラベルを予測する

といったように、あらかじめ正解を用意し、その正解を探させるのが教師あり学習という。

このポイントは、学習処理に使用しなかった、未知のデータに対しても予測ができるようになる、という所です。

教師なし学習

上記、教師あり学習に対して教師なし学習は「「出力すべきもの」があらかじめ決まっていない」ので、ある意味では大雑把な分類などに応用しやすい。
また「正解ラベル」がついていないデータを用いることも教師あり学習と異なる点である。

例えば、

① 0〜9の数字が書いた紙が大量にあります。「正解ラベル」は付いていません。

② どの紙が何の数字なのかは(機械には)分かりませんが、「クラスタリング」のアルゴリズムを用いると、数字の形が類似したもののグループ分けができます。
③これによって、0〜9の数字に対応した10種類のグループ分けができます。また、新しい数字の紙がやってきた時に、それがどのグループに入るものかを予測することもできます。

というのが教師なし学習の一例である。

強化学習

強化学習は「変化する環境の中で最適な行動パターンを学ぶ」時によく使われる。
例えばブロック崩し、車の自動運転など。

他には将棋や囲碁などで人間と対戦を積み重ねることで経験を積んで強くなっていく(学習していく)コンピューターも強化学習の一環であると言える。

この強化学習の特徴として、教師あり学習や教師なし学習の時のように、前もって使用するデータを基本的に持たない、というのがある。
そして実際にゲームなどでプレイしながらアルゴリズムが自ら情報を集めていくのが大きな特徴である。

ニューラルネットワーク

では次にニューラルネットワークについて書いていく。

このニューラルネットワークは強化学習で用いられる技術要素の1つであり、細かく言うと「ニューロン(脳の神経細胞)のネットワーク」である。

例えば人間の脳は様々な神経細胞が相互に繋がりネットワークを形成していると言われているが、これも「人生経験」や「人間との会話の積み重ね」などによって成長していく。
そしてそれによってその人の行動パターン、考え方のクセが決まっていく。

この計算方法を真似たアルゴリズムが「ニューラルネットワーク」である。

補足。ニューラルネットワークは強化学習だけで使うわけではありません。
教師あり学習や、教師なし学習でニューラルネットワークを使うこともあります。

「ニューラルネットワーク」は、数学的には、ただの「関数 y = f(x)」にすぎません。つまり、ある数字 x を入力すると、さまざまな計算を経て、最終結果 y が出てきます。この計算過程において、脳の神経細胞の仕組みを模した計算処理を行うのが、ニューラルネットワークです。

例えば、教師あり学習で、数字の形から、実際の数字の値を予測するには、「数字の画像データを x として入力すると、その数字が 0 である確率 y が計算される関数 y = f(x)」を作る必要があります。(同様にして、1 である確率を計算する関数、2 である確率を計算する関数・・・・も作ります。最終的には、どの数字である確率が一番大きくなるかをみて、判定を下します。)

この関数 y=f(x) として、普通の数学の関数だと、人間のような判定が難しいのに対して、ニューラルネットワークをうまく利用すると、人間に近い判定ができると期待されるのがニューラルネットワークを用いる理由です。

強化学習の場合は、まわりの環境の様子を入力データ x として、その時にとるべき行動 a を計算する関数が必要になります。ここでも、普通の数学の関数ではなく、ニューラルネットワークを使うと、より人間に近い判断ができるようになるかも知れない、という期待があります。

ディープラーニング

次に「ディープラーニング」という言葉がある。
これは先ほど説明した「ニューラルネットワーク」に更に構造を取り入れて大規模化したアルゴリズムだと思えばいいだろうか。

このディープラーニングの技術の発展により、画像認識や音声認識の精度が高まっていったといっても過言ではない。

そして、最近の強化学習はこのディープラーニングの技術と結びつき大きく進化を遂げている。今後もゲームやCGなど色々な分野で更に目覚ましい発展をしていくだろうと思われる。

まとめ

ここまででAIや機械学習など色々な用語について簡単にまとめてきた。
最初は「AI?機械学習?要はロボットを作るのに必要な知識?難しそう!」というイメージがあったが、調べてみるとそうでもないことが分かり安心した。

(とはいってもやはり難しいのは変わりないと思うが)

次からはScratchを使って強化学習の勉強をしていく。

中井悦司さんの紹介

この記事は中井悦司さんからの助言をいただいて作成しております。
特に「Check」と書いてある枠内の文章などは中井悦司さんからの助言をいただき付け加えております。

中井悦司さんのTwitter
https://twitter.com/enakai00

中井悦司さんの著書(Amazonに飛びます)
https://www.amazon.co.jp/%25E4%25B8%25AD%25E4%25BA%2595-%25E6%2582%25A6%25E5%258F%25B8/e/B00S8YHRF6?ref=sr_ntt_srch_lnk_9&qid=1604369000&sr=1-9

中井さん、お忙しい中確認いただきありがとうございました!

タイトルとURLをコピーしました