經過前一篇部落格的簡單介紹,我們對導數、方向導數、梯度應該有一個較為清晰的認識。在知道梯度之後,我們就可以通過一些無約束的優化方法來求極值。
梯度下降法
梯度下降法(Gradient descent),顧名思義,就是自變數沿著梯度向量的反方向進行移動。
對於一個 \(R^m \to R\) 的函式 \(y = f(\bm x)\),初始時 \(\bm x = \bm x_0\),我們想要得到函式 \(y = f(\bm x)\) 的極小值點 \(\bm x^*\),如果能夠求得 $ f(\bm x)$ 的梯度 \(\nabla f(\bm x)\),那麼我們就可以用梯度下降法進行迭代求極小值的近似解。(還有不能求梯度的情況嗎?還真有,機器學習中如果輸入的資料有缺失,那麼 loss function 求出的梯度中仍然會含有未知數,這個時候可以用 EM 演算法求解)
記自變數 \(\bm x\) 在第 \(t\) 迭代後的值為 \(\bm x_{t}\),則自變數的更新公式為:
\[
\bm x_{t+1} = \bm x_{t} - \alpha \cdot \nabla f(\bm x_{t})
\tag{1}
\]
式(1)中,\(\alpha\) 為步長,在深度學習中被稱為學習率(learning rate),控制了梯度下降速度的快慢。
機器學習中的梯度下降法
梯度下降法和反向傳播演算法是深度學習的基石,我們用梯度下降法更新神經網路的引數,用反向傳播演算法一層一層地將誤差由後向前傳播(就是用鏈式法則對 cost function 求偏導)。
如果我們定義 loss function 為
\[
L(\bm w) = g(\bm w; (\bm x, y)) = (y - \bm w^{\top} \bm x)^2
\tag{2}
\]
那麼 cost function 就應該為
\[
C(\bm w) = \frac{1}{n}\sum_{i = 1}^n L(\bm w) = \frac{1}{n} \sum_{i = 1}^n (y_i - \bm w^{\top} \bm x_i)^2
\tag{3}
\]
其中 \(n\) 為一次性計算 loss 的樣本個數,在深度學習中常常就是一個 batch 的大小。(也有人把 cost function 中的 \(\frac{1}{n}\) 改為 \(\frac{1}{n-1}\),這就是有偏估計和無偏估計,影響不大。)
cost function/loss function 中,自變數是神經網路的權重,而我們的輸入資料是已知的,這個時候我們就可以用用式(4)更新引數了:
\[
\bm w_{t+1} = \bm w_{t} - \alpha \cdot \nabla C(\bm w_{t})
\tag{4}
\]
如果輸入樣本 \((\bm x_i, y_i)\) 中含有未知數怎麼辦?資料缺失了怎麼辦,在深度學習中,我們可能會選擇剔除或者補全資料,然後再輸入到神經網路中。如果不補全缺失值,對式(3)算梯度,梯度中會含有未知數,這樣式(4)沒法更新引數。
假設訓練集中含有 \(N\) 個資料樣本,我們對式(3)中的 \(n\) 取不同值(即一次性計算 loss 的樣本個數取不同值),會有不同的影響。如果 \(n = 1\),這就是 stochastic gradient descent;如果 \(1 <n< N\),這就是 mini-batch gradient descent;(mini-batch 的 batch size 一般不會很大。)如果 \(n = N\),這就是 (batch) gradient descent。
最速下降法
最速下降法(Steepest descent)是梯度下降法的一種更具體實現形式,其理念為在每次迭代中選擇合適的步長 \(\alpha_t\),使得目標函式值能夠得到最大程度的減少。
每一次迭代,沿梯度的反方向,我們總可以找到一個 \(\bm x_{t+1}^* = \bm x_{t} - \alpha_t \nabla f(\bm x_{t})\),使得在這個方向上 \(f(\bm x_{t+1}^*)\) 取最小值。即
\[
\alpha_t = \mathop{\arg\min}_{\alpha \ge 0} f(\bm x_{t} - \alpha \nabla f(\bm x_{t}))
\tag{5}
\]
有意思的是,最速下降法每次更新的軌跡都和上一次垂直。而且只要梯度 \(\nabla f(\bm x_{t}) \not = 0\),則 \(f(\bm x_{t+1}) < f(\bm x_{t})\)。(即梯度不等於 0 時,肯定會下降。)具體證明參見《最優化導論》 第8.2節。
牛頓法
在確定搜尋方向時,梯度下降和最速下降只用到了目標函式的一階導數(梯度),而牛頓法(Newton's method)用到了二階(偏)導數。
Newton's method (sometimes called the Newton-Raphson method) uses first and second derivatives and indeed does perform better than the steepest descent method if the initial point is close to the minimizer.
牛頓法自變數 \(\bm x\) 的更新公式為:
\[
\bm x_{t+1} = \bm x_{t} - F(\bm x_{t})^{-1}\nabla f(\bm x_{t})
\tag{6}
\]
其中 \(F(\bm x_{t})^{-1}\) 為二階偏導數矩陣的逆(即 Hessian 矩陣的逆)。(為什麼更新公式是這樣的?可以將 \(f(\bm x)\) 在 \(\bm x_{t}\) 處進行二階泰勒展開,然後求導。)
Newton's method has superior convergence properties if the starting point is near the solution. However, the method is not guaranteed to converge to the solution if we start far away from it (in fact, it may not even be well-defined because the Hessian may be singular).
當起始點 \(\bm x_0\) 離極值點 \(\bm x^*\) 足夠近的時候,式(6)的更新公式沒有問題。但是,當 \(\bm x_0\) 離極值點 \(\bm x^*\) 較遠時,我們並不能保證牛頓法能收斂到極值點。甚至,牛頓法可能都不是一個 descent 的方法,即可能 \(f(\bm x_{t+1}) \ge f(\bm x_{t})\)。幸運的是可以做一點修改,確保牛頓法是一個 descent 的方法。(Hessian 如果不是正定的,那麼就沒救了,牛頓法並不適合)
如果 Hessian 矩陣正定(\(F(\bm x_{t}) > 0\) ),並且 \(\nabla f(\bm x_{t}) \not = 0\),那麼我們的搜尋的方向為
\[
\bm d_t = - F(\bm x_{t})^{-1}\nabla f(\bm x_{t}) = \bm x_{t+1} - \bm x_{t}
\tag{7}
\]
要想從 \(\bm x_{t}\) 到 \(\bm x_{t+1}\) 是 descent direction,只要存在一個 \(\overline \alpha > 0\),使得所有 \(\alpha \in (0, \overline \alpha)\),滿足 \(f(\bm x_{t} + \alpha \bm d_t) < f(\bm x_{t})\)。
此時牛頓法的更新公式為:
\[
\bm x_{t+1} = \bm x_{t} - \alpha_tF(\bm x_{t})^{-1}\nabla f(\bm x_{t})
\tag{8}
\]
對於 \(\alpha_t\),我們也可以在方向 \(\bm d_t\) 上進行線性搜尋,使得 \(\alpha_t = \mathop{\arg\min}_{\alpha \ge 0} f(\bm x_{t} - \alpha F(\bm x_{t})^{-1}\nabla f(\bm x_{t}))\)。
這個時候,梯度下降法和牛頓法除了一個 Hessian 矩陣外,是不是超級像了。如果 Hessian 不是正定的,牛頓法就沒法用。當自變數維數很大時,Hessian 矩陣的計算也很費事,而且還得求逆。
可能會有一個疑問,梯度下降法中梯度的反方向不是當前點下降最快的方向嗎,為什麼牛頓法會收斂更快,牛頓法的更新方向更好嗎?牛頓法是二階收斂,梯度下降法是一階收斂,所以牛頓法就更快。更通俗地,梯度下降法只從當前位置選擇一個坡度最大的方向走一步,而牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮走了一步後,坡度是否會變得更大。從幾何上說,牛頓法就是用一個二次曲面去擬合當前位置的的區域性曲面,而梯度下降法用的是一個平面去擬合,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。詳情參見 最優化問題中,牛頓法為什麼比梯度下降法求解需要的迭代次數更少? -- 大餅土博。
以下兩種方法都是對牛頓法的修改!!!
共軛方向法
updating。。。
偽牛頓法
updating。。。
系列
【機器學習之數學】01 導數、偏導數、方向導數、梯度
【機器學習之數學】02 梯度下降法、最速下降法、牛頓法、共軛方向法、擬牛頓法
References
Edwin K. P. Chong, Stanislaw H. Zak-An Introduction to Optimization, 4th Edition
最優化問題中,牛頓法為什麼比梯度下降法求解需要的迭代次數更少? -- 大餅土博
Newton's method in optimization - Wikipedia