見出し画像

ディープラーニングは「かんたん」?

ゴールデンウィークは、東大のディープラーニング講座の第4回の宿題をやっていた。

宿題の内容は「MNISTを多層パーセプトロンで学習せよ」というものだ(意味がわからなくても続きは読めます)。MNISTというのは、練習用の手書き数字のデータで、以下のような手書きの数字と解答のセットが7万件ある。

このデータをコンピュータに学習させて、画像を見て数字を分類できるようにするのだ。

プログラムの内容は、MNISTのデータを、学習用のデータと、確認するためのデータに分ける(今回は8対2、つまり学習用5万6000件と、確認用1万4000件で分けた)。そして学習用データで学習させ、確認用データがちゃんと分類できるかどうかを試す、というものになる。

1週間かけて宿題はなんとか終わって、分類精度は97%くらいになった。数学がわからなすぎるのと、それを実現するプログラミング力が足りなすぎるので、めちゃくちゃ時間がかかってしまった。

ところで、人工知能プログラミングのなにがすごいのかというと「かんたん」なことだ。さんざん苦労してるのに、かんたんはないだろうと思うかもしれないが、まあ続きを読んでほしい。

以前のプログラミングでは、手書き文字を認識するためのプログラム(アルゴリズム、という)は、人間が書かなくてはならなかった。たとえば「タテの直線があったら1か7か、もしかしたら9だよ」とか、「丸が上のほうにあったら8か9だよ」のように。

でも、3と5はどう説明したら? 1と7はどう見分けようか? というふうに、いくらでも課題は出てくる。そう、すべて説明しつくそうと思うと、たいへんなのだ。つまり、人間が説明できる範囲には限界がある。そして、これまでは、人間が説明できることしかプログラムに書けなかった。

囲碁や将棋がある一線を超えて強くならなかったのも、同じ理由だ。囲碁や将棋は、強い人はなんとなくプレイしている。「ひと目、右辺に手を入れたい」「玉頭を手厚くする必然の一手」みたいに。こんなことを人間がすべて教えるのはとてもむずかしい。

人工知能は、その「人間が説明できない部分」を、コンピュータが自分で考えてくれるのがすばらしい。大量のデータを用意して、学習の方法さえプログラミングしてあげれば、思考部分は、コンピュータが自分で考える。以前は、人間がうまくできなかったことが、勝手にできるようになったのだから、これは「超かんたん」と言っていいだろう。

ぼくが書いた宿題のプログラムも、学習部分は100行に満たない。たったそれだけで、手書き数字が識別できるようになるんだから、大昔に手書き数字の認識プログラムを書いてたひとは激おこだと思う。

ちなみにこういうことは、ChainerとかTensorFlowとかKerasとかの、AI用ライブラリを使うと超・超・かんたんにできる(10行くらい?)。でも、東大の講座は基礎原理から学ぶのが目的なので、すべてスクラッチでコードを書いている(根本的な仕組みからしっかりと学べるのでたいへんありがたい)。

ただ、ディープラーニングを根本から理解しようと思うと、数学はなかなかハードルが高い。必要なのは、線形代数と微分と確率と、あと三角関数、指数関数、対数関数とかが出てくる。ぼくレベルだとかなり苦労してるんだけど、逆に言うと、数学さえわかれば、ディープラーニングは理論も含めて、難しくない、かもしれないな。やっぱり、時代は数学かもね。

深層学習』東大の講義の教科書。今回は4章を、泣きながら5回読んだ。

初心者用の本は前にこの記事に書いた。

* * *

お知らせ:ピースオブケイクでは、人工知能エンジニアを募集してます。興味があるひとはこちらまで。


読んでくださってありがとうございます。サポートいただいたお金は、noteの他のクリエイターのサポートに使わせていただきますね。