深度学习笔记之优化算法(二)随机梯度下降
本节将介绍随机梯度下降(Stochastic Gradient Descent,SGD)
深度学习笔记之优化算法——随机梯度下降
引言
本节将介绍随机梯度下降 (Stochastic Gradient Descent,SGD) \text{(Stochastic Gradient Descent,SGD)} (Stochastic Gradient Descent,SGD)
回顾:梯度下降法
从最速下降法的角度观察,下降方向 P k \mathcal P_k Pk的判定逻辑是:满足目标函数 f ( x k + 1 ) = f ( x k + α k ⋅ P k ) f(x_{k+1}) = f(x_k + \alpha_k \cdot \mathcal P_k) f(xk+1)=f(xk+αk⋅Pk)的一阶泰勒展开式与 f ( x k ) f(x_k) f(xk)之间存在严格的单调性;其中
O ( ∥ α k P k ∥ ) \mathcal O(\|\alpha_k\mathcal P_k\|) O(∥αkPk∥)表示关于
α k P k \alpha_k\mathcal P_k αkPk的高阶无穷小;
f ( x k + 1 ) − f ( x k ) = α k ⋅ ( P k ) T ∇ f ( x k ) + O ( ∥ α k P k ∥ ) ≈ α k ⋅ ( P k ) T ∇ f ( x k ) < 0 ⇒ ( P k ) T ∇ f ( x k ) < 0 \begin{aligned} f(x_{k+1}) - f(x_k) & = \alpha_k \cdot (\mathcal P_k)^T \nabla f(x_k) + \mathcal O(\|\alpha_k \mathcal P_k\|) \\ & \approx \alpha_k \cdot (\mathcal P_k)^T \nabla f(x_{k}) < 0 \\ & \Rightarrow (\mathcal P_k)^T \nabla f(x_k) < 0 \end{aligned} f(xk+1)−f(xk)=αk⋅(Pk)T∇f(xk)+O(∥αkPk∥)≈αk⋅(Pk)T∇f(xk)<0⇒(Pk)T∇f(xk)<0
对上式进行展开,如果使用欧式范数对 P k \mathcal P_k Pk的大小进行描述,即:
( P k ) T ∇ f ( x k ) = ∥ P k ∥ 2 ⋅ ∥ ∇ f ( x k ) ∥ 2 ⋅ cos θ (\mathcal P_k)^T \nabla f(x_k) = \|\mathcal P_k\|_2 \cdot \|\nabla f(x_k)\|_2 \cdot \cos \theta (Pk)T∇f(xk)=∥Pk∥2⋅∥∇f(xk)∥2⋅cosθ
关于更新方向 P k \mathcal P_k Pk,我们更关注它的方向朝向,而不是它的大小。因而对更新方向 P k \mathcal P_k Pk的大小进行约束。例如: ∥ P k ∥ ≤ 1 \|\mathcal P_k\| \leq 1 ∥Pk∥≤1。由于 ∇ f ( x k ) \nabla f(x_k) ∇f(xk)是大小恒正的已知项,因而真正影响 ( P k ) T ∇ f ( x k ) (\mathcal P_k)^T \nabla f(x_k) (Pk)T∇f(xk)结果的只有梯度向量 ∇ f ( x k ) \nabla f(x_k) ∇f(xk)与更新方向 P k \mathcal P_k Pk之间的夹角 θ \theta θ。
由于 cos θ ∈ [ − 1 , 1 ] \cos \theta \in [-1,1] cosθ∈[−1,1],因而当 θ = π 2 \begin{aligned}\theta = \frac{\pi}{2}\end{aligned} θ=2π时,即更新方向与梯度方向相反时, cos θ = − 1 \cos \theta = -1 cosθ=−1, ( P k ) T ∇ f ( x k ) (\mathcal P_k)^T \nabla f(x_k) (Pk)T∇f(xk)达到最小:
P k = − ∇ f ( x k ) \mathcal P_k = - \nabla f(x_k) Pk=−∇f(xk)
此时的最速下降法就是梯度下降法。但如果对 P k \mathcal P_k Pk的约束方式不是欧式范数,如: L 1 \mathcal L_1 L1范数或者矩阵 2 2 2-范数,它们在范数范围内,不同方向的最大值可能不相等。见下图:
其中最左侧的是
欧式范数 ∥ P ∥ 2 ≤ ϵ \|\mathcal P\|_2 \leq \epsilon ∥P∥2≤ϵ,可以看出,特征空间原点到范数边界的距离均相等,这使得
上式唯一的可变信息取决于 θ \theta θ的取值;中间与右侧分别是
L 1 \mathcal L_1 L1范数 ∥ P ∥ 1 ≤ ϵ \|\mathcal P\|_1 \leq \epsilon ∥P∥1≤ϵ与矩阵 2 2 2-范数 ∥ A ∥ 2 ≤ ϵ \|\mathcal A\|_2 \leq \epsilon ∥A∥2≤ϵ,可以看出:由于特征空间原点到范数边界之间的距离可能不相等,这使得
上式的可变信息取决于 θ \theta θ、范数长度的共同作用,最终可能导致:
某方向即便不是负梯度方向,但它有可能使 ( P k ) T ∇ f ( x k ) (\mathcal P_k)^T \nabla f(x_k) (Pk)T∇f(xk)达到最小。
梯度下降法在机器学习中的问题
在本节中,这里暂时模糊掉最速下降法与梯度下降法之间的区别。在无约束优化问题——最速下降法以及梯度下降法在强凸函数的收敛性分析中介绍过,如:
- 梯度下降法收敛速度慢,即便目标函数是强凸函数最快也仅能达到线性收敛;
- Hessian Matrix ⇒ ∇ 2 f ( ⋅ ) \text{Hessian Matrix} \Rightarrow \nabla^2 f(\cdot) Hessian Matrix⇒∇2f(⋅)以及条件数 ( Condition Number ) (\text{Condition Number}) (Condition Number)对收敛速度的影响。当条件数越大时,收敛速度随之减缓,极限时可退化至次线性收敛;
- 关于收敛方向:可能出现 ZigZag \text{ZigZag} ZigZag现象。底层原因在于:每次迭代过程,负梯度方向只是当前迭代步骤的最优解;再宽泛一点:负梯度方向只是某迭代位置小范围内的局部最优解。
- 不具备二次终止性:在凸二次函数的凸优化问题,仅通过有限次迭代步骤,无法收敛至最优解。
在机器学习过程中,梯度下降法的时间复杂度同样不低。例如:
- 已知数据集 D = { x ( i ) , y ( i ) } i = 1 N \mathcal D = \{x^{(i)},y^{(i)}\}_{i=1}^N D={x(i),y(i)}i=1N,使用极大似然估计作为目标函数进行描述,具体表示为:
其中
L ( ⋅ ) \mathcal L(\cdot) L(⋅)表示关于样本的
损失函数;而
J ( ⋅ ) \mathcal J(\cdot) J(⋅)才是最终的目标函数结果。
{ L [ x ( i ) , y ( i ) ; θ ] = − log P ( y ( i ) ∣ x ( i ) ; θ ) J ( θ ) = E ( x ( i ) , y ( i ) ) ∈ D L [ x ( i ) , y ( i ) ; θ ] = 1 N ∑ i = 1 N − log P ( y ( i ) ∣ x ( i ) ; θ ) \begin{cases} \mathcal L[x^{(i)},y^{(i)};\theta] = -\log \mathcal P(y^{(i)} \mid x^{(i)};\theta) \\ \quad \\ \begin{aligned} \mathcal J(\theta) & = \mathbb E_{(x^{(i)},y^{(i)}) \in \mathcal D} \mathcal L[x^{(i)},y^{(i)};\theta] \\ & = \frac{1}{N} \sum_{i=1}^N -\log \mathcal P(y^{(i)} \mid x^{(i)};\theta) \end{aligned} \end{cases} ⎩ ⎨ ⎧L[x(i),y(i);θ]=−logP(y(i)∣x(i);θ)J(θ)=E(x(i),y(i))∈DL[x(i),y(i);θ]=N1i=1∑N−logP(y(i)∣x(i);θ) - 对目标函数 J ( θ ) \mathcal J(\theta) J(θ)使用梯度下降法进行运算:
牛顿-莱布尼兹公式~
∇ θ J ( θ ) = ∇ θ [ 1 N ∑ i = 1 N − log P ( y ( i ) ∣ x ( i ) ; θ ) ] = 1 N ∑ i = 1 N ∇ θ [ − log P ( y ( i ) ∣ x ( i ) ; θ ) ] \begin{aligned} \nabla_{\theta} \mathcal J(\theta) & = \nabla_{\theta} \left[\frac{1}{N} \sum_{i=1}^N -\log \mathcal P(y^{(i)} \mid x^{(i)};\theta)\right] \\ & = \frac{1}{N} \sum_{i=1}^N \nabla_{\theta} \left[-\log \mathcal P(y^{(i)} \mid x^{(i)};\theta)\right] \end{aligned} ∇θJ(θ)=∇θ[N1i=1∑N−logP(y(i)∣x(i);θ)]=N1i=1∑N∇θ[−logP(y(i)∣x(i);θ)]
很明显,可以发现:需要对每一个样本的目标函数结果对参数 θ \theta θ计算梯度。该公式计算的时间复杂度为 O ( N ) \mathcal O(N) O(N),其中 N N N表示数据集内样本数量。 - 但样本数量自身同样也是不可忽视的重要条件。机器学习反复出现的一个问题是:好的泛化需要大的训练集,但大的训练集的计算代价也很大。
上述红色部分抄自
《深度学习(花书)》 P 94 P_{94} P94下端。
这明显出现了矛盾:既然想要降低梯度下降法的时间复杂度,就需要减少训练集样本数量 N N N;但训练集样本数量的减少,也会导致该数据集对概率模型的泛化效果较差。
随机梯度下降
随机梯度下降方法的思想
随机梯度下降的核心在于,目标函数的梯度 ∇ θ J ( θ ) \nabla_{\theta} \mathcal J(\theta) ∇θJ(θ)自身同样也是期望:
∇ θ J ( θ ) = 1 N ∑ i = 1 N ∇ θ [ − log P ( y ( i ) ∣ x ( i ) ; θ ) ] = E ( x ( i ) , y ( i ) ) ∈ D [ − log P ( y ( i ) ∣ x ( i ) ; θ ) ] \begin{aligned} \nabla_{\theta} \mathcal J(\theta) & = \frac{1}{N} \sum_{i=1}^N \nabla_{\theta} \left[-\log \mathcal P(y^{(i)} \mid x^{(i)};\theta)\right] \\ & = \mathbb E_{(x^{(i)},y^{(i)}) \in \mathcal D} \left[-\log \mathcal P(y^{(i)} \mid x^{(i)};\theta) \right] \end{aligned} ∇θJ(θ)=N1i=1∑N∇θ[−logP(y(i)∣x(i);θ)]=E(x(i),y(i))∈D[−logP(y(i)∣x(i);θ)]
但期望同样可以使用小规模样本进行近似估计。在每一次迭代过程中,从训练集 D \mathcal D D中均匀地抽取若干个独立同分布的小批量 ( Mini-Batch ) (\text{Mini-Batch}) (Mini-Batch)样本,通过计算批量内样本的梯度均值,并替代 ∇ θ J ( θ ) \nabla_{\theta} \mathcal J(\theta) ∇θJ(θ)作为当前迭代步骤的梯度结果:
∇ θ J ( θ ) ≈ G = 1 m ′ ∑ j = 1 m ′ ∇ θ L [ x ( i ) , y ( i ) ; θ ] \nabla_{\theta} \mathcal J(\theta) \approx\mathcal G = \frac{1}{m'} \sum_{j=1}^{m'}\nabla_{\theta} \mathcal L[x^{(i)},y^{(i)};\theta] ∇θJ(θ)≈G=m′1j=1∑m′∇θL[x(i),y(i);θ]
我们发现:这种方法与随机森林中的 Boostrapping \text{Boostrapping} Boostrapping采样方法有着异曲同工之妙。其中 Boostrapping \text{Boostrapping} Boostrapping采样方法的采样集合 D ′ \mathcal D' D′与原式集合 D \mathcal D D中,如果 D \mathcal D D中的样本数量趋近于无穷大,那么 D ‘ \mathcal D‘ D‘中始终不会从 D \mathcal D D采样的概率是:
lim N ⇒ ∞ ( 1 − 1 N ) N = 1 e ≈ 0.368 \mathop{\lim}\limits_{N \Rightarrow \infty} (1 - \frac{1}{N})^N = \frac{1}{e} \approx 0.368 N⇒∞lim(1−N1)N=e1≈0.368
虽然在随机梯度下降中仅使用随机采样以获取小批量样本,但由于各迭代步骤产生的小批量样本均服从独立同分布,因而同样可以得到梯度的无偏估计。
随机梯度下降方法的步骤描述
关于随机梯度下降在第 k k k个训练迭代的更新步骤表示如下:
初始化步骤:学习率 ϵ k \epsilon_k ϵk;初始参数 θ \theta θ;
迭代过程:
- 事先判断准则是否满足条件(如目标函数结果小于某阈值 δ \delta δ) ? ? ?是,则算法终止;
- 从训练集 D \mathcal D D中采出包含 m m m个样本的小批量,记作 D ′ \mathcal D' D′:
D ′ = { ( x ( j ) , y ( j ) ) } j = 1 m \mathcal D' = \{(x^{(j)},y^{(j)})\}_{j=1}^m D′={(x(j),y(j))}j=1m - 针对该小批量的梯度 G \mathcal G G进行估计:
其中
f ( ⋅ ) f(\cdot) f(⋅)则表示模型,那么
f ( x ( j ) ; θ ) f(x^{(j)};\theta) f(x(j);θ)则表示模型关于
x ( i ) x^{(i)} x(i)预测结果。
G ⇐ E ( x ( j ) , y ( j ) ) ∈ D ′ [ ∇ θ L [ f ( x ( j ) ; θ ) , y ( j ) ] ] = 1 m ∑ j = 1 m ∇ θ L [ f ( x ( j ) ; θ ) , y ( j ) ] \begin{aligned} \mathcal G & \Leftarrow \mathbb E_{(x^{(j)},y^{(j)}) \in \mathcal D'} \left[\nabla_{\theta} \mathcal L[f(x^{(j)};\theta),y^{(j)}]\right] \\ & = \frac{1}{m} \sum_{j=1}^m \nabla_{\theta} \mathcal L[f(x^{(j)};\theta),y^{(j)}] \end{aligned} G⇐E(x(j),y(j))∈D′[∇θL[f(x(j);θ),y(j)]]=m1j=1∑m∇θL[f(x(j);θ),y(j)] - 对参数 θ \theta θ进行更新:
θ ⇐ θ − ϵ ⋅ G \theta \Leftarrow \theta - \epsilon \cdot \mathcal G θ⇐θ−ϵ⋅G - 返回步骤 1 1 1重新进行判断,直到算法终止为止。
关于学习率
一般情况下,随机梯度下降算法使用使用固定的学习率,在真实迭代过程中:有必要随着迭代步骤的推移逐渐降低学习率。我们记第 k k k次迭代步骤的学习率结果为 ϵ k \epsilon_k ϵk;在实践过程中,给定初始学习率 ϵ 0 \epsilon_0 ϵ0,学习率衰减的迭代次数 τ \tau τ;衰减系数 α \alpha α,第 k k k次迭代步骤的学习率 ϵ k \epsilon_k ϵk可表示为:在该公式中,迭代步骤
k < τ k < \tau k<τ;
ϵ k = ( 1 − α ) ϵ 0 + α ⋅ ϵ τ α = k τ \epsilon_k = (1 - \alpha) \epsilon_0 + \alpha \cdot \epsilon_{\tau} \quad \alpha = \frac{k}{\tau} ϵk=(1−α)ϵ0+α⋅ϵτα=τk
这样得到学习率的效果是:在 τ \tau τ次迭代步骤之前,学习率会呈现线性衰减;当迭代步骤 k > τ k > \tau k>τ时,学习率呈现稳定状态。
更多推荐
所有评论(0)