首页 » 信息技术 »

使用mini-batch来计算梯度的思考

2018年12月12日 / 407次阅读

在进行梯度下降计算的过程中,我们一般都是要将一组数据(mini-batch)的梯度进行平均,然后再更新网络中神经元的w和b。为什么要采用一组数据的梯度的平均?

(1)首先,我们应该默认假设,训练使用的数据,一般都是有误差的。

比如识别MNIST图片数据,每一个数字“5”长得都有点不一样,这些不一样,就属于误差。

(2)既然有误差,那么单个数据的梯度就也有误差,因此将多个数据的误差做算术平均,就能够得到一个“更好”的梯度值。

(3)为什么是取一组数据的算术平均?

随机误差的分布,服从正态分布;使用最小二乘法,可以使误差最小,得到的最优解,就是算术平均。

算术平均可以让误差最小。

算术平均可以让误差最小

算术平均可以让误差最小

(4)使用一组数据的算术平均来更新梯度,也可以加快神经网络的计算。

使用BGD和使用MBGD,在最后的结果上,有时反而MBGD更好一些。这种有的时候更好,就像weight decay技术。

(5)更好的适配各个数据方向。

有的时候我在想,使用神经网络计算识别MNIST图片数据的模型,使用mini-batch,由于是随机选择mini-batch的数据,所以,每一个batch里面,都可能有各种0-9数字的组合。因此,每一次网络中wb的更新,都是去同时适应各种不同的数据,同时将网络往各个数字的方向上调整。如果每次更新wb,只使用一个数据,这个数据就只能对应一个数字,用这个数字的梯度去更新wb,可以想象是把网络往这一个数字的方向去靠拢。后者显然不太合理。这可能就是Michael Nielsen在《neural networks and deep learning.com》这本书中常常使用mini-batch=10的一个考量吧(10也是output layer神经元的个数)。

(6)如果训练数据集特别大,使用mini-batch还有一个好处,计算梯度和值的时候,不那么容易出现溢出。最后用来更新wb的梯度,是所有数据的梯度值的算术平均,先求和再平均。

 

在使用mini-batch的时候,还有一个细节要考虑,多少个mini-batch算一个epoch?

我比较倾向于采用这种方式,即如果mini-batch是10,训练数据有50000个,那个50000/10=5000此update之后,才算一个epoch。我希望将所有数据都完整计算一遍,在来看网络在测试集上的准确率。

本文链接:https://www.maixj.net/ict/mini-batch-19522

相关文章

留言区


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top