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

知微集:梯度下降详解

欢迎来到"一起学点什么吧"的合集「NLP知微集」。在这里,我们不愿宏大叙事,只聚焦于自然语言处理领域中那些细微却关键的“齿轮”与“螺丝钉”。我相信,真正深刻的理解,源于对细节的洞察。本期,我将为您拆解的是:[梯度下降]

梯度下降(Gradient Descent)

梯度下降是一种迭代优化算法,在每次迭代或步骤中,模型的参数都会更新,使得损失函数依次朝向其最小值移动,直到达到收敛标准。

达到最优解的步长由学习率参数决定。如果学习率较大,算法可能收敛得更快,但也存在越过最小值和在其附近振荡的风险。另一方面,较小的学习率会使算法训练时间过长。

梯度下降的基本直觉可以通过想象一个人在一个有雾的夜晚被困在山里,试图下到山谷(全局最小值)来理解。能见度极低,看不到下山的路。他们必须仅依赖于他们能看到的非常短的距离。他们可以使用梯度下降的方法,从当前所在的点向最陡坡的方向移动。 采取多个这样的步骤将导致山谷(最低点)。
在这里插入图片描述
在这里插入图片描述

由上面的图从宏观上了解梯度下降是做什么的,其中的参数 学习率α\alphaα 可看作你在下山时的步幅(走的步子的大小),若步子过大,你可能越过最小值,跳到山谷的另一边,若步子太小,你就需要很长时间才能到达谷底。

在这里插入图片描述

此时,因为你是摸着石头下山,看不清整个地形地势,因此你还需要考虑全局和局部,山上可能会有各种不规则特征,如坑洞、高原、山脊等。如果函数遇到一个“洞”,它可能错误地认为那是最小值。另一方面,如果它遇到一个长平台,函数可能会在平台上无休止地小步行进,而永远不会到达最小值。

在这里插入图片描述

梯度下降算法的类型

梯度下降主要有三种类型。每种方法的第一个步骤都是随机初始化参数值,以启动优化过程。

梯度下降算法的选择取决于具体问题和数据集的大小。批量梯度下降适用于小数据集,而随机梯度下降算法更适合大数据集。小批量是这两种方法之间的一个良好折衷方案,在实践中经常使用。

批量梯度下降

Batch Gradient Descent(批量梯度下降, BGD):在批量实现中,参数仅在完成整个数据集的一次遍历或一个周期后更新。虽然它保证至少会收敛到一个局部最小值,但在大型数据集上执行速度很慢,因为参数更新之前必须考虑所有观测值。因此,可能需要多次遍历数据才能达到收敛。

随机梯度下降

Stochastic Gradient Descent(随机梯度下降,SGD):在随机情况下,参数在处理数据集中的每个实例后进行更新。由于每次观察后都会进行更新,学习过程比批量梯度下降更快。然而,由于梯度仅在一个训练样本上计算,它无法利用向量化及其提供的计算效率。此外,当接近最小值时,路径容易发生振荡,因此,该算法实际上并不收敛,而是在最小值周围的区域徘徊。解决这一缺陷的一个选项是使用动态学习率,当下降过程接近最小值时,学习率会降低。

小批量梯度下降

Mini Batch Gradient Descent(小批量梯度下降, MBGD):小批量是在全批量梯度下降和随机梯度下降之间的一种折中方法,其中参数在处理数据集的一个子集后进行更新。请注意,如果子集大小为 1,则执行随机梯度下降;如果它等于原始数据集的大小,则等同于全批量梯度下降。由于小批量可以在到达数据集末尾之前更新参数,并且还能够利用向量化,因此它的运行速度比全批量梯度下降更快。批量大小是一个通常需要调整的参数,因为较大的批量大小会导致优化过程更像是全批量梯度下降,而较小的批量大小则意味着更像是随机梯度下降的过程。

梯度下降的挑战

局部最小值(Local Minimum)

概念

局部最小值是指函数在某个邻域范围内的最小值点,但不一定是全局最小值。在梯度下降过程中,当算法到达局部最小值时,梯度为零,导致参数更新停止,从而可能无法找到全局最优解。

用上面的下山例子来说,即一个周围都比它高的小坑,你掉进去后以为到了最低点,但实际上山脉中还有更深的大坑。

缓解方法

  • 使用随机梯度下降
  • 以动量为基础的优化器

鞍点(Saddle Point)

概念

鞍点是指函数的所有梯度都消失但既不是全局最小值也不是局部最小值的任何位置。 它的特点是:在某些方向上函数值下降,另一些方向上函数值上升,形状类似马鞍(因此得名)。

如下图所示,是函数 z = x2 - y2 图像,其鞍点在 (0, 0) 位置。函数 z 的整个曲面看上去就像是一个马鞍,其在 x 轴方向向上曲,在 y 轴方向向下曲。所以这也是鞍点这个名字的由来。
在这里插入图片描述

在这里插入图片描述

缓解方法

解决鞍点问题的核心在于获取二阶信息模拟二阶优化器的行为,从而确定该向哪个方向逃离

  • 自适应学习率优化器
  • 基于动量的优化器
  • 高级二阶优化方法

梯度消失(Vanishing Gradient)

概念

梯度消失是指在深度神经网络训练过程中可能发生的问题,当损失函数相对于模型参数的梯度在训练过程中反向传播到网络各层时变得极小(接近于零)。这会导致深度神经网络(DNN)的学习受损。当梯度变得过小时,意味着模型的权重无法得到有效更新。因此,网络的训练可能停滞不前或变得极其缓慢,使得网络难以学习数据中的复杂模式。

在这里插入图片描述

缓解方法

Sigmoid 和双曲正切 (tanH) 等激活函数具有饱和区域,在深度神经网络训练中更容易出现梯度消失问题。使用 ReLU 及其变体等激活函数可以缓解梯度消失问题,因为它们对于正输入不会饱和。ReLU 的导数要么是 0,要么是 1。在反向传播过程中,当梯度被多次相乘以获得较低层的梯度时,ReLU 导数的这一特性(要么是 0,要么是 1)避免了梯度消失,从而实现更有效、更快的训练。

在这里插入图片描述

其他缓解梯度消失问题的技术包括:

  • 使用智能初始化技术,如 Xavier 初始化和 He 初始化
  • 批归一化
  • 跳过连接(Skip connections)和残差连接(residual connections)

梯度爆炸(Exploding Gradient)

概念

在这个问题中,梯度在训练过程中呈指数级增长。当梯度值变得过大时,它们会导致权重进行大幅更新;权重可能变为 NaN(非数字)或无穷大,从而导致数值不稳定。

与梯度消失问题类似,当在隐藏层中使用 tanh 或 sigmoid 激活函数时,爆炸梯度问题更为常见,因为这些激活函数的输出倾向于集中在曲线的两端(对于 sigmoid 为 0 或 1,对于 tanh 为-1 和 1)。在具有许多层的深度网络中,爆炸梯度问题尤为突出,因为在这些网络中,梯度通过链式法则计算,并且可以成倍累积。

缓解方法

  • 梯度裁剪(Gradient clipping):这种技术涉及在反向传播过程中裁剪梯度,以确保它们不超过指定的阈值
  • 权重正则化(Weight regularization):向损失函数添加一个正则化项可以帮助防止权重变得过大
  • 合理的权重初始化(Proper weight initialization):选择合适的权重初始化策略有助于防止训练初期梯度爆炸

结语

“见微知著,积跬步以至千里”,至此,关于 [梯度下降] 的微探索之旅就暂告一段落了。感谢您的耐心阅读。希望这片小小的“知微”碎片,能让你对NLP有更清晰的认识。

点赞关注不迷路,点击合集标签「#NLP知微集」,不错过每一次细微的洞察。

下期再见,继续我们的拆解之旅!

Reference

  • https://www.cnblogs.com/pinard/p/5970503.html
  • https://www.atyun.com/58418.html
  • https://medium.com/@abhaysingh71711/gradient-descent-explained-the-engine-behind-ai-training-2d8ef6ecad6f
  • https://zhuanlan.zhihu.com/p/72374201
  • https://cloud.tencent.com/developer/article/1408058
http://www.dtcms.com/a/355603.html

相关文章:

  • 编写TreeMap自定义排序的插曲
  • 信号量使用流程
  • 多媒体内容智能检索技术进展
  • [特殊字符] ​​MySQL性能参数查询总结​
  • 146-延长无线传感器网络生命周期的睡眠调度机制的混合元启发式优化方法!
  • [RK3576][Android14] Android->添加以太网MAC地址选项
  • Spring Boot 实战:接入 DeepSeek API 实现问卷文本优化
  • FFmpeg 实战:从零开始写一个简易视频播放器
  • 视频层和叠加层
  • 数据结构:冒泡排序 (Bubble Sort)
  • Android14 USB子系统的启动以及动态切换相关的init.usb.rc详解
  • mysql主从复制GTID模式
  • Day16_【机器学习—模型拟合问题】
  • AI智能能源管理系统深度剖析:从工业节能到数据中心降耗,解锁企业降本减排新方案
  • Docker 40个自动化管理脚本-1 (20/40)
  • CVPR2019 Oral论文《Side Window Filtering》解读及算法 Python 实现
  • 网络编程3-UDP协议
  • Megatron-Energon 和 Megatron-LM
  • 解锁五大联赛数据:API技术指南
  • Python在AI与数据科学工作流中的新角色:2025年实践指南
  • X-AnyLabeling:Win10上安装使用X-AnyLabeling标注工具
  • 国内永久免费云服务器有哪些?
  • AI视频生成工具全景对比:元宝AI、即梦AI、清影AI和Vidu AI
  • Java学习笔记之——通过分页查询样例感受JDBC、Mybatis以及MybatisPlus(一)
  • CPU、进程、线程上下文切换
  • 使用Rag 命中用户feedback提升triage agent 准确率
  • 特斯拉 Tesla FSD 12.6.4,FSD14, VLA 和 华为 ADS 4.0 比较
  • 广东省省考备考(第八十九天8.28)——判断推理(第九节课)
  • 智能客服多智能体(知识库问答+情绪感知+工单路由)
  • 玄机靶场 | 第九章-blueteam 的小心思3