局部最小值(local minima)和鞍点(saddle point)

1、问题的引出:我们在做optimization的时候,会发现,随着参数的不断更新,你training的loss不会再下降(如下图所示),但是你对这个loss并不满意,那这究竟是因为什么原因导致这个loss不再下降呢?

2、猜想:常见的猜想是,我们现在走到一个地方,这个地方参数对loss的微分为0,这个时候梯度下降就没有办法再更新参数了,training也就停止了,相应的loss也就不会下降了。

Gradient

先来说说Gradient是什么?

  • 梯度下降的思想是通过梯度最快的收敛,而梯度就是这几个方向中变化率最大的方向和值。注意梯度有方向有值,它是一个向量!!而函数的变化率其实就是函数的导数。对于一元函数来说,函数f(x)在a点的梯度 = 该函数的导数在a点处的值。

1、那么gradient为零(统称为critical point)的时候,有哪几种情况?

(1)局部最小值(local minima)。如果是卡在local minima,那可能就没有路可以走了,因为四周都比较高,你现在所在的位置已经是最低的点,loss最低的点了,往四周走 loss都会比较高,你会不知道怎么走到其他地方去。

(2)鞍点(saddle point)。(如图可看出,左右是比红点高,前后比红点低,红点既不是local minima,也不是local maxima的地方)如果是卡在saddle point,saddle point旁边还是有其他路可以让你的loss更低的,你只要逃离saddle point,你就有可能让你的loss更低。

​2、那怎么知道critical point的类型,到底是local minima,还是saddle point呢?(有数学推导)

这个地方稍微来说有一定难度。不想看的可以直接跳过看最后总结。

引入:我们没有办法完整知道整个L(θ)的形状,但是如果给定一组参数,比如说蓝色的这个θ′,在θ′附近的L(θ),是有办法被写出来的,用Tayler Series Appoximation泰勒级数展开把它写出来如下图所示:

  •  第一项是L(θ′),就告诉我们说,当θ跟θ′很近的时候,L(θ)应该跟L(θ′)蛮靠近的。
  • 第二项是(\Theta-\Theta')^Tg
    • 这个g就是梯度Gradient。这个gradient会弥补θ跟θ′的差距,虽然我们刚才说θ跟θ′很接近,但它们之间还是有一定的差距。
  • 第三项跟Hessian(海森)矩阵有关。这个H就是海森矩阵。第三项会再弥补θ跟θ′的差距。H里面放的是参数对L的二次微分。Hessian定义如下图:

 

那我们今天走到了一个critical point,也就是说gradient为0,所以绿色这一项就可以去掉了。这时候的L(θ) ≈ L(θ′) + 第三项。

我们可以第三项来判断,在θ′附近的error surface(误差曲面),到底长什么样。知道error surface,我们就可以判断θ′是属于局部最小值点还是鞍点。

分析第三项:

  • 为了符号方便起见,我们把(θ−θ′)用v这个向量来表示。
  • positive definite就是正定矩阵。这么看我们需要代入所有的v才能确定v^THv是大于0还是小于0,显然这很麻烦。但是相信大家都学过线性代数。正定矩阵的充分必要条件是特征值全>0

 结论

分析Hessian矩阵:

(1)如果其所有特征值都是正的,就说明是local minima(局部最小值点)。

(2)如果其所有特征值都是负的,就说明是local maxima(局部最大值点)。

(3)如果其所有特征值有正有负,就说明是saddle point(鞍点)。

举个栗子(怎么通过Hessian判断critical point的类型)

比方说我们现在有一个function,是 y=w_{1}w_{2}x 。目标值ŷ是1。而且只有一组data。

(1)所以有损失函数:

(2)接着求gradient,也就是w1对L的微分和w2对L的微分:

(3)那么gradient什么时候为0呢?显然代入w1=0和w2=0,得出gradient为0。也就是说原点(0,0)为critical point。

(4)接着判断critical point的类型?直接求Hessian矩阵就可以得出答案。由,即

由特征值有正有负,所以它是一个saddle point。error surface如下图所示:

3、如果是saddle point的情况:

逃离saddle point的方法一:Hessian矩阵

        如果今天你卡的地方是saddle point,也许你就不用那么害怕了。因为H它不只可以帮助我们判断,现在是不是在一个saddle point,它还指出了我们参数可以update的方向。

之前我们更新参数都是看gradient,当gradient为0时,如果是saddle point的话,我们还可以看H!

        由线性代数的知识:A为矩阵,α为特征向量,λ为特征值。有Aα=λα。我们假设u是H的特征向量,λ是u的特征值。所以有:

        又由鞍点的特征值有正有负,所以存在特征值λ使得λ‖u‖²<0,所以小于0,也就是

L(θ)<L(θ′)。即假设θ−θ′=u,你在θ'的位置加上u,沿着u的方向做update得到θ,你就可以让loss变小。

总结:

对于saddle point,我们只需要找出特征值λ小于0的点,再找出它对应的特征向量u,用u+θ′,就可以找到一个新的点,这个点的loss比原来低

 举个栗子

前面的例子,我们知道原点是saddle point。它的H有负特征值λ=-2,它对应的特征向量有很多个,我们取[1,1]^T为特征向量u,由总结我们可以知道,只要顺着特征向量u去更新我们的参数,就可以找到比saddle pointd的loss还要低的点。

也就是(0,0)这个地方,你向(1,1)更新,就可以让你的loss更低。

但是实际上,因为涉及到二次微分,运算量大,所以实际上我们不会真的把Hessian算出来,我们有其他方法来逃离这个saddle point!!(吐血,好像白学了)

逃离saddle point的方法二:momentum

具体看我这篇博客:

批量Batch and 动量Momentum_YKbsmn的博客-CSDN博客​​​​​​​

这里说明一下:实际上我们要走到一个critical point是很困难的一件事;大多数情况下,在还没有走到critical point的时候,我们的训练就已经停止了。所以,当我们用梯度下降来做优化的时候,我们面对的挑战往往不是critical point,而是其它原因

如下图:

        当你的loss不再下降时,gradient并没有真的变得很小。而是gradient在error surface山谷的两个谷壁间,不断的来回的震荡。

        所以当你今天训练一个network,train到后来发现,loss不再下降时,你不要随便说我卡在 local minima或者我卡在saddle point,有时候根本两个都不是,你只是单纯的loss没有办法再下降而已。

资料参考:李宏毅老师的机器学习!!

如有错误,欢迎指正。

  • 21
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值