[Datawhale AI 夏令营] x [李宏毅苹果书] —— 1. 局部极小值与鞍点

零、文章引用与致谢

  非常感谢 DataWhale 举办此次 AI夏令营,提供了这样一个宝贵的平台,让许多对深度学习、大模型感兴趣的同学能够聚集在一起,共同探讨和学习。这样的活动不仅促进了学术交流,还为参与者提供了扩展视野、激发创新思维的机会。希望未来能有更多这样的活动,进一步推动深度学习技术的发展和应用!

DataWhale 官网: https://www.datawhale.club/home

DataWhale 学习指南: https://linklearner.com/activity/16/15/43

DataWhale 学习视频: https://www.bilibili.com/video/BV1JA411c7VT/?p=5

一、损失函数收敛异常

  在深度学习中,损失函数 (Loss Function) 是一个非常重要的概念。它用于衡量模型的预测值与真实值之间的差异,是训练过程中优化算法寻求最小化的目标。但是,在进行参数优化时,经常会发现随着参数不断更新,训练的损失不会再下降,而我们对于当前的损失函数值并不满意。
图1
  出现上述情况,是由于 梯度下降算法 (Gradient Descent) 遇到了参数对损失的微分为零,即这个点的导数为零。但是,高等数学的知识告诉我们,导数为零的点,不一定是函数的最大值/最小值点 ,因此,很容易想到是遇到了 局部极大值/极小值 (local maximum/minimum) 。但是,有没有这样一种情况,该点并非极值点,但导数依然为零?

局部极值点

  对于非常复杂的损失函数,其函数图像犹如山脉,含有多个波峰和波谷,梯度下降算法在执行过程中,很容易攀上某个波峰,或落入某个波谷,此时该点的导数为零,损失函数收敛。但是该点只是 局部极值点 ,而非 全局最值点 。针对这一问题,提出了许多解决方法,如 随机梯度下降 (SGD)自适应学习率多次随机初始化 等,试图让梯度下降算法越过波峰或波谷,到达真正的最优点。
图2

鞍点

  在损失函数中,梯度为零且区别于局部极大值/极小值的点,因为其图像形似马鞍,故命名为鞍点。在高维参数空间中,鞍点可能比局部极值点更常见,因为它们在某些方向上是局部最大值,在其他方向上是局部最小值。
图3
  由于鞍点与局部极值点性质的不同:

  • 损失函数收敛在局部极值点,那么所在的位置已经是损失最低的点了,往四周走损失都会比较高,就没有路可以走了。
  • 损失函数收敛在鞍点则没有这个问题,旁边还是有路可以让损失更低的,只要逃离鞍点,就有可能让损失更低。

  因此,在处理上也有一定差别,所以,如何判断一个临界点到底是局部极小值还是鞍点就显得尤为重要。

二、临界值种类的判断

  首先,最简单的方法就是根据损失函数的形状来判断。但是,神经网络的参数量往往非常大,导致损失函数也会非常复杂,此时我们想到用近似值来代替精确值,根据泰勒展开式,θ′ 附近的 L(θ) 可近似为:

图4
  经过一系列复杂的化解与转化,{这一部分公式较多,详情可见学习视频和指南},我们可以通过判断海森矩阵的特征值来判断临界值的种类,具体情况如下:

  • 矩阵所有特征值均为正数:该点为局部极小值点。
  • 矩阵所有特征值均为负数:该点为局部极大值点。
  • 矩阵特征值有正数有负数:该点为鞍点。

图5  当然,上述过程的计算量仍然十分庞大,特别是遇到较为复杂的损失函数时,所以几乎没有人用这个方法来逃离鞍点。还有一些其他逃离鞍点的方法的运算量都比要算海森矩阵小很多。

三、逃离鞍点的方法

  通过上述的讲解,很多人会觉得鞍点是一个复杂且困难的问题,但是,事实真的如此吗?鞍点其实并没有很可怕,如果我们经常遇到的是鞍点,比较少遇到局部极小值,那就太好了。

鞍点并不可怕

  科幻小说《三体 III:死神永生》中有这样一个情节:东罗马帝国的国王君士坦丁十一世为对抗土耳其人,找来了具有神秘力量的做狄奥伦娜。狄奥伦娜可以于万军丛中取上将首级,但大家不相信她有这么厉害,想要狄奥伦娜先展示下她的力量。于是狄奥伦娜拿出了一个圣杯,大家看到圣杯大吃一惊,因为这个圣杯本来是放在圣索菲亚大教堂地下室的一个石棺里面,而且石棺是密封的,没有人可以打开。狄奥伦娜不仅取得了圣杯,还自称在石棺中放了一串葡萄。于是君士坦丁十一世带人撬开了石棺,发现圣杯真的被拿走了,而是棺中真的有一串新鲜的葡萄,为什么迪奥伦娜可以做到这些事呢?是因为狄奥伦娜可以进入四维的空间。从三维的空间来看这个石棺是封闭的,没有任何路可以进去,但从高维的空间来看,这个石棺并不是封闭的,是有路可以进去的。
  类比到损失函数中,如下图所示:在一维空间中的误差表面,有一个局部极小值;但是,在二维空间中,这个点就可能只是一个鞍点。低维度空间中的局部极小值点,在更高维的空间中,实际是鞍点。同样地,如果在二维的空间中没有路可以走,会不会在更高维的空间中,其实有路可以走?
图6

  所以,在高维损失函数中,参数的数量代表了误差表面的维度,既然维度这么高,会不会其实就有非常多的路可以走呢?既然有非常多的路可以走,会不会其实局部极小值就很少呢?

批量法

  在计算梯度时,并不是对所有数据的损失计算梯度,而是想将所有的数据分成一个个的 批量 (Batch) ,每次在更新参数的时候,会去取出一个批量用来计算出损失和梯度更新参数。遍历一次所有批量的过程称之为一个 回合 (Epoch) 。事实上,在把数据分为批量的时候,我们还会进行 随机打乱 (shuffle)。随机打乱有很多不同的做法,一个常见的做法是在每一个回合开始之前重新划分批量。
图7

  批量梯度下降算法,相较于比随机梯度下降算法,每次更新更稳定、更准确,可以减少内部协变量偏移,有助于加快训练速度并跳出鞍点。

动量法

  动量 (momentum) 法是另外一个可以对抗鞍点或局部最小值的方法。如下图所示:假设误差表面就是真正的斜坡,参数是一个球,把球从斜坡上滚下来,如果使用梯度下降,球走到局部最小值或鞍点就停住了。 但是在物理的世界里,一个球如果从高处滚下来,就算滚到鞍点或鞍点,因为惯性的关系它还是会继续往前走。如果球的动量足够大,其甚至翻过小坡继续往前走。
图8
  在梯度下降算法中引入动量后,每次在移动参数的时候,不是只往梯度的反方向来移动参数,而是根据梯度的反方向加上前一步移动的方向决定移动方向。如下图所示:红色虚线方向是梯度的反方向,蓝色虚线方向是前一次更新的方向,蓝色实线的方向是下一步要移动的方向。把前一步指示的方向跟梯度指示的方向相加就是下一步的移动方向。
图9  动量的简单例子如下图所示:红色表示负梯度方向,蓝色虚线表示前一步的方向,蓝色实线表示真实的移动量。一开始没有前一次更新的方向,完全按照梯度给指示往右移动参数。负梯度方向跟前一步移动的方向加起来,得到往右走的方向。一般梯度下降走到一个局部最小值或鞍点时,就被困住了。但有动量还是有办法继续走下去,因为动量不是只看梯度,还看前一步的方向。即使梯度方向往左走,但如果前一步的影响力比梯度要大,球还是有可能继续往右走,甚至翻过一个小丘,也许可以走到更好的局部最小值,这就是动量有可能带来的好处 。
图10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值