11 回归算法 - BGD、SGD、MBGD梯度下降

=== 名词解释 ===

BGD: 批量 - 梯度下降算法
SGD: 随机 - 梯度下降算法
__MBGD:__小批量 - 梯度下降算法

=== 批量梯度下降算法 BGD ===

在上一章10 回归算法 - 梯度下降中讲述的梯度下降算法是针对某一个样本进行的。实际上,我们拥有m个样本,针对每一个样本我们都应该有一个对应的梯度下降。

所以引入可批量梯度下降算法(BGD),这是一个$color{red}{求解相对精确}$ ,但是计算时$color{red}{迭代速度相对比较慢}$的算法。

原因如下:
11 回归算法 - BGD、SGD、MBGD梯度下降
如上公式所示,批量梯度算法BGD,是对__所有样本的梯度__进行了__求和__的操作。

公式化简后:
11 回归算法 - BGD、SGD、MBGD梯度下降

=== 随机梯度下降算法 SGD===

随机梯度下降算法:不再考虑样本梯度的求和了,而是来一个新的样本,我就更新一次θ。
11 回归算法 - BGD、SGD、MBGD梯度下降

如果有m条数据,我就更新m次。
但是在批量梯度下降算法 BGD中,对于θ我只更新了1次 (全部样本都计算完后求和)

所以在随机梯度下降算法中,迭代更新的速度会更快。
实际生产当中,我们选择随机梯度下降的场景会更多。

毕竟,如果我有上百万条数据,如果一次性全遍历完后再得到θ的值,这样太慢了。

总结一下BGD和SGD的区别:
1、SGD速度比BGD快(迭代次数少)
2、SGD在某些情况下(全局存在多个相对最优解,或 J(θ)是一个二次以上的函数 ),SGD有可能跳出某些小的局部最优解,所以不会比BGD坏。
3、BGD一定能够得到一个局部最优解(在线性回归模型中一定是一个全局最优解),SGD由于随机性的存在,可能导致最终结果比BGD差。

优先选择:SGD


=== 小批量梯度下降法 MBGD===

如果既需要保证算法训练速度,又需要保证参数训练的准确率,使用MBGD。

MBGD中不是每拿一个样本就更新一次梯度,而是拿b个样本(一般取10个)的平均梯度作为更新方向。

MBGD是BGD和SGD的结合:
随机抽若干个样本,求和。再不断更新参数。

11 回归算法 - BGD、SGD、MBGD梯度下降


PS 回答几个问题:
1、学习率(步长)的选择:
学习率都是人为设定的,或者可以理解为不断得尝试。根据迭代速度和结果进行不断得调整。
学习率没有一个明确的设定范围,一般可以选择1左右的数字进行尝试,如果迭代的速度还可以,且结果能够获得即可。

2、一般生产中,在深度学习中,对于损失函数的求解我们会自己去写。
但在机器学习中我们可以直接使用sklearn的LinearRegression进行最小二乘来求解θ:
$θ=(X^TX)$-1$X^TY$

上一篇:元旦技术大礼包 - 2017金秋将要发布的PostgreSQL 10.0已装备了哪些核武器?


下一篇:网页动态绳子