深度学习中批训练(batch)与逐个数据训练对结果的影响的思考(无实验)

为什么会提出这样的思考?
在之前的实验中,我总是习惯于使用批训练的方式向神经网络中传入数据(可能是因为大多数教学都使用MNIST的数据集?)。然而,当我使用我自己提取的数据,再批次传入模型进行训练,往往会发现最后得到的准确率总是不尽人意,起初怀疑对模型的理解和数据提取上。直到我在一个实验中,使用了批次训练和逐个训练的方式,却得到了不同的结果( 见tensorflow RNN实现文本分类(LSTM)),才对这个问题产生了疑惑。

批训练(batch)与逐个数据训练对结果的影响:
对于一般神经网络而言,训练数据无非用于更新权值和偏置,更新方式也就是梯度下降。
逐个数据的梯度更新方式
在这里插入图片描述
损失函数计算:每计算一个数据就算一下损失函数,然后求梯度更新参数。
特点:速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,得不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。

批训练(batch)的梯度跟新方式:
在这里插入图片描述
n是批量大小(batchsize),η是学习率(learning rate)。可知道除了梯度本身,这两个因子直接决定了模型的权重更新,从优化本身来看它们是影响模型性能收敛最重要的参数。
学习率也会直接影响模型的收敛状态,batchsize则影响模型的泛化性能,两者又是分子分母的直接关系,相互也会影响。

1、批梯度下降(BGD——Batch gradient descent)
损失函数计算:遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。
特点:每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习

2、小批梯度下降(mini-batch gradient decent)
为了克服两种方法的缺点,现在一般采用的是一种折中手段
损失函数计算:把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。

总结:
1.批训练与逐个数据训练会得到不同的结果(准确率)
2.如果在数据量大的情况下,应采用batch训练,这样其速度更快,且能得到很好的稳定的结果
3.对于数据量小的情况,应采用逐个数据训练,较小的批次大小(这里也指batchsize=1或其它比较小的值)能带来有更多起伏、更随机的权重更新,模型泛化能力更强
4.batch的大小设置要合适,大的batchsize能减少训练时间,提高稳定性。但同时大的batchsize可能导致模型泛化能力下降(因为训练的次数过少,对梯度的更新不够)
(可能有的理解不太对,大家可以在评论区指出或查看参考)

参考:
https://blog.csdn.net/weiwanshu/article/details/88387739
https://zhuanlan.zhihu.com/p/64864995
https://www.zhihu.com/question/32673260

  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值