Gradient descent 梯度下降法
#
Gradient descent 是一種求函數極小值的算法 (反之,gradient ascent 是求極大值)。

考慮點
(x0,f(x0))
,他的微分(斜率)大於 0,此時只要往微分的反方向走 (
x
變小),就可以讓函數值變小。一直走到微分為 0 的地方便是極小值。所以 gradient descent 的演算法如下:
輸入:起始點x0與函數f
While 終止條件不滿足:
x(n+1)=x(n)−tn⋅∇f(x(n)),fork=1,2,3,...
起始點可以隨機給定。終止條件可以是最大迴圈數、
x(n)
的變化量等等。
tn
可以是一個很小的常數或是用其他方式算出來的數,gradient 決定走的方向,
tn
決定走的距離。
Gradient descent 是一種 first-order method,因為他只用到一階導數。
Gradient descent 的可行性
#
雖然 gradient descent 演算法可以讓函數值逐步變小看起來很直覺,不過數學上有些看起來很直覺的東西是錯的,所以依然需要證明。在這邊,我們會證明如果 gradient descnet 每次走固定步長 t≤L1
,則走 n
步以後,跟最佳解的距離會小於等於 tn2∥x(0)−x∗∥22
。只要 n
夠大,就可以足夠靠近最佳解,於是我們就可以說 gradient descent 是可行的。
在證明 gradient descent 之前,我們先證明幾個引理:
Lemma 1
#
f
可微分且 f
為 convex,則 ∇f(y)T(x−y)≤f(x)−f(y)
證明:
f(tx+(1−t)y)≤tf(x)+(1−t)f(y),for0≤t≤1 兩邊除 t⇒t1(f(y+t(x−y))−f(y))≤f(x)−f(y) 取極限 t→0⇒t→0limt(x−y)f(y+t(x−y))−f(y)(x−y)=∇f(y)T(x−y)≤f(x)−f(y)Lemma 2
#
∇f
是 Lipschitz continuous。意即:
存在常數 L>0 使得,對所有的 x,y 滿足∥∇f(x)−∇f(y)∥2≤L∥x−y∥2則我們有 f(x)≤f(y)+∇f(x)T(x−y)+2L∥x−y∥22
證明:
根據泰勒展開式做一階展開,我們有 (積分項為 y
到 x
的積分):
f(x)=f(y)+∫01∇f(y+τ(x−y))dτ=f(y)+∇f(y)T(x−y)+∫01∇(f(y+τ(x−y))−∇f(y))T(x−y)dτ (一維的情況下很直覺,可以推廣到多維)≤f(y)+∇f(y)T(x−y)+∫01∥∇(f(y+τ(x−y))−∇f(y))∥∥(x−y)∥dτ, 根據 Lipschitz continuous 定義≤f(y)+∇f(y)T(x−y)+L∫01τ∥x−y∥22=f(y)+∇f(x)T(x−y)+2L∥x−y∥22
Lemma 3
#
f
為 convex 且 ∇f
是 Lipschitz continuous,則我們有:
(∇f(y)−∇f(x))T(y−x)≥L1∥∇f(x)−∇f(y)∥證明:
f(y)−f(x)=f(y)−f(z)+f(z)−f(x) 根據 Lemma 1, 2≤∇f(y)T(y−z)+∇f(x)T(z−x)+2L∥z−x∥22 取 z=x−L1(∇f(x)−∇f(y))⇒f(y)−f(x)≤∇f(y)T(y−x+L∇f(x)−∇f(y))−L∇f(x)T(∇f(x)−∇f(y))+2L∥∇f(x)−∇f(y)∥22=∇f(y)T(y−x)−L1∥∇f(x)−∇f(y)∥22+2L1∥∇f(x)−∇f(y)∥22=∇f(y)T(y−x)−2L1∥∇f(x)−∇f(y)∥22根據上式,我們有:
f(y)−f(x)≤∇f(y)T(y−x)−2L1∥∇f(x)−∇f(y)∥22f(x)−f(y)≤∇f(x)T(x−y)−2L1∥∇f(y)−∇f(x)∥22兩式相加:
0≤(∇f(y)−∇f(x))T(y−x)−L1∥∇f(y)−∇f(x)∥22移項後得證。
Lemma 4
#
∇f
是 Lipschitz continuous,則我們有:
f(x−L1∇f(x))−f(x)≤−2L1∥f(x)∥22證明:
取 y=x−L1∇f(x)
代入 Lipschitz continuous 的定義:
f(x−L1∇f(x))≤f(x)−L1∇f(x)T∇f(x)−2L∥L1f(x)∥22=f(x)−2L1∥f(x)∥22Gradient descent 收斂性的證明
#
接下來可以來證明收斂性。我們有以下假設:
- 函數 f
為 convex 。
- 函數 f
為連續可導,即導數存在,並且為連續函數。
- 函數的定義域為 Rn
。
- 函數最小值存在,
x∗=argminxf(x)
。
- ∇f
是 Lipschitz continuous。
定理:gradient descnet 每次走固定步長 t≤L1
會滿足:
f(x(n))−f(x∗)≤tn2∥x(0)−x∗∥22證明:
∥x(k+1)−x∗∥22=∥x(k)−t∇f(x(k))−x∗∥22 代入從 k 走到 k+1=∥x(k)−x∗∥22−2t⟨x(k)−x∗,∇f(x(k))⟩+t2∥∇f(x(k))∥22≤∥x(k)−x∗∥22−t2∥∇f(x(k))∥22由此可知,
∥x(k)−x∗∥22
為遞減,所以我們可以得到 ∥x(k)−x∗∥2≤∥x(0)−x∗∥2
由 Lemma 4 的結果,我們可以得到:
f(x(k+1))−f(x(k))≤−2L1∥f(x(k))∥22≤−2t∥f(x(k))∥22⇒f(x(k+1))−f(x∗)≤f(x(k))−f(x∗)−2t∥f(x(k))∥22由於 f
為 convex:
f(x(k))−f(x∗)≤∇f(x(k))(x(k)−x∗)≤∥∇f(x(k))∥2∥(x(k)−x∗)∥2≤∥∇f(x(k))∥2∥(x(0)−x∗)∥2合併前兩式 (上一式先兩邊平方):
f(x(k+1))−f(x∗)≤f(x(k))−f(x∗)−2t∥x(0)−x∗∥22(f(x(k+1))−f(x∗))2令 δk=f(x(k))−f(x∗),β=2∥x(0)−x∗∥22t
代入上式:
δk+1≤δk−βδk2⟺δk1≤δk+11−βδk+1δk⟺βδk+1δk≤δk+11−δk1,δk+1≤δk⟺β≤δk+11−δk1對 k=0,1,2,...,n−1
相加得到:
nβ≤δn1−δ01≤δn1⇒δn≤nβ1⟺f(x(n))−f(x∗)≤tn2∥x(0)−x∗∥22於是我們證明了固定步長的 gradient descnet 走足夠多步以後,就會足夠靠近最佳解。
參考資料:
CMU 統計系 Convex Optimization
Télécom Paris Optimization for Data Science 課堂講義