batch梯度下降

https://www.jiqizhixin.com/articles/2016-11-21-4
batch批训练—不同的更新梯度的方式
batch梯度下降分为三种:batch梯度下降、随机化batch梯度下降、mini-batch梯度下降
1.batch
遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍
每次迭代,成本函数都会减小
这里写图片描述

2.随机化batch
每一个数据都计算一次损失函数,然后求梯度更新参数
这里写图片描述
每次只对一个样本进行训练,cost不是单调下降,而是受类似噪声的影响,出现振荡。但整体的趋势是下降的,最终也能得到较低的cost值。

成本函数轮廓图

随机梯度下降法永远不会收敛,而是会一直在最小值附近波动
这里写图片描述

3.mini-batch梯度下降
把m个训练样本分成若干个子集,称为mini-batches,然后每次在单一子集上进行神经网络训练。这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为一批的样本数与整个数据集相比小了很多,计算量也不是很大
假如有50万个训练集,每个mini-batch包括1000个样本,总共500个mini-batches。使用 batch 梯度下降法,一个mini-batch只做一次梯度下降。则只需要进行500次梯度下降即可。
这里写图片描述
这里写图片描述

1.噪声
2.代价函数并不是单调较小的,不能精准收敛到最小值,只是在最小值附近波动。

mini-batch梯度下降优化-Learning rate decay
随时间慢慢减少学习率,我们将之称为学习率衰减。
这里写图片描述
上图中,蓝色折线表示使用恒定的学习率 ,由于每次训练 学习率相同,步进长度不变,在接近最小值处的振荡也大,在最小值附近较大范围内振荡,与最小值距离就比较远。
绿色折线表示使用不断减小的 学习率,随着训练次数增加, 学习率逐渐减小,步进长度减小,使得能够在最小值处较小范围内微弱振荡,不断逼近最小值。相比较恒定的 学习率来说,learning rate decay更接近最小值。

常用的公式有:
这里写图片描述
其中,decay_rate是参数(可调),epoch是已训练样本集的次数。随着epoch增加, 学习率会不断变小。

总结:
1.如果训练集较小(小于 2000 个样本),直接使用 batch 梯度下降法
2.一般的 mini-batch 大小为 64 到 512,而且如果 mini-batch 大小是 2 的n次方,代码运行会快些
(因为计算机存储数据一般是2的幂,这样设置可以提高运算速度)

猜你喜欢

转载自blog.csdn.net/baidu_27643275/article/details/80023115