李宏毅(deep-leraning)-四---梯度下降batch size
一 关于batch size的讨论
首先我们要了解,在每一次进行epoch时,会进行一次shuffle,进行batch分配。
其次,我们要理解batch和epoch。
batch就是把所有资料分成几个批次,每个批次读完进行一次梯度更新(update),所有batch读完算一个epoch.一般来说,在现有gpu并行能力的基础上,当数据量不大时,小batch size和大batch size的update速度几乎一样。但是当数据量过大,batch size过大,update的速度就较慢了。(如下图左)
但是,显而易见的,小batch size需要进行多次update,进行一次epoch所需时间更长。
但是,从模型训练精度角度下,小batch size的准确率更高(不易陷入局部优解)。(这给我们进行optimisization优化提供了思路) (如下图)
因为(1)小batch size不易陷入局部优解:小bacth因为每次进行update的数据是不一样的,这时候loos函数大概率有差别,这样的话不会拘泥于一个函数,有利于跳出单函数的局部最优。
(2) 小的batch size还可以有效防止过拟合。
因为大batch size容易掉入窄的局部优解(峡谷),而小batch size容易处于宽的局部优解(盆地),当测试集测试时,loss函数和training 时的loss函数有差别(这里我们假设相对于原loss函数进行了平移),我们能明显看到,盆地处的误差要远小于峡谷处(红色虚线)。
总的总结如下:
二,关于梯度下降的深入理解(比较两种不同的下降方式)
常规梯度下降
以下是常规的梯度下降算法
但是我们 发现,此梯度下降也容易陷入局部优解。为此,我们联想现实中的物理模型,当小球落入低谷时,由于惯性会跳出低谷,直到低谷很深。
基于此思路,我们建立了新的梯度下降模型。
Momentum:动量,冲力。这里我们理解为加上了惯性。图中的m1会记录上一次的方向(m是之前所有梯度的权重和,如下图),m1让梯度的移动带有记忆性,也就是通过数学公式模拟物理惯性,因而下一次梯度的变化是梯度值与记忆值的矢量和。
通过加上m1(Momentum),我们每一次梯度的移动都是基于gradient与previous movement.
这样的好处是,在一些比较平的低谷时,即使gradient=0,我们依靠记忆值(≠0),而可以再走一段距离(如下图),极大提高跳出局部优解的概率。