浅谈深度学习中Batch_size的大小对模型训练的影响

序言

本文根据知乎原文内容进行整理:深度学习中的batch的大小对学习效果有何影响?

正文

Batch_size的作用:决定了下降的方向。

在合理范围内,增大Batch_size的好处

  • 提高了内存利用率以及大矩阵乘法的并行化效率;
  • 跑完一次epoch(全数据集)所需要的迭代次数减少,对相同的数据量,处理的速度比小的Batch_size要更快;
  • 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。

盲目增大Batch_size,Batch_size过大的坏处

  • 提高了内存利用率,但是内存容量可能撑不住;
  • 跑完一次epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加,从而对参数的修正也就显得更加缓慢;
  • Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化(会影响随机性的引入)。
Batch_size的两种极端设置

一、batch_size为全数据集(Full Batch Learning):

在数据集比较小时使用,好处是:

  1. 由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向;
  2. 由于不同权重的梯度值差别巨大,因此选择一个全局的学习率很困难。Full Batch Learning可以使用Rprop只基于梯度符号并且针对性单独更新各权值。

在更大的数据集上使用的话,好处会变成坏处:

  1. 随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行;
  2. 以Rprop的方式迭代,会由于各个Batch之间的采样差异性,各次梯度修正值相互抵消,无法修正。

二、将Batch_size设置为1

Batch_size=1,也就是每次只训练一个样本。这就是在线学习(Online Learning)。理论上说batch_size=1是最好的,不过实际上调的时候,会出现batch_size太小导致网络收敛不稳定,最后结果比较差。

这是因为线性神经元在均方误差代价函数的错误面是一个抛物面,横截面是椭圆。对于多层神经元,非线性网络,在局部依然近似是抛物面。使用在线学习,每次修正方向以各自样本的梯度方向修正,难以达到收敛。
在这里插入图片描述

一些经验之谈:

  • 一般而言,根据GPU显存,设置为最大,而且一般要求是8的倍数(比如16,32,64),GPU内部的并行计算效率最高。
  • 或者选择一部分数据,设置几个8的倍数的Batch_Size,看看loss的下降情况,再选用效果更好的值。

总结:

  1. batch_size设的大一些,收敛得快,也就是需要训练的次数少,准确率上升的也很稳定,但是实际使用起来精度不高;
  2. batch_size设的小一些,收敛得慢,可能准确率来回震荡,因此需要把基础学习速率降低一些,但是实际使用起来精度较高。
  • 43
    点赞
  • 125
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值