小学生でもわかるディープラーニングのしくみ数字を見分ける機械あるところに忍者の村がありました。その村には忍太という男の子とポチという犬が住んでいました。ある日、忍太はポチに数字を教えていました。いま、ポチが勉強しているのは数字の「1」「2」「3」です。棒の数を数えればいいのでポチにもわかるのです。数字はまだわかりません。「2」と「3」は形が似ていてなかなか覚えられません。忍太が「3」と書いた紙を持って「ポチ、これは?」と聞きました。この中からポチが選んだ旗は「二」でした。忍太は「うーん、おしいなー」といいました。忍太は明日からしばらく修行の旅に出かけるのですが、ポチは忍太が留守の時でも勉強したいと言いました。忍太は、「僕が留守の間でもポチが勉強できるような機械を作れないかな?」と思いました。忍太は最近、本でディープラーニングという技術を知ったのです。ディープラーニングは、写真に写っているものを見分けたり、人の声を聞き分けたり、人工知能を作るときには欠かせない技術です。忍太は、ディープラーニングを使って、数字を見分ける機械を作ってみることにしました。どれなのかを見分けることができる機械です。機械は、数字を見分けた結果を旗をたてて教えてくれます。紙の数字が「3」のときは、「三」の旗です。機械がどのような形になるかは、まだわかりませんが、この機械があれば、ポチが数字の意味を知りたくなったときに、正解の旗がどれなのか教えてくれるはずです。・ホース(細い竹で作ったもの)この村には電気がないので、水の力で動かすことにしました。その一、ニューロンを作る人間の体は、たくさんの細胞からできています。人間の脳の中には、ニューロンという細胞があって、ニューロンどうしがたくさんつながっています。そこにわずかな電気が流れることで、脳は記憶したり考えたりすることができるのです。ニューロンとニューロンの間にある長細い部分を、シナプスと言います。ニューロンは、シナプスから流れてくる電気を受け取ると、その電気を少し自分の中にためることができます。自分の電気の量がたくさんになると、ビビッっと電気を出して次のニューロンに伝えます。この「入ってきたものが少しずつたまって、いっぱいになるとビビッと出る」というのがニューロンのポイントです。手作りのニューロン忍太は、どうすればニューロンのようなものを作れるか考えました。そのとき、庭の池の近くで「コンッ」という音がしました。それは「ししおどし」という物の音でした。竹に水が流れこんで、たくさんたまると竹が倒れて、ドバッと水が流れ出し、コンという音がするのです。「ひらめいたっ!これでニューロンが作れるよ!」と忍太は言いました。忍太は竹でコップを作って、コップにホースをつなぎました。ホースからコップに水が流れ込んで、たくさん水がたまると、コップが倒れて水が流れ出るしくみです。その二、ニューロンをたくさんつなぐニューロンがたくさんつながったもののことを「ニューラルネットワーク」と言います。忍太はニューラルネットワークをつくるために階段を5段作りました。何段にすればいいのか特に決まっていないので、今回は試しに5段でやってみることにしたのです。それぞれの段に竹のニューロンを並べて、ニューロンの間をホースでつなぎました。忍太の計画では、1段目に入れた水がホースを伝わって2段目、3段目..と流れるはずです。上の1段目は「入力層(にゅうりょくそう)」と言って、水が入っていくところです。下の5段目は「出力層(しゅつりょくそう)」と言って、水が出ていくところです。その間の段のことを「中間層(ちゅうかんそう)」や「隠れ層(かくれそう)」と言います。ニューラルネットワークでは、この中間層を何段にするかはいろいろあります。1段、10段、100段以上ということもあります。中間層がたくさんあることを「ディープ(深い)」といいます。ディープなニューラルネットワークを使って、機械に学習させることを「ディープラーニング」といいます。決まっていませんが、中間層が3層以上使うと「ディープラーニング」と呼ばれることが多く、1層や2層だと単に「ニューラルネットワークを使った学習」などと言われます。その三、情報をインプットするしくみを作る次に忍太は、紙に書かれた数字のちがいをどうやって機械に伝えればいいか考えました。今、機械の入力層(一番上の段)には9つのコップが置いてあります。機械の立場で考えれば、「その数字が1、2、3のどれかなのか?」その手がかりは、この9つのコップの水の量だけです。忍太は、数字の「1」「2」「3」の文字の形をじっと見つめて言いました。「数字を1枚の絵のようにながめてみると、それぞれ特徴があるなあ。「1」と「3」は、左側と右側が白っぽくなっています。それに比べると「2」は少しだけ、黒い部分が横に広いようです。「1」は黒い部分が一番少ないようです。忍太は、いい方法を思いつきました。ポチが刀で紙を9等分し、決められた順番に一列に並べます。9枚の紙切れを見て、それぞれの黒い部分(数字のインクの部分)の面積がどれくらいか調べます。・黒い部分が少ないなら、コップに水を少しだけ入れる。・黒い部分が多いなら、コップに水をたくさん入れる。いう具合に、コップに水を入れることにします。すれば、数字の文字の特徴をうまく機械に伝えることができそうです。これで準備は完了です。次からいよいよディープラーニングの学習を始めます。その四、ディープラーニングの学習を始めるまず、数字の「1」を使います。「1」が書かれた紙を9つに切って水を入れる準備をしました。忍太は「いくぞーっ」と言って、1段目のコップに水を入れました。水は2段目、3段目...と伝わり最後の5段目まで流れました。旗は正解の「一」ではなく不正解の「二」でした。忍太は「おしかったなー」と言いました。正解の「ー」の旗が立つためには、ホースを調節して水の流れを変えればいいのです。ホースを外したり、太さを変えたりすれば水の流れを変えることができます。どのようにホースを調節するのがいいか、忍太は少し考えました。「そうだ、誤差(ごさ)逆伝播法(ぎゃくでんぱほう)の出番だ!」と言いました。「誤差(ごさ)」というのは、まちがって、正解が「一」なのに「二」の旗が立ってしまったことです。「逆伝播(ぎゃくでんぱ)」というのは、誤差があったことを、水の流れとは逆の方向に伝えていくということです。忍太は、この方法を使って、一番下の段から上の段に向かって、順番にちょっとずつホースの太さを調節しました。忍太はもう一回「1」の数字を試してみました。「もう一回、いくぞーっ」と言って、1段目のコップに水を入れました。水は2段目、3段目、と伝わり最後の5段目まで流れました。正解の「一」の旗が立ちました。忍太は「やったー」と言いました。次に数字の「2」を使って同じように水を流しました。誤差逆伝播法でちょっとずつホースの太さを調節して、正解の「二」の旗が立つようにしました。ここでホースを調節するときに注意しないといけないことがあります。それは、「1」が正解になったときのホースの調節具合を壊さないように、同時に「2」も正解になるように調節しないといけないといことです。紙が「3」のときは旗が「三」、ということが全部正解になるような、ひとつの状態をつくるのです。そんなことが本当にできるのか信じられないかもしれませんが、ディープラーニングのすごいところは、それが本当にできてしまうことなのです。・数字の紙を切る・水を流す・旗が立つ・誤差逆伝播法でホースを調節するということをする必要がありますが、この手順を何度も何度も行います。同じ紙を使わずに、何百枚も手書きの紙を作って、「1」「2」「3」「1」「2」「3」...を繰り返します。やって、何度もホースを調節することを「学習」または「トレーニング」といいます。忍太は、何百枚もの手書き数字を使って、ホースを調節しました。同じ「1」でもいろいろな人が書いた数字を使って調節しました。調節が終わりましました。忍太は「やったー完成だー」と言いました。紙が「3」のときは旗が「三」になりました。ディープラーニングでは、ここまでの作業でホースの調節に手間がかかりますが、いったんホースの調節が終わってしまえば、その後は、この機械をどんどん使うことができます。明日からは、忍太が留守の時でもポチは何回でもこの機械を使って、数字の勉強をすることができるのです。忍太は、今のホースの太さを全部メモすることにしました。「3本目は....」こうやってメモを忍術書に残しておけば、将来、忍太の仲間が同じ機械を簡単に作ることができます。忍太とポチの修行はこれからも続くでしょう。株式会社OTAシステム開発。フルスタックエンジニア。大学卒業後に米国系通信会社にエンジニアとして就職。1998年に独立し、WEBアプリケーションの開発を中心に活動。