李宏毅机器学习笔记第8周_批次与动量

文章目录

  • 一、Review:Optimization with Batch
  • 二、Small Batch v.s. Large Batch
  • 三、Momentum
    • 1.Small Gradient
    • 2.Vanilla Gradient
    • 3.Gradient Descent + Momentum


一、Review:Optimization with Batch

  1. 在计算微分的时候,并不是把所有的data对计算出来的L做微分,而是把data分成一个一个的Batch。
  2. 如下图所示,每一个Batch的大小是B笔资料,每次在更新资料时,用B笔资料计算Loss,计算gradient;再用另外B笔资料计算Loss,计算gradient;以此类推。因此,我们不会把所有的资料全部去计算Loss,而是用一个Batch的资料去计算Loss。
    李宏毅机器学习笔记第8周_批次与动量_第1张图片
  3. 把所有Batch计算一遍叫做一个epoch。在做这些Batch时,我会进行Shuffle,Shuffle的常见做法是在每一个epoch开始之前,会分一次Batch,然后每一个epoch的Batch都不一样。

二、Small Batch v.s. Large Batch

  1. 如下图所示,假设有20个训练资料,看这两个Case最极端的情况。
    1)左边的Case没有用Batch,这种情况叫做Full Batch,也就是Batch Size跟训练资料一样多。现在左边的model必须把训练资料全部看完,才能计算出Loss和gradient,参数才会更新一次。
    2)右边的Case是Batch Size = 1。现在只需要一笔资料就可以计算出Loss和更新参数,因为我们看一笔资料更新一次参数,所以计算出来的Loss是Noisy,update的方向是曲折的。
    李宏毅机器学习笔记第8周_批次与动量_第2张图片
  2. 现在比较左边和右边哪个更好?
    1)左边的蓄力时间比较长,需要把所有的资料全部看过一遍,才会更新一次参数,所以它是稳定的。
    2)右边的Batch Size = 1,蓄力时间比较短,每看到一笔资料,就会更新一次参数,所以它是不稳定的。
    3)总的来说,左边和右边都各有所长、各有所短。但是如果考虑并行运算的话,左边的运行时间就并不一定比右边长。
    李宏毅机器学习笔记第8周_批次与动量_第3张图片
  3. 通过实验结果表明,比较大的Batch Size所花的时间并不一定比比较小的Batch Size所花的时间多。
    1)现在是做在一个MNIST(Mixed National Institute of Standards and Technology database)上面,MNIST就是给机器一张图片,然后机器判断这张图片是0到9之间的哪一个数字。
    2)如下图所示,我们给机器一个Batch,它计算出gradient,再更新参数需要多少时间?通过实验结果发现,Batch Size从1到1000,需要耗费的时间几乎是一样的,这是因为我们有GPU做平行运算,但是GPU做平行运算是有极限的,一旦超过这个极限,所花费时间还是会随Batch Size的增长而增加。
    李宏毅机器学习笔记第8周_批次与动量_第4张图片
  4. 当Batch Size比较小时,因为GPU的平行运算,跑完一个epoch所花的时间比Batch Size比较大的所花的时间更长。
    1)如下图所示,假设训练资料只有60000笔,当Batch Size = 1时,需要60000个update才能跑完一个epoch;当Batch Size = 1000时,需要60个update才能跑完一个epoch;因此通过左右两边的图告诉我们一个Batch Size大的跑完一个epoch所花的时间反而更短,也更有效率。
    李宏毅机器学习笔记第8周_批次与动量_第5张图片
    2)如下图所示,比较大Batch的Update比较稳定,比较小的Batch的gradient的方向比较Noisy,但是Noisy的gradient更有利于Training。
    李宏毅机器学习笔记第8周_批次与动量_第6张图片
    3)如下图所示,左边是MNIST,右边是CIFAR-10。我们用不同的Batch训练模型,通过Validation Acc的结果显示Batch Size越大,Validation Acc结果越差。但是这个不是Overfitting,因为Batch Size越大,Training的结果越差。因此,在相同的model下,这个不是Model Bias的问题,而是Optimization的问题。
    李宏毅机器学习笔记第8周_批次与动量_第7张图片
  5. 如下图所示,在Small Batch的情况下,假设在L1计算gradient时,gradient是0,然后被卡住了,但是L2的Function跟L1不一样,L2就不一定会卡住。因此L1被卡住了,换下一个 Batch 来,这样就可以训练model,让Loss变小。
    李宏毅机器学习笔记第8周_批次与动量_第8张图片
  6. 比较小的Batch对Testing有帮助。因为假设我们把大的Batch和小的Batch都Training到一样好,结果是小的Batch在Testing上结果更好。
    如下图所示,大的Batch和小的Batch都Training到差不多的Training Accuracy,但是Testing时小的Batch比大的Batch的结果好,这就是Overfitting。
    李宏毅机器学习笔记第8周_批次与动量_第9张图片
  7. 如下图所示,对于左边的Minima来说,它的Training和Testing上面的结果差不多,但是对于右边的Minima来说,它的Training和Testing上面的结果差距特别大。
    比较小的Batch有很多Loss,它每次update的方向不一样,因此小的峡谷困不住它。但是比较大的Batch,他会顺着update的方向,因此它就很容易走进小的峡谷。
    李宏毅机器学习笔记第8周_批次与动量_第10张图片
  8. 比较大的Batch Size和比较小的Batch Size都各有优势,因此Batch Size取决我们的选择。
    李宏毅机器学习笔记第8周_批次与动量_第11张图片

三、Momentum

1.Small Gradient

在物理世界里,一个球从高处滚下来,就算到了Saddle Point,它还是会因为惯性的原因继续滚下去。因此,如果它的动量够大,他还是会继续往右滚,不会因为Saddle point或者Local Minima而卡住。
李宏毅机器学习笔记第8周_批次与动量_第12张图片

2.Vanilla Gradient

对一般的Gradient Descent来说,有一个初始参数θ^0,然后计算出gradient,再往gradient的反方向去更新参数,以此类推。
李宏毅机器学习笔记第8周_批次与动量_第13张图片

3.Gradient Descent + Momentum

1)现在要考虑到Momentum,我们是按照gradient的反方向加上前一步移动的方向的结果,去调整参数。
李宏毅机器学习笔记第8周_批次与动量_第14张图片
2)我们用m来表示每一步的移动,也就是之前所有算出来的gradient的Weighted Sum,而这里的λ和η是需要自己调整的。
李宏毅机器学习笔记第8周_批次与动量_第15张图片
这里有两种解读,第一种是Momentum是gradient的负反方向加上前一次移动的方向,第二种是加上Momentum时,Update的方向不只考虑现在的gradient,而是考虑过去所有的gradient 的总和。
4.一个简单的例子,展示Momentum带来的好处。
李宏毅机器学习笔记第8周_批次与动量_第16张图片


你可能感兴趣的:(机器学习,深度学习)