局部最优点+鞍点+学习率的调节

深度学习系列

第一篇 局部最优点+鞍点+学习率的调节


文章目录

  • 深度学习系列
  • 局部最优点和鞍点一样吗?
  • 自动调整学习率
    • 我们为什么要调整学习率?
  • 总结


局部最优点和鞍点一样吗?

这是不一样的,局部最优点的梯度在各个方向上的变化是不一样的,我们用三维空间的图去理解,我们讲的局部最优点和鞍点都是梯度为0的点,他们统称为critical point。局部最优点有局部最大和局部最小,他们两在三维空间上,在这个点不管往哪个方向,梯度值都会小于这个点(局部最大)或者大于这个点(局部最小)。而鞍点不一样,鞍点在某个方向是最小值,而在某些方向,梯度还可以变化。下面参照李宏毅老师的PPT给出图片。
局部最优点+鞍点+学习率的调节_第1张图片
上图为局部最小点(Local minima)
局部最优点+鞍点+学习率的调节_第2张图片
上图为鞍点(saddle point),形似马鞍,所以叫鞍点

至于怎么判断是鞍点还是局部最优,这里有一篇文章,很好地记录了李宏毅老师的思想。
局部最小值(local minima)和鞍点(saddle point)
大致的思想是在critical point这个点进行泰勒展开,得到critical point附近的Loss大致方程,记为L(θ),展开后第一项为critical point的在Loss方程上的值,记为L(θ),第二项为critical point的在Loss方程上的梯度值,为0,通过第三项的值为正还是负去判断L(θ)和L(θ)的大小。如果都是大于或者都是小于,即可判定为最小或最大,如果有大有小,即可判断为鞍点。

泰勒展开式上图为泰勒的展开

局部最优点+鞍点+学习率的调节_第3张图片下图为根据第三项的大小去判断的过程。

从大部分实验的数据来看,Local Minima出现的概率比较低,比较可能出现的是saddle point。

以上就是critical point的相关内容,下面记录自动调整学习率的过程

自动调整学习率

我们为什么要调整学习率?

这是因为我们模型在训练到某个阶段的时候,可能出现了loss的值不怎么变化的情况,这并非是我们上面讲的local minima或者saddle point,有可能是学习率的问题。在loss值变化不大的时候,我们去输出gradient的值,可以发现gradient 还在一直有着比较大幅度的变化这是为什么呢? 请看下图
局部最优点+鞍点+学习率的调节_第4张图片

从上图我们可以看到,loss 在方框内是最小的,而当我们学习率设置比价大的时候,我们的gradient 下降调整的幅度是比较大的,这就让我们难以调整到最小loss的位置,从而在其左右跳动。所以我们在坡度比较大的时候,要将学习率调小,坡度比较平缓的时候,将学习率调大。

但是难道我们的learning rate 设置得越小就越能接近吗?
事实上我们设置小一点的learning rate,会让我们的模型确实更加接近,但是我们所做的次数会非常多,而且这个拟合也会到一定的位置就停下来,但是它离真正的曲线,其实还差很多的距离。

所以我们要为每一次的学习定制相应learning rate才能更加拟合
说起来复杂,其实只是做一个小小的改动。
我们原来更新的参数的表达式为. θ = θ - η * g(θ为要更新的参数,η为学习率,g为gradient)
现在改为θ = θ - η / σ * g,在每次的更新中对学习率做一个除法。,而σ的计算就是通过以往的gradient的值来计算的。做了平方再开方保证其只有数值上的大小,没有方向 。具体的计算如下图所示。当更新的梯度较大的时候,σ 的值就会变大,η/σ就会变小,反之变大。

局部最优点+鞍点+学习率的调节_第5张图片但是在某些情况下,就算是同一个参数,同一个方向,它的坡度不一样,我们需要更为细致的调整!,如下图,上面的横线坡度是比较陡峭的,下面的横线坡度比较平缓。(这种图我认为可以将一个参数固定去看,某一个参数的数值固定,另一个数值变化比较大,说明坡度大)
局部最优点+鞍点+学习率的调节_第6张图片这时候我们使用RMSProp来更加细致地控制学习率。计算过程如下图,我们在σ的计算过程中设置一个新的参数α,来给每次的gradient加上权重。
局部最优点+鞍点+学习率的调节_第7张图片这个时候在坡度变化的时候,学习率变化反应会比前一个σ反应更快!
而我们在使用pytorch的时候,优化器有有个方法叫做Adam这个方法其实就是RMSProp+Momentum的做法。


这里又有一个新的问题,我们权重在更新的时候,某个方向的gradient虽然小,但是累计到一定程度后,可能突然爆发,让我们的模型远离真实函数如下图
局部最优点+鞍点+学习率的调节_第8张图片
为此,我们要用Learning Rate Scheduling去解决这个问题,它的做法就是让我们的学习率随着时间去变化。下图是两种方式。
局部最优点+鞍点+学习率的调节_第9张图片
在使用了learning rate scheduling后,我们的模型能更好地收敛。如下图,右图是使用后的拟合情况。
局部最优点+鞍点+学习率的调节_第10张图片至于为什么warm up为什么先上升后下降
这是因为我们一开始训练的数据不多,曲线也只是试探性的变化,到了中期数据更多,模型更加知道往哪里走,所以学习率可以加大一点,然后再慢慢开始减少。

那我们整理各个知识点后,在一开始的**θ = θ - η/σ * g ** 中也可以使用moment去配合使用。θ = θ - η/σ * m。


总结

以上讲解我们局部最优点和鞍点到底是什么,并说明了为什么调节学习率和一些调节方法,希望配合上其他文章,能让初学者更容易理解。如果觉得有用,请大家点赞支持!!!!

你可能感兴趣的:(DeepLearning,学习,人工智能)