Hatena::ブログ(Diary)

shi3zの長文日記 RSSフィード Twitter

2016-08-23

小学五年生に人工知能のプログラミングを教える意味 07:27


 毎日が慌ただしく、めまぐるしく過ぎていく。気がつけば8月ももう終わる。

 先日、8日と18日にかけて、子供たちに人工知能プログラミングを教えるというワークショップを実験的にやってみた。


https://i.gyazo.com/74defc8c87ab6e01fcc91d92993a96c1.png


 「なにをバカな」と思われるかもしれないけれども、僕は子供の持つ根源的な可能性に賭けた。


 最初はUEIが運営している秋葉原プログラミング教室(http://www.akiba-programming-school.com)の生徒向けに考えた。


 とはいえ小学生ばかりで集めても本当に集まるかわからなかったので範囲を少しひろげて「10代」とした。つまり、小学五年生から大学二年生までが受講可能な講座である。


 蓋を開けてみたら大変な人気で、キャンセル待ちも出るような熱気になった。

 結局20人。さすがにこれ以上増えると教えきれないので限界だったと思う。


 会場に集ったのは、親御さんを含めて30人弱。


 なぜ二日間の日程にしたのかというと、今回、さくらインターネットさんのご厚意で「さくらの高火力コンピューティングクラウド」を提供していただいたからだ。


 一日目は座学と、GUIのみで人工知能を学習させる方法を学ぶ。

 画像分類問題は非常に枯れているので、学習させる教材の作り方ひとつで性能が大きく変わることを説明し、だから自分で教材を作ってみよう、というわけである。


 画像を集めてフォルダに分類し、それをzipで固めてアップロード。

 それから学習を始める。


 ある男の子は、学習がうまく始まると「すげえ!やったあ!」と小躍りした。

 人工知能が育つためには時間がかかる。


 そこで閑散期となるお盆を利用して、お盆の間、人工知能に学習をさせて10日後に再び集まるという方式で行った。


 10日後、今度は朝からPythonの解説をする。


 秋葉原プログラミング教室では、今回のイベントにあわせて、予めPythonのプログラミングを練習させていたので、小学五年生が大半であっても、ほとんどよどみなくPythonのプログラムを打ち込むことが出来た。


 ところがMacOSの仕様がEl Capitanから大幅に変わったため、Chainerのインストール方法がかなりややこしくなっていた。そこらへんがすったもんだあったのだけど、Raspberry Piのチームは比較的スムーズに学習が始められた。


 僕の授業の基本は写経である。

 要するに、ベーマガよろしく教科書に書いてあるプログラムを見ながら打ち込むのだ。


 みんなやってみるまではバカにするが、これほど効果的な勉強法はない。


 1976年うまれ、いわゆるナナロク世代が軒並みコンピュータに強いのも、この写経を経験していることが大きい。当時はプログラミングの勉強といえば写経だった。


 写経のいいところというのは、頭のなかを一言一句通過することである。

 そして正確に入力すればちゃんと動作するし、ちゃんと動作しない場合は正確に入力できていない。


 うまく動かないときは根気よくソースコードを見れば必ず答えが見つかる。


 ナナロク世代のプログラマーはほぼすべてこの写経によるプログラミングを経験しているが、挫折した者も少なくない。


 エラーメッセージが出るようなタイプミスなら問題ないが、エラーが出ないのに思ったように動かないというバグがある場合、もう絶望的に修正が困難だからだ。


 そのうえ、当時の写経雑誌の金字塔であった「マイコンBASICマガジン」には、度々誤植があった。つまり掲載されているプログラムそのものが間違っていることもあったのである。


 これを自力で突破できる豪の者だけがプログラマーとして成長していった。そこまで興味を持てない人はプログラミングから興味を失っていった。


 重要なのは、フェイス・トゥ・フェイスで教えてあげることだ。

 そして生徒がつまづきそうになったときに、ちゃんと導いてあげることである。

 これは通信教育ではできない。


 自分がなにか疑問を持った時に、質問できる相手がいるというのは凄いことだ。


 写経だと思ってバカにしてはいけない。写経は百万の言葉よりも雄弁にプログラミングの本質を伝えることができるのである。


 入力するのはA4にして1ページ程度の短いプログラムだ。


 コツは、僕が真っ先に写経を始めることである。


 ここで僕が自分だけコピー&ペーストをやってズルすると、見ている人は「自分は意味のないことをやらされているのではないか」と思う。そうではなくて、先生がいの一番に、なにか意味がなさそうなことを実際にやる。しかも容易くやる。すると子供たちは自分たちもついていかなければ、と思う。


 作るのはAND回路の学習をする簡単なプログラムで、これは僕がChainerを学んだ時にid:hi-kingさんの解説を読んで感動した内容の縮小版である。

https://i.gyazo.com/aa97e7a87a53ee822f4cdc97c710fbf5.png

 打ち込むのにものの数分、実行して結果を確かめると、次に活性化関数を変えてみようとか、ANDではなくORやNOTを学習させてみようとか、XORを学習させてみよう、と続く。


 面白いことに、ここまで来るとlossが下がっていくのを見るだけで「すげえ!なんだかわかんないけど僕が書いた人工知能が学習している!」と大喜びする。世界の深淵を覗き込んだときの喜び。


 それから、お盆休みの間に学習させてみた自分のニューラル・ネットワークをPythonから扱おう、という講義を行う。


 もうPythonのプログラムはお手のものだから、「これを使ったらあんなこともこんなこともできる」とイメージできる。


 いざ実際に教えてみて、もともと自分で企画したことではあるが、子供たちがこんなにも吸収力が高いことに改めて驚いた。


 僕は日本に限らず世界のプログラミング教育の大半は、子供だましであると思う。



 僕が子供の頃も、例えば大人たちが、「子供でもわかるように」いろんな言語を作っていた。いまどきでいう、ViscuitやScratchと同じである。たとえばLOGOという言語があった。亀の動きを定義すると絵が描ける、というもので、それはそれで面白かったけど、LOGOの延長線上に何が作れるのかわからなかった。そこで僕は、BASICでLOGOという言語を実装してみる遊びを思いついてそのようにした。LOGOそのものを触るよりもLOGOを実装する方が遥かに面白いと感じられたのだ。


 僕が子供の頃は、そんなことは望んでいなかった。大人が用意した箱庭の中で遊ぶなんてうんざりだった。


 僕はホンモノを知りたかった。本当のことを知りたかった。



 その頃の僕がもっと知りたかったのは、マシン語C言語BIOSやグラフィックス・ディスプレイ・コントローラ(GDC)の使い方といった本格的なことだ。数学でいえば、三角関数の高速な実装方法(固定小数点法を使う)や行列計算、三次元幾何といったところだ。

 ところが周囲にそれをきちんと教えてくれる大人は誰も居なかった。

 仕方がないので自分で大学の図書館に通って勉強した。


 ところが、そもそも教科書として出版されている本の内容というのは、質が低かった。

 その時点でも古すぎるか、的外れな内容のものも少なくなかった。


 そしてそれが的外れだったことを知った時は、既に自分が教科書を書く立場になっていた。

 既存の教科書では、行列式やベクトルの説明がわかりにくすぎたので、自分が本を書いた時にベクトルと行列の関係について整理して説明した。


 子供の集中力は凄い。一度興味を持てば、瞬間的に集中力を発揮する。


 するとどんどん吸収していく。

 時には我々自身よりよっぽど速く、先へ先へと進んでいってしまう。

 先生の方がついていけなくなる。


 それがやはり面白い。子供たちは、だからこそ面白い。

 彼らの人生にとって、このたった二日間の教室はさほど大きな影響を与えないかもしれない。


 しかし僕が思うのは、僕達ナナロク世代がうまれた1976年、ちょうどNECがTK-80を発売し、僕の父親世代のエンジニアが「これからはマイクロコンピュータの時代が来る」と直感して、息子にはコンピュータをやらせようと決意していたのと同じようなことが、これからの親世代に起きるだろうということ。


 TK-80の発売日は1976年8月3日。奇しくも、僕の誕生日の一日後だった。この時、父親がTK-80の広告を日常的に目にしていて、会社で勉強会を開催したりしていたことを大人になってから聞いた。


 おれの息子には絶対にコンピュータをやらせるんだ、と思ったと彼は述懐する。


 今の10歳、つまり小学5年生は、10年前、2006年生まれである。

 2006年に何が生まれたか、言うまでもなく、ディープラーニングだ。


 2006年、ジェフリー・ヒントンはネオコグニトロンのアイデアを復活させ、ディープラーニングの可能性を示した。その成果が証明されるのは、2006年に論文発表してから6年後、2012年だった。


 2015年から2016年というのはディープラーニングが大きく注目を集めた年だ。

 だから、ゼロロク世代とかイチロク世代という人達がこれから世の中を動かしていくのかもしれない。


 近い将来に人工知能がスマートフォン並に身近な存在になることは、もはやほとんど避けようのない事実である。気がついたら全てのスマートフォンがAI化されていても全く不思議ではない。


 今でもSiriやGoogle Nowが付いている、という見方もあるが、それをいったらスマートフォン以前のガラケーであっても、インターネット接続機能やタッチパネルは「付いていた」。


 しかしスマートフォンが根本的に異なる価値を持つものであることは明らかだ。


 SiriやGoogle Nowは原始的なAIであり、カネの掛かった子供だましである。それは作った人たちも充分理解している。


 だからこそ、これから始まるであろうAI革命は怒涛のようなものになるだろう。

 今、各社が提案している「AI搭載OS」は、どれも子供だましだ。OSの基本機能としてではなく、単なるアプリケーションの補助機能としてAIを使っているに過ぎない。


 本当の「AI搭載」とは、そうした一連のものとは全く意味が異なるものになるはずである。


 Siriのようなヒューマンエージェントではなく、GoogleNowのような検索しない検索とも違う、新しいAIの活用法が急速に模索されるはずである。


 その進化はガラケーからスマートフォンになったような非連続的なもので、勘の鈍い人には最初はうまく伝わらないようなものである。


 iPhoneは最初から両手をあげて喜ばれていたわけではないことを思い出していただきたい。

 実際にやってくるまでは「うさんくさいもの」「微妙なもの」「こけおどしのもの」と思われていた。


 それが真に実用的なツールであることが一般に広く認識されたのは、発売から少なくとも三年は掛かった。


 今の10歳が20歳になる頃までには、おそらくAIを日常生活で活用することは当たり前になっているだろう。

 その日が来るときに、いかに柔軟にAIを捉え、いかに素早くAIを活用できるようになるか。


 そういう時代に活躍できる子供たちを僕は育てたい。