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

news2024/11/30 14:46:41

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

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

引言

本节将介绍随机梯度下降 (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)达到最小
    各范数示例

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

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

  • 梯度下降法收敛速度慢,即便目标函数是强凸函数最快也仅能达到线性收敛
  • 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>τ时,学习率呈现稳定状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1051774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

102.二叉树的层序遍历

目录 一、题目 二、代码 一、题目 102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 二、代码 主要应用到了两个队列&#xff0c;一个队列存放数据&#xff0c;一个队列存放对应所在的第几层 /*** Definition for a binary tree node.* struct TreeNode {* …

机器学习笔记 - 基于强化学习的贪吃蛇玩游戏

一、关于深度强化学习 如果不了解深度强化学习的一般流程的可以考虑看一下下面的链接。因为这里的示例因为在PyTorch 之上实现深度强化学习算法。 机器学习笔记 - Deep Q-Learning算法概览深度Q学习是一种强化学习算法,它使用深度神经网络来逼近Q函数,用于确定在给定状态下采…

[watevrCTF-2019]Cookie Store

很简单一道 提示了很多在cookie中 我们去看看cookie 发现是base64加密 修改大于100即可 然后买即可 。。。。。。

【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(其它指令)?

除了基础的 LDx 指令,还有 LDP、LDR 这些指令,我们也需要关注。 1 LDNP (SIMD&FP) 加载 SIMD&FP 寄存器对,带有非临时提示。该指令从内存加载一对 SIMD&FP 寄存器,向内存系统发出访问是非临时的提示。用于加载的地址是根据基址寄存器值和可选的立即偏移量计算…

建筑能源管理(2)——建筑能源的类型及统计计算方法

1、能源类型 能源也称能量资源或能源资源&#xff0c;是为人类的生产和生活提供各种能力和动力的物质资源&#xff0c;是国民经济的重要物质基础&#xff0c;也是未来国家命运的基础。能源的开发和有效利用程度以及人均消费量是生产技术和生活水平的重要标志。 2018年10月26日…

无线WIFI工业路由器可用于楼宇自动化

钡铼4G工业路由器支持BACnet MS/TP协议。BACnet MS/TP协议是一种用于工业自动化的开放式通信协议&#xff0c;被广泛应用于楼宇自动化、照明控制、能源管理等领域。通过钡铼4G工业路由器的支持&#xff0c;可以使设备间实现高速、可靠的数据传输&#xff0c;提高自动化水平。 钡…

Learning Invariant Representation for Unsupervised Image Restoration

Learning Invariant Representation for Unsupervised Image Restoration (Paper reading) Wenchao Du, Sichuan University, CVPR20, Cited:63, Code, Paper 1. 前言 近年来&#xff0c;跨域传输被应用于无监督图像恢复任务中。但是&#xff0c;直接应用已有的框架&#xf…

Android 性能优化—— 启动优化提升60%

应用启动速度 一个应用App的启动速度能够影响用户的首次体验&#xff0c;启动速度较慢(感官上)的应用可能导致用户再次开启App的意图下降&#xff0c;或者卸载放弃该应用程序 本文将从两个方向优化应用的启动速度 : 1.视觉体验优化 2.代码逻辑优化 视觉优化 应用程序启动有…

Spring Framework 学习笔记4:AOP

Spring Framework 学习笔记4&#xff1a;AOP 1.概念 AOP&#xff08;Aspect Oriented Programming&#xff0c;面向切面编程&#xff09;是一种编程思想。它要解决的问题是&#xff1a;如何在不改变代码的情况下增强代码的功能。 AOP 有一些核心概念&#xff1a; 连接点&am…

OpenGL之光照贴图

我们需要拓展之前的系统&#xff0c;引入漫反射和镜面光贴图(Map)。这允许我们对物体的漫反射分量和镜面光分量有着更精确的控制。 漫反射贴图 我们希望通过某种方式对物体的每个片段单独设置漫反射颜色。我们仅仅是对同样的原理使用了不同的名字&#xff1a;其实都是使用一张…

5.图形的连续绘制

到目前为止我们已经学习了折线&#xff0c;圆弧&#xff0c;矩形的基本绘制&#xff0c;但是我们每次都是单独绘制并且只绘制一个图形的。 不知道大家有没有试过在一个画布上绘制多个图形&#xff0c;例如我现在要画一个矩形&#xff0c;一个圆形和一段折线&#xff0c;代码如下…

03. 人工智能核心基础 - 导论(2)

文章目录 从方法论上来讲从问题范式上来讲从研究对象来讲 Hi&#xff0c;你好。我是茶桁。 上一章中&#xff0c;我们谈论了人工智能在时间维度上的不同时间不同的侧重点&#xff0c;这只是一个片面的方面。当然除此之外&#xff0c;我们还要从其他方向来认识人工智能&#xf…

解决大模型行业落地三大挑战,华为云GaussDB向量数据库正式发布

随着AI大模型产品及应用呈现爆发式增长,新的AI时代已经到来。向量数据库可与大语言模型配合使用,解决大模型落地过程中的痛点,已成为企业数据处理和应用大模型的必选项。在近日举行的华为全联接大会2023期间,华为云正式发布GaussDB向量数据库。GaussDB向量数据库基于GaussD…

python:bottle + eel 模仿 mdict 查英汉词典

Eel 是一个轻量的 Python 库&#xff0c;用于制作简单的类似于离线 HTML/JS GUI 应用程序&#xff0c;并具有对 Python 功能和库的完全访问权限。 Eel 托管一个本地 Web 服务器&#xff0c;允许您使用 Python 注释函数&#xff08;annotate functions&#xff09;&#xff0c;…

IDLE、Anaconda安装与使用

博主&#xff1a;命运之光 专栏&#xff1a;Python程序设计​​​​​ 目录 Python下载和安装 Anaconda安装和使用 Python程序运行方式 Python下载和安装 常用集成开发环境 IDE 默认编程环境&#xff1a; IDLE---初学者&#xff08; Download Python | Python.org &#x…

自动群发节日祝福,1 行 Python 代码搞定,小白可用

想了解更多精彩内容&#xff0c;快来关注程序员晚枫 大家节日快乐&#xff0c;这里是程序员晚枫&#xff0c;小红薯也叫这个名字。 今天给大家分享一个实用功能&#xff1a;自动群发祝福消息。 我相信社会人都体会过&#xff0c;过年过节给别人群发祝福消息的无奈&#xff0…

前沿研究|16s+宏基因组binning揭示大型藻类附生微生物群落核心组成

发表期刊&#xff1a;Microbiome 发表时间&#xff1a;2023 影响因子&#xff1a;15.5 DOI: 10.1186/s40168-023-01559-1 研究背景 大型藻类附生微生物群落是新型酶类和化合物的丰富资源&#xff0c;在维持沿海系统的高生物生产力和生物多样性方面发挥着重要的作用。但迄今…

华为乾坤区县教育安全云服务解决方案(2)

本文承接&#xff1a; https://blog.csdn.net/qq_37633855/article/details/133276200?spm1001.2014.3001.5501 重点讲解华为乾坤区县教育安全云服务解决方案的部署流程。 华为乾坤区县教育安全云服务解决方案&#xff08;2&#xff09; 课程地址解决方案部署整体流程组网规划…

Prettier - Code formatter格式化规则文件

文章目录 前言安装使用 前言 先前公司在规范代码时,由于个人业务繁忙跟技术总监是后端出身用的IDEA不熟悉vsCode;以及大多数时都自己一个人负责一个项目,当时并不看重这些;最近在整理vue3tsvite的脚手架模板(平时工作用的react),开始整理格式化代码,方便之后 vue 和 react 中应…

(附源码)springboot体检预约APP 计算机毕设16370

目 录 摘要 1 绪论 1.1开发背景 1.2研究现状 1.3springboot框架介绍 1.4论文结构与章节安排 2 Springboot体检预约APP系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统流程分析 2.2.1 数据添加流程 2.2.2 数据…