Datawhale X 李宏毅苹果书AI夏令营 Task01笔记

1.局部极小值与鞍点


 1.1局部极小值(local minimum)


       局部极小值(local minimum)是指在参数空间中存在的一种情况,其中某个点的损失函数值比其周围任何其他点的损失函数值都要,但这个点并不是全局最小值。换句话说,局部极小值是在某个特定的区域内,损失函数达到了一个局部最小值,但在整个参数空间中可能存在更低的全局最小值。

       在深度学习的优化过程中,如果优化算法停留在局部极小值附近,而不是找到全局最小值,那么模型的性能可能会受到影响,导致训练结果不理想。为了克服这个挑战,研究人员和工程师们开发了各种优化算法和技术,如随机初始化、自适应学习率调整、参数初始化策略、正则化技术等,来帮助优化算法更好地逃离局部极小值并达到全局最优解。

1.2鞍点(saddle point)

       鞍点是指函数在某一点处既不是极大值也不是极小值的情况。在深度学习中,鞍点通常指的是损失函数在某一点处的局部极小值,但不同于传统的局部极小值,鞍点附近的Hessian矩阵是不定的(即其行列式小于0,有正有负的特征值)。鞍点其实就是梯度是零且区别于局部极小值和局部极大值(localmaximum)的点。

       鞍点问题对深度学习模型的训练构成了显著挑战。首先,由于鞍点的存在,模型可能会陷入局部极小值,并难以跳出,导致模型收敛速度变慢,训练时间延长。其次,当模型陷入鞍点时,梯度下降算法可能会出现震荡或停滞现象,导致模型无法继续优化。此外,鞍点问题还可能导致模型学习到错误的特征表示,进而影响模型的性能。

       为了应对鞍点问题,可以采取多种策略。例如,通过合适的参数初始化策略来降低模型陷入鞍点的概率;使用自适应学习率算法(如Adam、Adagrad)来自动调整学习率,帮助模型跳出鞍点;以及采用SGD的变种算法(如Momentum、Nesterov Momentum)来提高模型在鞍点附近的学习速度。

1.3判断临界值种类的方法


       在深度学习中,判断临界值(即梯度为零的点,也称为临界点(critical point))的种类,主要涉及到局部极小值、局部极大值和鞍点的区分。这些临界点的区分通常基于损失函数在临界点附近的性质,特别是通过泰勒级数近似Hessian矩阵的特征值来进行判断。

       泰勒级数近似

       在临界点θ'附近,损失函数L(θ)可以通过泰勒级数近似表示为:     

      由于临界点的梯度为0,即g=0,上式可以进一步简化为:

       Hessian矩阵的特征值

       接下来,我们需要考虑Hessian矩阵H的特征值。Hessian矩阵是一个二阶导数矩阵,它描述了损失函数在临界点附近的曲率。我们可以根据 1/2(θ − θ′)^T* H(θ − θ)′来判断在 θ′ 附近的误差表面(error surface)到底长什么样子。

- 局部极小值:当Hessian矩阵H的所有特征值都为正时,即H是正定矩阵,那么θ'是局部极小值点。这是因为此时损失函数在θ'的所有方向上都是凸的,所以θ'是周围领域中对应L(θ)值最小的点。
- 局部极大值:当Hessian矩阵H的所有特征值都为负时,即H是负定矩阵,那么θ'是局部极大值点。

- 鞍点:当Hessian矩阵H的特征值有正有负时,θ'是鞍点。这意味着在某些方向上,损失函数是凸的(对应正特征值),而在其他方向上则是凹的(对应负特征值)。

2.批量和动量

       用简单的话来说,批量(Batch)在深度学习中就是指一次性处理的数据集合的大小。当我们训练一个深度学习模型时,不会一次性把所有数据都喂给模型,因为这样做可能会非常慢且消耗大量资源。相反,我们会将数据分成多个小部分,每个小部分就是一个批量。

       例如,假设我们有一个包含1000张图片的数据集,用于训练一个图像识别模型。我们可以选择每次处理64张图片作为一个批量,那么整个数据集就会被分成16个批量(因为1000除以64等于15余40,但通常我们会选择最接近的、能被批量大小整除的批次数,或者对剩余的数据进行特殊处理)。

       在训练过程中,模型会依次处理这些批量,每次处理完一个批量后,都会根据这个批量的数据来更新模型的参数,以期望模型能够更好地适应数据。这个过程会重复进行,直到所有的批量都被处理过,这被称为一个训练周期(Epoch)。在把数据分为批量的时候,还会进行随机打乱(shuffle)。随机打乱有很多不同的做法,一个常见的做法是在每一个回合开始之前重新划分批量,也就是说,每个回合的批量的数据都不一样。

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

       假设我们有1000张图片数据,用两种极端的形式来划分批量。

       第一种以1000为大小的批量,需要一次把1000个数据全部处理完才能计算损失、更新一次参数,这种使用全批量(fullbatch)的数据来更新参数的方法即批量梯度下降法(Batch Gradient Descent,BGD);

       第二种,将1000张图片分为1000个批量,每个批量大小为1,每处理一个数据就能计算损失、更新一次参数,一回合更新1000次,此时使用的方法即随机梯度下降法(Stochastic Gradient Descent,SGD),也称为增量梯度下降法

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

       以MNIST为例批量大小与运行时间的关系图大致如下:

       虽然适当的增大批量大小可以节省时间并且消除噪声,但是较大的批量大小和低噪声往往会降低模型预测的准确率,如以MNIST和CIFAR-10为例进行不同批量大小实验得到以下结果:

       我们可以看到用大的批量大小低噪声来训练得到的准确率反而降低了。

       总结下来,小的批量也对测试有帮助,原因可能是小的批量大小能有更大的可能性找到真正的局部最小值,从而减小损失增加准确率。

2.2动量法

       动量法(momentum method)是另外一个可以对抗鞍点或局部最小值的方法。它的基本思想是在梯度下降的基础上,加入了一个“惯性”因素。打个比方就是:一个物体在运动时,由于惯性的作用,它会保持原来的运动方向并继续前行,除非受到外力的强烈作用才会改变方向。在深度学习中,这个“惯性”因素就是动量,它使得模型在更新参数时,不仅考虑当前梯度的方向,还考虑之前梯度的累积效果。在物理学的角度打比方就如下图

       具体来说,动量法在每次迭代时,会将当前迭代的梯度与之前的梯度进行相加,得到一个“平均梯度”。然后,算法会沿着这个平均梯度的方向来更新模型参数。当梯度在同一方向变化时,平均梯度会变得更大,从而加速参数的更新;而当梯度在相反的方向变化时,平均梯度会变小,从而在一定程度上抑制了参数的更新,避免了模型在训练过程中的震荡,并有助于模型跳出局部最小值,找到全局最优值。

3.自适应学习率
       

       临界点其实不一定是在训练一个网络的时候会遇到的最大的障碍。图 3.18 中的横坐标代 表参数更新的次数,竖坐标表示损失。一般在训练一个网络的时候,损失原来很大,随着参 数不断的更新,损失会越来越小,最后就卡住了,损失不再下降。当我们走到临界点的时候, 意味着梯度非常小,但损失不再下降的时候,梯度并没有真的变得很小,图 3.19 给出了示例。 图 3.19 中横轴是迭代次数,竖轴是梯度的范数(norm),即梯度这个向量的长度。随着迭代 次数增多,虽然损失不再下降,但是梯度的范数并没有真的变得很小。

       在局部最小值或鞍点,只是单纯的损失无法再下降。

        我们现在训练一个网络,训练到现在参数在临界点附近,再根据特征值的正负号判断该 临界点是鞍点还是局部最小值。实际上在训练的时候,要走到鞍点或局部最小值,是一件困难 的事情。一般的梯度下降,其实是做不到的。用一般的梯度下降训练,往往会在梯度还很大的 时候,损失就已经降了下去,这个是需要特别方法训练的。要走到一个临界点其实是比较困难 的,多数时候训练在还没有走到临界点的时候就已经停止了。

        举个例子,我们有两个参数 w 和 b,这两个参数值不一样的时候,损失值也不一样,得 到了图 3.21 所示的误差表面,该误差表面的最低点在叉号处。事实上,该误差表面是凸的形 状。凸的误差表面的等高线是椭圆形的,椭圆的长轴非常长,短轴相比之下比较短,其在横轴 的方向梯度非常小,坡度的变化非常小,非常平坦;其在纵轴的方向梯度变化非常大,误差表 面的坡度非常陡峭。现在我们要从黑点(初始点)来做梯度下降。

       学习率 η = 10^−2 的结果如图 3.22(a) 所示。参数在峡谷的两端,参数在山壁的两端不断第“震荡”,损失降不下去,但是梯度仍然是很大的。我们可以试着把学习率设小一点,学习率 决定了更新参数的时候的步伐,学习率设太大,步伐太大就无法慢慢地滑到山谷里面。调学习 率从 10^−2 调到 10^−7 的结果如图 3.22(b) 所示,参数不再“震荡”了。参数会滑到山谷底后左 转,但是这个训练永远走不到终点,因为学习率已经太小了。AB 段的坡度很陡,梯度的值很 大,还能够前进一点。左拐以后,BC 段的坡度已经非常平坦了,这种小的学习率无法再让训 练前进。事实上在 BC 段有 10 万个点(10 万次更新),但都无法靠近局部最小值,所以显然 就算是一个凸的误差表面,梯度下降也很难训练。        最原始的梯度下降连简单的误差表面都做不好,因此需要更好的梯度下降的版本。在梯 度下降里面,所有的参数都是设同样的学习率,这显然是不够的,应该要为每一个参数定制 化学习率,即引入自适应学习率(adaptive learning rate)的方法,给每一个参数不同的学习 率。如图 3.23 所示,如果在某一个方向上,梯度的值很小,非常平坦,我们会希望学习率调 大一点;如果在某一个方向上非常陡峭,坡度很大,我们会希望学习率可以设得小一点。


声明 

        本学习笔记为此笔记发布者使用,以便完成Datawhale AI 夏令营第五期Task01打卡任务,同时记录自己的学习过程。该笔记在原文的基础上进行删改,对个别部分用黑体或者其他字体着重强调以便及时记忆理解。本笔记并不做任何以盈利为目的的用途,仅供个人学习使用,若有侵权,请第一时间告知本人,侵删。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值