(1)随机梯度下降法(Stochastic Gradient Descent)
如果我们一定需要一个大规模的训练集,我们我们可以尝试使用随机梯度下降法(SGD)来代替批量梯度下降法。
在随机梯度下降法中,我们定义代价函数为一个单一训练实例的代价:
随机梯度下降算法为:首先对训练集随机“洗牌”,然后:
随机梯度下降算法在每一次计算之后便更新参数 𝜃 ,而不需要首先将所有的训练集求和,在梯度下降算法还没有完成一次迭代时,随机梯度下降算法便已经走出了很远。但是这样的算法存在的问题是,不是每一步都是朝着”正确”的方向迈出的。因此算法虽然会逐渐走向全局最小值的位置,但是可能无法站到那个最小值的那一点,而是在最小值点附近徘徊。
(2)小批量梯度下降(Mini-Batch Gradient Descent)
小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的算法,每计算常数𝑏次训练实例,便更新一次参数 𝜃 。
(3)随机梯度下降收敛
随机梯度下降的调试和学习率𝛼 的选取。
原因:在批量梯度下降算法中,令代价函数J为迭代次数的函数,根据函数图像判断梯度下降是否收敛。但在大规模训练集中,计算代价太大,不适合。
解决:在随机梯度下降算法中,我们在每一次更新 𝜃 之前都计算一次代价,然后每𝑥次迭代后,求出这𝑥次对训练实例计算代价的平均值,然后绘制这些平均值与𝑥次迭代的次数之间的函数图表。
绘制图表时,可能会有以下几种情况:
1、一个颠簸不平但是不会明显减少的函数图像(图一蓝线),但通过减小𝛼 ,使函数平缓,看到有下降趋势(图一红线)
2、训练集数量小,如1000,得到图二蓝线,不平滑;通过增加训练集数量,如5000,得到红线,更加平滑,但是得到的最小值点因训练集增加而时间变长
3、有时候算法模型本身有问题,即使增加数据集,图像也没有明显的下降趋势(图三)
4、若得到的图像类似图四,逐渐上升,可通过减小学习率等调整
也可以令学习率随着迭代次数的增加而减小,例如:
随着我们不断地靠近全局最小值,通过减小学习率,我们迫使算法收敛而非在最小值附近徘徊。 但是通常我们不需要这样做便能有非常好的效果了,对𝛼进行调整所耗费的计算通常不值得。
这种方法不需要定时扫描整个训练集去计算代价函数,而是只需要每次对最后1000个(自主选择个数)样本求一下平均值。应用这种方法,你既可以保证随机梯度下降法正在正常运转和收敛,也可以用它来调整学习速率𝛼的大小。