深度学习-Batch_Size

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

猜你喜欢

转载自blog.csdn.net/weixin_40826634/article/details/128166646
今日推荐