深度学习笔记之优化算法(二)随机梯度下降

深度学习笔记之优化算法——随机梯度下降

  • 引言
    • 回顾:梯度下降法
    • 梯度下降法在机器学习中的问题
    • 随机梯度下降
      • 随机梯度下降方法的思想
      • 随机梯度下降方法的步骤描述
      • 关于学习率

引言

本节将介绍随机梯度下降 (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+αkPk)的一阶泰勒展开式 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)Tf(xk)+O(αkPk)αk(Pk)Tf(xk)<0(Pk)Tf(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)Tf(xk)=Pk2∥∇f(xk)2cosθ
关于更新方向 P k \mathcal P_k Pk,我们更关注它的方向朝向,而不是它的大小。因而对更新方向 P k \mathcal P_k Pk的大小进行约束。例如: ∥ P k ∥ ≤ 1 \|\mathcal P_k\| \leq 1 Pk1。由于 ∇ f ( x k ) \nabla f(x_k) f(xk)大小恒正的已知项,因而真正影响 ( P k ) T ∇ f ( x k ) (\mathcal P_k)^T \nabla f(x_k) (Pk)Tf(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)Tf(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 P2ϵ,可以看出,特征空间原点到范数边界的距离均相等,这使得上式唯一的可变信息取决于 θ \theta θ的取值
  • 中间与右侧分别是 L 1 \mathcal L_1 L1范数 ∥ P ∥ 1 ≤ ϵ \|\mathcal P\|_1 \leq \epsilon P1ϵ与矩阵 2 2 2-范数 ∥ A ∥ 2 ≤ ϵ \|\mathcal A\|_2 \leq \epsilon A2ϵ,可以看出:由于特征空间原点到范数边界之间的距离可能不相等,这使得上式的可变信息取决于 θ \theta θ、范数长度的共同作用,最终可能导致:某方向即便不是负梯度方向,但它有可能使 ( P k ) T ∇ f ( x k ) (\mathcal P_k)^T \nabla f(x_k) (Pk)Tf(xk)达到最小
    深度学习笔记之优化算法(二)随机梯度下降_第1张图片

梯度下降法在机器学习中的问题

在本节中,这里暂时模糊掉最速下降法与梯度下降法之间的区别。在无约束优化问题——最速下降法以及梯度下降法在强凸函数的收敛性分析中介绍过,如:

  • 梯度下降法收敛速度慢,即便目标函数是强凸函数最快也仅能达到线性收敛
  • Hessian Matrix ⇒ ∇ 2 f ( ⋅ ) \text{Hessian Matrix} \Rightarrow \nabla^2 f(\cdot) Hessian Matrix2f()以及条件数 ( 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=1NlogP(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=1NlogP(y(i)x(i);θ)]=N1i=1Nθ[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=1Nθ[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=m1j=1mθ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 Nlim(1N1)N=e10.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} GE(x(j),y(j))D[θL[f(x(j);θ),y(j)]]=m1j=1mθ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>τ时,学习率呈现稳定状态。

你可能感兴趣的:(深度学习,机器学习,随机梯度下降与Bagging,梯度下降法的问题)