本書以Google開發(fā)的JAX開源框架為載體,詳細介紹了JAX在可微分編程領(lǐng)域的應(yīng)用,具體包括自動微分的基本原理、數(shù)據(jù)結(jié)構(gòu),以及自動微分在實際場景中的應(yīng)用,其涉及的領(lǐng)域包括但不限于算法優(yōu)化、神經(jīng)網(wǎng)絡(luò)、工程建模、量子計算等。
本書分為3部分,總計10章外加5篇附錄。第1部分介紹了可微分編程的基本原理,包括手動求導(dǎo)、數(shù)值微分、符號微分以及自動微分的前向模式和反向模式,在未調(diào)用任何庫函數(shù)的情況下,從零開始構(gòu)建起了符號微分及自動微分的數(shù)據(jù)結(jié)構(gòu)。第2部分是對JAX庫特性的介紹,包括JAX的基本語法、自動微分、即時編譯和并行計算,并以此為切口,對深度學(xué)習(xí)、λ演算等領(lǐng)域進行了深入淺出的講解。第3部分是自動微分在實際場景中的應(yīng)用,除了算法優(yōu)化、神經(jīng)網(wǎng)絡(luò)等極其經(jīng)典的應(yīng)用場景,這一部分還給出了自動微分在工程建模、量子計算等方面的理論及應(yīng)用。
本書涵蓋的范圍雖廣,但對其中每個領(lǐng)域的介紹都絕非淺嘗輒止,無論材料的選取、內(nèi)容的編排,還是論述的視角、觀點的呈現(xiàn),均不乏新穎之處。通過本書的學(xué)習(xí),讀者不但可以掌握JAX開源框架的用法,還可以獲悉JAX在可微分編程領(lǐng)域的具體應(yīng)用方法。本書適合在工作中會用到自動微分技術(shù)的工程技術(shù)人員、高校科研人員閱讀,也適合對JAX感興趣并希望能掌握其應(yīng)用的AI技術(shù)人員閱讀。
1.涵蓋了JAX在可微分編程領(lǐng)域的應(yīng)用,包括自動微分的基本原理、數(shù)據(jù)結(jié)構(gòu)以及在算法優(yōu)化、神經(jīng)網(wǎng)絡(luò)、工程建模、量子計算等領(lǐng)域中的應(yīng)用。
2.作者程琪皓是北京大學(xué)物理學(xué)院本科生,多次獲得國家競賽的獎項,具有豐富的研究經(jīng)驗和實踐能力。
3.通過本書的學(xué)習(xí),讀者不僅可以掌握JAX開源框架的用法,還可以深入了解可微分編程的理論和實踐,并在AI技術(shù)領(lǐng)域中應(yīng)用。
4.內(nèi)容深入淺出,新穎可靠,詳細介紹了自動微分的基本原理、JAX庫的特性和實際場景中的應(yīng)用方法。
5.閱讀本書后,你將可以了解JAX在可微分編程領(lǐng)域的應(yīng)用,并掌握自動微分的基本原理和應(yīng)用技巧,幫助你提高工作效率并拓展職業(yè)發(fā)展前景。
程琪皓,北京大學(xué)物理學(xué)院本科生,曾獲第36屆全國中學(xué)生物理競賽(浙江賽區(qū))一等獎、“未名學(xué)子”獎學(xué)金、沈克琦獎學(xué)金、北京大學(xué)三等獎學(xué)金等多項獎勵。研究方向涉及強化學(xué)習(xí)、低維超導(dǎo)實驗、量子計算、分子模擬等多個領(lǐng)域。
六重奏女士的詛咒 1
第 1章 程序視角下的微分運算 9
1.1 函數(shù)與求導(dǎo) 9
1.1.1 求導(dǎo)的基本概念 10
1.1.2 梯度操作(Gradient Operator) 11
1.1.3 雅可比矩陣(Jacobian Matrix) 12
1.1.4 黑塞矩陣(Hessian Matrix) 13
1.2 手動求導(dǎo) 14
1.3 數(shù)值微分(Numeric Differentiation) 14
1.3.1 數(shù)值微分的理論基礎(chǔ) 14
1.3.2 數(shù)值微分的誤差來源 16
1.3.3 數(shù)值微分的程序?qū)崿F(xiàn) 19
1.4 符號微分(Symbolic Differentiation) 24
1.4.1 計算圖 24
1.4.2 計算圖的構(gòu)建 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 前向微分的程序?qū)崿F(xiàn) 49
2.2 反向模式(backward mode) 58
2.2.1 反向模式的理論 58
*2.2.2 反向模式和前向模式的統(tǒng)一 60
2.2.3 反向模式的程序?qū)崿F(xiàn) 67
第3章 初識JAX 78
3.1 數(shù)組的創(chuàng)建 79
3.1.1 數(shù)組的性質(zhì) 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 科學(xué)計算 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ù)求導(dǎo) 120
4.2 梯度下降 125
4.2.1 從最小二乘法說開去 126
4.2.2 尋找極小值 130
4.2.3 訓(xùn)練及誤差 133
4.2.4 全連接神經(jīng)網(wǎng)絡(luò) 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 λ演算的基本設(shè)定 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上并行訓(xùn)練 194
6.3 函數(shù)pmap 197
6.4 使用pmap更新細胞自動機 200
第7章 優(yōu)化算法 208
7.1 下降算法概要 209
7.1.1 下降算法的數(shù)學(xué)表述 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 自適應(yīng)算法 242
7.2.3 Adam 246
第8章 循環(huán)神經(jīng)網(wǎng)絡(luò) 250
*8.1 神經(jīng)網(wǎng)絡(luò)的生物學(xué)基礎(chǔ) 250
8.1.1 神經(jīng)元的電化學(xué)性質(zhì) 251
8.1.2 神經(jīng)元輸出過程的建模 254
8.1.3 神經(jīng)元構(gòu)成網(wǎng)絡(luò)的建模 256
8.2 循環(huán)神經(jīng)網(wǎng)絡(luò) 263
8.2.1 簡單循環(huán)神經(jīng)網(wǎng)絡(luò) 263
8.2.2 循環(huán)神經(jīng)網(wǎng)絡(luò)的梯度回傳 272
8.2.3 簡單循環(huán)神經(jīng)網(wǎng)絡(luò)的程序?qū)崿F(xiàn) 277
8.2.4 長短期記憶單元及其程序?qū)崿F(xiàn) 286
8.2.5 案例:股票預(yù)測 292
第9章 案例:FAST主動反射面的形態(tài)調(diào)節(jié) 298
9.1 背景介紹 298
9.2 數(shù)據(jù)的預(yù)處理 301
9.3 約束優(yōu)化問題的提出及模型的訓(xùn)練 306
9.4 程序運行結(jié)果的討論 314
第 10章 量子計算中的自動微分 316
*10.1 量子計算的數(shù)學(xué)基礎(chǔ) 317
10.1.1 算符與量子態(tài) 317
10.1.2 算符的指數(shù) 323
10.1.3 算符的對易子 326
*10.2 量子計算的物理基礎(chǔ) 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