Batch
Batch 当初解释过,一次epoch遍历完所有的training set,由于Batch的存在,在一次epoch中要分为多次batch进行训练学习,目的是我们在一次epoch中可以进行多次优化,从而更快地找到最优参数值。
shuffle 在Batch中的作用:
在每一次epoch开始之前,会分Batch
而每一epoch的Batch都是不一样的
就是说,第一次epoch的batch是那样的,第二次epoch的batch会重新对batch进行分配
所以,每个epoch中batch的资料都是不一样的
为什么要用Batch 呢?
首先、我们要知道,由于GUP的出现,在进行update时,
Large Batch(稍微大)所需要的时间 small Batch所花费的时间
其次,当Batch越来越大时,一次update所花费的时间会快速上升。
这告诉我们,Batch size 的选择也是一种技术。
在GPU的前提下,但time for one update 与 time for one epoch 正好相反(符合逻辑)
那就说明Batch size在1000左右就是完美了吗?
并不!
small Batch在training acc 中往往表现比较出色的(这完全和我们想的不一样嘞)
Batch对Training带来怎样的影响呢?
如下图所示:
左右两个表格使用是同一个模型,同一个network,按理说他们所表示的function是一样的
但神奇的是,大的batch size在training中,会带来差的结果
出现此结果的原因 当batch size过大时,Optimization出现了问题
那么 为什么smal batch 有利于training呢?
如下图所示:
因为,当small batch时,一次epoch就会进行多次update,每次update的都不一样
所以,当L在某点中stuck(即在该点中的gradient=0)
并不代表该点在L就会stuck,相反还会正常求取该点在L的gradient,并进行update
并且,Small Batch 在Testting Acc 中也是优于 Large Batch(记住此结论即可)
理由有,但此种解释还要进一步探究。关于视频讲解--定位到17:19
如下图,就是对Batch size small or large 总结:
S
Momentum - 可以对抗Saddle Point 或 Local minima的技巧
首先,我们先回顾之前的梯度递减(Gradient Descent)
每次计算出gradient,就按照gradient反方向进行移动
其次,研究Gradient Descent + Momentum
对于Momentum的另一种解读:如下图
我们update方向,不只是考虑现在的gradient,而是考虑过去所有gradient综合
如果对于上图不是很理解,我们将Momentum 进行形象化,如下图所示。