最速下降法(steepest descent)
在霧濛濛的山坡上迷路、又想快點抵達谷底,最自然的動作就是面向坡度下降最陡的方向、往那邊踏一步——然後再看一次、重複。最速下降法(在完整函數上的確定性梯度下降)正是這個貪婪規則:在每一點都朝下降最快的方向直走,也就是梯度的相反方向。
梯度 grad f(x) 指向最陡上升的方向,所以其相反 -grad f(x) 指向最陡下降的方向。迭代式是 x_{k+1} = x_k - alpha_k grad f(x_k),其中 alpha_k > 0 是步長(學習率),由線搜尋設定或人工固定。每一步只用一階導數(梯度)資訊——不需海森矩陣,沒有矩陣要儲存或求逆——所以一步很便宜,n 個變數只需 O(n) 運算,這正是它能擴展到極大問題的原因。在一個完美的圓碗上,它筆直奔向中心。
它著名的弱點是在病態問題上的鋸齒振盪。當谷地是一條又長又窄的山溝(海森矩陣特徵值差距很大,條件數 kappa 很大),最速下降方向多半指向橫越山溝、而非沿溝而下;連續的步在陡壁間反彈,沿平緩的溝底以緩慢的鋸齒爬下。收斂所需的迭代次數大致隨條件數 kappa 增長,所以一個被拉長的問題(kappa = 10^4)可能要數千步。這正是人們做預條件、或改用共軛梯度、牛頓、擬牛頓法的原因,它們把曲率納入考量、直直地切下山溝。另外要注意,精確線搜尋會讓連續的最速下降步彼此正交,這在幾何上解釋了它為何在壁與壁之間反彈。
最小化 f(x, y) = x^2 + 100 y^2(被拉長的碗,條件數 100)。梯度是 (2x, 200y);在 (1, 1) 它是 (2, 200),幾乎正沿 y 方向。最速下降主要朝 -y 衝、越過頭、修正、再越過頭——沿著狹窄的溝鋸齒而下。換成圓碗 x^2 + y^2,則一步就抵達中心。
在圓碗裡它直直俯衝;在被拉長的碗裡它來回鋸齒。
最速下降是局部貪婪、而非全域高效:它只線性收斂,且問題病態時收斂很慢(迭代次數隨條件數增長)。解方是曲率——預條件、共軛梯度或(擬)牛頓——而非更小的步長,後者只會讓它爬得更慢。