本書以Google開發(fā)的JAX開源框架為載體,詳細(xì)介紹了JAX在可微分編程領(lǐng)域的應(yīng)用,具體包括自動(dòng)微分的基本原理、數(shù)據(jù)結(jié)構(gòu),以及自動(dòng)微分在實(shí)際場景中的應(yīng)用,其涉及的領(lǐng)域包括但不限于算法優(yōu)化、神經(jīng)網(wǎng)絡(luò)、工程建模、量子計(jì)算等。
本書分為3部分,總計(jì)10章外加5篇附錄。第1部分介紹了可微分編程的基本原理,包括手動(dòng)求導(dǎo)、數(shù)值微分、符號(hào)微分以及自動(dòng)微分的前向模式和反向模式,在未調(diào)用任何庫函數(shù)的情況下,從零開始構(gòu)建起了符號(hào)微分及自動(dòng)微分的數(shù)據(jù)結(jié)構(gòu)。第2部分是對(duì)JAX庫特性的介紹,包括JAX的基本語法、自動(dòng)微分、即時(shí)編譯和并行計(jì)算,并以此為切口,對(duì)深度學(xué)習(xí)、λ演算等領(lǐng)域進(jìn)行了深入淺出的講解。第3部分是自動(dòng)微分在實(shí)際場景中的應(yīng)用,除了算法優(yōu)化、神經(jīng)網(wǎng)絡(luò)等極其經(jīng)典的應(yīng)用場景,這一部分還給出了自動(dòng)微分在工程建模、量子計(jì)算等方面的理論及應(yīng)用。
本書涵蓋的范圍雖廣,但對(duì)其中每個(gè)領(lǐng)域的介紹都絕非淺嘗輒止,無論材料的選取、內(nèi)容的編排,還是論述的視角、觀點(diǎn)的呈現(xiàn),均不乏新穎之處。通過本書的學(xué)習(xí),讀者不但可以掌握J(rèn)AX開源框架的用法,還可以獲悉JAX在可微分編程領(lǐng)域的具體應(yīng)用方法。本書適合在工作中會(huì)用到自動(dòng)微分技術(shù)的工程技術(shù)人員、高校科研人員閱讀,也適合對(duì)JAX感興趣并希望能掌握其應(yīng)用的AI技術(shù)人員閱讀。
1.涵蓋了JAX在可微分編程領(lǐng)域的應(yīng)用,包括自動(dòng)微分的基本原理、數(shù)據(jù)結(jié)構(gòu)以及在算法優(yōu)化、神經(jīng)網(wǎng)絡(luò)、工程建模、量子計(jì)算等領(lǐng)域中的應(yīng)用。
2.作者程琪皓是北京大學(xué)物理學(xué)院本科生,多次獲得國家競賽的獎(jiǎng)項(xiàng),具有豐富的研究經(jīng)驗(yàn)和實(shí)踐能力。
3.通過本書的學(xué)習(xí),讀者不僅可以掌握J(rèn)AX開源框架的用法,還可以深入了解可微分編程的理論和實(shí)踐,并在AI技術(shù)領(lǐng)域中應(yīng)用。
4.內(nèi)容深入淺出,新穎可靠,詳細(xì)介紹了自動(dòng)微分的基本原理、JAX庫的特性和實(shí)際場景中的應(yīng)用方法。
5.閱讀本書后,你將可以了解JAX在可微分編程領(lǐng)域的應(yīng)用,并掌握自動(dòng)微分的基本原理和應(yīng)用技巧,幫助你提高工作效率并拓展職業(yè)發(fā)展前景。
程琪皓,北京大學(xué)物理學(xué)院本科生,曾獲第36屆全國中學(xué)生物理競賽(浙江賽區(qū))一等獎(jiǎng)、“未名學(xué)子”獎(jiǎng)學(xué)金、沈克琦獎(jiǎng)學(xué)金、北京大學(xué)三等獎(jiǎng)學(xué)金等多項(xiàng)獎(jiǎng)勵(lì)。研究方向涉及強(qiáng)化學(xué)習(xí)、低維超導(dǎo)實(shí)驗(yàn)、量子計(jì)算、分子模擬等多個(gè)領(lǐng)域。
六重奏女士的詛咒 1
第 1章 程序視角下的微分運(yùn)算 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òng)求導(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 符號(hào)微分(Symbolic Differentiation) 24
1.4.1 計(jì)算圖 24
1.4.2 計(jì)算圖的構(gòu)建 26
1.4.3 SymPy庫簡介 34
第 2章 自動(dòng)微分 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章 初識(shí)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 隨機(jī)數(shù)組的創(chuàng)建 84
3.2 數(shù)組的修改 86
3.2.1 多維數(shù)組的重排 86
3.2.2 多維數(shù)組的擴(kuò)展 89
3.2.3 多維數(shù)組的索引 92
3.2.4 越界行為的處理 95
3.2.5 異地更新 95
3.3 數(shù)組的運(yùn)算 97
3.3.1 語義廣播 97
3.3.2 數(shù)組運(yùn)算 98
3.3.3 線性代數(shù) 100
3.3.4 科學(xué)計(jì)算 102
3.3.5 愛因斯坦求和約定 102
3.4 使用蒙特卡羅方法估計(jì)圓周率 105
第4章 JAX的微分運(yùn)算 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的編程范式及即時(shí)編譯 150
5.1 函數(shù)式編程 151
5.1.1 函數(shù)式編程的價(jià)值觀 151
5.1.2 JAX中的即時(shí)編譯 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的并行計(jì)算 186
6.1 函數(shù)vmap 187
6.2 使用vmap在GPU上并行訓(xùn)練 194
6.3 函數(shù)pmap 197
6.4 使用pmap更新細(xì)胞自動(dòng)機(jī) 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 動(dòng)量法 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主動(dòng)反射面的形態(tài)調(diào)節(jié) 298
9.1 背景介紹 298
9.2 數(shù)據(jù)的預(yù)處理 301
9.3 約束優(yōu)化問題的提出及模型的訓(xùn)練 306
9.4 程序運(yùn)行結(jié)果的討論 314
第 10章 量子計(jì)算中的自動(dòng)微分 316
*10.1 量子計(jì)算的數(shù)學(xué)基礎(chǔ) 317
10.1.1 算符與量子態(tài) 317
10.1.2 算符的指數(shù) 323
10.1.3 算符的對(duì)易子 326
*10.2 量子計(jì)算的物理基礎(chǔ) 329
10.2.1 波粒二象性 329
10.2.2 薛定諤方程 331
10.2.3 動(dòng)量空間 338
*10.3 基于量子體系的自動(dòng)微分 341
10.3.1 量子比特 342
10.3.2 參數(shù)優(yōu)化 347
附錄A Python中類的介紹 354
附錄B 拓?fù)渑判?369
附錄C 信息和熵 376
附錄D 下降算法的收斂性分析 390
附錄E 神經(jīng)元的Hodgkin Huxley模型 400
后記 410