收敛率是什么?

我们小学三年级学的数值分析告诉我们,如果函数 f(x) 是收敛的,即 \lim_{k \rightarrow\infty}\vert\vert x_k - x^* \vert\vert = 0 ,其中 \lim_{k \rightarrow\infty}f(x_k) = x^* ,那么有:

\lim_{k \rightarrow\infty} \frac{\vert\vert x_{k+1} - x^*\vert\vert}{\vert\vert x_k-x^*\vert\vert} = a

其中, a 就是 f(x) 的收敛率。

基本理论

SGD 基础

在深度学习的问题当中,我们一般是去解决这样的问题:

\min_{x}f(x) = \sum_{i=1}^{n}f_i(x)

其中, f(x) 是模型, i 是每一个样本, x 是我们要优化的参数, n 是所有的样本。

然后在利用 SGD 对模型进行更新的时候,一般是这样更新的:

x_{t+1} = x_{t} - \mu \nabla f_i{x_t}

这个应该大家都可以理解吧,就是一个梯度更新公式。

L -Lipschitz 和 \mu -Strongly Convex

在深度学习领域,我们看 10,000 篇跟优化沾边的论文,9,900 篇都要在证明前加一句:

… Let f be L -smooth and \mu -strongly convex …

一切都是那么的理所当然,就只有一个问题 —— 这两个东西到底是什么呢?还有很多辣鸡养成了看到这两个词就跳过这段文字的条件反射(比如我)。是时候来直面恐惧了!

\mu -Strongly Convex

首先, \mu -Strongly Convex 表示的是函数 f(x) 是强的,数学表达为:

f(x_2) \ge f(x_1) + \nabla f(x_1)^{T}(x_2 - x_1) + \frac{\mu}{2}\vert\vert x_2 - x_1 \vert\vert ^2

其中 x_1, x_2 \in Q Q f(x) 的定义域,我们知道,一个凸函数的定义如下:

f(x_2) \ge f(x_1) + \nabla f(x_1)^{T}(x_2 - x_1)

这个式子的直观表示就是对于任意 x_1 f(x) 上的切线 f^{'}(x_1) ,有 f(x) \le f^{'}(x_1)

而我们的强凸的数学表达式其实比凸多了一个二项式 \frac{\mu}{2}\vert\vert x_2 - x_1 \vert\vert ^2 。因为在凸函数中,我们只限定了函数必须在切线以上,但没有说以上多少。也就是说函数可以无限贴近切线,使得这样的函数在优化中不可行。所以我们相当于给凸「度」限定了下界,使得优化可以被量化。

详细证明的话可以参看这片文章。

L -Lipschitz

对于 L -Lipschitz,有一篇知乎专栏我觉得讲的很好,大家有时间可以去看一下。没有时间的话我在下面也会把我的理解大概说一下。

Lipschitz Continus 是说,如果对于函数 f(x) 来说,就是指对于所有的 x_1, x_2 \in Q Q f(x) 的定义域,满足条件

\vert\vert f(x_1) - f(x_2)\vert\vert \le L\vert\vert x_1-x_2 \vert\vert

非常直观的,上面这个公式表达的意思就是 \vert\vert f^{'}(x) \vert\vert \le L ,所以 f(x) 的函数取值是被限定到一个范围内的。

除了 Lipschitz Continus 以外,还有 Lipschitz Continus GradientLipschitz Continus HessianLipschitz 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)。所以我们主要要理解它的数学表达:

\vert f(x_2) - f(x_1) - \langle f^{'}(x_2), x_2-x_1 \rangle \le \frac{L}{2}\vert\vert x_2-x_1 \vert\vert ^2

直观上理解它和我们理解强凸非常相似,即我们对 f(x) 的变化趋势做了一个限制。我们把绝对值打开这个限制会体现德更清楚一点:

% <![CDATA[ \left\{\begin{array}{lr} f(x_2) \le f(x_1) + \langle f^{'}(x_2), x_2-x_1 \rangle + \frac{L}{2}\vert\vert x_2-x_1 \vert\vert ^2&\\f(x_2) \ge f(x_1) + \langle f^{'}(x_2), x_2-x_1 \rangle + \frac{L}{2}\vert\vert x_2-x_1 \vert\vert ^2&\end{array}\right. %]]>

详细证明可以参看这篇文章:

SGD 的收敛率

那我们来小试牛刀,计算一下 SGD 的收敛率吧。

首先 L -Smooth 的条件先摆出来:

f(x_{t}+\sigma) \le f(x_{t}) + \nabla f(x_{t})^{T}\sigma + \frac{L}{2}\vert\vert\sigma\vert\vert ^2

其中 \sigma = x_{t+1} - x_{t} = - \mu \nabla f_i{x_t} 。我们把 \sigma 带入上式有:

% <![CDATA[ \begin{aligned}f(x_t + \sigma) &= f(x_t - \mu \nabla f_i{x_t}) \\ &= f(x_{t+1})\\&\le f(x_{t}) - \mu \nabla f(x_t)^{T} \nabla f_{i}(x_t) + \frac{\mu ^2 L}{2} \vert\vert \nabla f_{i}(x_{t}) \vert\vert ^2\end{aligned} %]]>

然后我们对上式两边 i 取期望有:

\mathbb{E}_{i}(f(x_{t+1})) \le f(x_{t}) - \mu \nabla f(x_t)^{T} \mathbb{E}_{i}(\nabla f_{i}(x_t)) + \frac{\mu ^2 L}{2} \mathbb{E}_{i}\vert\vert \nabla f_{i}(x_{t}) \vert\vert ^2

可以看到我们有四个期望,第一个和第二个期望我们暂时不动,第三个期望 \mathbb{E}_{i}(\nabla f_{i}(x_t)) 有:

% <![CDATA[ \begin{aligned}\mathbb{E}_{i}(\nabla f_{i}(x_t)) &= \frac{1}{n}\sum_{i=1}^{n}\nabla f_i(x_t) \\ &= \nabla f(x_i)\end{aligned} %]]>

第四项期望 \mathbb{E}_{i}\vert\vert \nabla f_{i}(x_{t}) \vert\vert ^2 稍微复杂一点,我们要通过定义方差来求。

我们假设梯度的方差 Var = \frac{1}{n}\sum_{i=1}^{n}\vert\vert\nabla f_i(x_t) - \nabla f(x_t) \vert\vert ^2 ,我们把这个方差展开有:

% <![CDATA[ \begin{aligned}Var &= \frac{1}{n}\sum_{i=1}^{n}\vert\vert\nabla f_i(x_t) - \nabla f(x_t) \vert\vert ^2 \\ &= \frac{1}{n}[\sum_{i=1}^{n}\vert\vert \nabla f_i(x_t)\vert\vert ^2] + \frac{1}{n}[\sum_{i=1}^{n}\vert\vert\nabla f(x_t)\vert\vert ^2] - \frac{2}{n}[\sum_{i=1}^n\langle\nabla f_i(x_t), \nabla f(x_t)\rangle] \\ &=\vert\vert \nabla f(x_t)\vert\vert ^2 + \frac{1}{n}[\sum_{i=1}^{n}\vert\vert\nabla f(x_t)\vert\vert ^2] - 2\vert\vert \nabla f(x_t)\vert\vert ^2 \\ &= \frac{1}{n}\sum_{i=1}^{n}\vert\vert\nabla f(x_t)\vert\vert ^2 - \vert\vert \nabla f(x_t)\vert\vert ^2\end{aligned} %]]>

所以对于 \mathbb{E}_{i}\vert\vert \nabla f_{i}(x_{t}) \vert\vert ^2 有:

\mathbb{E}_{i}\vert\vert \nabla f_{i}(x_{t}) \vert\vert ^2 = \frac{1}{n}\sum_{i=1}^{n}\vert\vert\nabla f_{i}(x_{t})\vert\vert ^2 = Var + \vert\vert \nabla f(x_t)\vert\vert ^2

于是,我们吧上面算出的两个单项期望带入整体有:

% <![CDATA[ \begin{aligned}\mathbb{E}(f(x_{t+1})) &\le \mathbb{E}(f(x_{t})) - \mu \nabla f(x_t)^{T} \nabla f(x_i) + \frac{\mu ^2 L}{2}(Var + \vert\vert \nabla f(x_t)\vert\vert ^2)\\&=\mathbb{E}(f(x_t))-(\mu-\frac{\mu^2L}{2})\vert\vert \nabla f(x_t)\vert\vert ^2 + \frac{\mu^2L}{2}Var\end{aligned} %]]>

接下来,我们还有 \lambda -Strong Convex (这里用 \lambda 是为了避免和例子中学习率搞混) 的数学表达如下:

f(x) \ge f(x_0) + \nabla f(x_0)^T (x-x_0) + \frac{\lambda}{2}\vert\vert x - x_0 \vert\vert ^2

我们令 x = x^*, x_0 = x 有,把加减组合成一个和的平方有:

% <![CDATA[ \begin{aligned}f(x^*) &\ge f(x) + \nabla f(x)^T (x^*-x) + \frac{\lambda}{2}\vert\vert x^* - x \vert\vert ^2\\ &=f(x) + \frac{1}{2\lambda}\vert\vert\nabla f(x) + \lambda (x^*-x)\vert\vert ^2 - \frac{1}{2\lambda}\vert\vert\nabla f(x)\vert\vert ^2\\ &\ge f(x) - \frac{1}{2\lambda}\vert\vert\nabla f(x)\vert\vert ^2\end{aligned} %]]>

所以有:

\vert\vert\nabla f(x)\vert\vert ^2 \ge 2\lambda (f(x) - f(x^*))

我们把上式带入期望的不等式有:

\mathbb{E}(f(x_{t+1})) \le \mathbb{E}(f(x_t))-2\lambda(\mu-\frac{\mu^2L}{2})(f(x_t) - f(x^*)) + \frac{\mu^2L}{2}Var

最后,令 \mu = \frac{1}{L} ,有:

\mathbb{E}[\frac{f(x_{t+1}) - f(x^*)}{f(x_{t}) - f(x^*)}] = (1-\frac{\sigma}{L}) + H

其中 H 是 SGD 相对于 GD 带来的干扰。



发现存在错别字或者事实错误?请麻烦您点击 这里 汇报。谢谢您!