天天看點

Jacobin和Hessian矩陣

有時我們需要計算輸入和輸出都為向量和函數的所有偏導數。包含所有這樣的偏導數的矩陣被稱為Jacobian矩陣。具體來說,如果我們有一個函數

Jacobin和Hessian矩陣

,

Jacobin和Hessian矩陣

的Jacobian矩陣

Jacobin和Hessian矩陣

定義為

Jacobin和Hessian矩陣

。有時,我們也對導數的導數感興趣,即二階導數(second derivative)。例如,有一個函數

Jacobin和Hessian矩陣

Jacobin和Hessian矩陣

的一階導數(關于

Jacobin和Hessian矩陣

)關于

Jacobin和Hessian矩陣

的導數記為

Jacobin和Hessian矩陣

Jacobin和Hessian矩陣

。二階導數告訴我們,一階導數(關于

Jacobin和Hessian矩陣
Jacobin和Hessian矩陣
Jacobin和Hessian矩陣

。在一維情況下,我們可以将

Jacobin和Hessian矩陣
Jacobin和Hessian矩陣

。二階導數告訴我們,一階導數如何随着輸入的變化而改變。它表示隻基于梯度資訊的梯度下降步驟是否會産生如我們預期那樣大的改善,是以它是重要的,我們可以認為,二階導數是對曲率的衡量。假設我們有一個二次函數(雖然實踐中許多函數都是二次的,但至少在局部可以很好地用二次近似),如果這樣的函數具有零二階導數,那就沒有曲率,也就是一條完全平坦的線,僅用梯度就可以預測它的值。我們使用沿負梯度方向下降代銷為

Jacobin和Hessian矩陣

的下降步,當該梯度是1時,代價函數将下降

Jacobin和Hessian矩陣

。如果二階導數是正的,函數曲線是向上凹陷的(向下凸出的),是以代價函數将下降得比

Jacobin和Hessian矩陣

少。

當我們的函數具有多元輸入時,二階導數也有很多。我們可以将這些導數合并成一個矩陣,稱為Hesian矩陣。Hessian矩陣

Jacobin和Hessian矩陣
Jacobin和Hessian矩陣

Hessian等價于梯度的Jacobian矩陣。

微分算子在任何二階偏導連續的點處可交換,也就是它們的順序可以互換:

Jacobin和Hessian矩陣
Jacobin和Hessian矩陣

這意味着

Jacobin和Hessian矩陣

,是以Hessian矩陣在這些點上是對稱的。在深度學習背景下,我們遇到的大多數函數的Hessian矩陣幾乎都是對稱的。因為Hessian矩陣是實對稱的,我們可以将其分解成一組實特征值和一組特征向量的正交陣。在特定方向d上的二階導數可以寫成

Jacobin和Hessian矩陣

。當d是H的一個特征向量時,這個方向的二階導數就是對應的特征值。對于其他的方向d,方向二階導數是所有特征值的權重平均,且與d夾角越小的特征向量的權重越大。最大特征值确定最大二階導數,最小特征值确定最小二階導數。我們可以通過(方向)二階導數預期一個梯度下降步驟能表現得多好

Jacobin和Hessian矩陣

。我們在目前點

Jacobin和Hessian矩陣

處函數f(x)的近似二階泰勒級數:

Jacobin和Hessian矩陣

其中g是梯度,H是

Jacobin和Hessian矩陣

點的Hessian。如果我們使用學習率

Jacobin和Hessian矩陣

,那麼新的點x将會是

Jacobin和Hessian矩陣

。代入上述的近似,可得

Jacobin和Hessian矩陣

其中有3項:函數的原始值、函數息率導緻的預期改善和函數曲率導緻的校正。當最後一項太大時,梯度下降實際上是可能向上移動的。當

Jacobin和Hessian矩陣

為零或負時,近似的泰勒級數表明增加

Jacobin和Hessian矩陣

将永遠使f下降。在實踐中,泰勒級數不會在

Jacobin和Hessian矩陣

大的時候也保持準确,是以在這種情況下我們必須采取更具啟發式的選擇。當

Jacobin和Hessian矩陣

為正時,通過計算可得,使近似泰勒級數下降最多的最優步長為

Jacobin和Hessian矩陣

最壞的情況下,g與H最大特征值

Jacobin和Hessian矩陣

對應的特征向量對齊,則最優步長是

Jacobin和Hessian矩陣

。當我們要最小化的函數能用二次函數很好地近似的情況下,Hessian的特征值決定了學習率的量級。

二階導數還可以用于确定一個臨界點是否是局部極大值點、局部極小值點或鞍點。回想一下,在臨界點處

Jacobin和Hessian矩陣

。而

Jacobin和Hessian矩陣

意味着

Jacobin和Hessian矩陣

會随着我們移向右邊而增加,移向左邊而減少,也就是

Jacobin和Hessian矩陣

對足夠小的

Jacobin和Hessian矩陣

成立。換句話說,當我們移向右邊,斜率開始指向右邊的上坡;當我們移向左邊,斜率開始指向左邊的上坡。是以我們得出結論,當

Jacobin和Hessian矩陣

Jacobin和Hessian矩陣

時,x是一個局部極小點。同理,當

Jacobin和Hessian矩陣
Jacobin和Hessian矩陣

時,x是一個局部極大點。這就是所謂的二階導數測試。不幸的是,當

Jacobin和Hessian矩陣

時,測試是不确定的。在這種情況下,x可以是一個鞍點或平坦區域的一部分。

在多元情況下,我們需要檢測函數的所有二階導數。利用Hessian的特征值分解,我們可以将二階導數測試擴充到多元情況。在臨界點處

Jacobin和Hessian矩陣

,我們通過檢測Hessian的特征值來判斷該臨界點是一個局部極大值、局部極小值還是鞍點。當Hessian是正定的(所有特征值都為正的),則該臨界點是局部極小值。因為方向二階導數在任意方向都是正的,參考機關變量的二階導數測試就能得出此結論。同樣的,當Hessian是負定的(所有特征值都是負的),這個點就是局部極大點。在多元情況下,實際上我們可以找到确定該點是否為鞍點的積極迹象(某些情況下)。如果Hessian的特征值中至少一個是正的且至少一個是負的,那麼x是f某個橫截面的局部極大點。最後多元二階導數測試可能像單變量版本那樣是不正确的。當所有非零特征值是同号的且至少有一個特征值是0時,這個檢測就是不确定的。當所有非零特征值是同号的且至少有一個特征值是0時,這個檢測就是不正确的。這是因為單變量的二階導數測試在零特征值對應的橫截面上是不确定的。

多元情況下,單個點處每個方向上的二階導數是不同的。Hessian的條件數衡量這些二階導數的變化範圍。當Hessian的條件數很差時,梯度下降法也會表現得很差。這是因為一個方向上的導數增加得很快,而在另一個方向上增加得很慢。梯度下降不知道導數的這種變化必須足夠小,以免沖過最小而向具有較強曲率的方向上升。這通常意味着步長太少,以至于在其他較小的曲率的方向上進展不明顯。

我們可以使用Hessian矩陣的資訊來指導搜尋,以解決這個問題。其中最簡單的方法是牛頓法(Nowton's method)。牛頓法基于一個二階泰勒展開來近似

Jacobin和Hessian矩陣

附近的f(x):

Jacobin和Hessian矩陣

接着通過計算,我們可以得到這個函數的臨界點:

如果f是一個正定二次函數,牛頓法隻要應用一次就能直接跳到函數的最小點。如果f不是一個真正二次但能在局部近似為正定二次,牛頓法則需要更多次疊代。疊代地更新近似函數和跳到近似函數的最小點可以比梯度下降更快地到達臨界點。這在接近局部極小點是一個特别有用的性質,但是在鞍點附近是有害的。當臨界點是最小點(Hessian的所有特征值都是正的)時牛頓法才适用,而梯度下降不會被吸引到鞍點(除非梯度指向鞍點)。僅使用梯度資訊的優化稱為一階優化算法,如梯度下降。使用Hessian矩陣的優化算法稱為二階優化算法,如牛頓法。

繼續閱讀