收斂率是什麼?#
我們小學三年級學的數值分析告訴我們,如果函數 f(x) 是收斂的,即 limk→∞∣∣xk−x∗∣∣=0 ,其中 limk→∞f(xk)=x∗,那麼有:
limk→∞∣∣xk−x∗∣∣∣∣xk+1−x∗∣∣=a
其中, a 就是 f(x) 的收斂率。
基本理論#
SGD 基礎#
在深度學習的問題當中,我們一般是去解決這樣的問題:
minxf(x)=∑i=1nfi(x)
其中,f(x) 是模型, i 是每一個樣本, x 是我們要優化的參數, n 是所有的樣本。
然後在利用 SGD 對模型進行更新的時候,一般是這樣更新的:
xt+1=xt−μ∇fixt
這個應該大家都可以理解吧,就是一個梯度更新公式。
L-Lipschitz 和 μ-Strongly Convex#
在深度學習領域,我們看 10,000 篇跟優化沾邊的論文,9,900 篇都要在證明前加一句:
... Let f be L-smooth and μ-strongly convex …
一切都是那麼的理所當然,就只有一個問題 —— ** 這兩個東西到底是什麼呢?** 還有很多辣雞養成了看到這兩個詞就跳過這段文字的條件反射(比如我)。是時候來直面恐懼了!
μ-Strongly Convex#
首先,μ-Strongly Convex 表示的是函數 f(x) 是強凸的,數學表達為:
f(x2)≥f(x1)+∇f(x1)T(x2−x1)+2μ∣∣x2−x1∣∣2
其中 x1,x2∈Q,Q 是 f(x) 的定義域,我們知道,一個凸函數的定義如下:
f(x2)≥f(x1)+∇f(x1)T(x2−x1)
這個式子的直觀表示就是對於任意 x1 在 f(x) 上的切線 f′(x1) ,有 f(x)≤f′(x1)。
而我們的強凸的數學表達式其實比凸多了一個二項式 2μ∣∣x2−x1∣∣2。因為在凸函數中,我們只限定了函數必須在切線以上,但沒有說以上多少。也就是說函數可以無限貼近切線,使得這樣的函數在優化中不可行。所以我們相當於給凸「度」限定了下界,使得優化可以被量化。
詳細證明的話可以參看這篇文章。
L-Lipschitz#
對於 L-Lipschitz,有一篇知乎專欄我覺得講的很好,大家有時間可以去看一下。沒有時間的話我在下面也會把我的理解大概說一下。
Lipschitz Continus 是說,如果對於函數 f(x) 來說,就是指對於所有的 x1,x2∈Q,Q 是 f(x) 的定義域,滿足條件
∣∣f(x1)−f(x2)∣∣≤L∣∣x1−x2∣∣
非常直觀的,上面這個公式表達的意思就是 ∣∣f′(x)∣∣≤L,所以 f(x) 的函數取值是被限定到一個範圍內的。
除了 Lipschitz Continus 以外,還有 Lipschitz Continus Gradient 和 Lipschitz Continus Hessian。 Lipschitz Continus Gradient 是對於函數 f(x) 的梯度 / 導數來說的。換句話說,如果 f′(x) 滿足 Lipschitz Continus,則 f(x) 滿足 Lipschitz Continus Gradient。 Lipschitz Continus Hessian 同理,若 f′′(x) 滿足 Lipschitz Continus,則 f(x) 滿足 Lipschitz Continus Hessian。
我們在深度學習中常用的是 Lipschitz Continus Gradient (L-Smooth)。所以我們主要要理解它的數學表達:
∣f(x2)−f(x1)−⟨f′(x2),x2−x1⟩≤2L∣∣x2−x1∣∣2
直觀上理解它和我們理解強凸非常相似,即我們對 f(x) 的變化趨勢做了一個限制。我們把絕對值打開這個限制會體現得更清楚一點:
{f(x2)≤f(x1)+⟨f′(x2),x2−x1⟩+2L∣∣x2−x1∣∣2f(x2)≥f(x1)+⟨f′(x2),x2−x1⟩+2L∣∣x2−x1∣∣2
詳細證明可以參看這篇文章。
SGD 的收斂率#
那我們來小試牛刀,計算一下 SGD 的收斂率吧。
首先 L-Smooth 的條件先擺出來:
f(xt+σ)≤f(xt)+∇f(xt)Tσ+2L∣∣σ∣∣2
其中 σ=xt+1−xt=−μ∇fixt。我們把 σ 帶入上式有:
f(xt+σ)=f(xt−μ∇fixt)=f(xt+1)≤f(xt)−μ∇f(xt)T∇fi(xt)+2μ2L∣∣∇fi(xt)∣∣2
然後我們對上式兩邊 i 取期望有:
Ei(f(xt+1))≤f(xt)−μ∇f(xt)TEi(∇fi(xt))+2μ2LEi∣∣∇fi(xt)∣∣2
可以看到我們有四個期望,第一个和第二个期望我們暫時不動,第三個期望 Ei(∇fi(xt)) 有:
Ei(∇fi(xt))=n1i=1∑n∇fi(xt)=∇f(xi)
第四項期望 Ei∣∣∇fi(xt)∣∣2 稍微複雜一點,我們要通過定義方差來求。
我們假設梯度的方差 Var=n1∑i=1n∣∣∇fi(xt)−∇f(xt)∣∣2,我們把這個方差展開有:
Var=n1i=1∑n∣∣∇fi(xt)−∇f(xt)∣∣2=n1[i=1∑n∣∣∇fi(xt)∣∣2]+n1[i=1∑n∣∣∇f(xt)∣∣2]−n2[i=1∑n⟨∇fi(xt),∇f(xt)⟩]=∣∣∇f(xt)∣∣2+n1[i=1∑n∣∣∇f(xt)∣∣2]−2∣∣∇f(xt)∣∣2=n1i=1∑n∣∣∇f(xt)∣∣2−∣∣∇f(xt)∣∣2
所以對於 Ei∣∣∇fi(xt)∣∣2 有:
Ei∣∣∇fi(xt)∣∣2=n1∑i=1n∣∣∇fi(xt)∣∣2=Var+∣∣∇f(xt)∣∣2
於是,我們把上面算出的兩個單項期望帶入整體有:
E(f(xt+1))≤E(f(xt))−μ∇f(xt)T∇f(xi)+2μ2L(Var+∣∣∇f(xt)∣∣2)=E(f(xt))−(μ−2μ2L)∣∣∇f(xt)∣∣2+2μ2LVar
接下來,我們還有 λ-Strong Convex (這裡用 λ 是為了避免和例子中學習率搞混) 的數學表達如下:
f(x)≥f(x0)+∇f(x0)T(x−x0)+2λ∣∣x−x0∣∣2
我們令 x=x∗,x0=x 有,把加減組合成一個和的平方有:
f(x∗)≥f(x)+∇f(x)T(x∗−x)+2λ∣∣x∗−x∣∣2=f(x)+2λ1∣∣∇f(x)+λ(x∗−x)∣∣2−2λ1∣∣∇f(x)∣∣2≥f(x)−2λ1∣∣∇f(x)∣∣2
所以有:
∣∣∇f(x)∣∣2≥2λ(f(x)−f(x∗))
我們把上式帶入期望的不等式有:
E(f(xt+1))≤E(f(xt))−2λ(μ−2μ2L)(f(xt)−f(x∗))+2μ2LVar
最後,令 μ=L1,有:
E[f(xt)−f(x∗)f(xt+1)−f(x∗)]=(1−Lσ)+H
其中 H 是 SGD 相對於 GD 帶來的干擾。