您当前的位置: 首页 >  网络

wendy_ya

暂无认证

  • 0浏览

    0关注

    342博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

神经网络之Mini-Batch梯度下降

wendy_ya 发布时间:2020-04-12 12:14:49 ,浏览量:0

传统的梯度下降算法,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种梯度下降法叫做这称为Batch gradient descent(BDG)。我们知道 Batch 梯度下降的做法是,在对训练集执行梯度下降算法时,必须处理整个训练集,然后才能进行下一步梯度下降。当训练数据量非常多时,每更新一次参数都要把数据集里的所有样本都看一遍,虽然收敛性能好,但是一次迭代需要等待多长时间,速度慢,会极大的降低训练速度。

随机梯度下降,stochastic gradient descent(SDG),每看一个数据就算一下损失函数,然后求梯度更新参数。这个方法速度比较快,但是永远不会收敛,可能在最优点附近晃来晃去,无法收敛。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。

因此,为了克服两种方法的缺点,现在一般采用的是一种折中方法,mini-batch gradient decent。这种方法把数据分为若干个batch,按batch来更新参数,这样,一个batch中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。 在这里插入图片描述 蓝色:为 batch 梯度下降,即 mini batch size = m, 紫色:为 stochastic 梯度下降,即 mini batch size = 1, 绿色:为 mini batch 梯度下降,即 1 < mini batch size < m。

mini-batch梯度下降

如果选择介于1和最大训练数据量之间的一个batch_size数据量进行训练,叫mini-batch 梯度下降。 在这里插入图片描述 当b=1的时候,Mini-batch梯度下降就等于随机梯度下降(SDG);当b=m的时候,Mini-batch梯度下降就等于BDG。所以小批量梯度下降法的效果和batcih size的选择相关。 如果训练集较小,一般小于2000的,就直接使用 Batch gradient descent 。这样做至少有 2 个好处:其一,由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。其二,由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。

例如,样本数为m,每一个batch的大小为64,那么我们就可以分为m/64个样本,如果m%64不等于0说明还有剩的样本,则第m/64+1个batch不足64,大小就等于m%64。

一般 Mini Batch gradient descent 的大小在 64 到 512 之间,选择 2 的 n 次幂会运行得相对快一些。

每次训练的不能保证使用的是同一份数据,所以每一个batch不能保证都下降,整体训练loss变化会有很多噪声,但是整体趋势是下降的,随后会在最优值附近波动,不会收敛,但会会更持续地靠近最小值。

mini-batch算法实现

**1.确定mini-batch size。**一般有32、64、128等2的n次幂,按自己的数据集而定,确定mini-batch_num=m/mini-batch_num + 1;

mbatch_size2000batch_size=64,128,256,512 mini-batch梯度下降法

2.在分组之前将原数据集顺序打乱,随机打乱; 3.分组,将打乱后的数据集分组; 4.将分好后的mini-batch组放进迭代循环中,每次循环都做mini-batch_num次梯度下降。 在这里插入图片描述 使用mini-batch梯度下降法时,一次遍历训练集,能让你做m/batch_size个梯度下降。当然正常来说你想要多次遍历训练集,还需要为另一个while循环设置另一个for循环。所以你可以一直处理遍历训练集,直到最后你能收敛到一个合适的精度。 详细算法可参考吴恩达机器学习: https://www.bilibili.com/video/BV164411b7dx?p=104

伪代码
repeat num iterations{
	遍历每一个batch{
		1.前向传播:(1)计算Z=W*X+b
				    (2)计算激活项的值A=g(Z)
		2.计算cost函数J
		3.反向传播求解梯度
		4.更新权重
	}
}
总结

简单来说, 当每次是对整个训练集进行梯度下降的时候,就是 batch 梯度下降(BDG), 当每次只对一个样本进行梯度下降的时候,是 随机梯度下降(SDG), 当每次处理样本的个数介于二者之间,就是 mini batch 梯度下降。

关注
打赏
1659256378
查看更多评论
立即登录/注册

微信扫码登录

0.0448s