神经网络训练中为什么要使用batch?

使用batch训练神经网络时,每次模型训练,更新权重时,就拿一个batch的样本来更新权重。

求损失loss用于梯度下降,更新权重时,有几种方式。一种是全部的样本用来求loss,这种方式称为批量梯度下降(BGD);一种是随机的选取一个样本,求loss,进而求梯度,这种方式称为随机梯度下降(SGD);BGD和SGB的这种,产生了第三种梯度下降的方法:小批量梯度下降(MBGD)。

当我们使用批量梯度下降BGD方法来更新权重时,面临一个问题:当陷入局域最小点时,梯度为0时,无论怎么更新权重,loss都不再改变,从而无法找到全局最优点

随机梯度下降SGB是,随机选取一个样本求loss进而求梯度。这种方式就很大程度上规避了梯度为0的情况:即使某次训练更新权重时,梯度为0,下次也不一定为0。而批量梯度下降BGD则不然,本次更新权重时,梯度为0,下次还是0。梯度下降法就失效了。

批量梯度下降BGD随机梯度下降SGD有各自的优缺点:

1.使用批量梯度下降BGD时,虽然模型的性能低,但耗费时间时间也低。(由于其求梯度,更新权重时,可以并行计算,因此是求所有样本损失的累加和)

2.使用随机梯度下降SGD时,虽然模型的性能高,但耗费的时间也高。(由于其求梯度,更新权重时,不可以并行计算。某步更新权重,要依赖上一步权重)

因此就提出了一种折中的方法:小批量梯度下降(MBGD)

Epoch:1个epoch等于使用训练集中的全部样本训练一次,通俗的讲几次epoch就是整个数据集被轮几次

Iteration:1个iteration等于使用batchsize个样本训练一次,也就是说训练一批的样本,称为一次迭代。比如训练集有500个样本,batchsize = 10 ,那么训练完整个样本集:iteration=50,epoch=1.

batchsize最大是样本总数N,此时就是Full batch learning;最小是1,即每次只训练一个样本,这就是在线学习(Online Learning)。

 关于BGD,SGD,MBGD的数学原理,可以参考:​​​​https://www.cnblogs.com/lliuye/p/9451903.html

从数学公式中我们可以知道,batchsize越大,并行效率越高,梯度下降更稳定,但训练总时间不一定就短,但对显存占用更大

训练总时间 = 一次网络参数更新所需的计算时间(和梯度计算并行效率有关,理想情况下,并行计算2个样本和并行计算200个样本所需时间一样)X 收敛所需更新次数(和梯度收敛速度有关:参数更新了多少次,更新方向正确与否)

训练总时间和batchsize的关系和Mem大小,CUDA流处理器数量,单个样本的梯度计算复杂度,梯度收敛速度均有关。

假设Mem很大,但是CUDA流处理器数量少,那么 batchsize越大,训练总时间有可能会长很多(因为最后计算的样本可能很多:计算的样本梯度多,但是网络参数的更新次数少,收敛慢)。

一次性加载进显存,不等于CUDA流处理器能一次并行完。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温柔的行子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值