机器学习周记(第四周:机器学习任务框架续)2023.8.14~2023.8.20

本文介绍了机器学习中的关键概念,如局部最小值与鞍点的处理、批次大小与动量优化,以及自动调整学习率的技术,如Adagrad和RMSProp。通过实例和理论探讨了如何在遇到CriticalPoint时继续优化参数更新。
摘要由CSDN通过智能技术生成

目录

摘要

ABSTRACT

一、局部最小值与鞍点

1.Local Minima

2.Saddle Point

3.Critical Point

Tayler Series Approximation

Example

Continue Updating Parameters in Saddle Point

4.Local Minima v.s. Saddle Point

二、批次与动量

1.Batch

Small Batch v.s. Large Batch

2.Momentum 

Gradient Descent + Momentum

三、自动调整学习速率

1.Adagrad

2.RMSProp

3.Without Adaptive Learning Rate

总结


摘要

  本周我继续学习了机器学习任务框架内的一些概念,包括局部最小值与鞍点,批次与动量以及自动调整学习率。局部最小值与鞍点部分主要学习了在Critical Point继续参数更新的方法;批次与动量部分主要学习了使用这两种方法来进一步优化参数更新;自动调整学习率部分主要学习了使用这种方法解决loss降不到Critical Point的问题。

ABSTRACT

This week I continued to learn some concepts within the framework of machine learning tasks, including Local Minima and Saddle Point, Batch and Momentum, and automatically adjusting the Learning Rate. In the part of Local Minima and Saddle Point, we mainly learn the method of continuing parameter updating at Critical Point. The Batch and Momentum parts mainly learn to use these two methods to further optimize the parameter update; The automatic adjustment of Learning Rate mainly studied the use of this method to solve the problem that the loss can not be reduced to a Critical Point.

一、局部最小值与鞍点

  我们在进行Optimization过程中可能会发现随着参数的不断更新,training的loss不再下降但是并没有收敛到预期值这样的情况。在排除了Model Bias之后,出现这种问题最有可能的原因是loss收敛到的点的参数对loss的微分为0,即Gradient也是0,这个时候梯度下降就没有办法再更新参数了,相应的loss也不再减少。Gradient为0包含如下两种情况(1,2)。

1.Local Minima

  第一种情况是局部最小值(Local Minima)。Local Minima是指在某个局部区域内的函数最小值,但并不一定是整个定义域内的最小值。它表示相比周围点,该点的值比较小,但在全局还可能存在更小的点。如果是loss收敛到的是local minima,那可能就没有路可以走了,因为当前现在所在的位置已经是loss最低的点,往四周走loss都会比较高。

2.Saddle Point

  第二种情况是鞍点(Saddle Point)。Local Minima是指函数的一个特殊点,其正交方向上的斜率(导数)均为零(临界点),但不是函数的局部极值,即在该点的领域内,不满足该点的函数值大于或小于所有相邻点的函数值。如果是loss收敛到的是saddle point,因为其旁边还是有其他更低的loss值,所以只要找到从saddle point逃离更低loss值的方法,就能让loss值更低。

3.Critical Point

  上述的Local Minima和Saddle Point我们统称为Critical Point。当Optimization出现Critical Point时,怎样判断Critical Point的类型是一个需要重点解决的问题。

Tayler Series Approximation

  想要判断Critical Point的类型,就要先知道L(\theta )的形状,但这显然是很困难的。假如给定某一组参数\theta {}',虽然完整的L(\theta )表示不出来,但是\theta {}'附件的L(\theta )是可以被表示出来的,即L(\theta )\approx L(\theta{}')+(\theta -\theta {}')^{T}g+\frac{1}{2}(\theta -\theta {}')^{T}H(\theta -\theta {}')。其中第一项L(\theta{}' )的含义就是当\theta趋近于\theta {}'的时候,L(\theta )同时趋近于L(\theta{}' )。第二项中的g表示Gradient也表示L(\theta)L(\theta{}' )之间的差距,是一个向量。g中的每一个分量表示\theta中对应分量对L(\theta {}')的微分。第三项中的H表示Hessian,是一个矩阵,用来补足第二项中g所表示的L(\theta)L(\theta{}' )之间的差距。H放的是对L(\theta {}')的二次微分,第i行j列的值就是把θ的第i个component对L(\theta{}' )作微分,再把θ的第j个component对L(\theta{}' )作微分。

  当loss收敛到Critical Point时意味着上述表达式中的第二项(\theta -\theta {}')^{T}g为0,此时的式子就简化成

 L(\theta )\approx L(\theta{}')+\frac{1}{2}(\theta -\theta {}')^{T}H(\theta -\theta {}')了,然后通过\frac{1}{2}(\theta -\theta {}')^{T}H(\theta -\theta {}')就可以知道L(\theta )\theta {}'附件的形状是什么样的,也就能判断出\theta =\theta {}'这点是Local Minima还是Local Maxima亦或者是Saddle Point。

  通过\frac{1}{2}(\theta -\theta {}')^{T}H(\theta -\theta {}')来知道L(\theta )\theta {}'附件的形状主要靠讨论\frac{1}{2}(\theta -\theta {}')^{T}H(\theta -\theta {}')的正负情况实现。

Example

  假设有一个network,它只包含了两个神经元且两个神经元属于不同层相连接,第一个神经元的操作是将输入乘以参数w_{1}后输出,第二个神经元的操作是将输入乘以参数w_{2}后输出,因此它的模型定义为y=w_{1}w_{2}x。训练集只有一个样本且样本特征只有一个,即特征为1,对应标签也为1。此时模型的loss的等高线图如下所示,颜色越红的地方,loss越大,颜色越蓝的地方,loss越小。很明显原点是一个Saddle Point,而左下右上的黑点处是Local Minima。

  可以用Tayler Series Approximation来验证为什么原点是Saddle Point。

Continue Updating Parameters in Saddle Point

  因为Saddle Point周围还有更小的loss,所以我们需要找到一个办法继续更新参数。具体的做法是利用矩阵H,通过计算可以得到矩阵的特征值\lambda和特征向量\mu,若令V等于\mu,则V^{T}HV就等于\mu ^{T}H\mu,已知H\mu =\lambda \mu,故\mu ^{T}H\mu又等于\mu ^{T}\lambda \mu,即\lambda \left \| \mu \right \|^{2}。当\lambda小于0时\lambda \left \| \mu \right \|^{2}小于0,即V^{T}HV|_{V=\mu }也小于0,此时L(\theta )\approx L(\theta ^{​{}'})+\frac{1}{2}\mu^{T} H\mu可推出L(\theta )<L(\theta {}'),也就找到了参数更新的方向,\theta =\theta {}'+\mu

  上述Example中的例子可以用这种方法逃离Saddle Point,但值得注意的是,在实际运用中很少用这种方法。(要算二阶微分,计算量太大)

4.Local Minima v.s. Saddle Point

  下图是通过实验得出的数据,其中的每一个点表示一个network,将每一个network进行一次训练直到收敛到了Critical Point,此时将这些network的矩阵H的参数拿出来分析,纵轴是Training Loss,横轴是Minimum Ratio。Minimum Ratio表示矩阵H的所有正的特征值数目与所有特征值数目的比值,如果Minimum Ratio等于1,则表示该点对应的network收敛到的是一个Local Minima,如果Minimum Ratio小于1,则表示该点对应的network收敛到的是一个Saddle Point。从图上来看,很难找到Minimum Ratio等于1的点,就算是最近Local Minima的点,都还仍然有近一半的特征向量可以让该network收敛到更小的loss。因此实际任务中,network收敛到Local Minimal的概率是很小的,大多数情况都是Saddle Point。

二、批次与动量

1.Batch

  实际任务中,利用训练集更新参数时,并不是每一个样本输入后都更新一次参数,而是将训练集分为多个批次(batch),每一个batch更新一次参数。训练完一轮所有的batch称之为1epoch。

Small Batch v.s. Large Batch

  在机器学习任务中引入批次的概念后,必要考虑的问题就是如何选择批次的大小(batch size)。首先来看两个极端的例子,假设有一个训练集包含20个样本,采用两种batch size来更新参数。第一个是Large Batch,batch size定义为20(包含所有的样本,称之为Full Batch),第二个是Small Batch,batch size定义为1(每一个样本更新一次参数)。从下图可以明显得出这两种batch size的优缺点。Large Batch的缺点是,更新一次参数的时间较长,优点则是参数更新的效果会十分显著。Small Batch的优点是,更新一次参数的用时较短,缺点则是参数更新的扰动(Noisy)比较大。

  实际上,Large Batch在计算梯度上所花费的时间并不一定比Small Batch要多,在借助GPU的Parallel Computing能力后,两者的所花的时间基本上可以持平(GPU可以同时进行多个梯度计算)。但因为GPU的Parallel Computing能力是有限的,所以在batch size达到一定程度之后,Large Batch还是会花费更多的时间在计算梯度上。

  在借助了Parallel Computing之后,从1epoch的角度来考虑采用Large Batch和Small Batch所花费的时间也大为不同。因为一个Large Batch和一个Small Batch更新参数的时间差别不大,那就要从Large Batch和Small Batch的个数来计算1epoch的时间,而很明显1epoch中Small Batch的个数会比Large Batch的个数多,因此采用Large Batch的1epoch会更有效率(注意:要在Parallel Computing的能力范围内)。

  通过上面的分析之后,通常会让人认为Large Batch会优于Small Batch,但是实际的任务中却刚好相反。下图的实验数据充分说明了,batch size越大,模型的accuracy越小。导致这种结果的原因是Optimization不够好。

  例如当batch size是Full Batch时,参数更新会沿着一条loss function进行参数更新,而前面学习提到过,当参数更新卡住时大概率会卡在Saddel Point,这显然参数更新不到好的结果。当batch size是Small Batch时,因为每一次都用一个batch来更参数,每一个batch的loss function都是略有差异的,因此当前一个batch的loss卡在Saddel Point时,后一个batch在前一个batch传来的参数下不一定是Saddel Point,这样参数又能进一步更新了。因此“Noisy”的参数更新方式反而对训练有益。

  因此batch size是一个超参数,需要综合考虑实际的任务需求以及不同大小batch size的优缺点来确定。

2.Momentum 

  现在,设想一下现实物理世界中,一个小球从下图中的loss曲线上滚下去会发生的情况。很明显,小球会经过Saddle Point以及Local Minima而不会像Gradient Descent一样被卡住。之所以会这样是因为物理世界的小球具有前移动的惯性。因此,能不能在Gradient Descent也引入这样的“惯性”呢?这个优化方案是可行的,在机器学习中称Gradient Descent的“惯性”叫动量(Momentum)。

Gradient Descent + Momentum

  在Gradient Descent中引入Momentum之后,参数更新就不再只往Gradient的反方向移动,而是利用Gradient的反方向与前一步移动的方向之和进行调整。具体步骤如下:首先随机选择一个参数\theta^{0},并设定前一步参数更新的方向为Movement\, m^{0}=0,接着计算\theta^{0}处的Gradient为g^{0},最后计算\theta^{0}下一步移动的方向为Movement\, m^{1}=\lambda m^{0}-\eta g^{0}(结合g^{0}m^{0},而不仅仅以g^{0}为下一步的参数更新方向,同时m^{1}也表示为\theta^{1}上一步参数更新的方向),得到新的参数\theta^{1}=\theta ^{0}+m^{1}。重复上述步骤就可以不断地更新参数。

  具体表现如下,即使参数更新卡在了Critical Point,即g=0,在前一步移动方向的影响下,参数仍然能够继续更新下去,假如前一步移动的影响足够大,甚至能够摆脱Local Minima向更低loss的参数进行更新。

三、自动调整学习速率

  当一个训练卡在某一个loss值时,人们趋向于相信参数更新到了Critical Point,但事实上真的如此吗?答案是否定的,loss卡在某一点时并不代表此时的loss就是最小的loss。如下图所示,训练卡在了某一个loss值时,Gradient的长度在不断波动,正常情况下,它应该随着loss的稳定而稳定。此时就要考虑参数可能在Critical Point的左右来回振动。

  事实上,即使没有Critical Point,一个训练的进行也可能变得十分很难。如下图所示,当学习速率较大时,loss出现了大小来回变动的现象,而当学习很小时,loss又很难接近Local Minima(因为在Local Minima的附近可能非常平坦)。所以,Learning Rate并不是适合模型训练所有阶段的一个固定的值。

  动态调整学习率是一个必要的策略,在曲面陡峭时,使用较大的学习率,可以让步长变小,这样就不会错过critical point;在曲面平缓时,使用较小的学习率,可以让步长变大,这样就使得参数更新的速度加快。这里的学习率使用的是参数\frac{\eta }{\sigma ^{t}_{i}}

1.Adagrad

  下图计算\sigma ^{t}_{i}的方法也被用于Adagrad中,其参数更新过程如下:

2.RMSProp

  参数\sigma ^{t}_{i}除了上述计算方式外,还有另外一种。这另一种计算方式也被用于RMSProp中,其参数更新过程如下:

   通过调节\alpha的大小,可以控制前几步Gradient和当前Gradient的参与计算的比重,如果当前曲线较为平滑,即当前的Gradient较小,则可以调小\alpha,使得当前Gradient的权值变大,这样就相当于调小了\sigma ^{t}_{i},也就相当于减小了步长,反之则增大步长。

3.Without Adaptive Learning Rate

  在使用Adagrad之后,相较于原来的Learning Rate方式,loss可以降低到Critical Point。但是通过下图发现,使用Adagrad更新参数方法的loss在接近Critical Point的过程中会出现突然上升或下降的现象。这是因为当曲面平滑时,g的值会变小,一直一直积累的话,\sigma的值也会变小,从而分母变小,值变大,会使步长发生大变化。但是当其变化之后,g的值就会变大,从而\sigma的值变大,步长变小,慢慢又会自动恢复为原来的状态。

  解决上面问题的方案就是加上Learning Rate Scheduling。具体操作就是让Learning Rate与时间有关,比如说Learning Rate Decay方法,随着训练时间的增长,也逐渐减小Learning Rate,因为随着参数的不断更新,loss也会越来越接近最优解,这个时候需要移动的步长会越来越小。

  最后,结合前面学习的Momentum,可以写出整个参数优化的过程,其中Momentum和\sigma ^{t}_{i}都考虑的前面步骤的Gradient,但它们并不会相互抵消掉,因为\sigma ^{t}_{i}只考虑了Gradient的大小而Momentum还考虑了Gradient的方向。

总结

  本周学习的主要难点在于从Critical Point开始到Adaptive Learning Rate这一步步优化参数更新的理解过程。下一周我将开始对卷积神经网络(CNN)的学习。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值