Jacobian矩陣和Hessian矩陣的作用是什麼?Mischief Black2018-04-10 13:18:56

分別的作用是:多元向量函式的的線形逼近;多元函式的極值點判定

Jacobian矩陣和Hessian矩陣的作用是什麼?Round Leviathan2018-04-19 08:51:57

分別對應一階Taylor展開中的f‘(x)和f’‘(x)

Jacobian矩陣和Hessian矩陣的作用是什麼?知乎使用者2018-05-12 14:40:55

既然問了Hessian,主要是在Optimization裡用的比較多。

假設輸出是一個scalar。

Jacobian就是廣義輸出對廣義輸入的sensetivity。

Hessian就是在這個基礎上再加一級Jacobian,得到 local 曲率的一個描述。 有了曲率,演算法本身這個面長什麼樣才比較有數。

Jacobian矩陣和Hessian矩陣的作用是什麼?知乎使用者2018-05-24 12:20:59

一般說jacobian矩陣是指向量對另外一個向量的一階導數。而Hessian矩陣是一個標量對一個向量的二階導數。前者在離散pde 中常用,後者在最佳化中常用,但是都是作為線性或者非線形系統的係數矩陣, 即A*x=b。

在最佳化中根據hessian的特性(nonsingularity, indefiniteness/positive-definiteness, ),還可以判斷最佳化問題的適定性(well-posedness),second-order sufficent optimility conditions。

當然你可以說hessian是nabla J的Jacobian矩陣。

二者都可以看成是taylor series中的一部分,所以主要是用來線性化或者Quadratic Programming中,本質上是為了計算某種correction。 記住在離散的世界,我們基本只能處理linear or quadratic systems, 所以對於其他非線性系統,只能採用taylor 展開,然後上newton。

實際問題中hessian可能會很難計算,所以經常採取近似,這就是quasi-newtion, inexact newton。常用的bfgs就是其一。或者只計算matrix-vector product,這樣就是所謂的matrix-free approach, 難點在於構造高效的預處理。可以使用finite-difference, complex-step, auto-differentiation, 或者second-order adjoint。

Jacobian矩陣和Hessian矩陣的作用是什麼?浮生六記2021-10-31 09:51:15

1.定義和幾何性質

Jacobian矩陣:

f:R^n\rightarrow R^m

J_{i,j} = \frac{\partial}{\partial{x_j}}f(x)_i

Jacobian矩陣和Hessian矩陣的作用是什麼?

Hessian矩陣:

f: R^n\rightarrow R

\frac{{\partial}^2}{\partial{x_i}\partial{x_j}}f

Jacobian矩陣和Hessian矩陣的作用是什麼?

Jacobian是一階導數,告訴我們函式如何變化,如果f是標量的話,Jacobian就是一個向量,指向f增大最快的方向。Jacobian為零的點叫臨界點,可能是最大、最小或者鞍點。

f在特定方向e的一階導數為

e*J

Hessian是二階導數,相當於曲率,告訴我們函式的凹凸性質,如下圖所示:

Jacobian矩陣和Hessian矩陣的作用是什麼?

從左到右分別是凹、平、凸,當一個點的Jacobian為0時,可以透過Hessian判斷這個點為極大、極小、鞍點。

如果f二階偏導連續,那麼Hessian是對稱的,實對稱的情況下Hessian可以進行特徵值分解,分解為:

H=Q\Lambda Q^T

(參見如何理解矩陣特徵值?)

f在特定方向e的二階導數為

e^THe

。由此我們可以知道在H的特徵向量方向的截面的曲率相對應的,就是這個特徵向量對應的特徵值。如果某個臨界點(Jacobian為0的點)處H為正定的話,沿著任何特徵值方向這個函式都是凸的,這個點一定是最小值,如果H為負定的話這個區域性是凹的這個點一定是最大值,H有為零的特徵值或者有正有負的話,無法判斷。

2. 利用Jacobian和Hessian進行梯度下降

此時我們考慮 f 是一個值為標量的函式,那麼 J 為一個一維向量,H為一個二維矩陣。

最普通版的梯度下降:

x

加強版:對 f(x) 進行二階泰勒展開:

f(x)\approx f(x^0)+(x-x^0)^TJ+\frac{1}{2}(x-x^0)^TH(x-x^0)

使用學習率

\epsilon

x

,有:

f(x)- f(x^0)\approx\epsilon J^TJ+\frac{1}{2}(\epsilon)^2J^THJ

顯然,如果無腦梯度下降,

\frac{1}{2}(\epsilon)^2J^THJ

可能很大,使得這一步更新之後函式反而大了。求一下

\epsilon J^TJ+\frac{1}{2}(\epsilon)^2J^THJ

這個二次函式的最小值,得到比較合適的更新率:

\epsilon^*=\frac{J^TJ}{J^THJ}

但是上面還是限制在沿著梯度方向迭代的思路里面,格局小了,Hessian矩陣的條件數(最大本徵值和最小本徵值的比值的絕對值)很大的時候,沿著不同方向的變化率各向異性很大,梯度的反方向不一一定是長期看來變化最快的方向。

你看,下面這個圖裡頭是沿著梯度方向最佳化的路線,跌跌撞撞不如直指圓心:

Jacobian矩陣和Hessian矩陣的作用是什麼?

那咋辦?我們直接進行一個強制的二階泰勒級數展開,暴力認為就是一個二階函式,直接調到二階函式的極值點去:

f(x)\approx f(x^0)+(x-x^0)^TJ+\frac{1}{2}(x-x^0)^TH(x-x^0)

極值點為:

x^*=x^0-H^{-1}J^T

這個就是牛頓法。

(關於梯度下降,我在另一個問題裡有一個回答:如何理解隨機梯度下降(stochastic gradient descent,SGD)?

關於機器學習和深度學習,我在另一個另一個問題裡有一個回答:深度學習與機器學習的關係是什麼?)