ML: Large Scale Machine Learning
本节内容:适用于大规模数据的梯度下降方法及如何确保算法收敛
机器学习概念:
批量梯度下降(Batch Gradient Descent)
随机梯度下降(Stochastic Gradient Descent)
小批量梯度下降(Mini-batch Gradient Descent)
1. Gradient Descent
1.1 Methods
以线性回归为例:
-
批量梯度下降(Batch Gradient Descent)
每次更新都用到所有样本
J t r a i n ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J_{train}(\theta)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2 Jtrain(θ)=2m1i=1∑m(hθ(x(i))−y(i))2
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)} θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)
\qquad\qquad\qquad\qquad\qquad\qquad (for every j = 0 , . . . , n j=0,...,n j=0,...,n)
} -
随机梯度下降(Stochastic Gradient Descent)
每次更新只使用一个样本
优点:快。适用于大样本。
缺点:精度不如前者高。
c o s t ( θ , ( x ( i ) , y ( i ) ) ) = 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 cost(\theta,(x^{(i)},y^{(i)})) =\frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2 cost(θ,(x(i),y(i)))=21(hθ(x(i))−y(i))2
J t r a i n ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J_{train}(\theta)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2 Jtrain(θ)=2m1i=1∑m(hθ(x(i))−y(i))2
Step 1: 打乱样本
Step 2:
Repeat {
\qquad for i = 1 , . . . , m i=1,...,m i=1,...,m {
θ j : = θ j − α ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j := \theta_j - \alpha(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} θj:=θj−α(hθ(x(i))−y(i))xj(i)
\qquad\qquad\qquad\qquad\qquad\qquad (for every j = 1 , . . . , n j=1,...,n j=1,...,n)
\qquad }
} -
小批量梯度下降(Mini-batch Gradient Descent)
每次更新使用b个样本
优点:有好的向量化方法时比随机梯度下降更快。
\quad
例:
b = 10, m = 1000
Repeat {
\qquad for i = 1 , 11 , 21 , . . . . , 991 i=1, 11, 21, ...., 991 i=1,11,21,....,991 {
θ j : = θ j − α 1 10 ∑ k = i i + 9 ( h θ ( x ( k ) ) − y ( k ) ) x j ( k ) \theta_j := \theta_j - \alpha\frac{1}{10}\sum_{k=i}^{i+9}(h_\theta(x^{(k)})-y^{(k)})x_j^{(k)} θj:=θj−α101k=i∑i+9(hθ(x(k))−y(k))xj(k)
\qquad\qquad\qquad\qquad\qquad\qquad (for every j = 1 , . . . , n j=1,...,n j=1,...,n)
\qquad }
}
1.2 Checking for Convergence
-
批量梯度下降
J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)对迭代次数作图
J t r a i n ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J_{train}(\theta)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2 Jtrain(θ)=2m1i=1∑m(hθ(x(i))−y(i))2 -
随机梯度下降
Step 1: 每次更新前计算样本 ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i))对应的cost
c o s t ( θ , ( x ( i ) , y ( i ) ) ) = 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 cost(\theta,(x^{(i)},y^{(i)})) =\frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2 cost(θ,(x(i),y(i)))=21(hθ(x(i))−y(i))2
Step 2: 每隔一定的迭代次数(如1000次),对这1000次的 c o s t ( θ , ( x ( i ) , y ( i ) ) ) cost(\theta,(x^{(i)},y^{(i)})) cost(θ,(x(i),y(i)))求平均
Step 3: c o s t ( θ , ( x ( i ) , y ( i ) ) ) cost(\theta,(x^{(i)},y^{(i)})) cost(θ,(x(i),y(i)))对迭代次数作图可能会得到以下几种图像:
左上子图:该学习速率可以使算法收敛。使用的学习速率越小,收敛的速度越慢,但精度越高
右上子图:每5000次迭代求一次平均,得到的曲线更平滑
左下子图:可能是算法效果不佳,也可能是迭代间隔太小。5000次迭代求一次平均可能可以看出趋势
右下子图:算法发散,选用更小的学习速率
2. Online Learning
适用范围:连续产生的数据流。获取某个用户样本,学习后舍弃,接着学习下一个样本。
优点:可以捕捉用户行为的变化,适应新的需求。
应用场景:
- 运输服务费用优化
- 推荐系统
3. MapReduce
MapReduce: 将相同的计算任务分给不同计算机并行计算,最后由中心服务器汇总。
适用范围:可以进行并行计算的任务,如批量梯度下降。
Ng的PPT略显凌乱,于是搬运了一张WordCount在MapReduce中如何运作的PPT(来源见右下角链接)