jax可微分編程的筆記
1.1.1 求導的基本概念
所謂的導數是一個從集合F到自身的映射.
有時,我們也將一個從函數到函數的映射稱為一個操作,
這里的操作在物理學中也被稱作一個算符.
但在計算機中的操作符相當于數學中的一個函數,而非從
函數到函數的映射.
應該指出的是,如果我們將求導(包括偏導數)這樣的操作
視一個由程序所定義的操作grad,那么,grad操作的
輸入和輸出都將是相同的類型的函數。換言之,一個求導
操作應該被視作一個從函數的集合Fmn到其自身的映射;
容易看出,這樣的映射是確定并且唯一的。求導作為一種
操作的唯一性,是對其進行程序實現的數學前提。
1.1.2 梯度操作
梯度操作是一個從函數集Fn1到Fnn的映射。
從幾何的角度來看,f:Rn->R給出了一個n維空間之中的標量場。
它將n維空間中的一個點對應到一個實數;則grad f 對應著一個
n維空間之中的矢量場,它將n維空間中的一個點對應到一個n維
的矢量。映射的結果 grad f(x) 屬于 n 維空間,給出了n維空間
中標量場f在點x=(x1,x2,....xn)上增長最快的方向。有時,我也會
認為梯度操作 grad:Fn1->Fnn本身是n維的。
而從程序實現的角度來看,它等價于對多元函數同時進行了n次偏導數
的操作。
1.1.3 雅可比矩陣
矩陣形式記法,使得諸如鏈式求導法則,這樣的過程,可以被簡單的
寫成矩陣相乘。
1.2 手動求導
優點是不會引入額外的計算誤差,同時程序運行性能有保證。
缺點程序編寫易出錯,代碼難以擴展和復用。
1.3 數值微分
優點:原理簡單,程序易于實現
缺點:有誤差的引入的可能,輸入的函數的參數數量有限制。
1.4.1 計算圖
在編譯原理中,可能通過計算圖的構建,實現中綴表達表,和
前綴表達式,后綴表達式之間的相互轉化。
應該指出的是,計算圖在符號微分和自動微分中所扮演的地位是
本質性的。
1.4.2 計算圖的構建
由于求導操作作用于乘法時,表達式的長度將顯著地增長,因此,
在遞歸深度較大時,我們常常會面臨表達式的長度的指數級膨脹,
這是符號微分在實際場景中所面臨的困境之一。
1.4.3 SymPy庫簡介
SymPy庫能夠為我們保留到精確的分數,根號,及無理數Pi,這是
符號計算在解決實際問題時的一大應用。
不過,符號微分在實現對程序框架的設計提出了過高的要求:
所有的表達式必須是“閉合的”,即表達式中不得有條件語句和
循環語句等