本書以Google開發(fā)的JAX開源框架為載體,詳細介紹了JAX在可微分編程領域的應用,具體包括自動微分的基本原理、數(shù)據(jù)結構,以及自動微分在實際場景中的應用,其涉及的領域包括但不限于算法優(yōu)化、神經(jīng)網(wǎng)絡、工程建模、量子計算等。
本書分為3部分,總計10章外加5篇附錄。第1部分介紹了可微分編程的基本原理,包括手動求導、數(shù)值微分、符號微分以及自動微分的前向模式和反向模式,在未調(diào)用任何庫函數(shù)的情況下,從零開始構建起了符號微分及自動微分的數(shù)據(jù)結構。第2部分是對JAX庫特性的介紹,包括JAX的基本語法、自動微分、即時編譯和并行計算,并以此為切口,對深度學習、λ演算等領域進行了深入淺出的講解。第3部分是自動微分在實際場景中的應用,除了算法優(yōu)化、神經(jīng)網(wǎng)絡等極其經(jīng)典的應用場景,這一部分還給出了自動微分在工程建模、量子計算等方面的理論及應用。
本書涵蓋的范圍雖廣,但對其中每個領域的介紹都絕非淺嘗輒止,無論材料的選取、內(nèi)容的編排,還是論述的視角、觀點的呈現(xiàn),均不乏新穎之處。通過本書的學習,讀者不但可以掌握JAX開源框架的用法,還可以獲悉JAX在可微分編程領域的具體應用方法。本書適合在工作中會用到自動微分技術的工程技術人員、高校科研人員閱讀,也適合對JAX感興趣并希望能掌握其應用的AI技術人員閱讀。
1.涵蓋了JAX在可微分編程領域的應用,包括自動微分的基本原理、數(shù)據(jù)結構以及在算法優(yōu)化、神經(jīng)網(wǎng)絡、工程建模、量子計算等領域中的應用。
2.作者程琪皓是北京大學物理學院本科生,多次獲得國家競賽的獎項,具有豐富的研究經(jīng)驗和實踐能力。
3.通過本書的學習,讀者不僅可以掌握JAX開源框架的用法,還可以深入了解可微分編程的理論和實踐,并在AI技術領域中應用。
4.內(nèi)容深入淺出,新穎可靠,詳細介紹了自動微分的基本原理、JAX庫的特性和實際場景中的應用方法。
5.閱讀本書后,你將可以了解JAX在可微分編程領域的應用,并掌握自動微分的基本原理和應用技巧,幫助你提高工作效率并拓展職業(yè)發(fā)展前景。
程琪皓,北京大學物理學院本科生,曾獲第36屆全國中學生物理競賽(浙江賽區(qū))一等獎、“未名學子”獎學金、沈克琦獎學金、北京大學三等獎學金等多項獎勵。研究方向涉及強化學習、低維超導實驗、量子計算、分子模擬等多個領域。
六重奏女士的詛咒 1
第 1章 程序視角下的微分運算 9
1.1 函數(shù)與求導 9
1.1.1 求導的基本概念 10
1.1.2 梯度操作(Gradient Operator) 11
1.1.3 雅可比矩陣(Jacobian Matrix) 12
1.1.4 黑塞矩陣(Hessian Matrix) 13
1.2 手動求導 14
1.3 數(shù)值微分(Numeric Differentiation) 14
1.3.1 數(shù)值微分的理論基礎 14
1.3.2 數(shù)值微分的誤差來源 16
1.3.3 數(shù)值微分的程序實現(xiàn) 19
1.4 符號微分(Symbolic Differentiation) 24
1.4.1 計算圖 24
1.4.2 計算圖的構建 26
1.4.3 SymPy庫簡介 34
第 2章 自動微分 39
2.1 前向模式(forward mode) 40
2.1.1 前向模式的理論 40
*2.1.2 前向模式的二元數(shù)詮釋 44
2.1.3 前向微分的程序實現(xiàn) 49
2.2 反向模式(backward mode) 58
2.2.1 反向模式的理論 58
*2.2.2 反向模式和前向模式的統(tǒng)一 60
2.2.3 反向模式的程序實現(xiàn) 67
第3章 初識JAX 78
3.1 數(shù)組的創(chuàng)建 79
3.1.1 數(shù)組的性質 79
3.1.2 創(chuàng)建數(shù)組的函數(shù) 81
3.1.3 隨機數(shù)組的創(chuàng)建 84
3.2 數(shù)組的修改 86
3.2.1 多維數(shù)組的重排 86
3.2.2 多維數(shù)組的擴展 89
3.2.3 多維數(shù)組的索引 92
3.2.4 越界行為的處理 95
3.2.5 異地更新 95
3.3 數(shù)組的運算 97
3.3.1 語義廣播 97
3.3.2 數(shù)組運算 98
3.3.3 線性代數(shù) 100
3.3.4 科學計算 102
3.3.5 愛因斯坦求和約定 102
3.4 使用蒙特卡羅方法估計圓周率 105
第4章 JAX的微分運算 109
4.1 微分操作的語法 109
4.1.1 JAX中的梯度操作 110
4.1.2 JAX中的雅可比矩陣 116
4.1.3 JAX中的黑塞矩陣 118
4.1.4 自定義算符及隱函數(shù)求導 120
4.2 梯度下降 125
4.2.1 從最小二乘法說開去 126
4.2.2 尋找極小值 130
4.2.3 訓練及誤差 133
4.2.4 全連接神經(jīng)網(wǎng)絡 140
第5章 JAX的編程范式及即時編譯 150
5.1 函數(shù)式編程 151
5.1.1 函數(shù)式編程的價值觀 151
5.1.2 JAX中的即時編譯 158
5.1.3 JAX中的條件語句 162
5.1.4 JAX中的流程控制語句 166
5.1.5 靜態(tài)變量 170
*5.2 λ演算 172
5.2.1 λ演算的基本設定 172
5.2.2 λ演算中的布爾代數(shù) 176
5.2.3 λ演算中的自然數(shù) 177
5.2.4 λ演算中的遞歸 181
第6章 JAX的并行計算 186
6.1 函數(shù)vmap 187
6.2 使用vmap在GPU上并行訓練 194
6.3 函數(shù)pmap 197
6.4 使用pmap更新細胞自動機 200
第7章 優(yōu)化算法 208
7.1 下降算法概要 209
7.1.1 下降算法的數(shù)學表述 209
7.1.2 步長的選取 213
7.1.3 終止條件的選取 218
7.1.4 下降方向的選取 219
*7.1.5 共軛梯度算法 223
7.2 一階優(yōu)化算法 233
7.2.1 動量法 233
7.2.2 自適應算法 242
7.2.3 Adam 246
第8章 循環(huán)神經(jīng)網(wǎng)絡 250
*8.1 神經(jīng)網(wǎng)絡的生物學基礎 250
8.1.1 神經(jīng)元的電化學性質 251
8.1.2 神經(jīng)元輸出過程的建模 254
8.1.3 神經(jīng)元構成網(wǎng)絡的建模 256
8.2 循環(huán)神經(jīng)網(wǎng)絡 263
8.2.1 簡單循環(huán)神經(jīng)網(wǎng)絡 263
8.2.2 循環(huán)神經(jīng)網(wǎng)絡的梯度回傳 272
8.2.3 簡單循環(huán)神經(jīng)網(wǎng)絡的程序實現(xiàn) 277
8.2.4 長短期記憶單元及其程序實現(xiàn) 286
8.2.5 案例:股票預測 292
第9章 案例:FAST主動反射面的形態(tài)調(diào)節(jié) 298
9.1 背景介紹 298
9.2 數(shù)據(jù)的預處理 301
9.3 約束優(yōu)化問題的提出及模型的訓練 306
9.4 程序運行結果的討論 314
第 10章 量子計算中的自動微分 316
*10.1 量子計算的數(shù)學基礎 317
10.1.1 算符與量子態(tài) 317
10.1.2 算符的指數(shù) 323
10.1.3 算符的對易子 326
*10.2 量子計算的物理基礎 329
10.2.1 波粒二象性 329
10.2.2 薛定諤方程 331
10.2.3 動量空間 338
*10.3 基于量子體系的自動微分 341
10.3.1 量子比特 342
10.3.2 參數(shù)優(yōu)化 347
附錄A Python中類的介紹 354
附錄B 拓撲排序 369
附錄C 信息和熵 376
附錄D 下降算法的收斂性分析 390
附錄E 神經(jīng)元的Hodgkin Huxley模型 400
后記 410