機器學習中很多數值優化算法都會用到線搜索(line search)。線搜索的目的是在搜索方向上找到是目標函數\(f(x)\)最小的點。然而,精確找到最小點比較耗時,由於搜索方向本來就是近似,所以用較小的代價找到最小點的近似就可以了。 Backtracking Line Search(BLS)就是這么一種線搜索算法。
BLS算法的思想是,在搜索方向上,先設置一個初始步長\({\alpha _0}\),如果步長太大,則縮減步長,知道合適為止。
上面的想法要解決兩個問題:
1. 如何判斷當前步長是否合適 (Armijo–Goldstein condition)
\[f({\bf{x}} + \alpha {\mkern 1mu} {\bf{p}}) \le f({\bf{x}}) + \alpha {\mkern 1mu} c{\mkern 1mu} m{\mkern 1mu} \]
\[m = {{\bf{p}}^{\rm{T}}}{\mkern 1mu} \nabla f({\bf{x}}){\mkern 1mu} \]
其中,\({\bf{p}}\)是當前搜尋方向,\(\alpha \)是步長,\({\mkern 1mu} c{\mkern 1mu} \)是控制參數,需要根據情況人工核定。
從上式可以看出,當前點的斜率越小,\(f({\bf{x}} + \alpha {\mkern 1mu} {\bf{p}}) - f({\bf{x}})\)的要求越小,步長就越小。對於一般的凸問題,搜尋點越接近最優點,原函數的斜率越較小,因此步長越小,這也是符合直覺的。
2. 如何則縮減步長
搜索步長的縮減通過\(\tau {\mkern 1mu} \)參數來控制,主要通過人工核定,既\({\alpha _j} = \tau {\mkern 1mu} {\alpha _{j - 1}}\)
總結一下BLS算法的流程如下:
1. 設置初始步長\({\alpha _0}\)
2. 判斷\(f({\bf{x}} + \alpha {\mkern 1mu} {\bf{p}}) \le f({\bf{x}}) + \alpha {\mkern 1mu} c{\mkern 1mu} m{\mkern 1mu} \)是否滿足,如果滿足,停止;否則3:
3. \({\alpha _j} = \tau {\mkern 1mu} {\alpha _{j - 1}}\),重復2