当前位置: 首页 > article >正文

深度学习:SGD的缺点

首先看下述函数:
在这里插入图片描述最小值为x=0,y=0处
先了解下它的梯度特征。了理解其梯度特征,我们需要计算其梯度向量。
梯度向量 ∇f 是函数 f 在每个变量方向上的偏导数组成的向量。具体来说:
∇f=(∂f/∂x,∂f∂/y)
首先,我们计算 f 对 x 的偏导数:
∂f/∂x=10/x​
接着,我们计算 ff对 yy的偏导数:
∂f/∂y=2y
因此,梯度向量 ∇f为:
∇f=(x/10,2y)

从梯度向量的表达式可以看出:
在 x轴方向上,梯度分量是 x/10,这意味着梯度在 x轴方向上的变化相对较小,因为 x的系数是 1/10​,这是一个较小的数。
在 y 轴方向上,梯度分量是 2y,这意味着梯度在 y轴方向上的变化相对较大,因为 y的系数是 2,这是一个较大的数。

因此,这个函数的梯度特征是:在 y轴方向上变化较大,而在 x轴方向上变化较小。换句话说,函数 f在 y轴方向上的变化比在 x轴方向上的变化更为显著。
梯度图如下图所示:
在这里插入图片描述我们应用随机梯度下降(SGD)方法,从初始点 (x,y)=(−7.0,2.0)开始搜索,SGD会呈“之”字形移动,是一个相当低效的路径,如下图所示:
在这里插入图片描述是由于以下几个原因:
1.梯度方向的变化:
在给定的函数 f=120(x2)+y2f=201​(x2)+y2 中,梯度向量 ∇f=(x/10,2y)) 在不同点的方向是不同的。
初始点 (−7.0,2.0)处的梯度向量为 (−7.0/10,2⋅2.0)=(−0.7,4.0)
这意味着在初始点,梯度在 y轴方向上的分量(4.0)远大于在 x 轴方向上的分量(-0.7)。
2. 学习率的影响:
学习率(步长)的选择会影响搜索路径。如果学习率过大,可能会导致在 yy 轴方向上过度移动,而在 xx 轴方向上移动不足,从而形成之字形路径。
如果学习率过小,虽然可以避免之字形路径,但收敛速度会变慢。
3.局部最小值和鞍点:
在某些情况下,函数可能存在局部最小值或鞍点,这些点可能会导致SGD在搜索过程中来回摆动,形成之字形路径。
4. 随机性:
SGD方法中包含了随机性,每次迭代时只使用部分数据(或单个数据点)来计算梯度,这可能导致梯度估计的不稳定性,从而形成之字形路径。

为了更具体地理解为什么会出现之字形移动,我们可以考虑以下步骤:
初始点 (−7.0,2.0)
梯度向量 (−0.7,4.0)
如果学习率 ηη 较大,更新后的点可能为 (−7.0−η⋅(−0.7),2.0−η⋅4.0),即 (−7.0+0.7η,2.0−4η)
更新后的点:
如果 η 较大,y轴方向上的移动会显著大于x 轴方向上的移动,导致点在 y轴方向上大幅移动,而在 x 轴方向上移动较小。
这种不平衡的移动可能导致点在 y 轴方向上来回摆动,形成之字形路径。
综上所述,SGD方法在从 (−7.0,2.0)处开始搜索时,由于梯度方向的变化、学习率的影响以及随机性等因素,可能会呈现出之字形移动。

因此,SGD的缺点是,如果函数的形状非均向,比如呈延伸状,搜索的路径就会非常低效。因此,我们需要比单纯朝梯度方向前进的SGD更聪明的方法。SGD低效的根本原因是,梯度的方向并没有指向最小值的方向(在复杂的非凸优化问题中,函数可能存在多个局部最小值和鞍点。SGD可能会陷入这些不良点,导致优化过程停滞不前)。

改进SGD的方法

为了克服SGD的低效性,研究者们提出了许多改进方法,包括:
动量(Momentum):通过引入动量项,减少梯度噪声的影响,加速收敛。
自适应学习率方法:如AdaGrad、RMSprop、Adam等,根据参数的历史梯度自动调整学习率。
二阶优化方法:如牛顿法、拟牛顿法等,利用二阶导数信息加速收敛。
正则化技术:如L1、L2正则化,防止过拟合,提高模型的泛化能力。
批量归一化(Batch Normalization):通过归一化输入数据,加速训练过程。

动量(Momentum):在此例中应用Momentum方法,虽然x轴方向上受到的力非常小,但是一直在同一方向上受力,所以朝同一个方向会有一定的加速。反过来,虽然y轴方向上受到的力很大,但是因为交互地受到正方向和反方向的力,它们会互相抵消,所以y轴方向上的速度不稳定。因此,和SGD时的情形相比,可以更快地朝x轴方向靠近,减弱“之”字形的变动程度。如下图所示:
在这里插入图片描述AdaGrad:AdaGrad会为参数的每个元素适当地调整学习率。参数的元素中变动较大(被大幅更新)的元素的学习率将变小。也就是说,可以按参数的元素进行学习率衰减,使变动大的参数的学习率逐渐减小。如下图所示:
在这里插入图片描述函数的取值高效地向着最小值移动。由于y轴方向上的梯度较大,因此刚开始变动较大,但是后面会根据这个较大的变动按比例进行调整,减小更新的步伐。因此,y轴方向上的更新程度被减弱,“之”字形的变动程度有所衰减。

**Adam:**融合了Momentum和AdaGrad的方法。通过组合前面两个方法的优点,有望实现参数空间的高效搜索。此外,进行超参数的“偏置校正”也是Adam的特征。如下图所示:
在这里插入图片描述


http://www.kler.cn/a/369617.html

相关文章:

  • 01.04、回文排序
  • 【MySQL】MySQL客户端连接用 localhost和127.0.0.1的区别
  • 【C++】List的模拟实现
  • 简要介绍C语言与c++共有的数学函数
  • 理解PLT表和GOT表
  • 《多线程基础之互斥锁》
  • redis学习路线和内容
  • Javascript立即执行函数
  • 微服务之间调用,OpenFeign传递用户(RequestInterceptor接口)
  • JavaSet集合
  • [332]基于springboot的养老院管理系统
  • 基于SpringBoot的洗浴管理系统【附源码】
  • 400行程序写一个实时操作系统(十七):调度算法的实现
  • Sqoop的安装配置及使用
  • 梧桐数据库锁处理过程
  • Cesium基础-(Entity)-(point)
  • (STM32笔记)十二、DMA的基础知识与用法
  • OBOO鸥柏丨液晶拼接大屏KVM分布式输入输出节点控制系统技术
  • C/C++每日一练:实现冒泡排序
  • Spring Boot 3项目创建与示例(Web+JPA)
  • 厨艺爱好者的在线聚集地:Spring Boot实现
  • 2022 icpc南京(I,G,A,D,M,B)
  • GATK Funcotator 详解
  • [论文阅读]Large Language Model guided Protocol Fuzzing
  • MinIO服务部署指南
  • 线程的理解及基本操作