數值優化(Numerical Optimization)學習系列-計算導數(Calculating Derivatives)

概述

最優化問題中很多算法,包括非線性最優化、非線性等式等都需要計算導數。簡單函數可以直接進行人工計算或者編碼實現,對於複雜的情況,需要尋找一些方法進行計算或者近似。本節主要內容包括
1. 常見導數求解方法
2. 有限差分方法
3. 自動微分方法
4. 總結

常見導數求解方法

有限差分方法(Finite Differencing)

根據導數的定義,導數表示函數在給定點x處,給定無限小的涉動後函數值的改動。因此我們可以根據定義,在給定點x處給定一個無限小的抖動,看函數值的變化率,即

fxif(x+ϵei)f(xϵei)2ϵ

自動微分方法

基本思路就是將複雜的函數分解爲基本函數以及基本運算,然後通過構建有向無環圖進行求解。常見函數導數求解方法
這裏寫圖片描述
另外就是導數運算法則,例如函數加、減、乘除以及鏈式法則的應用。

符號微分法

有限微分近似算法

基礎思想是泰勒定理和Lipschitz連續。介紹如下:
1. 泰勒公式:

f(x+p)=f(x)+f(x)Tp+12pT2f(x+tp)p

2. Lipschitz continuous: 對任意的x和x2
dY(f(x1,x2))KdX(x1,x2)
參考wiki

有限微分近似算法主要是基於導數定義,在給定點x處給定一個無限小的改動,看函數的變化。

前向微分

定義:

f(x)xif(x+ϵei)f(x)ϵ

對於n維的向量,需要計算量爲(n+1)

方法推導

根據泰勒公式:

f(x+p)=f(x)+f(x)Tp+12pT2f(x+tp)p

假設||2f(x)||L ,L在一定範圍內,則有
||f(x+p)f(x)f(x)Tp||(L/2)||p||2
,此時令p=ϵei ,代入可以得到
f(x)xif(x+ϵei)f(x)ϵ+δ ;δ(L/2)ϵ

可見誤差和無限小的改動相關。

在用計算機解決問題時,需要注意的是計算機浮點數本身就會有誤差,例如對於double類型,該誤差爲u=1.1*10^(-16)。此時ϵ=u會得到最優的結果

中心微分方法

定義

fxif(x+ϵei)f(xϵei)2ϵ

對於N維向量,需要進行(2N+1)次運算

方法推導

該方法的基礎就是函數必須能保證二級導數存在並且滿足Lipschitz連續,此時根據泰勒公式

f(x+p)=f(x)+f(x)Tp+12pT2f(x+tp)p

變換後有
f(x+p)=f(x)+f(x)Tp+12pT2f(x)p+O(||p||3)

代入p=ϵeip=ϵei ,可以得到
f(x+ϵei)=f(x)+ϵf(x)xi+12ϵ22fx2i+O(||ϵ||3)

f(xϵei)=f(x)ϵf(x)xi+12ϵ22fx2i+O(||ϵ||3)

兩個等式相減,同時兩端同時除以ϵ 可以得到
fxif(x+ϵei)f(xϵei)2ϵ+O(ϵ2)

可見相比於前向微分,它的誤差變成O(ϵ2) 。考慮到計算機的精度問題,參數ϵ=u1/3 最優。

應用

雅克比矩陣(Jacobian)

定義,對於函數向量r:RnRm ,雅克比矩陣就是每一個函數對x求導得到的矩陣

J(x)=r1(x)Tr2(x)T...rm(x)T

根據有限微分的定義可以擴展到函數向量上
r(x)xir(x+ϵei)r(x)ϵ
此時計算一次可以得到矩陣的一列。
對於某些稀疏的矩陣,可以將不相交的變量進行分類,一次計算可以得到多列。

Hessian矩陣

Hessian矩陣是對稱的,如果按照優先微分的方法得到的Hessian矩陣可能不是對稱的,可以通過對稱位置取平均的方法。
對於很多重要的算法,需要求解的是Hessian和某向量的乘積,根據泰勒公式有

f(x+ϵp)=f(x)+ϵ2f(x)Tp+O(||ϵ||3)
,從而有
2f(x)Tpf(x+ϵp)f(x)ϵ
,由於一階導數可以得到,因此可以計算得到Hessian和某向量的乘積。

如果需要計算Hessian矩陣本身,則根據

f(x+p)=f(x)+f(x)Tp+12pT2f(x)p+O(||p||3)

代入p=ϵei ;p=ϵej ;p=ϵ(ei+ej) 推導可以得到
2fxixjf(x+ϵei+ϵej)f(xϵei)f(xϵej)f(x)ϵ2+O(ϵ)

對於稀疏的Hessian矩陣,可以利用Hessian對稱原理得到高效算法。

自動微分方法

根據前面的介紹,自動微分方法的主要思路是將複雜函數分解成簡單函數的簡單運算,然後合成最終的結果。主要有前向模式和後向模式,分別介紹如下。
在進行算法之前,一般需要將複雜函數表示成簡單函數以及運算的有向無環圖,例如:f(x)=(x1x2sinx3+ex1x2)/x3 ,可以表示爲
這裏寫圖片描述
圖示爲
這裏寫圖片描述
在實際應用中不需要人工構建該圖。

前向模式

從前向後依次計算各個節點對目標節點的導數,思路是鏈式規則。
例如

x7=x7x4x4+x7x5x5

如果計算了所有的xi 則最終的結果x9

後向模式

和前向模式相反,根據節點的孩子節點計算得到該節點的導數,BP算法和圖置信傳播都是利用該思想。

fxi=j a child ofifxjxjxi

對比

  1. 對於結果是實數的函數,即f:RnR ,此時後向方式效率更高,對於函數向量,即f:RnRm ,兩者效率差不多
  2. 對於存儲空間,後向模式需要保存所有的中間導數結果,可以通過一些優化算法進行優化,例如check pointing

總結

通過該小結的學習,可以瞭解到
1. 常見計算導數的方法
2. 有限微分原理和可選方法
3. 自動微分原理和可選方法
4. 應用到計算梯度、雅克比矩陣或者Hessian矩陣,以及稀疏情況下如何優化。

發佈了59 篇原創文章 · 獲贊 123 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章