Datawhale X 李宏毅苹果书 AI夏令营 Task 1

第 3 章 深度学习基础

3.1 局部极小值与鞍点

我们在训练网络的时候需要使得损失函数的值尽可能的小,这样才能让我们的模型拥有更好的能力。但是在这个过程中损失函数并没有达到我们预期的值,而且无论我们怎么训练,这个值都不会变小。这是因为我们可能到达了临界点。什么是临界点呢?

3.1.1 临界点

临界点指的是梯度为零的点。主要包括局部极小值、局部极大值以及鞍点。局部极大值我们在这里不进行讨论,主要讨论其他两种情况。

  • 局部极小值
    局部极小值点处的梯度为0,且其周围的点均大于局部极小值点。如下图所示:
    在这里插入图片描述
  • 鞍点
    鞍点处的梯度也为零,因其形状像马鞍而得名,但其周围的点并不全部大于鞍点,如下图所示:
    在这里插入图片描述
3.1.2 判断临界值种类的方法

局部极小值点和鞍点的梯度均为零,当某个点梯度为0时,我们该怎么判断这个点是局部极小值点还是鞍点呢?

这个时候就要用到我学高数的时候最讨厌的泰勒级数了,以前上课怎么也听不懂,但是今天竟然看懂了哈哈,泰勒级数其实就是用来近似函数的,比如有一个很复杂的函数可能比较抽象,这时候我们就可以用泰勒级数展开来近似表示这个函数。

假如我们现在有一个损失函数L,(我刚写博客还不太会用公式,大家见谅),现在给定一组参数θ',那现在我们通过泰勒级数近似为:

在这里插入图片描述

上面的公式可以分为三项,其实也就是零阶导数、一阶导数、二阶导数的形式。其中的θ可以理解为θ'周围的点。具体的推导和详解可以去看书,书的PDF版本下载链接放在这。>>>> 点此下载 <<<<

这里我来帮助大家快速理解。我们上面说了,在临界点的时候,梯度为零,也就是一阶导数为0,那么在上面的公式中,第二项就被消去了。如下所示:

在这里插入图片描述

此时上面的式子就只剩下的两项,我们可以用式(3.4)的第二项来判断θ’附件的误差平面。如果第二项是大于0的,这就说明我们的θ‘需要加上一个正值才能等于周围的点,也就是周围所有的点都大于θ',那么此时θ'就是局部极小值点。反之如果第二项是大于0的,那么第二项是大于0的就是局部最大值点。如果第二项有时候大于0,有时候小于0, 那么第二项是大于0的既不是局部最大值点,也不是局部极小值点,而是鞍点。具体的推导书上解释的很清楚,我把过程贴在下面:

在这里插入图片描述

我们现在知道了怎么判断临界点的种类,但是现在有一个问题,θ’周围的点有很多,我们不可能把所有的点都代进去计算。

在这里插入图片描述

书上说的计算方法大家可能看着有点不太能理解,我之前学矩阵的时候其实也不太理解,其实就是我们得到一个海森矩阵后,直接对海森矩阵就行判断就可以了,书上的方法就是判断海森矩阵的特征值,其实还可以通过矩阵的各阶顺序主子式来进行判断。

注意我们的前提是矩阵要是对称的!对称的!对称的!

  • 特征值
    • 矩阵的所有特征值为正 正定 局部极小值
    • 矩阵的所有特征值为正 负定 局部极大值
    • 矩阵的特征值有正有负 鞍点
  • 各阶顺序主子式
    • 矩阵的各阶顺序主子式均大于零 正定
    • 矩阵的若A的各阶主子式中,奇数阶主子式为负,偶数阶为正 负定

顺序主子式的计算方式: 在n阶方阵中,选取行号i,再选取与行号相同的列号i,行与列均取i个元素的行列式即为n阶行列式的i阶顺序主子式

下图举例说明,此时的A就是正定矩阵。

在这里插入图片描述

鞍点相对于局部极小值点来说更好处理,因为对于鞍点来说,我们只要一个负的特征值,让后找出这个负的特征值对应的特征向量,沿着这个方向更新我们的参数就可以逃离鞍点,继续优化。

上面虽然我们提到了海森矩阵,但在实际的优化过程中,我们一般不会使用它,因为它的计算量非常大,还要找特征值和特征向量,我们一般采用其它的办法。

3.1.3 逃离鞍点的方法

书上讲了一个小故事,很有意思。高维空间对低维空间的降维打击在四元数中也有影子。对于三维空间中存在的万向锁问题在四维空间,也就是四元数表示的空间中根本不存在。

在这里插入图片描述

如上图所示,在一维空间中的局部极小值在二维空间中就变成了鞍点。参数的数量代表了误差表面的维度。既然维度这么高,其实就有非常多的路可以走。既然有非常多的路可以走,其实局部极小值就很少。从经验上看起来,局部极小值并没有那么常见。多数的时候,我们训练到一个梯度很小的地方,参数不再更新,往往只是遇到了鞍点。

3.2 批量和动量

实际上在计算梯度的时候,并不是对所有数据的损失L计算梯度,而是把所有的数据分成一个一个的批量(batch),如下图所示。每个批量的大小是B,即带有B笔数据。每次在更新参数的时候,会去取出B笔数据用来计算出损失和梯度更新参数。遍历所有批量的过程称为一个回合(epoch)。事实上,在把数据分为批量的时候,我们还会进行随机打乱(shuffle)。随机打乱有很多不同的做法,一个常见的做法是在每一个回合开始之前重新划分批量,也就是说,每个回合的批量的数据都不一样。

在这里插入图片描述

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

批量大小对梯度下降法的影响书上也讲的很明白,影响有好有坏只能说。建议大家去看书,讲的非常详细非常好,这里我只做一下总结。
假如现在有20笔训练数据。

  • 批量梯度下降法**(BGD)**
    • 批量:20
    • 参数更新次数:1
  • 随机梯度下降法(SGD)
    • 批量:1
    • 参数更新次数:20

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

如果考虑并行运算,批量梯度下降花费的时间不一定更长;对于比较大的批量,计算
损失和梯度花费的时间不一定比使用小批量的计算时间长 。

在这里插入图片描述

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

在这里插入图片描述

批量大小越大,验证集准确率越差。但这不是过拟合,因为批量大小越大,训练准确率也是越低。因为用的是同一个模型,所以这不是模型偏见的问题。 但大的批量大小往往在训练的时候,结果比较差。这个是优化的问题,大的批量大小优化可能会有问题,小的批量大小优化的结果反而是比较好的。

在这里插入图片描述
在这里插入图片描述

3.2.2 动量法

动量法(momentum method)是另外一个可以对抗鞍点或局部最小值的方法。如图所示,假设误差表面就是真正的斜坡,参数是一个球,把球从斜坡上滚下来,如果使用梯度下降,球走到局部最小值或鞍点就停住了。 但是在物理的世界里,一个球如果从高处滚下来,就算滚到鞍点或鞍点,因为惯性的关系它还是会继续往前走。如果球的动量足够大,其甚至翻过小坡继续往前走。

在这里插入图片描述

下面看一下一般梯度下降和动量法的联系和区别。

在这里插入图片描述
在这里插入图片描述

其实动量法从图中来看的话有点像力的合成,我们每次下降的方向是由本次梯度下降方向和上次实际下降方向合成得来的,不过因为前一步正好是0,所以更新的方向跟原来的梯度下降是相同的。但从第二步开始就不太一样了。

在这里插入图片描述

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

以上就是Task 1的内容了,咱们Task 2再见。

参考链接:
https://blog.csdn.net/qq_38048756/article/details/115108733
《深度学习详解》

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值