吴恩达机器学习——第18章 大规模机器学习

格言

决定机器学习效果好坏的不是算法,而是数据。

准则

大道至简

首先采用使用少量样本训练算法,如果不能达到效果的情况下,再考虑是否可以通过增加样本的数量,来提升算法:

  • 高方差:说明拟合度过高,可以通过增加训练样本的方式训练模型。
  • 高偏差:说明拟合度太低,可以通过增加特征的方式来提升算法。

随机梯度下降法

batch梯度下降法的问题

之前使用的梯度下降法,每次 θ \theta 参数的优化,都需要遍历所有的训练样本,也称之为”batch梯度下降法“。

repeat{
θ j : = θ j α 1 m i = 1 m ( h θ ( x ( i ) y ( i ) ) x j ( i ) \theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}-y^{(i)})x_j^{(i)}

(for j=0....n)

}

如果样本数量非常大的情况下,这种方式的效率会就会变低,相对而言,随机梯度下降法的效率会更高一些。

随机梯度下降法的原理

随机梯度下降法只需要遍历一次样本,每次使用一个样本来更新 θ \theta 参数,每个样本使用一次后就丢失掉,这样就大大减少了访问样本的次数:
for( i=1;i<=m;i++){
θ j : = θ j α 1 m ( h θ ( x ( i ) y ( i ) ) x j ( i ) \theta_j:=\theta_j-\alpha\frac{1}{m}(h_\theta(x^{(i)}-y^{(i)})x_j^{(i)}

(for j=0....n)

}
前提是训练之前,需要把样本随机打乱,否则可能会对随机梯度下降的效果造成影响。

batch vs 随机

在这里插入图片描述
如上图所示,红色的线代表batch梯度下降,粉色的线代表随机梯度下降,从图上可以看出两者的不同:

  • batch梯度下降:由于每次 θ \theta 优化都对所有样本进行计算,优化的路径体现出来的是一个非常合理的路径。
  • 随机梯度下降:由于每次 θ \theta 优化只对一个样本进行计算,优化的路径提现出来一种迂回、徘徊的形态,但是总体趋势也是向中心走的。

随机梯度下降,有时候接近中心后,一直在中心周围徘徊,却无法收敛,怎么办呢,请看下节。

随机梯度下降的收敛

本节介绍随机梯度下降收敛的一种方式:图形法。
回忆一下代价函数:
J ( θ ) = 1 2 m i = 1 m ( h ( x i ) y i ) 2 J(θ)=\frac{1}{2m}\sum_{i=1}^{m}{(h(x_i)-y_i)}^2

为了书写方便,简写为:

c o s t ( θ , ( x ( i ) , y ( i ) ) ) = i = 1 m ( h ( x i ) y i ) 2 cost(\theta,(x^{(i)},y^{(i)}))=\sum_{i=1}^{m}{(h(x_i)-y_i)}^2
然后就是计算一批 c o s t ( θ , ( x ( i ) , y ( i ) ) ) cost(\theta,(x^{(i)},y^{(i)})) 值,比如1000个样本,然后取平均值来绘图,注意,要先计算 c o s t ( θ , ( x ( i ) , y ( i ) ) ) cost(\theta,(x^{(i)},y^{(i)})) 再更新 θ \theta

这个通过多个批次的计算后 c o s t ( θ , ( x ( i ) , y ( i ) ) ) cost(\theta,(x^{(i)},y^{(i)})) 就能形成一条曲线,观察曲线的趋势,对算法进行调优。下面看看不同的曲线,该如何调优:
在这里插入图片描述

  • 图1:蓝色原始曲线已经收敛的很好了,只不过看上去抖动比较大,在最小值周边徘徊;减少学习率 α \alpha 之后,曲线更为平滑。
  • 图2:蓝色原始曲线已经收敛的很好了,只不过看上去抖动比较大;增大每个批次样本的数量后,曲线变得更为平滑。
  • 图3:蓝色原始曲线近似平行,没有进行收敛。在调整了样本数量后,曲线更为平滑,但是仍然没有收敛。这种情况下,说明算法本身出现了问题,需要尝试减少学习率,或增加特征数量来优化算法。
  • 图四:蓝色原始曲线是上升的,完全没有收敛,这时候需要减少学习率。

α \alpha 的优化

学习率 α \alpha 的优化,是随机梯度优化的很重要的一个环节。如果发现曲线开始收敛的效果不错,但是曲线在临近全局最小点时不断徘徊,无法收敛,这种情况下,使用动态变化的 α \alpha 效果会比较好:随时间不断减少:

α = C 1 i t e 1 + C 2 \alpha=\frac{C_1}{ite_1+C_2}

其中, C 1 , C 2 C_1,C_2 是常量, i t e 1 ite_1 指的是迭代次数,这样 α \alpha 就会随着迭代次数的增加而不断减小。

缺点是需要额外计算 C 1 , C 2 C_1, C_2 的值。

min-batch 梯度下降法

min-batch梯度下降是界于batch梯度下降和随机梯度下降之间的一种算法,每次更新参数的时候,需要计算一个小批次的样本,不是一个(随机梯度),也不是所有(batch梯度)。

min-batch梯度下降拥有随机梯度下降同样的优点,同时要比随机梯度下降效率更快。计算公式为:
在这里插入图片描述
如上图所示,每次更新 θ \theta ,需要计算10个样本的值。当数据拥有更好的向量话的方式时,一个批次的样本可以并行计算,从而提高计算的效率。

缺点就是因为多了一个参数b(批次大小),增加了算法的复杂度。

在线学习

随机梯度的一个应用场景就是在线学习。

假设有一个物流网站,用户输入起点、终点,网站给出价格,用户决定是否需要选择该物流服务,y=1表示选择,y=0表示不选择。

由于这种咨询的次数会非常多,网站不希望把这些数据存储下来,然后使用支持固定样本集的学习算法进行处理。在线学习提供了另一种思路:每次使用一个样本对模型进行优化,优化完成后抛弃该样本,然后试用下一个样本进行优化…。这样就实现了一个动态改变的模型,会根据样本的不同而实现模型的自动更新。
Repeat forever (as long as the website is running) {
Get (?, ?) corresponding to the current user
θ : = θ j α ( h θ ( x ) y ) x j \theta:=\theta_j-\alpha(h_\theta(x)-y)x_j
(for ?=0:?)
}

MapReduce

只要机器学习算法能够表达为对数据集的求和等线性计算,就可以使用map-reduce来提升效率。

map-reduce可以把求和操作,分布到多台设备上并行计算,然后通过一台设备对计算结果进行汇总,从而达到提升学习效率的目的。目前机器cpu都是多核的,map-reduce也可以在多个核心上进行并行处理,提升效率。

发布了48 篇原创文章 · 获赞 34 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/u013252773/article/details/102613418