在機器學習中, 一般須要求某個函數的最值(好比最大似然中須要求的似然的最大值). 線搜索(line search)是求得一個函數\(f(x)\)的最值的兩種經常使用迭代方法之一(另一個是trust region). 其思想是首先求得一個降低方向,在這個方向上\(f(x)\)會降低, 而後是求得\(f(x)\)在這個方向上降低的步長. 求降低方向的方法有不少, 好比梯度降低, 牛頓方法和Quasi-Newton方法, 而步長能夠是固定值, 也能夠經過諸如回溯線搜索來求得.算法
線搜索是一種迭代的求得某個函數的最值的方法. 對於每次迭代, 線搜索會計算獲得搜索的方向\(p_k\)以及沿這個方向移動的步長\(\alpha_k\).app
大多數的線搜索方法都會要求\(p_k\)是降低方向(descent direction), 亦即須要知足如下條件: \({p_k}^T{\nabla}f_k <0\), 這樣就可以保證函數\(f\)(x)沿着這個方向是降低的. 通常來講, 搜索方向是\(p_k=-B_k^{-1}\nabla f_k\)機器學習
其中\(B_k\)是一個對稱非奇異矩陣. 在最深降低(steepest descent)方法中, \(B_k\)是單位矩陣\(I\), 在牛頓方法(Newton)中\(B_k\)則是海森(Hessian)矩陣\({\nabla}^2f(x_k)\), 在Quasi-Newton方法中經過迭代求得Hessian矩陣的近似矩陣.函數
當\(p_k\)由上式定義, 且\(B_k\)是正定矩陣時: $$p_k^T\nabla f_k = -\nabla f_k^T B_k^{-1}\nabla f_k <0$$因此\(p_k\)是降低方向(descent direction).學習
步長\(\alpha\)應該最小化下面的函數:$$\phi (\alpha)=f(x_k+\alpha p_k)$$blog
可是求得使上式最小的\(\alpha\)比較困難, 且計算量比較大, 實際經常使用的方法是在可接受的計算量的狀況下儘量的求得較大的步長, 以使得\(\phi(\alpha)\)儘量的下降. 經典的線搜索方法經過迭代來求得\(\alpha\), 直至達到某個中止條件. 通常的線搜索方法都包含如下兩個步驟:ip
若是\(f(x)\)是一個可微分的凸函數, 則咱們的目標是求得\(\alpha\), 使得$$\alpha=arg \min_{\lambda>0}f(x+\lambda p)$$get
令\(\phi (\alpha)=f(x_k+\alpha p_k)\), 其中\(\phi(\alpha)\)是\(\alpha\)的凸函數, 因此問題轉化爲求:$$\bar{\alpha}=arg \min_{\alpha>0} \phi(\alpha)$$it
由於\(\phi(\alpha)\)是凸函數, 因此\(\phi'(\bar{\alpha})=0\). 能夠獲得\(\phi'(\alpha)=\nabla f(x+\alpha p)^T p\), 由於p是梯度降低方向, 因此\(\phi'(0)<0\).io
假設咱們知道一個\(\hat{\alpha}\)使得\(\phi'(\hat{\alpha})>0\), 那麼使得\(\phi'(\bar{\alpha})=0\)的\(\alpha\)確定位於(0,\(\hat{\alpha}\))區間內. 而後咱們可使用如下二分查找算法來求解\(\phi'(\alpha) \approx 0\)
使用二分查找法來求步長的計算複雜度很高, 由於在最小化\(f(x)\)的每次迭代中咱們都須要執行一次線搜索, 而每次線搜索都要用上述的二分查找算法. 咱們能夠在犧牲必定的精度的條件下來加快計算速度, 回溯線搜索是一種近似線搜索算法.
首先, 咱們要求每次的步長\(\alpha_k\)都使得\(f(x)\)充分的下降:$$f(x_k +\alpha p_k)\leq f(x_k)+c_1 \alpha \nabla f_k^T p_k$$
上述條件稱做充分降低條件, 其中\(c_1 \in (0,1)\), 通常來講\(c_1=10^{-4}\). 亦即\(f(x)\)的降低應該至少和\(\alpha_k\)以及\(\nabla f_k^T p_k\)成正比. 以下圖所示, 上式的右邊\(f(x_k)+c_1 \alpha \nabla f_k^T p_k\)是一個線性函數, 能夠表示爲\(l(\alpha)\).
充分降低條件規定只有使得\(\phi(\alpha)\leq l(\alpha)\)的\(\alpha\)才知足條件. 其區間如上圖所示.
單獨只有充分降低條件是不夠的, 由於如上圖, 全部充分小的\(\alpha\)都知足上述條件, 可是\(\alpha\)過小會致使降低不充分, 爲了排除這些小的\(\alpha\), 咱們引入了第二個要求, 亦即曲率條件(curvature condition):$$\nabla f(x_k + \alpha_k p_k)^T p_k \geq c_2 \nabla f_k^T p_k$$其中\(c_2 \in (c_1,1)\). 上式的左邊就是\(\phi'(\alpha_k)\), 右邊則是\(\phi'(0)\), 亦即上式要求\(\phi'(\alpha_k)\)大於等於\(c_2\)倍的\(\phi'(0)\), 這是由於若是\(\phi'(\alpha)\)是很小的負數, 則咱們能夠在這個方向上繼續使得\(f(x)\)降低更多. 以下圖所示
上述兩個條件合起來稱做Wolfe條件:
$$f(x_k +\alpha p_k)\leq f(x_k)+c_1 \alpha \nabla f_k^T p_k$$
$$\nabla f(x_k + \alpha_k p_k)^T p_k \geq c_2 \nabla f_k^T p_k$$
其中\(0<c_1 < c_2 <1\)
咱們可使用如下算法來求得知足Wolfe條件的步長\(\alpha\), 其主要思想是從一個初始的步長以後逐步減小\(\alpha\), 直至其知足充分降低條件, 同時能夠防止\(\alpha\)變得過小:
3. 返回\(\alpha_k=\alpha\)
參考文獻:
[1]. Numerical Optimization, Chapter 3, p35-p42. J. Nocedal, S.Wright.
[2]. Continuous Optimization Methods: Line search methods: one-dimensional optimization.
[3]. Wikipedia: Line Search.