收敛率是什么?#
我们小学三年级学的数值分析告诉我们,如果函数 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 带来的干扰。