- 数学的なディープラーニング入門書で、予備知識のない学生・科学者と、より厳密な理解を求める実務者が ディープラーニング・アルゴリズムの基礎を身につけられるよう構成されている
- 人工ニューラルネットワークは 活性化関数とアフィン関数の反復合成として定義され、合成の深さが増すほど deep ANN として扱う関数クラスになる
- 全体の構成は ANN の構造と計算法から始まり、近似理論、最適化、汎化誤差、全体誤差解析、PDE の求解まで続く
- 最適化パートでは gradient flow ODE、GD、SGD、逆伝播(backpropagation)、Kurdyka–Łojasiewicz アプローチ、batch normalization、ランダム初期化をあわせて扱う
- Python ソースコードは公開 GitHub リポジトリと arXiv ページから入手でき、各 listing キャプションの ファイル名で書籍内容とコードを対応づけられる
ディープラーニングを数学的に定義する方法
- 本書は ディープラーニング・アルゴリズムを、deep ANN とデータを反復的に用いて特定の関係、関数、量を近似する計算方法として扱う
- ANN は特定の 非線形活性化関数とアフィン関数の複数の合成からなる関数クラスである
- ANN の深さは合成の反復回数に対応し、非線形関数とアフィン関数の合成が 2 個を超えると deep ANN と呼ばれ始める
- 対象読者は、ディープラーニングの背景知識がまったくないが堅固な基礎を必要とする学生・科学者、そしてディープラーニングの対象と方法をより確実に理解したい実務者である
Part I–II: ニューラルネットワーク構造と近似理論
- 短い導入部の後、本文は Part I–VI の 6 つのパートに分かれる
-
Part I: 人工ニューラルネットワーク
- Chapter 1 は複数の ANN タイプを数学的に導入する
- fully-connected feedforward ANN
- convolutional ANN(CNN)
- recurrent ANN(RNN)
- residual ANN(ResNet)
- Chapter 2 は fully-connected feedforward ANN に関する 計算法(calculus) を扱う
-
Part II: 近似
- ANN が与えられた関数をどれだけよく近似できるかを分析する複数の 数学的結果を扱う
- Chapter 3 はアクセスしやすさのため、まず実数から実数への 1 次元関数に焦点を当てる
- Chapter 4 は多変数関数に対する ANN 近似結果へと範囲を広げる
Part III: 最適化と学習アルゴリズム
- ディープラーニング・アルゴリズムの核心は、問題を deep ANN を含む適切な 最適化問題としてモデル化または再定式化することにある
- このパートでは最適化問題と、それを近似的に解くアルゴリズムを扱い、通常は最小化問題を gradient ベースの最適化手法で解く
- gradient ベースの手法は、最適化しようとする関数の負の gradient 方向に基づく連続的なステップで問題を解く計算方法である
- Chapter 5 は GD 型・SGD 型手法を理解するための gradient flow(GF)ODE とその活用を扱う
- Chapter 6 は gradient descent(GD)のような決定論的な gradient ベースの最適化手法を検討し分析する
- Chapter 7 は stochastic gradient descent(SGD)のような確率的な gradient ベースの最適化手法を検討し分析する
- Chapter 8 は ANN 学習で gradient を明示的に計算する広く使われる手法である 逆伝播を導出し、詳しく扱う
- Chapter 5–7 の分析は、多くの場合 ANN 学習の最適化問題を扱うには限定的だが、Chapter 9 の Kurdyka–Łojasiewicz(KL)アプローチはこうした問題を扱える
- Chapter 10 はデータベースの学習問題で ANN 学習手続きを高速化しようとする手法である batch normalization(BN)を厳密に検討する
- Chapter 11 は異なる ランダム初期化で目的関数を最適化するアプローチを研究する
Part IV–VI: 誤差解析と PDE 応用
-
Part IV: 汎化誤差
- ディープラーニングの数学的解析は、ANN の近似能力と最適化手法の誤差推定だけでは終わらない
- 学習問題の確率分布に明示的にアクセスできず、有限個の実現値・データで近似する場合、汎化誤差の推定が必要になる
- Chapter 12 は確率的な汎化誤差推定を検討する
- Chapter 13 は strong Lp 型の汎化誤差推定を扱う
-
Part V: 全体誤差解析
- Part II の近似誤差、Part III の最適化誤差、Part IV の汎化誤差推定を結合する方法を例で示す
- 例は多数の独立したランダム初期化を用いる SGD 型最適化手法に基づく ANN 学習である
- Chapter 14 は教師あり学習問題に適した全体誤差分解を提示する
- Chapter 15 は Parts II、III、IV の一部の結果を併用して、例示的な全体誤差解析を構築する
-
Part VI: PDE のためのディープラーニング
- ディープラーニング手法は、データベースの学習問題だけでなく **偏微分方程式(PDE)**を近似的に解くためにも使われる
- Part VI は PDE のための人気のあるディープラーニング手法 3 つを検討し実装する
- Chapter 16 は physics-informed neural networks(PINNs)と deep Galerkin methods(DGMs)を扱う
- Chapter 17 は deep Kolmogorov methods(DKMs)を扱う
コードと資料へのアクセス方法
- 本書には複数の Python ソースコードが含まれている
- ソースコードは公開 GitHub リポジトリ introdeeplearning/book からダウンロードできる
- arXiv ページでも “Other formats” を押してから “Download source” を選ぶとソースコードを入手できる
- 各 source listing のキャプションには対応する ソースファイル名が含まれており、書籍の数式・例とコードをあわせて追いやすい
1件のコメント
Hacker Newsのコメント
標準的な機械学習手法をかなり統一された数学記法と多くの証明で紹介した良いまとめのように見えるが、600ページもあるので本当に大仕事だと思う。
ただ、理解すると面白い部分よりも、形式化しやすい部分により重点が置かれている感じがする。
たとえばSGDの章は、最適化が数学者たちが機械学習に実際に影響力のある貢献をできる領域だから選ばれたのだろうが、証明の大半はバイアス・分散分解やJensenの不等式のような基礎的なもので、収束に関する興味深い定理は文献を引用するだけで前の補題ともつながっておらず、ADAMのような実際に興味深い手法には証明や理論がほとんどない。
この章を読み終えれば現代のSGD手法とその発展過程はよく理解できるだろうが、なぜその手法が機能するのかについては、数値実験で確認された直感以上のことはあまり分からないように見える。
だとすれば、独立確率変数について E(XY)=E(X)E(Y) のような基本事項をたくさん証明するより、既存のADAM収束証明に紙幅を割いたほうが有益だったのではないかと思う。
ANNの章も基本的であまり面白くない内容を長々と証明する部分が多く、physics-informed neural networks の論文も良いものではあるが、少し似た問題がある。
機械学習手法をより厳密かつ統一的に説明しようとする方向性自体は良いが、何を入れて何を外すかの線引きには疑問が残る。
ADAMの収束証明も、ADAMが他の手法よりうまく機能しがちな傾向を説明してくれるわけではない。
今のところ誰にも理解できていないことを説明できなかったと責めるのは難しいが、実際に重要なことを予測できない理論なら、理論中心の教育という発想自体が弱くなる。
ディープラーニングを数学的に深く見たい人は、Francois Fleuret の本 https://fleuret.org/francois/lbdl.html も見る価値がある。
PDFは無料で、印刷版はかなりかわいい。
試すたびに両面プリンターで1枚おきに上下が逆になってしまって困る。
こういう本を本当に最初から最後まで読み通す人がいるのか気になる。
BishopのPRMLを読んでいるが、本をきちんと終えてすべての演習問題を解くにはものすごく時間がかかる。
同じことをした人のブログを見たが、1500時間以上かかったそうだ。
自分の修士課程ではこうした本を読み切った人は一人もおらず、ただ授業を受けて、必要な残りはGoogleで調べていた。
プログラミングの知識のほうが数学より深い立場からすると、ここでの数学記法はコードより理解しづらい。
知らないプログラミング言語で書かれたコードよりも難しく感じるほどだ。
数学の背景が強い人たちは、こうした数学表現のほうがソースコードより理解しやすいのか気になる。
概念をできるだけ正確に数学的に提示しようとはしたが、結局この本にあるような重たい記法は避け、学生が産業界で使えるように多くの数学をそぎ落とし、実際の授業は式よりコードのほうがはるかに多かった。
すべてを非常に正確に書こうとすると、すぐにごちゃごちゃしてしまう。
数学で新しい概念に良い記法を見つけるのは非常に難しく、Einstein記法やFeynman図、行列記法のように後になって皆が明快だったと認める記法も、最初は優れた人たちが作ったものが多い。
A分野をB分野の記法に書き換えたからといって有用になるわけでもなく、量子力学を C* 代数のような数学に翻訳することも大仕事だったし、今でもある程度は開かれた研究分野だ。
だからこの本を書き上げた労力は莫大だっただろうが、実際の効用は小さい可能性が高いと思う。
こうした方程式を楽に読める人は、たいていその方程式を必要としておらず、たとえばアフィン変換を知っている人なら、4次元テンソルの ijkl インデックスを全部明示して見る必要はほとんどない。
逆にそうでない人たちは怖じ気づいて離れてしまう可能性が高い。
理由のひとつは、手書きに最適化されているからだ。
プログラムコードを手で書くのはとても退屈なので、数学記法がなぜああいう形になったのかは理解できる。
しかも数学記法に対応する「そのコード」のようなものはない。
数学記法は数学的事実や命題を述べるためのものであり、ディープラーニングのアルゴリズムを実装するコードの目的とは異なる。
そのため、テーマや説明の仕方はそうした人々に寄っている。
たとえば実際のディープラーニングで、勾配ベース最適化アルゴリズムの存在性や一意性の条件を気にする場面はほとんど見ないが、そうした結果こそ彼らが関心を持ち論文を書くテーマだ。
タイトルからしてこの分野の理論的基盤を扱う本なのだから、こういうやり方自体は驚くことではない。
こうした本は普通、最初から最後まで読むというより、自分の研究に関係する手法がある数章だけを深く掘る。
自分も研究していた頃、同じように冗長な論文集を書いたことがあるが、関心があった核心部分は20〜30ページほどだった。
厳密さと内容量の両面で、自分の好みからするとあまりにも冗長だ。
たとえば Gronwall の不等式を補題として入れて証明しているが、使っている版が普段見るものより少し一般的とはいえ、Gronwall の不等式は常微分方程式解析では非常に標準的な道具なので、手元の厳密な制御理論の本ですら、煩雑さを避けるため証明なしで参考文献だけを挙げている。
証明の基準を高くし、仮定を少なくしようとするほど、こうした冗長さが生まれる。
「学生と科学者」という想定読者が正確には誰なのか気になる。
第1章の序盤から、下付きの中にさらに下付きがあり、上付きの中に下付きが付いた総和が出てきて、巨大な関数合成の連鎖に入っていく。
後ろに進むと下付きは4段階の深さに達し、新しい中置演算子を少なくとも3つ作り、異なる3つのアルファベットから新しい記号を30個定義しているのに、まだ600ページ中100ページにも達していない。
いったい誰がこれを追って咀嚼できると思って作ったのか分からない。
ディープラーニングを数学の観点から説明しようとする本をかなり見てきたが、毎回驚かされる。
現在のディープラーニングは明らかに経験科学であり、本に載せるほど大きな影響を与えた理論的研究は多くないと思う。
そうした本の中でも、この本はかなり積極的に最悪に近いように見える。
追加の理解をほとんど与えず、ディープラーニングともゆるくしか関連しない補題を証明するのにかなりの紙幅を使っており、コードのかなりの部分はなぜ入れたのかわからないグラフ作成コードだ。
この本の大部分を読む人はごく少ないだろうと思う。
それでも最高の教科書は Goodfellow らの Deep Learning と、より現代的な Understanding Deep Learning(https://udlbook.github.io/udlbook/) だと思う。
ディープラーニングの最前線が非常に経験的であるとしても、どの手法がうまくいくかだけでなく、なぜ機能するのかを理解しようとする興味深い研究はある。
証明が理解を得るためのよい方法ではないと言うのはおかしい。
誰にとってもよい方法ではないが、「xのための数学的入門」という題名の本は当然ある程度の数学的訓練を受けた人向けであり、そうした読者にとって補題とその証明は理解を積み上げる自然な方法だ。
数学は証明だけでなく、コミュニケーションの手段でもある。
ニューラルネットワークがどのように動作するかを説明する方法には、図、コード、言葉、そしてかなり密な数学表記のすべてがある。
理論から直感を作るより、まず直感を得てから技術的な部分を理解するほうが、たいていは簡単だ。
これは精密科学、特に数学ではおおむね当てはまり、だからこそ例が役に立つ。
ディープラーニングが経験科学である理由は、みなが数学を恐れているからなのだろうか。
現代物理学に匹敵するほど豊かな分野なのに、なぜか大半の実務家は西部開拓時代のように考え続けたがっているように見える。
数学志向が非常に強いディープラーニング研究者も多い。
ディープラーニングが経験科学である理由は、私たちが持つ数学的道具が、観測される現象をひとつの統一理論として説明・予測するのに十分ではないからだ。
経験科学だからといって、その分野が「西部開拓時代」だという意味ではない。
ディープラーニングモデルは再現可能な統制実験の対象にでき、それによって大半の場合に何が起こるかの理解を改善できる。
優れた実務家はこれを理解している。
線形代数、微積分、学部レベルの確率論を超える数学がそれほどなくても多くのことができ、その知識も主に直感を与え、取り組んでいる問題を少し形式化するために使われる。
数学をほとんど使わなくても、印象的な結果を含む成果を出せる。
その結果、人々は新しい問題を経験的に非常に速く示して解決していくが、それがなぜ機能するのかを説明する理論的成果が出る速度よりはるかに速い。
理論が難しい理由はいろいろあるが、ディープラーニングの成功例の多くが統計学や最適制御のような既存の枠組みにうまく収まらず、説明しにくいという点も大きい。
この数学を実際に使う人がいるのか気になる。
私の推測では答えはノーに近く、よく言ってもディープラーニング研究者に、自分がやろうとしていることが不可能ではないと安心させる精神的支え程度に見える。
間違っているなら喜んで認める。
よいモデルを作るのに数学が必須というわけではないが、モデルがなぜ間違っているのかを知るには数学を知らなければならない。
だから数学は必要だ。
数学がなければ、スケールさえ大きくすれば AGI に到達できると自分をだましてしまう。
みなが使っているからといってどこにでも Transformer を使い、活性化関数の違いにも混乱するだろう。
動くモデルは作れるが、動くモデルを作ることと、そのモデルがどこで失敗するかを予測し限界を理解することには大きな違いがある。
多くの人はテストセットの結果だけを見て、モデルは過学習していないはずだと思っているようだ。
テストセットの結果でハイパーパラメータをチューニングすることは言うまでもない。
ソートアルゴリズムや探索アルゴリズムのように、正しさが証明され既知の性質を持つ理論がない計算機科学を想像してみればいい。
この数学は計算機科学の理論と同じ役割を果たしている。
Keras のようなライブラリでモデルを当てはめるだけなら、実際にその数学を「使って」いるわけではない。
データセットがある程度以下の規模で、問題がある程度以下の複雑さで、モデルが長年デプロイされて性質がよく研究されているものであれば、数学を大まかに知っているだけでも多くのことができる。
これは Python や Java のランタイムが内部でどう深く動作しているかを知らなくても、完全に機能する Web アプリを作れるのと似ている。
しかし実際の動作原理を知らなければ、ライブラリにまだ入っていない状況に出会ったときにかなりひどく行き詰まる。
基礎となる数学を知らないとどうなるかを見たければ、数学と統計の基礎を知らない現在世代の「データサイエンス」卒業生を見ればよい。
採用側の問題も多いが、結局彼らが仕事を得られない理由は、これを学ぶよう強制されたことがなく、実際に何をしているのか理解していないからだ。
だから使う人はいる。
この場合、実務家にさまざまな手法のあいだの物理的一貫性を検証する方法を与える。
ならば、機械学習をしている人が毎日使う内容ではないかと思う。
本、とくに出たばかりの本をArXivにすぐ上げるのはよくあることなのだろうか。
少なくとも数学や計算機科学の教科書では、ときどき見かける。