大规模机器学习
一、随机梯度下降法
如果一定需要一个大规模的训练集,可以尝试使用随机梯度下降法来代替批量梯度下降法。
在随机梯度下降法中,定义代价函数为一个单一训练实例的代价:
随机梯度下降算法为:
1.对训练集随机“洗牌”
2.然后
随机梯度下降算法在每一次计算之后就更新参数θ,不需要首先将所有的训练集求和,在梯度下降算法还没有完成第一次迭代时,随机梯度下降算法就已经走出了很远。
存在的一个问题是,不是每一步都朝着“正确”的方向迈出。因此算法虽然会逐渐走向全局最小值的位置,但可能无法站到最小值的那一点,而是在最小值点附近徘徊。
二、小批量梯度下降
小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的算法,每计算常数b(通常2≤b≤100)次训练实例,就更新依次参数θ。
这样做的好处在于,可以用向量化的方式来循环b个训练实例。
三、随机梯度下降收敛
在随机梯度下降中,每一次更新θ之前都计算依次代价,每X次迭代后,求出这X次对训练实例计算代价的平均值,绘制这些平均值与X次迭代的次数之间的函数图表。
当出现颠簸不平但不明显减少的函数图像(左下图中蓝线所示)时,可以增加X使得函数更加平缓,从而看出下降趋势(左下图红线所示);如果函数图像仍然颠簸不平且不下降(如粉色线所示),可能是由于模型本身存在一些错误。
如果得到的曲线如上图右下方所示不断上升,则需要选择一个较小的学习率α。
可以令学习率随着迭代次数的增加而减小,例如:
随着不断的靠近全局最小值,减小学习率,迫使算法收敛而非在最小值附近徘徊。