首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 24-03-09 02:01
  • 4546
  • 13091
blog.csdn.net

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

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

引言

本节将介绍随机梯度下降 (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(∥αk​Pk​∥)表示关于 α k P k \alpha_k\mathcal P_k αk​Pk​的高阶无穷小;
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 f(xk+1)−f(xk)=αk⋅(Pk)T∇f(xk)+O(‖αkPk‖)≈αk⋅(Pk)T∇f(xk)<0⇒(Pk)T∇f(xk)<0

f(xk+1)−f(xk)=αk⋅(Pk)T∇f(xk)+O(∥αkPk∥)≈αk⋅(Pk)T∇f(xk)<0⇒(Pk)T∇f(xk)<0
f(xk+1​)−f(xk​)​=αk​⋅(Pk​)T∇f(xk​)+O(∥αk​Pk​∥)≈α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 θ=π2

θ=π2
θ=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 ) ; θ ) {L[x(i),y(i);θ]=−logP(y(i)∣x(i);θ)J(θ)=E(x(i),y(i))∈DL[x(i),y(i);θ]=1NN∑i=1−logP(y(i)∣x(i);θ)
    ⎩ ⎨ ⎧​L[x(i),y(i);θ]=−logP(y(i)∣x(i);θ)J(θ)​=E(x(i),y(i))∈D​L[x(i),y(i);θ]=N1​i=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 ) ; θ ) ] ∇θJ(θ)=∇θ[1NN∑i=1−logP(y(i)∣x(i);θ)]=1NN∑i=1∇θ[−logP(y(i)∣x(i);θ)]
    ∇θ​J(θ)​=∇θ​[N1​i=1∑N​−logP(y(i)∣x(i);θ)]=N1​i=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 ) ; θ ) ] ∇θJ(θ)=1NN∑i=1∇θ[−logP(y(i)∣x(i);θ)]=E(x(i),y(i))∈D[−logP(y(i)∣x(i);θ)]

∇θ​J(θ)​=N1​i=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′1​j=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 ) ] G⇐E(x(j),y(j))∈D′[∇θL[f(x(j);θ),y(j)]]=1mm∑j=1∇θL[f(x(j);θ),y(j)]
    G​⇐E(x(j),y(j))∈D′​[∇θ​L[f(x(j);θ),y(j)]]=m1​j=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>τ时,学习率呈现稳定状态。

注:本文转载自blog.csdn.net的静静的喝酒的文章"https://blog.csdn.net/qq_34758157/article/details/133085904"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top