1. 概念
Batch_Size是批量学习中才能用到的参数。统计学习可以分为在线学习、批量学习两类。也就是深度学习可以按照某种划分方式,分为在线学习和批量学习,我们平时用的比较多的是批量学习。
在线学习
\color{blue}{在线学习}
在线学习:每次接受一个样本,进行预测,并不断重复学习模型;
批量学习
\color{blue}{批量学习}
批量学习:是一种离线学习方法(需要提前获取所有样本进行训练任务),需要对所有样本或者说是部分样本进行学习。
设置batch_size的目的让模型在训练过程中每次选择批量的数据来进行处理。一般机器学习或者深度学习训练过程中的目标函数可以简单理解为: 在每个训练集样本上得到的目标函数值的求和,然后根据目标函数的值进行权重值的调整,大部分时候是根据梯度下降法来进行参数更新。 \color{blue}{在每个训练集样本上得到的目标函数值的求和,然后根据目标函数的值进行权重值的调整,大部分时候是根据梯度下降法来进行参数更新。} 在每个训练集样本上得到的目标函数值的求和,然后根据目标函数的值进行权重值的调整,大部分时候是根据梯度下降法来进行参数更新。
Batch_Size的直观理解就是一次训练所选取的样本数。
Batch_Size的大小影响模型的优化程度和速度,同时其直接影响到GPU内存的使用情况,假如你GPU内存不大,该数值最好设置小一点。
2. 作用
如果采用在线学习,相当于Batch_Size = 1,这中情况下,梯度下降方向的随机性较大,模型难以稳定收敛(收敛速度慢),所以我们平时用的比较多的是
批量学习
\color{blue}{批量学习}
批量学习。
如果数据集比较小,可采用全数据集的形式。
由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向
\color{blue}{由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向}
由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。但是对于大数据集,一次性把所有数据输进网络,
会引起内存的爆炸
\color{blue}{会引起内存的爆炸}
会引起内存的爆炸,所以就提出Batch Size的概念。另外,Batch_Normal也需要批量的数据来求均方差,如果Batch_Size为1,BN就不起做用了。
3. 设置
3.1. 增大Batch_Size优点
- 内存利用率提高了,大矩阵乘法的并行化效率提高。
- 跑完一次epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
- 一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
3.2. 增大Batch_Size缺点
- 内存利用率提高了,但是内存容量可能撑不住了。
- 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,即epoch次数增多了,从而对参数的修正也就显得更加缓慢。
- Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。
3.3. 减小Batch_Size缺点
- Batch_Size太小,而类别又比较多的时候,真的可能会导致loss函数震荡而不收敛,尤其是在网络比较复杂的时候。
综上,Batch_Size 增大到某个时候,达到时间上的最优。由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。
参考:
https://blog.csdn.net/jiachang98/article/details/124729988
https://blog.csdn.net/MengYa_Dream/article/details/119719576