小学生でもわかるディープラーニングのしくみ

数字を見分ける機械

あるところに忍者の村がありました。その村には忍太という男の子とポチという犬が住んでいました。

ある日、忍太はポチに数字を教えていました。

image.png

いま、ポチが勉強しているのは数字の「1」「2」「3」です。

ポチは漢字の「一」「二」「三」なら知っています。漢字の「一」「二」「三」は棒の数を数えればいいのでポチにもわかるのです。

でも、数字はまだわかりません。特に「2」と「3」は形が似ていてなかなか覚えられません。

忍太が「3」と書いた紙を持って「ポチ、これは?」と聞きました。ポチは旗を3つ持っていて、それぞれ「一」「二」「三」と書かれています。この中からポチが選んだ旗は「二」でした。

忍太は「うーん、おしいなー」といいました。

image.png

忍太は明日からしばらく修行の旅に出かけるのですが、ポチは忍太が留守の時でも勉強したいと言いました。

忍太は、「僕が留守の間でもポチが勉強できるような機械を作れないかな?」と思いました。

忍太は最近、本でディープラーニングという技術を知ったのです。ディープラーニングは、写真に写っているものを見分けたり、人の声を聞き分けたり、人工知能を作るときには欠かせない技術です。

image.png

忍太は、ディープラーニングを使って、数字を見分ける機械を作ってみることにしました。

作るもの

忍太が作りたいものは、紙に数字が書いてあったとき、その数字が「一」「二」「三」のどれなのかを見分けることができる機械です。

機械は、数字を見分けた結果を旗をたてて教えてくれます。
紙の数字が「1」のときは、「一」の旗、
紙の数字が「2」のときは、「二」の旗、
紙の数字が「3」のときは、「三」の旗です。

機械がどのような形になるかは、まだわかりませんが、この機械があれば、ポチが数字の意味を知りたくなったときに、正解の旗がどれなのか教えてくれるはずです。

image.png

材料

・木の板
・木の棒
・竹
・ホース(細い竹で作ったもの)

この村には電気がないので、水の力で動かすことにしました。

その一、ニューロンを作る

人間の体は、たくさんの細胞からできています。人間の脳の中には、ニューロンという細胞があって、ニューロンどうしがたくさんつながっています。そこにわずかな電気が流れることで、脳は記憶したり考えたりすることができるのです。

image.png

ニューロンとニューロンの間にある長細い部分を、シナプスと言います。ニューロンは、シナプスから流れてくる電気を受け取ると、その電気を少し自分の中にためることができます。そして、自分の電気の量がたくさんになると、ビビッっと電気を出して次のニューロンに伝えます。

この「入ってきたものが少しずつたまって、いっぱいになるとビビッと出る」というのがニューロンのポイントです。

image.png

手作りのニューロン

忍太は、どうすればニューロンのようなものを作れるか考えました。そのとき、庭の池の近くで「コンッ」という音がしました。それは「ししおどし」という物の音でした。竹に水が流れこんで、たくさんたまると竹が倒れて、ドバッと水が流れ出し、コンという音がするのです。

image.png

「ひらめいたっ!これでニューロンが作れるよ!」と忍太は言いました。

忍太は竹でコップを作って、コップにホースをつなぎました。ホースからコップに水が流れ込んで、たくさん水がたまると、コップが倒れて水が流れ出るしくみです。

image.png

その二、ニューロンをたくさんつなぐ

ニューロンがたくさんつながったもののことを「ニューラルネットワーク」と言います。

忍太はニューラルネットワークをつくるために階段を5段作りました。何段にすればいいのか特に決まっていないので、今回は試しに5段でやってみることにしたのです。

そして、それぞれの段に竹のニューロンを並べて、ニューロンの間をホースでつなぎました。

image.png

忍太の計画では、1段目に入れた水がホースを伝わって2段目、3段目..と流れるはずです。

一番上の1段目は「入力層(にゅうりょくそう)」と言って、水が入っていくところです。
一番下の5段目は「出力層(しゅつりょくそう)」と言って、水が出ていくところです。
そして、その間の段のことを「中間層(ちゅうかんそう)」や「隠れ層(かくれそう)」と言います。

image.png

ニューラルネットワークでは、この中間層を何段にするかはいろいろあります。1段、10段、100段以上ということもあります。

中間層がたくさんあることを「ディープ(深い)」といいます。そして、ディープなニューラルネットワークを使って、機械に学習させることを「ディープラーニング」といいます。

はっきりとは決まっていませんが、中間層が3層以上使うと「ディープラーニング」と呼ばれることが多く、1層や2層だと単に「ニューラルネットワークを使った学習」などと言われます。

その三、情報をインプットするしくみを作る

次に忍太は、紙に書かれた数字のちがいをどうやって機械に伝えればいいか考えました。

今、機械の入力層(一番上の段)には9つのコップが置いてあります。機械の立場で考えれば、「その数字が1、2、3のどれかなのか?」その手がかりは、この9つのコップの水の量だけです。

忍太は、数字の「1」「2」「3」の文字の形をじっと見つめて言いました。
「数字を1枚の絵のようにながめてみると、それぞれ特徴があるなあ。」

例えば、「1」と「3」は、左側と右側が白っぽくなっています。
それに比べると「2」は少しだけ、黒い部分が横に広いようです。
また、「1」は黒い部分が一番少ないようです。

image.png

忍太は、いい方法を思いつきました。
まず、ポチが刀で紙を9等分し、決められた順番に一列に並べます。

image.png

そして、9枚の紙切れを見て、それぞれの黒い部分(数字のインクの部分)の面積がどれくらいか調べます。そして、
・黒い部分が少ないなら、コップに水を少しだけ入れる。
・黒い部分が多いなら、コップに水をたくさん入れる。
という具合に、コップに水を入れることにします。

こうすれば、数字の文字の特徴をうまく機械に伝えることができそうです。

これで準備は完了です。
次からいよいよディープラーニングの学習を始めます。

その四、ディープラーニングの学習を始める

まず、数字の「1」を使います。

「1」が書かれた紙を9つに切って水を入れる準備をしました。

忍太は「いくぞーっ」と言って、1段目のコップに水を入れました。

image.png

水は2段目、3段目…と伝わり最後の5段目まで流れました。そして、旗が立ちました。でも旗は正解の「一」ではなく不正解の「二」でした。

忍太は「おしかったなー」と言いました。

正解の「ー」の旗が立つためには、ホースを調節して水の流れを変えればいいのです。ホースを外したり、太さを変えたりすれば水の流れを変えることができます。

どのようにホースを調節するのがいいか、忍太は少し考えました。

そして、「そうだ、誤差(ごさ)逆伝播法(ぎゃくでんぱほう)の出番だ!」と言いました。

image.png

「誤差(ごさ)」というのは、まちがって、正解が「一」なのに「二」の旗が立ってしまったことです。

「逆伝播(ぎゃくでんぱ)」というのは、誤差があったことを、水の流れとは逆の方向に伝えていくということです。

忍太は、この方法を使って、一番下の段から上の段に向かって、順番にちょっとずつホースの太さを調節しました。

image.png

忍太はもう一回「1」の数字を試してみました。「もう一回、いくぞーっ」と言って、1段目のコップに水を入れました。水は2段目、3段目、と伝わり最後の5段目まで流れました。

そして、正解の「一」の旗が立ちました。忍太は「やったー」と言いました。

image.png

次に数字の「2」を使って同じように水を流しました。
そしてまた誤差逆伝播法でちょっとずつホースの太さを調節して、正解の「二」の旗が立つようにしました。
image.png

ここでホースを調節するときに注意しないといけないことがあります。それは、「1」が正解になったときのホースの調節具合を壊さないように、同時に「2」も正解になるように調節しないといけないといことです。

ちょとわかりにくいかもしれませんが、
紙が「1」のときは旗が「一」、
紙が「2」のときは旗が「二」、
紙が「3」のときは旗が「三」、
ということが全部正解になるような、ひとつの状態をつくるのです。

image.png

そんなことが本当にできるのか信じられないかもしれませんが、ディープラーニングのすごいところは、それが本当にできてしまうことなのです。

ディープラーニングでは、1枚の紙につき、

・数字の紙を切る
・水を流す
・旗が立つ
・誤差逆伝播法でホースを調節する

ということをする必要がありますが、この手順を何度も何度も行います。しかも同じ紙を使わずに、何百枚も手書きの紙を作って、「1」「2」「3」「1」「2」「3」…を繰り返します。

こうやって、何度もホースを調節することを「学習」または「トレーニング」といいます。

image.png

忍太は、何百枚もの手書き数字を使って、ホースを調節しました。同じ「1」でもいろいろな人が書いた数字を使って調節しました。

そして、ついに調節が終わりましました。
忍太は「やったー完成だー」と言いました。

忍太が機械を試すと、ちゃんと、
紙が「1」のときは旗が「一」、
紙が「2」のときは旗が「二」、
紙が「3」のときは旗が「三」になりました。

ディープラーニングでは、ここまでの作業でホースの調節に手間がかかりますが、いったんホースの調節が終わってしまえば、その後は、この機械をどんどん使うことができます。

明日からは、忍太が留守の時でもポチは何回でもこの機械を使って、数字の勉強をすることができるのです。

忍太は、今のホースの太さを全部メモすることにしました。
「1段目の1本目のホースの太さは1.5センチ」
「2本目は2.3センチ」
「3本目は….」

image.png

こうやってメモを忍術書に残しておけば、将来、忍太の仲間が同じ機械を簡単に作ることができます。

忍太とポチの修行はこれからも続くでしょう。

おしまい。

writer | 太田直毅
株式会社OTAシステム開発。フルスタックエンジニア。 仙台市生まれ。大学卒業後に米国系通信会社にエンジニアとして就職。 1998年に独立し、WEBアプリケーションの開発を中心に活動。2児の父。趣味は家族キャンプ。
この記事をシェアする