数学が難しいからといって気に病むことはない。私のほうがもっと苦労している。
─アルベルト・アインシュタイン
1.1 ディープラーニングの世界へようこそ
この時代に最も価値あるスキルを学ぶ
このページを開いてくれてありがとう! ディープラーニングは機械学習と人工知能が交わる刺激的な分野であり、社会や産業をがらりと変えるものです。本書で説明する手法はあなたの周囲の世界を変えています。自動車のエンジンの最適化からソーシャルメディアに表示される内容まで、ディープラーニングはそれこそどこにでも存在し、圧倒的な存在感を放っています。そしてすごくおもしろいのです。
1.2 なぜディープラーニングを学ぶべきなのか
知能を徐々に自動化するための強力なツール
古来より、人間は周囲の環境を理解して制御するために道具をこしらえてはよいものにしてきました。ディープラーニングは、このイノベーションの物語における「今日の章」にあたります。
この章がこれほど人を引き付けるのは、この分野が機械のイノベーションというよりも知的なイノベーションだからです。機械学習の他の分野と同様に、ディープラーニングの目的は知能をちょっとずつ自動化することにあります。この数年間の試みは大きな成功を収めており、コンピュータビジョン、音声認識、機械翻訳、その他のタスクでこれまでの記録を塗り替えています。
膨大な数の分野にわたってこれらの偉業を達成するにあたり、ディープラーニングが人間の脳にヒントを得たアルゴリズム(ニューラルネットワーク)を使用していることを考えると、これは驚くべきことです。ディープラーニングはまだ発展途上の分野であり、多くの課題を抱えていますが、最近の開発は途方もない興奮を生み出しています。おそらく私たちは単なるよい道具を発見したのではなく、人間の心の窓を開いたのです。
ディープラーニングは熟練労働を自動化する可能性を秘めている
ディープラーニングの開発が現在どれくらい進んでいるかについてはさまざまな見方があり、その潜在的な影響があれこれ取沙汰されています。こうした予測の多くは大袈裟なものですが、検討する価値のあるものが1つあります──職を奪われることです。
というのも、ディープラーニングのイノベーションが「ここで」止まってしまったとしても、世界中の熟練労働者にすでに途轍もない影響を与えているからです。ディープラーニングが安価な代替策となる説得力のある例としては、コールセンターのオペレーター、タクシーの運転手、ヒラのビジネスアナリストが挙げられます。
幸いなことに、経済は突然変化したりしません。しかし、現在のテクノロジーの能力を考えると、いくつかの面で気がかりな点はすでに通り過ぎています。本書を読むことで、崩壊の危機に直面している産業から、成長/繁栄期を迎えている産業──つまり、ディープラーニングへうまく移行できることを願っています。
知能と創造力のシミュレーションから人間とは何かが明らかになる
筆者がディープラーニングを始めたのは好奇心からです。ディープラーニングは人間と機械が交錯するすばらしい分野です。考える、推測する、作り出すことが実際に何を意味するのかを解き明かすのは、啓発的で、魅力的で、筆者にとって刺激的です。
ありとあらゆる絵画のデータセットを使ってモネに似た絵を描く方法を機械に教えるとしましょう。これはまったくもって可能であり、その仕組みを確認できるなんてびっくりするほどすごいことです。
1.3 ディープラーニングを学ぶのは難しい?
「楽しく」なるまでの作業はどれくらい大変か
これは筆者が気に入っている質問です。筆者にとって「楽しさ」とは、自分が作ったものが学習するのを目の当たりにすることです。自分が作ったものがそのようなことをするなんて驚きです。あなたも同じように感じるとしたら、答えは簡単です。
本書では、第3章の数ページ目で最初のニューラルネットワークを作成します。そのために必要な作業は、ここからそこまでのページを読むことだけです。
第3章からは、コードを少し覚えます。そして、第4章の中ほどまで読み進めると、「次」の楽しさが見つかります。各章はそのように進みます。前の章のコードを覚えてから次の章を読むと、新たなニューラルネットワークを実際に試してみることができます。
1.4 なぜ本書を読むべきなのか
ディープラーニングを始めるためのハードルは驚くほど低い
本書を読む理由は、筆者が本書を書いている理由と同じです。筆者が知る限り、(大学の数学の学位に相当する)高度な数学の知識を前提とせずにディープラーニングを教えるリソース(書籍、講座、ブログの記事)が他にないからです。
誤解しないでほしいのですが、数学を用いてディープラーニングを教えることにはちゃんとした理由があります。結局のところ、数学は言語です。この言語を使ってディープラーニングを教えるほうが効率的であることは確かです。
しかし、ディープラーニングの「仕組み」をしっかりと理解した聡明かつ優秀な実践者になるために、高度な数学の知識を前提とすることが絶対に必要であるとは思えないのです。
では、なぜ本書を使ってディープラーニングを学ぶべきなのでしょうか。本書では、高校レベルの数学の知識がある(そしてその知識がさびついている)ことを前提としており、知っておく必要があることについてはそのつど説明するからです。
掛け算を覚えているでしょうか。xyグラフ(方眼紙に線が引かれたもの)を覚えているでしょうか。それで十分です。 フレームワークの内部の仕組みが理解しやすくなるディープラーニングの教材(書籍、講座など)は大きく2種類に分かれます。
1つ目は、PyTorch、TensorFlow、Kerasなど、よく知られているフレームワークやコードライブラリの使い方を中心に説明するものです。2つ目は、ディープラーニングそのものを教えることに焦点を合わせたものです。要するに、主要なフレームワークの内部の科学を教えるものです。
最終的には、「両方」を学ぶことが重要です。NASCARのドライバーになりたければ、操縦するモデル(フレームワーク)とドライビング(科学とスキル)の両方を学ばなければならない、というのと同じです。
しかし、フレームワークを学ぶだけでは、マニュアル車がどのようなものかも知らないのに最新モデルのシボレーカマロの長所と短所を学ぶようなものです。本書では、ディープラーニングがどのようなものかを説明することで、フレームワークを学ぶための準備を整えます。
数学に関連する内容はすべて直観的なたとえに置き換えられる
筆者は数式に遭遇するたびに、次の2段階のアプローチをとっています。まず、その手法を現実の直観的な「たとえ」に置き換えます。数式を文字どおりに受け取ることはまずありません。数式を「パーツ」に分解し、それぞれにストーリーを割り当てます。
本書でも同じアプローチをとっています。数学的な概念にぶつかったときは、その数式が実際に行うことを別のたとえで示します。
物事はできるだけ単純であるべきだが、単純すぎてもいけない。
─アルベルト・アインシュタイン
入門編の後は「プロジェクト」ベースで進む
何か新しいことを学ぶときにいやな点を1つ挙げるとすれば、学んでいる内容が役立つ、あるいは問題に直結するものかどうかに疑問を抱くことです。実際に誰かが金づちに関するあらゆることを教えてくれたとしても、金づちを持って釘をこういうふうに打つと教えてくれなければ、金づちの使い方を教えているとは言えません。
点と点が線で結ばれていないこともあるでしょう──金づちと釘の入った箱とたくさんの木材を持たされて現実世界に放り出されたら、当てずっぽうでやるしかありません。
本書では、木材、釘、金づちの目的を説明する前に、それらを読者に与えます。各レッスンでは、道具を手に取り、それらを使って何かを作り、作業を進めながらその仕組みについて説明します。このようにすると、さまざまなディープラーニングツールの詳細をまとめたリストが手元に残るだけ、ということはなくなり、それらのツールを使って問題を解決する能力が身につくはずです。
さらに、最も重要な部分である「解決したい問題に対して各ツールがどのような状況でなぜ適しているのか」についても理解できます。この知識があれば、学業でも仕事でもキャリアを築くことができるでしょう。
1.5 どのような準備が必要か
Jupyter NotebookとNumPyのインストール
筆者はもっぱらJupyter Notebookで作業を行っています。ディープラーニングを学ぶ上で(筆者にとって)最も重要なことの1つは、訓練の途中でニューラルネットワークを停止させ、すべてのパーツをばらばらにしてどうなっているのかを確認できることです。このような目的にもってこいなのがJupyter Notebookです。
本書ではNumPyを詳しく見ていきますが、これはフレームワーク(線形代数ライブラリ)を1つしか使用しないからこそ可能なことです。これにより、フレームワークを呼び出す方法だけでなく、あらゆる部分の仕組みを理解できます。本書では、ディープラーニングをすべて一から教えます。
必要なツールのインストール手順については、「はじめに」を参照してください。
高校の数学の知識が必要
本書の目的は、代数の基礎を理解しているという前提で、ディープラーニングを教えることにあります。
個人的に解いてみたい問題を見つける
これは作業を始めるために「必要かもしれない」という程度のことに思えるかもしれません。そうとも言えるでしょうが、まじめな話、ぜひ個人的に解いてみたい問題を探してみてください。
筆者が知っている中で、ディープラーニングで成果を上げている人は全員、解決しようとしている問題が何かしらありました。ディープラーニングを学ぶことは、他の興味深いタスクを解決するための「前提条件」にすぎません。
筆者の「問題」は、Twitterを使って株価を予測することでした。Twitterを使った株価予測はとてもおもしろそうだったので、腰を据えて文献を読み、プロトタイプを構築してみようという気になりました。
今にしてみると、この分野は真新しく、急速に変化しています。このため、次の数年間、これらのツールを使って1つのプロジェクトを追求すれば、気がつけば「その問題」の第一人者になっていた、ということだってあるかもしれません。
筆者の場合、プログラミングについてほとんど何も知らない状態から、ディープラーニングについて学んだ知識を応用したプロジェクトを立ち上げ、ヘッジファンドから研究助成金を獲得するまでに要した時間は18か月ほどでした。
あるデータセットを使って別のデータセットを予測する興味深い問題があることは、ディープラーニングにおいて重要な触媒の役割を果たします。ぜひ見つけてください。
1.6 Pythonの知識が必要
本書ではPythonを使って説明する
Pythonは驚くほど直観的な言語です。これまでに作成された中で最も広く採用され、最も理解しやすい言語かもしれないと筆者は考えています。さらに、Pythonコミュニティはこれ以上ないほどシンプルであることに情熱を傾けています。このような理由により、本書ではすべての例をPythonで記述することにしました。
コーディング経験はどれくらい必要か
Python Codecademyというオンライン講座(英語版のみ)をざっと眺めてみてください。目次を読み、そこにある用語をすんなり理解できれば、準備はできています。よくわからない用語がある場合は、その項目を読んでから戻ってきてください。この講座は初心者向けに非常によく練られています。
1.7 まとめ
Jupyter Notebookがあり、Pythonの基礎を理解していれば、次章に進む準備はできています。次章は、(何かを構築するのではなく)大部分が説明で構成される最後の章です。この章では、人工知能、機械学習、(そして肝心の)ディープラーニングの高度な用語、概念、分野を紹介します。