1. Epoch, Batch, Iteration说明
相关概念的区别与联系如下表所示:
名词 | 解释 |
---|
Epoch | 所有训练样本在神经网络中都进行了一次正向传播和一次反向传播。也就是1个epoch等于使用训练集中的全部样本训练一次。 | Batch | 将整个训练样本分成若干个Batch。 | Iteration | 1个iteration等于使用batch size个样本训练一次。一个迭代=一个正向通过+一个反向通过。训练一个Batch就是一次Iteration | Batch_Size | 每批样本的大小,即每次训练在训练集中取batchsize个样本进行训练 。 |
假设训练集有1000个样本,batchsize=10,那么训练完整个样本集需要:
- 100次iteration
- 100个Batch
- 1次epoch。
-
batchsize最大是样本总数N,此时就是Full batch learning ;最小是1,即每次只训练一个样本,这就是在线学习(Online Learning) 。 -
当我们分批学习时,每次使用过全部训练数据(完成一次Forword运算以及一次BP运算),即成为完成了一次epoch。 -
如果数据集比较小,我们就采用全数据集。全数据集确定的方向能够更好的代表样本总体 ,从而更准确的朝向极值所在的方向。对于大的数据集,我们不能使用全批次,因为会得到更差的结果。
2. 为什么要多个epoch
因为将所有数据迭代训练一次是不够的, 需要反复多次才能拟合、收敛 。随着epoch 数量的增加, 权重更新迭代的次数增多, 曲线从最开始的不拟合状态, 进入优化拟合状态, 最终进入过拟合。
3. 为什么要分多个batch
先来讲讲梯度下降与随机梯度下降。
梯度下降法 (gradient descent)是机器学习中经典的优化算法之一,用于寻求一个曲线的最小值。所谓"梯度",即一条曲线的坡度或倾斜率,"下降"指代下降递减的过程。- 在深度学习领域中,常用
随机梯度下降算法 (Stochastic Gradient Descent, SGD)训练深层结构,它有一个好处就是并不需要遍历全部的样本,当数据量非常大时十分有效。
Batch 的选择,决定的是下降的方向 。
- 极端一:batch_size为全数据集(Full Batch Learning):
好处:
1.由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。
2.由于不同权重的梯度值差别巨大,因此选择一个全局的学习率很困难。Full Batch Learning可以使用Rprop只基于梯度符号并且针对性单独更新各权值。
坏处:
1.随着数据集的海量增长和内存限制 ,一次性载入所有的数据进来变得越来越不可行。
2.以Rprop的方式迭代,会由于各个Batch之间的采样差异性,各次梯度修正值相互抵消,无法修正。这才有了后来 RMSProp 的妥协方案。
Batch_size=1,也就是每次只训练一个样本。这就是在线学习(Online Learning)。线性神经元在均方误差代价函数的错误面是一个抛物面,横截面是椭圆。对于多层神经元,非线性网络,在局部依然近似是抛物面。使用在线学习,每次修正方向以各自样本的梯度方向修正,难以达到收敛 。如下图所示:
- 在合理范围内,增大 Batch_Size 有何好处?
内存利用率 提高了,大矩阵乘法的并行化效率提高。- 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的
处理速度 进一步加快。 - 在一定范围内,一般来说 Batch_Size 越大,其确定的
下降方向越准 ,引起训练震荡越小。
- 内存利用率提高了,但是
内存容量 可能撑不住了。 - 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对
参数的修正也就显得更加缓慢 。 - Batch_Size增大到一定程度,其确定的
下降方向已经基本不再变化 。
4. Rprop与RMSProp
Rprop与RMSProp都是一种权值更新算法 ,类似于SGD算法,其中,RMSProp是RProp算法的改良版。
- Rprop
- 首先为各权重变化赋一个初始值,设定权重变化加速因子与减速因子。
- 在网络前馈迭代中当连续误差梯度符号不变时,采用加速策略,加快训练速度;当连续误差梯度符号变化时,采用减速策略,以期稳定收敛。
- 网络结合当前误差梯度符号与变化步长实现BP,同时,为了避免网络学习发生振荡或下溢,算法要求设定权重变化的上下限。
不同权值参数的梯度的数量级可能相差很大,因此很难找到一个全局的学习步长。靠参数梯度的符号,动态的调节学习步长。适用于full-batch learning,不适用于mini-batch learning
- RMSProp:
rmsprop算法不再孤立地更新学习步长,而是联系之前的每一次梯度变化情况,具体如下。
- rmsprop算法给每一个权值一个变量MeanSquare(w,t)用来记录第t次更新步长时前t次的梯度平方的平均值。
- 然后再用第t次的梯度除上前t次的梯度的平方的平均值,得到学习步长的更新比例。
- 根据此比例去得到新的学习步长。如果当前得到的梯度为负,那学习步长就会减小一点点;如果当前得到的梯度为正,那学习步长就会增大一点点。
这样看来,rmsprop算法步长的更新更加缓和 。这些算法并不能完全解决局部最小值问题,只是使得参数收敛的速度更快 。针对是否能收敛到全局最优解,还与模型的初始化有关。
参考:https://blog.csdn.net/qq280929090/article/details/79585887?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-3-79585887.pc_agg_new_rank&utm_term=%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E6%9C%89batch&spm=1000.2123.3001.4430
|