2018年11月版本
Week 10
大数据集的梯度下降
- 大数据集在现代机器学习的应用中非常常见
- 在使用大数据集前,应该是用一个小的数据集来验证模型是否有效,即先绘制一个小数据集在模型下的学习曲线,好的模型应该是具有高方差的(需要更多的数据)
随机梯度下降 Stochastic Gradient Descent
- 将梯度下降算法能够有效地应用到大型数据集中
- 经典的梯度下降算法又称为“批量梯度下降”,每下降一次都会处理完整的一次数据,当数据非常多时,收敛的耗时会变得很大
- 随机梯度下降,每一次迭代下降只考虑一个样本
- SGD过程:
- 将所有的样本数据打乱,重新排列
- 对所有的已重新排列的样本,即取第i个样本
- 更新梯度,对每一个参数j,有 θ 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)
- 多次重复上述过程,直到收敛
- 对SGD,其更可能是迂回着向最低点前进,并在靠近全局最小的一个区域内徘徊
- 尽管SGD可能最终并不能停留在全局最小,其最终的逼近值也可以作为一个适当假设
- 外循环通常只需要1次,最多10次
小批量梯度下降 Mini-batch Gradient Descent
- 相对于批梯度下降和随机梯度下降,小批量的每一次下降是选择b个样本,这个值介于1和m之间
- 更新梯度时,有 θ j : = θ j − α 1 b ∑ k = i k = i + b − 1 ( h θ ( x ( k ) ) − y ( k ) ) x j ( k ) \theta_j:=\theta_j-\alpha\frac1b\sum\limits_{k=i}^{k=i+b-1}(h_{\theta}(x^{(k)})-y^{(k)})x_j^{(k)} θj:=θj−αb1k=i∑k=i+b−1(hθ(x(k))−y(k))xj(k)
- 相比于批梯度下降,遍历一个数据集能够迭代更多次,收敛相对更快
- 相比于随机梯度下降,可以利用向量化的优势,提高算法效率
- 缺点就是需要确定b的大小
SGD的收敛 Convergence
- 定义一个函数 c o s t ( θ , ( x ( i ) , y ( i ) ) ) = 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 cost(\theta,(x^{(i)},y^{(i)}))=\frac12(h_\theta(x^{(i)})-y^{(i)})^2 cost(θ,(x(i),y(i)))=21(hθ(x(i))−y(i))2,在更新参数前,计算一下cost函数的值,检查是否正常运行
- 每进行1000次迭代,对上一组1000个样例的cost值取均值,将这些均值绘出,来判断SGD是否正常运行(cost持续减小)
- cost可能是震荡的,但正常情况下应该是有持续下降的趋势的
- 适当增大取值量(取一次值的迭代量),可能会出现“表现延迟”的情况,但是能够得到一条更加平滑的曲线,方便查看变化趋势
- 可以设计随训练时间不断减小的学习率,即 α = c o n s t 1 # i t e r a i o n + c o n s t 2 \alpha=\frac{const1}{\#iteraion+const2} α=#iteraion+const2const1,让SGD后期能够尽可能逼近全局最小,但是两个常数是需要调整的
在线学习 Online Learning
- 大规模的机器学习机制
- 能够模型化问题,在拥有连续一波数据或者连续数据时,使用一个算法从中学习
- 永远重复一个过程,即每当获得一个用户的数据对(用户的决策与否为标签) ( x , y ) (x,y) (x,y),用这个数据对来更新参数 θ \theta θ
- 上面的过程对过去的数据不做维持处理
- 可以对正在变化的用户偏好进行调适
- 记x为目标特征,y为结果,θ为用户偏好,则学习目标为 p ( y = 1 ∣ x ; θ ) p(y=1|x;\theta) p(y=1∣x;θ)
映射约减 Map Reduce
- 用于处理大规模的机器学习问题
- 具体过程
- 给定一组数据集,将这个数据集根据可用的电脑个数(在映射约减的使用场景中,数据集体量已经达到不能仅使用一台电脑完成任务了),分成多个子集,分别被这些电脑同时训练
- 每天电脑分别计算各自数据集的分类损失代数和(实际计算直接为梯度值)
- 最后进行函数更新时,对所有的分类损失和进行梯度下降以更新参数
- 由于实际情况中包括网络延迟和数据汇总在内的多个因素,这种方式的提速往往略小于n倍
- 使用映射约减的关键:所应用的算法是否是针对训练集的某个函数的求和运算