首先簡介梯度法的原理。首先一個實值函數$R^{n} \rightarrow R$的梯度方向是函數值上升最快的方向。梯度的反方向顯然是函數值下降的最快方向,這就是機器學習里梯度下降法的基本原理。但是運籌學中的梯度法略有不同,表現在步長的選擇上。在確定了梯度方向(或反方向)是我們優化目標函數值的方向后,我們不能夠直接獲得最佳的步長。常規的做法是選定一個固定的步長,而運籌學中的做法是將問題轉化為一個一維搜索問題,進而通過求解這個一維問題(關於步長的函數)的最大最小值獲得最佳步長。
一個好消息是若目標函數$f(x)$二次連續可微, 且海森矩陣 $∇^2 f(x)$ 負定,那么最優步長的近似值可以由如下的公式給出。$$r_k = -\frac{∇f(x^{(k)})^T∇f(x^{(k)})}{∇f(x^{(k)})^T∇^2f(x^{(k)})∇f(x^{(k)})}$$
下面給出一例利用梯度法求函數極小值(如果是凸規划問題同時也是最小值)的Python實現: