最短コースでわかる ディープラーニングの数学

【最新 – ディープラーニングを使う数学を学ぶおすすめ本 – 勉強を始めたいと考える方に】も確認する

ディープラーニングの本質がわかる

ディープラーニングの基礎となる、微分積分や確率の説明から始まり、前に説明された公式や考え方を何度も引用することにより少しづつステップアップして理解を深めていく形式になっているので、初学者でも少しずつ理解を深めていける構成となっています。この本で、高校数学を勉強し直すこともできます。

赤石 雅典 (著)
出版社 : 日経BP (2019/4/11)、出典:出版社HP

 

まえがき

2012年の画像認識のコンテストで驚異的な認識率をひっさげて登場した「ディープラーニング」は、その後すさまじい勢いで進歩をとげ、大ブームとなりました。
人工知能(AI)のブームは、第1次、第2次と過去にもありましたが、第3次となる今回とこれまでとの最大の相違点は、今まで解けなかった実際の問題に対して次々と結果を出している点です。どのような形になるかはわかりませんが、今後も社会に不可欠な技術として定着することは間違いないと筆者は考えています。
このように大きなインパクトを示したディープラーニングに対して、多くの人が「その動作原理を理解したい」と考えます。筆者もその一人でした。幸いにして基礎的なところは本を出せるレベルまでは理解できるようになりました。
そこで感じたのは「これって結局のところ数学だな」ということです。もう1つ感じたことがあります。それは世の中に大量に出回っている「ディープラーニング」や「機械学習」をタイトルとしている書籍が

・初心者を意識する余り、ディープラーニングの本質までたどり着けずに終わっている
・ちゃんと書かれているが、出だしからハードルが高すぎて、最初からわからない

の2つのパターンに分かれてしまい、その中間のレベルのものがほとんど見当たらないことです。初心者向けの本でありがちなパターンとして
「初心者」=「数学が苦手」という前提を基に、「数学の話になるとすぐ例え話で代用しようとする」→「結局なんだかわからなくなる」
という傾向も感じました。

今回、筆者が本書を執筆しようとした最大の思いは、まさにこの現状のギャップを埋めたかったということになります。そして本を出すにあたって真っ先に考えたのは、従来の初心者向け書籍と逆の発想で「数学から逃げない」形にすることでした。

数学の解説の出発点をどこに置くかについては、いろいろと検討した結果「高校1年(数I)の復習から」というレベルに設定しました。必要な数学の一番上のレベルは大学の教養課程です。具体的には多変数関数の微分や行列などがこのレベルに該当しています。

ちょっと考えると相当険しそうな道です。だからこそ、今までの初心者向けの本はこの道を避けて通ったものと思われます。しかし、筆者はここで諦めず、ディープラーニングのアルゴリズムを理解する上で本当に必要な概念は何かを洗い出し、それを理解するためにはどの概念がわかっていればよいかを数Iレベルに達するまで逆にたどっていったのです。そうやって必要な概念を洗い出してみると、書籍1冊の半分程度の分量で解説できそうでした。残りの半分で機械学習ディープラーニングのアルゴリズムの解説を加えれば、筆者が欲しいと思う本になるのでは、というのが、本書の基本的なアイデアとなりました。

本書は「導入編」「理論編」「実践編」「発展編」の4部構成となっています。冒頭の「導入編」は、この本全体の見取り図になっています。当初は、基礎概念の説明にとどめるつもりだったのですが、編集者より「高校1年の数学の範囲で解ける簡単な例題を入れられないか」という無理な注文がありました。そこで、微分を一切使わずに解く方法をひねり出しました。結果的に、最初の段階でこの問題を解くことで、

・機械学習ディープラーニングとは結局「予測関数」から「損失関数」を導出し、「損失関数の最小化」という数学モデルを解くことで最適なモデルを作る方式である点
・しかし、より一般的な問題を解こうとすると、指数関数、対数関数、偏微分といった高校1年の数学ではカバーしきれない概念が多数出てくるため、数学を知らずして先に進めない点

本書前半部分を構成する「理論編」は数学の解説書になっています。理論編において特に意識したことが3つあります。
1つ目は「出てくる公式・定理はできる限り直感的にわかる(ないしはわかった気になれる)ようにする」ことです。本書を書くにあたって、高校数学の参考書もいろいろ見てみたのですが、重要な公式・定理が天下り的に出てきて、いきなり演習問題から入る本がすごく多くありました。これでは納得できなくて先に進めない人も多いのではないかと考えました。

そこで本書では新しい公式を導入する場合は、「なぜこの公式が出てくるかの説明」をできる限り丁寧に、また図形で表現できる場合は図形的な説明をできるだけ取り入れて行いました。「この公式は要するにこういうことだな」というイメージさえ持てれば、その公式をすぐに使いこなせると筆者は考えています。例えば、2章で解説するように微分とは結局「関数のグラフをどんどん拡大していくと最後は直線と見なせる」という話にすぎません。この性質をうまく使うと、他のもっと複雑な微分公式を簡単に導出できたりするのです。具体的には2章を読んでいただければわかると思います。

2つ目に注意した点は「取り扱う概念はできる限り必要最小限なものに絞り込む」という点です。ディープラーニングを理解するということが読者の目的であるとするなら、それに関係ない概念は知らなくてよいことになります。このような取捨選択をすることで高くなりがちな「数学」のハードルをできる限り低くするよう工夫したつもりです。筆者としては、「三角関数の微分との関係の話」とか、「行列の固有値・固有ベクトル」のような話も書きたかったのですが、ディープラーニングでは使用しない概念なので涙をのんで落としています。

3つ目は「概念間の関係性」を重視した点です。こうやって絞り込んだ数学の概念の間では、概念間の関係性・依存性があります。高校1年の数学を出発点として、ある概念の解説の中に定義・解説をしていない新しい概念が出てこないようにするため、理論編の章の順番は何度も見直しました。最終的には今の章構成に落ち着いたのですが、その集大成として完成した概念間の関係については、巻頭の特製綴じ込みページにまとめています。ある概念の理解につまずいたとき、それは、どこがわかっていないせいなのか、このページを見ると簡単に見てとれますので、ぜひご活用ください。

本書後半部分の「実践編」は、簡単にいうとディープラーニングのアルゴリズムの解説です。実践編に関しては、以下のことを特に意識しました。

1つ目は、「スモールステップで一歩ずつ先に進める」ということです。基本となる「線形回帰」から出発してディープラーニングに至るまでのいくつかの機械学習モデルは、生物の進化の系統図のような関係にあります。進化の順にモデルを並べて、モデル間でどこに違いがあるかを洗い出してみると、モデルを1つ進化させるのに必要な新しい概念の数は非常に少なくなることがわかりました。個々のモデルと必要な概念の関係も、本書の綴じ込みページにまとめていますので、見ていただければわかると思います。

一歩先の新しいモデルになるたびに、章も新しくして、その章で新たに出てきた概念に集中して詳しい解説を加えるということで「一歩ずつ着実にディープラーニングに近づいていく」というアプローチが可能になりました。例えば、ディープラーニングは10章で解説しますが、その前の9章(多値ロジスティック回帰)に加えて出てくる新しい話は実はほとんどありません。少しずつ理解を深めながらディープラーニングにたどり着けるのです。

実践編で2つ目に配慮したのは、「PythonコードのJupyter Notebook化」です。筆者はPythonに限らずコンピュータ・プログラムというのは、自分の理解したことを確認するための道具だと思っています。そこで、本書ではできる限り読者にPythonコードを実行して確認しながら読み進めてもらうため、プログラムの作成と実行、実行結果の確認を同時に進められるツールであるJupyter Notebook対応としました。

巻末の付録では、Jupyter Notebookの導入手順も記載しました。読者はぜひ章ごとのNotebookを読み込み、Pythonの動きを確認しながら本書を読み進めてください。Jupyter Notebookなので、いっぺんにすべてのコードを流すのではなく、セルごとに実行させて、必要に応じて変数の中身を確認したり、あるいはパラメータの値を変えて再度セルを実行したりすることが可能です。こういう確かめ方を繰り返すと、コードに対する理解もより深まります。

Pythonに関しては、アルゴリズムの前提となる数式との対応づけも意識しました。Pythonの言語の特徴として、行列やベクトルが1つの変数でまとめて表現でき、行列・ベクトル間のかけ算も簡単に表現できるということがあります。本書ではその特徴を極力生かして、特に予測・学習に関するアルゴリズムの根幹にかかわる数式はループ処理を一切使わず、数式とPythonのブログラムの式が一対一に対応するようにしました。こうすることでアルゴリズムの実装イメージをより持ちやすくできたかと考えています。
Pythonの実習に関しては、もう1つちょっとした工夫をしました。それはところどころで失敗するのがわかった上で、わざとそのコードを流すような進め方にした点です。ここで出てくるトラブルは読者が自分で機械学習のコーディングで進める上で実際に出てきそうなことばかりです。トラブルがなぜ起きたのか、それに対してどうすればいいのかを身をもって経験することで、より理解を深めてもらえばと思います。

本書を締めくくる「発展編」では、本編で説明しきれなかった、ディープラーニングにおける重要な手法・概念をまとめて紹介しました。かなり高度な内容をコンパクトに紹介しているのですが、実践編まで読み終えられた読者は、その記述内容がすらすらと頭に入ってくることに驚くと思います。これがものごとを基礎から理解することの強みだと筆者は考えています。

それでは、いざ、数学とPythonを道しるべに、ディープラーニングへの登山に出発してください。山頂までたどり着いたとき、今まで見たことのない景色が開けていると思います。

2019年3月
赤石典

赤石 雅典 (著)
出版社 : 日経BP (2019/4/11)、出典:出版社HP

CONTENTS

まえがき

導入編
1章機械学習入門
1.1人工知能(AI)と機械学習
1.2機械学習とは
1.2.1機械学習モデルとは
1.2.2学習の方法
1.2.3教師あり学習と回帰、分類
1.2.4学習フェーズと予測フェーズ
1.2.5損失関数と勾配降下法
1.3はじめての機械学習モデル
1.4本書で取り扱う機械学習モデル
1.5機械学習・ディープラーニングにおける数学の必要性
1.6本書の構成

理論編
2章微分・積分
2.1関数
2.1.1関数とは
2.1.2関数のグラフ
2.2合成関数・逆関数
2.2.1合成関数
コラム合成関数の表記法
2.2.2逆関数
2.3微分と極限
2.3.1微分の定義
2.3.2微分と関数値の近似表現
2.3.3接線の方程式コラム、接線の方程式の問題と学習フェーズ・予測フェーズ
2.4極大・極小
2.5多項式の微分
2.5.1x^nの微分
2.5.2微分計算の線形性と多項式の微分
2.5.3x^rの微分
コラムC(Combination)と二項定理
2.6積の微分
2.7合成関数の微分
2.7.1合成関数の微分
2.7.2逆関数の微分
2.8商の微分
2.9積分
コラム積分記号の意味

3章ベクトル・行列
3.1ベクトル入門
3.1.1ベクトルとは
3.1.2ベクトルの表記方法
3.1.3ベクトルの成分表示
3.1.4多次元への拡張
3.1.5ベクトルの成分表示の表記法
3.2和・差スカラー倍
3.2.1ベクトルの和
3.2.2ベクトルの差
3.2.3ベクトルのスカラー倍
3.3長さ(絶対値)・距離
3.3.1ベクトルの長さ(絶対値)33
3.3.2Σ記号の意味
3.3.3ベクトル間の距離
3.4三角関数
3.4.1三角比
3.4.2三角関数
3.4.3三角関数のグラフ
3.4.4直角三角形の辺を三角関数で表す
3.5内積
3.5.1絶対値による内積の定義
3.5.2成分表示形式での内積の公式
3.6コサイン類似度
3.6.12次元ベクトル間のなす角度
3.6.2コサイン類似度
コラムコサイン類似度の応用例
3.7行列と行列演算
3.7.11出力ノードの内積表現
3.7.23出力ノードの行列積表現

4章多変数関数の微分
4.1多変数関数
4.2偏微分
4.3全微分
4.4全微分と合成関数
4.5勾配降下法
コラム勾配降下法と局所最適解

5章指数関数・対数関数
5.1指数関数
5.1.1累乗の定義と法則
5.1.2累乗の拡張
5.1.3関数への拡張
5.2対数関数
コラム対数関数の持つ意味
5.3対数関数の微分
コラムネイピア数をPythonで確認する
5.4指数関数の微分
コラムネイピア数(e)を底とする指数関数の表記法
5.5シグモイド関数
5.6softmax関数
コラム・シグモイド関数とsoftmax関数の関係|

6章確率・統計
6.1確率変数と確率分布
6.2確率密度関数と確率分布関数
コラム、正規分布関数とシグモイド関数
6.3尤度関数と最尤推定
コラムなぜ尤度関数の極値は極小値ではなく極大値をとるのか

実践編
7章線形回帰モデル(回帰)
7.1損失関数の幅微分と勾配降下法
7.2例題の問題設定
7.3学習データの表記法
7.4勾配降下法の考え方
7.5予測モデルの作成
7.6損失関数の作成
7.7損失関数の微分計算
7.8勾配降下法の適用
7.9プログラム実装
コラムNumPyを使ったコーディングテクニック
7.10重回帰モデルへの拡張
コラム学習本・繰り返し回数の調整方法

8章ロジスティック回帰モデル(2値分類)
8.1例題の問題設定
8.2回帰モデルと分類モデルの違い
8.3予測モデルの検討
コラム予測値を確率化する裏の意味
8.4損失関数(交差エントロピー関数)
8.5損失関数の微分計算
8.6勾配降下法の適用
8.7プログラム実装
コラムscikit-learmライブラリとの比較
コラム、サッカー好きの王様たちの悩みと交差エントロピー

9章ロジスティック回帰モデル(多値分類)
9.1例題の問題設定
9.2モデルの基礎概念
9.3重み行列
9.4softmax関数
9.5損失関数
9.6損失関数の微分計算
9.7勾配降下法の適用
9.8プログラム実装
コラムNumPy行列に対する集計関数の操作

10章ディープラーニングモデル
10.1例題の問題設定
10.2モデルの構成と予測関数
10.3担失関数
10.4担失関数の微分計算
10.5誤差逆伝播
10.5勾配降下法の適用
10.7プログラム実装(その1)
10.8プログラム実装(その2)
10.9プログラム実装(その3)
10.10プログラム実装(その4)

凳展編
11章実用的なディープラーニングを目指して
11.1フレームワークの利用
11.2CNN
11.3RNNとLSTM
11.4数値微分
11.5高度な学習法
11.6過学習対策
11.7学習の単位
11.8重み行列の初期化
11.9次の頂上に向けて
付録 Jupyter Notebookの導入方法(Windows、Mac)
索引

赤石 雅典 (著)
出版社 : 日経BP (2019/4/11)、出典:出版社HP