Datawhle X 李宏毅苹果书AI夏令营深度学习笔记之——局部最小值与鞍点

news2024/11/23 12:57:29

深度学习中优化神经网络是一个重要的问题,我们经常沮丧地发现到了一个节点,不管参数怎么更新,训练的损失都不会下降,神经网络似乎训练不起来了。这可能和损失函数收敛在局部最小值与鞍点有关。

一、 局部最小值(local minama) VS 鞍点(saddle point)

通常我们会认为优化到某个地方,在这个地方参数对损失函数的微分为0,梯度下降就不能再更新参数了,训练就停下来了,损失不再下降了。而提到梯度为零的时候,我们最先想到的可能就是局部极小值(local minimum)。但这个说法是不严谨的。

达到局部最小值的条件:
1.在此处损失函数的微分为0。
2.在该点周围的损失函数值都大于该点的损失函数值。

但其实损失函数不仅在极小值点处的微分为0,在鞍点处的微分也为0,但两个点完全是不一样的概念。 在鞍点处,虽然损失函数的微分为0,但是在该点周围的区域中,有些点的函数值大于**鞍点(saddle point)**处的函数值,有些点的函数值小于鞍点处的函数值。

损失函数在某点处的微分为0,并不能直接判断函数收敛到了局部最小值,只能称该点为临界点(critical point)

在这里插入图片描述

  • 局部最小值(local minimum):该点的函数值小于其邻域内的其他点。神经网络的损失函数在局部最小值处趋于稳定,此时参数更新速度减慢。

  • 鞍点(saddle point):一个点在某个方向上是局部最小值,而在另一个方向上是局部最大值。这种点在高维优化问题中非常常见,尤其是在神经网络中。

二、避免陷入鞍点或局部最小值的方法

如果一个点的梯度真的很接近零,我们走到临界点的时候,这个临界点到底是局部极小值还是鞍点,是一个值得去探讨的问题。因为如果损失收敛在局极小值,我们所在的位置已经是损失虽低的点了,往四周走提失都会比较高,就没有优化的路可以走了。但遇到鞍点的时候,旁边还是有路可以让损失更低的。只要逃离鞍点,就有可能让损失更低。

为了解决这个问题,诸如mini-batch梯度下降、动量梯度下降、Adam等优化算法可以帮助模型跳出鞍点区域。

2.1 mini-batch梯度下降法

batch与epoch的概念

在训练模型的时候,通常并不是一次性在所有数据上进行参数更新的,而是把所有的数据分成一个一个的批量(batch),每个批量的大小叫做batch size。模型参数(如权重和偏置)是在每个批次的样本上计算的梯度基础上不断更新的。每一次在更新参数的时候,会去取出一个batch的数据用来计算出损失函数并更新参数。遍历所有batch(批量)的过程称为一个回合(epoch)。而且在把数据分为批量的时候,还会对 数据进行随机打乱,一个常见的做法是在每一个回合(epoch)开始之前重新划分batch(批量),也就是说,每个epoch中,批量的数据都不一样。

关系示意

假设我们有一个包含1000个样本的训练集,并将批量大小设为100。
Batch Size = 100
Epoch = 1(完整训练集的一轮遍历)

在这个情况下:
每遍历完1000个样本需要处理 1000 / 100 = 10 个batch(批次)。
如果我们训练5个Epoch,那么模型将经历 5 * 10 = 50 个batch(批次)。

总结

  • Batch 是对数据集的小批量处理单元,决定了每次更新模型参数时用到的数据量。
  • Epoch 是对整个训练集的完整遍历,一次完整的训练包括多个批次(Batch)。
  • 每个Epoch开始之前,都要重新划分batch

在这里插入图片描述
使用全批量(fullbatch)的数据来更新参数时,就是**批量梯度下降法(Batch.Gradient Descent,BGD)**此时模型必须把所有训练数据都看完,才能够计算损失和梯度,参数才能够更新一次。

当batch size等于1时,此时使用的方法即随机梯度下降法(Stochastic Gra-dient Descent,SGD)

实际上,批量梯度下降并没有划分批量,要把所有的数据都看过一遍,才能够更新一次参数,因此其每次迭代的计算量大。但相比随机梯度下降,批量梯度下降每次更新更稳定、更准确。而随机梯度下降的梯度上引入了随机噪声,因此在非凸优化问题中,其相比批量梯度下降更容易逃离局部最小值。

大小批量训练的效率对比

有考虑并行计算的时候,大的批量大小反而是较有效率的,一个回合大的批量花的时间反而是比较少的。
在这里插入图片描述

小批量训练的优化结果较好

大的批量更新比较稳定,小的批量的梯度的方向是比较有噪声的(noisy)。但实际上有噪声的的梯度反而可以帮助训练,如果用MNIST和CIFAR这两个数据集做实验,来对比不同batch size对模型accuracy的影响,我们可以从下面2副图的结果看出:批量大小越大,验证集准确率越差。 大的批量大小往往在训练的时候,小的批量大小优化的结果反而是比较好的。

在这里插入图片描述

为何小批量训练的优化结果更好?

在这里插入图片描述如果使用Full batch训练,更新参数的时候是沿着一个Loss function,当它遇到一个局部最小值点或者鞍点(总之在这个点的微分值为0)时,它就会停下来不再更新参数。

使用small batch训练时,每次是挑个批量计算损失函数,所以每一次更新参数的时候所使用的损失函数是有差异的。选到第一个批量的时候,用损失函数L1计算梯度; 选到第二个批量的时候,用损失函数L2计算梯度。假设用L1算梯度的时候,梯度是零,训练就会卡住。但L2的函数跟 L1长得不一样,L2不一定会在此处卡住,可以换下个批量的损失函数L2计算梯度,模型还是可以继续训练,继续更新参数,让损失变小。

小批量训练的泛化能力更强

在这里插入图片描述大的批量大小会让我们倾向于走到“峡谷”里面,而小的批量大小倾向于让我们走到“盆地”里面。小的批量有很多的损失,其更新方向比较随机,其每次更新的方向都不太一样。即使“峡谷”非常窄,它也可以跳出去,之后如果有一个非常宽的“盆地”,它才会停下来。

在这里插入图片描述

在有并行计算的情况下,小的批量跟大的批量运算的时间并没有太大的差距。除非大的批量非常大,才会显示出差距。但是一个回合需要的时间,小的批量比较长,大的批量反而是比较快的,所以从一个回合需要的时间来看,大的批量是较有优势的。 而小的批量更新的方向比较有噪声的,大的批量更新的方向比较稳

2.2 动量梯度下降法

在这里插入图片描述
这种方法借鉴了物理世界里的“动量”概念:一个球如果从高处滚下来,就算滚到鞍点或鞍点,因为惯性的关系它还是会继续往前走。如果球的动量足够大,其甚至翻过小坡继续往前走。

上图中,红色表示负梯度方向,蓝色虚线表示前一步的方向,蓝色实线表示真实的移动量。一开始没有前一次更新的方向,完全按照梯度给指示往右移动参数。负梯度方向跟前一步移动的方向加起来,得到往右走的方向。一般梯度下降走到一个局部最小值或鞍点时,就被困住了。但有动量还是有办法继续走下去,因为动量不是只看梯度,还看前一步的方向。即使梯度方向往左走,但如果前一步的影响力比梯度要大,球还是有可能继续往右走,甚至翻过一个小丘,也许可以走到更好的局部最小值,这就是动量有可能带来的好处。

2.3 自适应学习率

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

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

相关文章

‌蜘蛛的工作原理及蜘蛛池的搭建与优化

蜘蛛的工作原理主要包括跟踪网页链接、‌采用一定的爬行策略遍历互联网,‌以及将新内容添加到引擎的索引中。‌具体来说:‌ 跟踪网页链接‌:‌蜘蛛会从一个或多个初始URL开始,‌通过这些URL发现新的链接,‌并将这些链接…

数据的基本类型

数据的基本类型 字符串 切片 切片语法: strs "hello" strs[0:]整数型 浮点型 布尔类型

vscode c++和cuda开发环境配置

文章目录 1. vscode 插件安装2. 开发环境配置2.1 bear 安装2.2 代码的编译2.2.1 编写Makefile文件2.2.2 bear make和make命令2.3 debug环境配置2.1 函数跳转设置2.1.1 ` c_cpp_properties.json` 设置2.1.2 settings.json设置2.2 调试环境配置2.2.1 tasks.json2.2.2 launch.json…

【C语言进阶】C语言指针进阶实战:优化与难题解析

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言指针进阶 (上) 🌹🌹期待您的关注 🌹🌹 ❀C语言指针进阶 &#x…

Java常用API(BigInteger)

在Java中,整数有四种类型:byte,short,int,long 在底层占用字节个数:byte 1个字节,short2个字节,int 4个字节,long 8个字节 对象一旦创建,里面的值是不能改变…

Go wv(WebView2) GUI框架介绍和使用

说明 wv(webview2) 是Go语言基于LCL和WebView2基础上封装的框架,用于开发Windows GUI软件。 介绍 LCL(Lazarus Component Library) :跨平台原生UI组件库. wv(WebView2): Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 …

俄罗斯应用本地化中需要考虑的不同格式的特点

在为俄罗斯市场本地化应用程序时,调整各种格式以符合当地惯例至关重要。这些格式,包括日期和时间、数字、货币、地址等,在确保应用程序对俄罗斯用户来说自然和用户友好方面发挥着重要作用。以下是本地化过程中应考虑的一些关键格式特征。 日…

算法之二分查找法

用二分查找法刷leetcode算法题目的时候&#xff0c;经常遇到视频看着理解很透彻&#xff0c;当上手写时一看就会&#xff0c;一写就废。二分查找法涉及边界条件很多&#xff0c;逻辑很简单&#xff0c;就是写不好。何时写 while(left<right)&#xff0c;while(left<right…

【大模型】llama系列模型基础

前言&#xff1a;llama基于transformer架构&#xff0c;与GPT相似&#xff0c;只用了transformer的解码器部分。本文主要是关于llama&#xff0c;llama2和llama3的结构解读。 目录 1. llama1.1 整体结构1.2 RoPE1.3 SwiGLU 激活函数 2. llama22.2 GQA架构2.3 RLHF3. llama3 参考…

【数据结构入门】排序算法之插入排序与选择排序

目录 前言 一、排序的概念及运用 1.排序的概念 2.排序的运用 3.常见排序算法 二、插入排序与选择排序 2.1插入排序 2.1.1直接插入排序 1&#xff09;基本思想 2&#xff09;具体步骤 3&#xff09;算法特性 4&#xff09;算法实现 2.1.2希尔排序 1) 基本思想 2&…

从苹果智能看端上大模型应用

将生成式人工智能集成到边缘设备本身就是一个重大挑战&#xff0c;我们需要在智能手机和计算机有限的计算能力和内存范围内高效地运行高级模型。确保这些模型运行迅速&#xff0c;而不会耗尽电池寿命或使设备过热&#xff0c;端上的局限增加了大模型应用的复杂性。此外&#xf…

LeetCode 算法:杨辉三角 c++

原题链接&#x1f517;&#xff1a;杨辉三角难度&#xff1a;简单⭐️ 题目 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1]…

关于异常断电后jmeter的jmx文件异常变成二进制文件并成功恢复的心酸历程

今日下午正在编写jmeter接口&#xff0c;正在调试中&#xff0c;突然断电&#xff08;由于四川高温&#xff0c;导致电力紧缺的很&#xff09;&#xff0c;来电了后我正常启动电脑&#xff0c;打开后&#xff0c;赶紧打开jmeter&#xff0c;并打开最近打开的文件&#xff0c;我…

『功能项目』怪物受击的动画事件【10】

我们打开上一篇09着色器光透魔法球的项目&#xff0c; 本章要做的事情是在场景中创建一个怪物对象&#xff0c;当怪物被主角的魔法球击中后播放受击动画效果&#xff0c;此类技术用到动画事件帧&#xff0c;在动画上创建脚本。 首先打开资源商店选择一个免费资源的怪物模型加载…

静态ISP代理IP适合什么应用场景?

随着互联网的普及和发展&#xff0c;越来越多的设备和应用需要接入网络。在这些情况下&#xff0c;动态主机配置协议 (DHCP) 成为一种常见的选择&#xff0c;因为它会自动为客户端分配 IP 地址。然而&#xff0c;在某些特定场景下&#xff0c;静态 IP 地址 (ISP) 可能是更好的选…

哈夫曼树例题

从这道题可以看出需要构建哈夫曼树 构造哈夫曼树如下 9和5最小&#xff0c;构成左右树&#xff0c;二者之和是14&#xff0c;放入数组&#xff0c;5和9从数组去掉 14和16最小&#xff0c;构成左右树&#xff0c;二者之和是30&#xff0c;放入数组&#xff0c;14和16从数组去…

基于yolov8的玻璃瓶塑料瓶检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的玻璃瓶塑料瓶检测系统是一个利用深度学习技术的先进解决方案&#xff0c;专注于对图像、视频或实时摄像头流中的玻璃瓶和塑料瓶进行快速准确的检测与定位。该系统通过YOLOv8这一高效的目标检测算法&#xff0c;能够在多种应用场景下展现卓越的性能。…

Java面试题·解释题

系列文章目录 总章 Java解释题 文章目录 系列文章目录前言面向对象编程是什么&#xff1f;Java的跨平台原理Java的安全性Java的三大版本Java开发运行过程什么是JVM&#xff1f;什么是JDK&#xff1f;什么是JRE&#xff1f;JDK,JRE,JVM三者关系概括Java的数据类型&#xff1f;J…

有没有比较好用的在线翻译工具?实力推荐这4款。

当我们面对外文资料时&#xff0c;可能需要翻阅厚重的词典&#xff0c;耗费大量的时间和精力。在翻译这方面&#xff0c;很多人都十分依赖翻译工具的&#xff0c;因为这些工具只需几秒钟就能给出翻译结果&#xff0c;提高了我们的学习和工作的效率。但是随着翻译工具越来阅读&a…

灵感枯竭?ChatGPT助你轻松完成开题报告!

在学术探索的征途中&#xff0c;撰写论文开题报告是一项至关重要的初步工作。这项工作不仅标志着您研究旅程的起点&#xff0c;也是展现您研究思路和方法论的关键时刻。ChatGPT&#xff0c;作为一款前沿的人工智能工具&#xff0c;将以其深度学习能力&#xff0c;成为您学术探索…