THE長文日記

長文とか短文とかのクレームは一切受け付けません

こどもにAI教育、いつはじめるか。今でしょう

AIが浸透していくのはもはや時間の問題なので、AIプログラミングコースを子供も対象にすることにした。

少人数制にして、対象を絞ることで講座の質を上げる。

特にカギとなるのは、マシンである。

もともとAIプログラミングコースではクラウド上の計算機を使っていたが、NVIDIAのEULA改訂で最新のバージョンが使えなくなった。そこで教室に10台のGPUマシンを導入して、これを使って子供に教えることにする。


モノが10台しかないので、1クラス最大10人限定、最大3〜4クラスでやる。
普通に考えると、30万円のマシンを10台も導入してモトをとれるのか、という議論になるのだが、幸い我が社はマシンを販売しているので深層学習PCは売るほどある。


とりあえず7/15に保護者様向けの説明会と無料体験会を開く予定で、まだ正式な告知はできてないが、やることだけは決定しているので予告しておきます。


どの程度のスキルが求められるか、よく聞かれるのですが、人工知能というかニューラルネットを構築するだけなら数学の知識はほぼ全くいりません。強いて言えばベクトルがなんなのか知ってるといい。けど、ベクトルがなんなのかって、お父さんお母さんでも説明できるでしょ。


長さのある矢印。それ以上でも以下でもない。
ベクトルがわかっていれば人工知能には入門できます。それより難しい概念が出てこないので。


で、プログラミングをやってる子は、当然ベクトルはわかってるはずである。
これが難しいところで、Scratchではベクトルを習わないんじゃないかと思う。僕に言わせればScratchは一体何を子供に教えたいのかよくわからない。


ベクトルがわからないというのは、三角関数のありがたみもわからないことを意味していて、これは非常に勿体無い。


プログラミングをなぜ学んだほうがいいのか。
金持ちになるため、趣味にするため、コンピュータを使いこなすため、諸説あるがまあこのあたりは根本的にはどうでもいいと思っている。


プログラミングを学ぶ理由は、この世の真実を近づくためだ。
そもそも数学が宗教から発祥しているのだから、プログラミングという「道」に入門することが、宗教や哲学と同じく、真理の探求に行くのは当然なのである。



その第一歩が、座標系とベクトルの理解だ。ベクトルを理解していれば、まず空間を定義することができる。
空間の定義は大事だ。それが全ての始まりだからだ。


f:id:shi3z:20180628061836p:plain


これは僕が高校生の頃に実際に書いたメモだが、「空間」があるためには2つ以上の物体が必要である。しかし2つだけだと位置が定まらないので3つ以上の物体が空間にあって初めて位置や速度に意味ができる。


f:id:shi3z:20180628062006p:plain


ベクトルが横に並ぶと行列になり、行列とは主に基底変換のためにあるものである(異論は認める)。


ここのところは特に大事なので、ベーシックコースでは特にシューティングゲームを作る、というコーナーで念入りに説明している。


ベクトルの概念がなぜ人工知能を理解するのに必要なのか。
通常のゲームで扱う空間は、二次元か、せいぜい三次元だが、人工知能で扱う空間はふつう最低でも10次元、多いときには1000次元とか6万次元とかになったりする。


人工知能の頭の中にある「特徴空間」は極めて高度で複雑であるが、それはベクトルを理解していると勘所が掴めてスッと理解することができる。


ベクトルには、2次元のベクトルに可能な操作は3次元にも可能、という下位互換の性質があり、その性質はたとえ何万次元になろうと変わらないからだ。


そのうえ、三次元空間に比べると、人工知能の扱う特徴空間はたとえ1000次元空間であっても極めてシンプルである。
基本的にはベクトルの合成(足し算、引き算)や積(外積・内積)しかないのでふつうのゲームで扱う2次元のベクトルの単純な延長にあるものとして扱える。三次元空間ではこうはいかない。より進んだ数学があって、相異なる3つの虚数単位からなる複素数(四元数)を使った補完など、便利かつ複雑なものまで把握しないとならない。ちなみにうちの教室では子供向けのコースでも四元数の扱い方も教える。三次元空間ではそれを使わないことはありえないからだ。


幸い、人工知能の扱う高次空間ではここまでややこしいものは出てこない。



と、ここまで読むと「難しい」と感じたかもしれないが、要は長さと方向のある矢印の話に過ぎない。
矢印という概念を知らない子供には難しすぎるかもしれないが、知っている子供には簡単すぎるだろう。


もちろん実際の学習を定義したりするときには対数や指数といった数学が出てこないでもないのだが、その概念というのは数式で理解するよりも実際に使ってみたりグラフを書いてみたりしたほうが理解しやすい。


と考えると、実は大人向けに教える内容とそう変わらないのだ。


するとあとはいつ教えるんだ?という話になる。その答えは、今でしょ。だ。
実際に教えてみないことにはわからないところがどこなのかわからない。


たとえば大学までド文系だった後藤大喜は、今やPythonを使いこなし、簡単な人工知能(ニューラルネット)なら自力で設計できる。
彼は別にこのために数学を勉強し直したわけではないし、もともと数学が得意だったわけでもない。


もっといえば僕も数学が得意なわけではない。

が、人工知能を作ったり使ったりすることはできる。


それは、離散コサイン変換という数学上の概念を全く知らなくても、スマホで写真をとってJPEGを作れるのと同じだ。
ほとんどのツールはパッケージ化されているので、意識的に扱うのはベクトルだけでいいのだ。


それ以上高度な知識、たとえばテンソルなどは講座のなかで教える。これまで、僕の説明でテンソルを理解できなかった受講者は小学生を含めて一人も居ない。


ニューラルネットのプログラミングとは、最先端の「知の真理」に近づく方法である。
これが面白くないわけがない。