∣∇f(w+ηd)⊤d∣≤c2∣g⊤d∣,0<c1<c2<1|\nabla f(w+\eta d)^\top d|\le c_2|g^\top d|,\quad 0<c_1<c_2<1
arg⁡min⁡∥d∥2≤1g⊤d=−g/∥g∥2\arg\min_{\|d\|_2\le1}g^\top d=-g/\|g\|_2

完整講解與原文對照 / Full explanation and source comparison

線搜索:每一步自動找合適的步長

式 (3) 的理想步長是 1/L1/L,但 LL 常常未知。線搜索(line search) 的做法是:每一步動態調整步長 η\eta,直到找到能讓 loss 下降的步長。

流程很直覺(Algorithm 1):

  1. 每輪迭代從初始步長 η=1\eta=1 開始。
  2. 檢查線搜索條件(式 (5))——更新後 loss 是否下降: f(w(k)−η∇f(w(k)))<f(w(k)),(5) f\left(\boldsymbol{w}^{(k)}-\eta\nabla f\left(\boldsymbol{w}^{(k)}\right)\right)\lt f\left(\boldsymbol{w}^{(k)}\right), \tag{5}
  3. 若不滿足,步長減半:η←η/2\eta \leftarrow \eta/2,再檢查。
  4. 重複直到式 (5) 成立,然後用這個 η\eta 做更新:w(k+1):=w(k)−η∇f(w(k))\boldsymbol{w}^{(k+1)}:=\boldsymbol{w}^{(k)}-\eta\nabla f\left(\boldsymbol{w}^{(k)}\right)。

為什麼減半到夠小就一定會成功?因為當 η\eta 足夠小時(式 (6)):

η<1L, \eta\lt \frac{1}{L},

就能保證下降。線搜索會在內層迴圈反覆縮步長,直到找到滿足條件的 η\eta——所以每個梯度下降迭代裡面,還包了一個調步長的內層迴圈。

進階線搜索:Armijo 與 Wolfe

上面這種「不滿足就減半」是最簡單的 backtracking 策略。更進階的方法包括:

這些在傳統優化教科書裡很常見,深度學習實務較少用固定學習率或自適應方法代替。

最陡下降:沿梯度方向走最遠

最陡下降(steepest descent) 和梯度下降方向相同(都是 −∇f-\nabla f),但步長策略不同——不是固定 η\eta,也不是減半試探,而是每一步解一個一維優化,找沿梯度方向能讓 ff 降最多的步長(式 (7)):

η(k):=arg⁡min⁡ηf(w(k)−η∇f(w(k))).(7) \eta^{(k)}:=\arg\min_{\eta} f\left(\boldsymbol{w}^{(k)}-\eta\nabla f\left(\boldsymbol{w}^{(k)}\right)\right) . \tag{7}

找到最優步長 η(k)\eta^{(k)} 後,更新方式和梯度下降一樣:

w(k+1):=w(k)−η(k)∇f(w(k)). \boldsymbol{w}^{(k+1)}:=\boldsymbol{w}^{(k)}-\eta^{(k)}\nabla f\left(\boldsymbol{w}^{(k)}\right) .

白話對比:

方法 步長怎麼定 特色
固定學習率 GD η\eta 固定 最簡單,深度學習最常用
線搜索 GD 從 η=1\eta=1 開始,不滿足就減半 保證每步下降,但有內層迴圈
最陡下降 每步解一維 min(式 (7)) 每步下降最多,但每步要多算

口語復盤

線搜索像「試走看,走太大就縮半步再試」;最陡下降像「沿這個方向精算最遠能走多遠」。兩者都比固定 η\eta 聰明,但每步計算成本更高——深度學習資料量大、參數多,所以寧可固定或自適應學習率,也不常做完整線搜索。理解它們有助於搞懂「步長選擇」這個優化的基本功。

教授祕笈:步子太大就對半砍

同學,KP-2 說理想步長是 1/L1/L,可是 LL 常常不知道;KP-3 又說走了要會停。今天解決中間那一截:步子太大,一腳跨過谷底,怎麼辦? 主線比喻是同一句——對半砍。試走;跳過頭就步長減半,再試。這叫線搜索(line search)。

先把任務講成一句人話

固定學習率像規定「每步永遠跨一公尺」,容易不是跨過谷底就是挪得像蝸牛。線搜索改成:這一腳先當自己很勇,從 η=1\eta=1 起步;只要落地後高度沒降,就把步子砍成一半,直到這一腳確實在下山。

鷹架式:先直覺,再符號

直覺:走太大就對半砍,砍到這一步真的比較低。 為什麼保證砍得夠小就會成功?因為當 η\eta 小於 1/L1/L,理論保證下降。符號上場。每輪從 η=1\eta=1 開始,檢查線搜索條件式 (5)——更新後 loss 必須下降:

f(w(k)−η∇f(w(k)))<f(w(k)).(5) f\left(\boldsymbol{w}^{(k)}-\eta\nabla f\left(\boldsymbol{w}^{(k)}\right)\right)\lt f\left(\boldsymbol{w}^{(k)}\right). \tag{5}

不滿足就 η←η/2\eta\leftarrow\eta/2,再檢查。為什麼減半到夠小一定行?因為式 (6) 說,只要

η<1L,(6) \eta\lt \frac{1}{L}, \tag{6}

就能保證下降。所以每個梯度下降迭代裡面,還包了一個調步長的內層迴圈。更講究的有 Armijo 規則(充分下降,不只要「有降」)和 Wolfe 條件(還要求步長別縮到幾乎不動)。傳統優化常用;深度學習較少,多用固定或自適應學習率。

最陡下降(steepest descent) 方向仍是 −∇f-\nabla f,但步長不是砍半試探,而是每步解一個一維優化,找沿這個方向能讓 ff 降最多的 η(k)\eta^{(k)},這是式 (7):

η(k):=arg⁡min⁡ηf(w(k)−η∇f(w(k))).(7) \eta^{(k)}:=\arg\min_{\eta} f\left(\boldsymbol{w}^{(k)}-\eta\nabla f\left(\boldsymbol{w}^{(k)}\right)\right). \tag{7}

找到後更新仍是 w(k+1):=w(k)−η(k)∇f(w(k))\boldsymbol{w}^{(k+1)}:=\boldsymbol{w}^{(k)}-\eta^{(k)}\nabla f(\boldsymbol{w}^{(k)})。

真的算一遍:η=1\eta=1 跨過谷底,砍半才踩中

讓 f(w)=w2f(w)=w^{2},w(0)=3w^{(0)}=3,則 f=9f=9、∇f=6\nabla f=6。此函數 L=2L=2,所以 1/L=0.51/L=0.5。從 η=1\eta=1 試起:

嘗試 η\eta 新位置 w−η∇fw-\eta\nabla f 新高度 ff 式 (5) fnew<9f_{\text{new}}\lt 9? 下一步
第 1 次 11 3−6=−33-6=-3 99 否(9<99\lt 9 不成立) 對半砍
第 2 次 0.50.5 3−3=03-3=0 00 是 接受,更新

η=1\eta=1 剛好跳到山谷對面同一高度,白走;砍半後 η=0.5\eta=0.5 精準踩在谷底。式 (6) 也對上了:失敗的 11 大於 1/L1/L,成功的 0.50.5 剛好是理想步長。若改做最陡下降,式 (7) 要最小化 (3−6η)2(3-6\eta)^{2},令 3−6η=03-6\eta=0 得 η(k)=0.5\eta^{(k)}=0.5,同一答案——只是它一次解出來,不靠砍半試探。

先留一個反轉

線搜索保證每步下降、最陡下降保證這條線上降最多,聽起來完勝固定 η\eta。反轉在這裡:每一步都多包一層迴圈(或解一次一維 min),深度學習資料量大、參數多,這個內層貴到不划算。所以實務寧可固定學習率或用 Adam 這類自適應方法,也不常做完整線搜索。聰明,但太貴。

換個場景,自己找出同一條路

把對半砍換成「過馬路試探車距」:先當自己能一次衝過去(η=1\eta=1);發現會撞,就把距離砍半再看。請你用 f(w)=(w−1)2f(w)=(w-1)^{2}、w=5w=5(此時 ∇f=8\nabla f=8、f=16f=16)自己做一次減半表——先試 η=1\eta=1,不降就砍,直到式 (5) 成立。結構與上表相同,只是谷底在 w=1w=1。

大家最容易在這裡搞混

第一個誤解:以為線搜索、最陡下降跟梯度下降走的方向不同。方向都是 −∇f-\nabla f,差在步長怎麼定。第二個誤解:以為不滿足式 (5) 該把 η\eta 加倍。講義的 backtracking 是減半 η←η/2\eta\leftarrow\eta/2,把步子砍小,不是拉大。

跨知識點掛勾

式 (5)(6) 是在救 KP-2 裡「LL 未知、固定 η\eta 可能拍皮球」的問題;外層什麼時候停,仍用 KP-3 的進站儀表。後面自適應學習率,精神仍是「步長不該永遠同一號」,只是換了更便宜的調法。

換句話重述

線搜索從 η=1\eta=1 試起,不降就對半砍,直到式 (5) 成立;理論靠式 (6) 的 η<1/L\eta\lt 1/L。最陡下降用式 (7) 一次找這條線上最好的步長。兩者都聰明,但內層太貴,深度學習較少用。

一句話收尾: 步子太大會跳過谷底——不降就對半砍,砍到這一腳真的在下山。