【math】梯度下降法(梯度下降法,牛頓法,高斯牛頓法,Levenberg-Marquardt算法)

何爲梯度?

一般解釋:

f(x)在x0的梯度:就是f(x)變化最快的方向

舉個例子,f()是一座山,站在半山腰,

The graph of a strictly concave quadratic function is shown in blue, with its unique maximum shown as a red dot. Below the graph appears the contours of the function: The level sets are nested ellipses.

往x方向走1米,高度上升0.4米,也就是說x方向上的偏導是 0.4

往y方向走1米,高度上升0.3米,也就是說y方向上的偏導是 0.3

這樣梯度方向就是 (0.4 , 0.3),也就是往這個方向走1米,所上升的高度最高。

(1*0.4/0.5)*0.4 +(1*0.3/0.5)*0.3 = 1*(0.3^2+0.4^2) = 0.5

這裏使用了勾股定理的前提是走的距離足夠小,因爲走的距離足夠小的時候,連續的曲面就看做一個平面,當然可以使用勾股定理。這裏說距離1米是爲了簡便。


往x方向走1米,高度上升0.4米,也就是說x方向上的偏導是  0.4。

往y方向走1米,高度下降0.3米,也就是說y方向上的偏導是 -0.3 ,也就是說沿着 -y軸方向是上升的。

這樣梯度方向就是 (0.4 , -0.3),想象一下,是位於座標軸的第四象限,這時沿着x和-y軸的分量都會上升。

和上面的情況一樣,距離仍然是 0.5 


所以,梯度不僅僅是f(x)在某一點變化最快的方向,而且是上升最快的方向,就如同室內溫度的例子中是溫度上升最快的方向。


梯度下降法:

由上面的討論可以知道,梯度是上升最快的方向,那麼如果我想下山,下降最快的方向呢,當然是逆着梯度了(將一點附近的曲面近似爲平面),這就是梯度下降法,由於是逆着梯度,下降最快,又叫最速下降法。

迭代公式:

\mathbf{b} = \mathbf{a}-\gamma\nabla F(\mathbf{a})


r是步長。


牛頓法:

(部分借鑑了:http://blog.csdn.net/luoleicn/article/details/6527049

解方程問題:

牛頓法最初用於求解方程根 f(x) = 0

首先得到一個初始解 x0,

一階展開:f(x) ≈ f(x0)+(x-x0)f'(x0)

令 f(x0)+(x-x0)f'(x0) = 0 

求解得到x,相比於x0,f(x)<f(x0)  (具體證明可以查看數值分析方面的書)



最優化問題中,牛頓法首先則是將問題轉化爲求 f‘(x) = 0 這個方程的根。

首先得到一個初始解 x0,

一階展開:f ’(x) ≈ f ‘(x0)+(x-x0)f '’(x0)

令 f ‘(x0)+(x-x0)f '’(x0) = 0 

求解得到x,相比於x0,f ‘(x)<f ’(x0)


也可以用上面借鑑的博文(也是wiki)中所說的那種方法,把 delta x 作爲一個變量,讓 f(x)對其偏導爲0 什麼的, 反正我記不住。


最小化f(x)之高維情況:

\mathbf{x}_{n+1} = \mathbf{x}_n - \gamma[H f(\mathbf{x}_n)]^{-1} \nabla f(\mathbf{x}_n).


梯度 代替了低維情況中的一階導

Hessian矩陣代替了二階導

求逆 代替了除法


wiki上的一個圖,可以看到 二者區別,

梯度下降法(綠色)總是沿着當前點最快下降的方向(幾乎垂直於等高線),相當於貪心算法。

牛頓法利用了曲面本身的信息,能夠更直接,更快的收斂。

A comparison of gradient descent(green) and Newton's method (red) for minimizing a function (with small step sizes). Newton's method uses curvature information to take a more direct route.

高斯牛頓法:

高斯牛頓法實際上是牛頓法的在求解非線性最小二乘問題時的一個特例。

目標函數:

S(\boldsymbol \beta)= \sum_{i=1}^m r_i^2(\boldsymbol \beta).

該函數是趨於0的,所以直接使用高維的牛頓法來求解。

迭代公式:


\boldsymbol\beta^{(s+1)} = \boldsymbol\beta^{(s)} - \mathbf H^{-1} \mathbf g \,

和牛頓法中的最優化問題高維迭代公式一樣


目標函數可以簡寫:

 S = \sum_{i=1}^m r_i^2,


梯度向量在方向上的分量:

g_j=2\sum_{i=1}^m r_i\frac{\partial r_i}{\partial \beta_j}.                  (1)


Hessian 矩陣的元素則直接在梯度向量的基礎上求導:

H_{jk}=2\sum_{i=1}^m \left(\frac{\partial r_i}{\partial \beta_j}\frac{\partial r_i}{\partial \beta_k}+r_i\frac{\partial^2 r_i}{\partial \beta_j \partial \beta_k} \right).


高斯牛頓法的一個小技巧是,將二次偏導省略,於是:

H_{jk}\approx 2\sum_{i=1}^m J_{ij}J_{ik}(2)


(1)(2)改寫成 矩陣相乘形式:

\mathbf g=2\mathbf{J_r}^\top \mathbf{r}, \quad \mathbf{H} \approx 2 \mathbf{J_r}^\top \mathbf{J_r}.\,


其中 Jr 是雅克比矩陣,r是 ri 組成的列向量。

代入牛頓法高維迭代方程的基本形式,得到高斯牛頓法迭代方程:

\boldsymbol{\beta}^{(s+1)} = \boldsymbol\beta^{(s)}+\Delta;\quad \Delta = -\left( \mathbf{J_r}^\top \mathbf{J_r} \right)^{-1} \mathbf{J_r}^\top \mathbf{r}.

\boldsymbol \beta^{(s+1)} = \boldsymbol \beta^{(s)} - \left(\mathbf{J_r}^\top \mathbf{J_r} \right)^{-1} \mathbf{ J_r} ^\top \mathbf{r}(\boldsymbol \beta^{(s)})\mathbf{J_r} = \frac{\partial r_i (\boldsymbol \beta^{(s)})}{\partial \beta_j} (wiki上的公式,我覺得分母寫錯了)

具體推導也可以看wiki

http://en.wikipedia.org/wiki/Gauss%E2%80%93Newton_algorithm#Derivation_from_Newton.27s_method


m ≥ n 是必要的,因爲不然的話,JrTJr肯定是不可逆的(利用rank(A'A) = rank(A))

若m=n:

\boldsymbol \beta^{(s+1)} = \boldsymbol \beta^{(s)} - \left( \mathbf{J_r} \right)^{-1} \mathbf{r}(\boldsymbol \beta^{(s)})


擬合問題中:

r_i(\boldsymbol \beta)= y_i - f(x_i, \boldsymbol \beta).

由於Jf = -Jr

故用 Jf而不是Jr來表示迭代公式:

\boldsymbol \beta^{(s+1)} = \boldsymbol \beta^{(s)} + \left(\mathbf{J_f}^\top \mathbf{J_f} \right)^{-1} \mathbf{ J_f} ^\top \mathbf{r}(\boldsymbol \beta^{(s)}).



normal equations(法方程):

delta實際是一個法方程,法方程是可以由方程推過來的,那麼這個過程有什麼意義呢?

其實高斯牛頓法可以利用一階泰勒公式直接推導(直接當成解方程問題,而不是最優化問題,繞過求解H的過程):

迭代之後的值:

\mathbf{r}(\boldsymbol \beta)\approx \mathbf{r}(\boldsymbol \beta^s)+\mathbf{J_r}(\boldsymbol \beta^s)\Delta

目標近似變成:

\mathbf{min}\|\mathbf{r}(\boldsymbol \beta^s)+\mathbf{J_r}(\boldsymbol \beta^s)\Delta\|_2^2,

求解 delta 的過程實際就是法方程的推導過程。

之所以能夠直接當做解方程問題,是因爲目標函數的最優值要趨於0.

高斯牛頓法只能用於最小化平方和問題,但是優點是,不需要計算二階導數。


Levenberg-Marquardt方法:

高斯-牛頓法中爲了避免發散,有兩種解決方法

1.調整下降步伐:\boldsymbol \beta^{s+1} = \boldsymbol \beta^s+\alpha\  \Delta. 0<\alpha<1

2.調整下降方向:\left(\mathbf{J^TJ+\lambda D}\right)\Delta=\mathbf{J}^T \mathbf{r}

\lambda\to+\infty時:\Delta/\lambda\to \mathbf{J}^T \mathbf{r}(這裏好像wiki又錯了),即方向和梯度方向一樣,變成了梯度下降法。

相反,如果λ爲0,就變成了高斯牛頓法。

Levenberg-Marquardt方法的好處在於可以調節:

如果下降太快,使用較小的λ,使之更接近高斯牛頓法

如果下降太慢,使用較大的λ,使之更接近梯度下降法

If reduction of S is rapid, a smaller value can be used, bringing the algorithm closer to the Gauss–Newton algorithm, whereas if an iteration gives insufficient reduction in the residual, λ can be increased, giving a step closer to the gradient descent direction.






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章