Datawhale X 李宏毅苹果书AI夏令营 Task1打卡

news/2024/11/15 9:16:51/文章来源:https://www.cnblogs.com/youth518/p/18383723

3.1 局部极小值与鞍点

3.1.1 临界点及其分类

  • 参数对于损失函数的微分为零时,就无法进一步优化了,训练即停止了。所以我们把这些梯度为零的点统称为临界点
  • 临界点可以分为两类:极值点 (局部极小值)和 鞍点
  • 鞍点就是指那些梯度为零但不是局部极小值或者局部极大值的点,因为其在损失函数的图像上的形状类似于马鞍,所以称为鞍点。
  • 哦按段临界点时局部极小值还是鞍点是一个很重要的问题,局部极小值点的损失无法再降低,但是鞍点还是可以进行进一步优化来降低损失的

3.1.2 判断临界值种类的方法

对于复杂网络来说,整个损失函数的形状可能也非常复杂,我们无法知道整个损失函数的形状,但是我们可以利用 泰勒级数近似 的方式来得到某个点附近的损失函数的大概形状。假设给定某一组参数 \(\theta^{\prime}\) ,对于该点附近的任意一点 \(\theta\) 来说,其损失函数 \(L(\theta)\)

\[L(\theta) = L(\theta^{\prime})+(\theta-\theta^{\prime})^T g + \frac{1}{2}(\theta-\theta^{\prime})^T H(\theta-\theta^{\prime}) \]

其中 \(g\) 表示梯度 \(\nabla L(\theta^{\prime})\)\(H\) 表示海森矩阵(即二次微分形式)

对于临界点来说梯度 \(g\) 为零,因此我们需要通过最后一项来判断该临界点时局部最小值,局部最大值还是鞍点。用向量 \(v\) 来表示 \(\theta-\theta^{\prime}\) :

  1. 若对于所有的 \(v\) 来说,\(v^THv > 0\)\(\theta^{\prime}\) 是局部极小值
  2. 若对于所有的 \(v\) 来说,\(v^THv < 0\)\(\theta^{\prime}\) 是局部极大值
  3. \(v^THv\) 既可以为正值也可以为负值,则该点是鞍点
    但是很明显,我们不可能将所有的 \(v\) 代入来检验。因此借助线性代数的知识我们可以知道,上述问题可以转化为判断海森矩阵 \(H\) 的正定性,若海森矩阵是正定的即是局部最小值,若海森矩阵是负定的则是局部最大值,否则为鞍点。

在了解了如何判断临界点种类后,我们需要知道对于一个鞍点应该如何更新参数。设 \(\lambda\)\(H\) 的一个特征值,其对应的特征向量是 \(u\) ,则令 \(\theta - \theta^{\prime} = u\)

\[u^THu = u^T(\lambda u)= \lambda \lVert u\rVert^2 \]

当特征值 \(\lambda\) 为负时,上式恒为负值,因此可以沿着负特征值对应的特征向量的方向去更新参数,损失就会降低

3.1.3 逃离鞍点的方法

通过先前的分析和计算,我们已经得到了一种判断鞍点并且更新参数的方法。但是很显然,对于一个复杂的神经网络和损失函数来说,计算海森矩阵和其特征值是一个非常麻烦的事情。所以我们退一步来想,是否有必要对于每一个临界点都判断一下其是否是鞍点?并且计算其负特征值对应的特征向量?

观察损失函数的图像可以看出,对于一个鞍点,如果我们从某个特定的界面来看这个鞍点可能就是一个低一维的局部极小值。因此我们可以自然地猜想,当参数量增大时是否有很多低维的局部极小值就会变成鞍点。即对于一个复杂的神经网络(参数量非常大)来说我们可以大胆猜想,其局部极小值点非常少,只占临界点中很小的一部分。

我们定义 最小值比例 为:

\[最小值比例 = \frac{正特征值数量}{总特征值数量} \]


由上图我们可以看出,对于神经网络我们几乎找不到极小值点,对于大部分的临界点来说,正特征值的数量不会超过 60%,因此我们训练的时候遇到梯度很小的地方,往往是遇到了鞍点。

3.2 批量和动量

在计算梯度的时候,并不是对所有的数据的损失计算梯度,而是分成一个一个的批量。在把数据分成批量的时候,我们还会进行随机打乱。随机打乱的做法也有很多,一种常见的是在每一回合开始的时候,重新随机划分批量,即每一个回合的批量数据都不一样多。

3.2.1 批量大小对梯度下降法的影响

我们可以先看两个极端的情况:

  • 使用全批量的数据来更新参数,也叫做批量梯度下降法 (BGD)
  • 批量大小等于1,此时使用的方法即随机梯度下降法(SGD),也成为增量梯度下降法
    随机梯度下降法引入了随机噪声,因此在非凸优化问题中,相比于批量梯度下降法更容易逃离局部最小值

虽然批量梯度下降法每一次更新都要看完所有数据,但是实际上考虑到并行运算的形式,批量梯度下降花费的时间并不一定更长。因为在数据上计算和更新所需要的时间成本是不一样多的。因此在运行并行计算的情况下,大的批量反而可能是更有效率的。

大的批量更新比较稳定,小的批量更新的梯度方向是比较有噪声的。但实际上这种噪声反而可能可以帮助训练。

一个可能的解释就是,小批量的梯度下降方式,每次计算的损失函数是有差异的,因此每次更新的方向比较随机,在某些情况下不容易被卡住。

在论文 “On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima”中作者通过实验发现小批量对于测试也很有帮助。大批量和小批量的训练准确率差不多,安东尼是在测试的时候,大批量更差,表现为过拟合。论文给出了一种解释是,训练损失上有很多的局部最小值,但是局部最小值有好坏之分。小批量训练由于其更新的随机性,其往往会找到一个平坦区域的最小值,当由训练集变成测试集时这种损失的变化幅度不会很大。但是大批量若是找到了一个陡峭区域的最小值,当数据发生变化时,损失可能会出现突增导致准确率下降。

3.2.2 动量法

动量法是另一种可以对抗鞍点或者局部最小值的方法。类比物理世界和滚动的小球,当球从高处滚下时,遇到鞍点或者局部最小值时不一定会被卡住,可能会因为动量的存在而翻过小坡继续向前。

相比于一般的梯度下降法,每一次直接按照梯度的反方向移动来更新参数。动量法每一次更新时,还要加上前一部移动的方向,来决定新的更新方向,记 \(m_i\) 表示第 i 次的更新量,对于一般的梯度下降法 \(m_i = -\eta g_i\) 而对于动量发来说 \(m_i = \lambda m_{i-1} - \eta g_i\)\(\lambda\) 是前一个方向的权重参数,\(\eta\) 时学习率)另一个角度理解动量法可以认为在更新时不仅需要考虑现在的梯度,而是以一定的权重考虑过去所偶有的梯度的总和,并且这种权重是逐渐累积的。




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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

纪念第一次在 Github 上提 ISSUE 得到了老哥的回复

背景 第一次在 GitHub 上提 ISSUE,提问的内容就是我的上一篇博文 rustlings v6.0 运行时出现 “ You are trying to run Rustlings using the old method before version 6”,当时搞了好长时间都没思绪,然后就抱着试一试的心态在上面提了一个 ISSUE。 提问之后,又慢慢理了一…

sky-take-out chapter 5

微信登录 商品浏览 HttpClient (1)介绍 就是一个客户端编程工具包,更直白点就是我们可以在java程序中通过HttpClient这个工具包来构造http请求,并且可以来发送http请求;要使用httpclient就需要再java程序中导入maven坐标。 核心API:HttpClient 实际上是一个接口,使用它可…

可拖拽表单设计器都有哪些突出特点?

一起来了解低代码技术平台、可拖拽表单设计器的多个优势特点为了提高效率、降低开发成本,利用低代码技术平台的优势特点可以实现这一目标。究竟什么是低代码技术平台?都有哪些值得夸耀的特点和优势?今天,我们就带着这些问题,一起来了解低代码技术平台、可拖拽表单设计器的…

找到喜欢的事情,坚持去做!

村上春樹:临近三十岁的时候,我依旧一无所成, 我意识到自己并没有经营的才能,又不善于应酬,不喜欢社交,也不太喜欢认识新的东西。我酷爱音乐,但是在这个方面,也谈不上有什么成就。我似乎唯有的优点,就是喜欢的事,总能坚持去做。--- 自己的智力水平一般般,情商不高,也…

2024.8.27

DATE #:20240827 ITEM #:DOC WEEK #:TUESDAY DAIL #:捌月廿肆TAGS< BGM = "Dragonflame--Kirara Magic" > < theme = oi-contest > < theme = oi-data structure Segment > < [空] > < [空] >``` 渊沉鳞潜,冻血锈骨闭魂眼;披风游焰…

Datawhale X 李宏毅苹果书 AI夏令营 Task1.2 笔记

《深度学习详解》3.2节中关于批量和动量的主要内容总结:批量的概念:在深度学习训练过程中,数据不是一次性全部用于计算梯度,而是被分成多个小批量(batch),每个批量包含一定数量的数据。每个批量的损失函数用于计算梯度并更新模型参数。 批量大小对梯度下降法的影响:两种…

两个月Crypto从入门到进阶专题

前言: 作为我最开始主要的方向Crypto,好多基础的原理没有搞懂,只知道要这样用,俗话说"基础不牢,地动山摇",这样就导致一些会做的题在比赛中一旦提升一点点难度就出事故,我又是一个懒虫,借着这次带新生的机会,我将用两个月将Crypto从入门到进阶来一遍,以便新…

Datawhale X 李宏毅苹果书 AI夏令营:task1通过案例了解机器学习

隐藏任务: ①:找出本篇中形如回归(regression)加粗字体的术语,并用自己的话进行解释,列成表格,与学习群的其他小伙伴讨论你的理解和搜索到的相关案例。 ②:整理出本篇中所有的公式,手动摘录,并尝试理解。 ③:找出机器学习找函数的3个步骤!并查找资料,交叉佐证这些…

25. Socket与粘包问题

1. Socket概念 Socket允许应用程序通过它发送或接收数据,对其进行像对文件一样的打开、读写和关闭等操作,从而允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。Socket是应用层与传输层之间的接口,提供了一种标准的通信方式,使得不同的程序能够在网络上进…

网络爬虫中Fiddler抓取PC端网页数据包与手机端APP数据包

Fiddler是常用的数据包捕获软件,具有分析请求数据、设置断点、调试web应用、修改请求的数据等功能,本文对如何用Fiddler抓取HTTP、HTTPS、手机APP数据包介绍了,另外还补充介绍了数据包过滤的功能。1 引言在编写网络爬虫时,第一步(也是极为关键一步)就是对网络的请求(req…

【Leetcode_Hot100】普通数组

普通数组 53. 最大子数组和 56. 合并区间 189. 轮转数组 238. 除自身以外数组的乘积 41. 缺失的第一个正数 53. 最大子数组和 方法一:暴力解 依次遍历数组中的每个子数组,进而判断res的最大值 超时 class Solution {public int maxSubArray(int[] nums) {int res = 0;for(int…

【python】基础之迭代器

1.总览2.迭代器介绍2.1:迭代器是一个实现了迭代协议的对象,它可以让我们遍历一个容器中的所有元素,而不需要知道容器的内部结构,迭代器可以用于遍历列表,元祖,字典,集合等容器类型; 2.2:迭代器的工作原理是通过实现两个方法:iter()和__next__()方法,iter()方法返回迭…