一、梯度下降法
x k + 1 = x k ? α ? f ( x k ) x_{k+1} = x_k - \alpha \nabla f(x_k) xk+1?=xk??α?f(xk?)
- 這是普通的梯度下降公式,有兩個量是關鍵,步長 α \alpha α和方向 ? f ( x k ) \nabla f(x_k) ?f(xk?)。這里的方向直接選擇了梯度方向,也是使用最多,但是并不一定要是這個方向。
二、最速梯度下降
x k + 1 = x k ? α ? f ( x k ) x_{k+1} = x_k - \alpha \nabla f(x_k) xk+1?=xk??α?f(xk?)
? f ( x k + 1 ) ? α k = 0 , α k = r k T r k r k T A r k \frac{\partial f(x_{k+1})}{\partial \alpha_k} = 0, \alpha_k = \frac{\mathbf{r}_k^T \mathbf{r}_k}{\mathbf{r}_k^T A \mathbf{r}_k} ?αk??f(xk+1?)?=0,αk?=rkT?Ark?rkT?rk??
- 最速梯度下降與梯度下降的區別在于采用了一個公式計算步長 α \alpha α,計算思路就是在當前梯度方向上盡量降低評價函數
- 推導過程可以參考https://www.bilibili.com/video/BV1kM4y177s1/?spm_id_from=333.337.search-card.all.click&vd_source=a686d8f8b0e9b94066f2d4ba714466e7
- 這樣沒次更新后在之前的梯度方向上已經沒有可以讓f健翔的方向了,所以下一個梯度一定會與之前梯度正交
三、共軛梯度下降
整體講解視頻:
https://www.bilibili.com/video/BV1kM4y177s1/?spm_id_from=333.337.search-card.all.click&vd_source=a686d8f8b0e9b94066f2d4ba714466e7
為什么若干共軛梯度在一起可以高效到達期望點:https://blog.csdn.net/bitcarmanlee/article/details/121522734
講解文字版:
https://blog.csdn.net/weixin_43940314/article/details/121125847
- 最速梯度下降改變了步長,還可以改變方向,理想狀態下是梯度之間可以相互垂直,這樣不會出現最速梯度下降那樣互相抵消的問題,推導如下:
- 在正交的前提下可以直接計算步長,但是這樣存在的問題是并不知道 e i e_i ei?,如果知道誤差,直接算結果就行了,所以并沒有一種叫做正交梯度下降的方法。因此選擇了另一種選擇方向的思路,采用共軛梯度的方向,也就是梯度方向之間相互共軛。
- 共軛向量定義如下:
- 共軛向量有一個性質是線性無關
- 這里我有一個疑惑是相互共軛的向量能像正交向量那樣高效的達到期望點嗎?也就是共軛向量可以簡潔的表示期望點嗎?其實是可以的,推導https://blog.csdn.net/bitcarmanlee/article/details/121522734
- 方法推導過程如下:
- 共軛梯度的步長是用最速梯度下降的方法算的,用推導如下:
- 而方向就是先定義一些線性無關量,然后在每步利用類似施密特正交化的思路,將每個線性無關量轉換成共軛量。向量之間相互共軛也線性無關,每次完成一次迭代就失去了一個方向上的誤差,之后的梯度方向肯定有自己獨特的信息,所以也是線性無關的(這可可以這樣想,一個二維的誤差空間,線性無關梯度方向有兩個,第一次迭代去除一個維度后,新的梯度向量肯定有自己另一個維度的信息)。
- 之前說最理想的梯度方向是相互正交其實是不準確的,只要梯度向量之間相互線性無關,這就是很好的梯度向量了。正交的梯度向量是線性無關的,但是沒法算法。所以利用另外一個讓梯度向量相互線性無關的可能方案,也就是共軛向量。