机器学习之大规模机器学习

#Large scale machine learning(大规模机器学习)

即处理大数据集的算法。

 

#Learning with large datasets(学习大数据集)

  • 在需要训练大量模型时,预先检查往往是个明智的选择;
  • 使用一个非常小的训练集的效果可能相同。它也是绘制学习曲线的常用方法;
  • 右者即使训练集增大,效果也不会更好。应该添加额外的特征项或在神经网络中添加额外的隐藏单元等等。

 

#Stochastic gradient descent(随机梯度下降)

当训练集很大时,梯度下降算法的计算量会变得非常大,随机梯度下降是对普通梯度下降算法的改进。

  • Batch gradient descent(批量梯度下降):每次都要同时考虑所有的训练样本。

随机梯度下降算法:

  • 这个代价函数实际上衡量的是我的假设函数在某个样本(x(i),y(i))上的表现

1、随机打乱所有数据(能让随机梯度下降收敛得更快一点)

2、在i等于1到m中进行循环:对所有j值更新参数θ_j

与批量梯度下降不同,随机梯度下降不需要对全部m个样本求和来得到梯度项,而只需要对单个训练样本求出这个梯度项,在这个过程中,我们已经开始优化参数了。即不需要对所有的数据进行扫描就能对参数进行修改,使其达到全局最小值。

*外层循环决定了内层循环的执行次数,外层循环的执行次数取决于训练集的大小,通常1次就够了,最多到10次,但那是特殊情况。

 

#Mini-batch gradient descent(Mini-batch梯度下降)

有时甚至比随机梯度下降还要快一点。

  • b是一个称为mini-batch大小的参数,通常取10,取值范围2~100

向量化过程中,mini-batch梯度下降算法可能会比随机梯度下降算法更好仅当你有一个好的向量化方式,那样的话,这个求和项能以更向量化的方式执行,这将使你在10个样本中实现部分并行计算,即通过使用合适的向量化方式计算余下的样本,有时你可以部分使用好的数值代数库,然后对b个样本并行进行梯度计算。

mini-batch算法的缺点之一是,当有一个额外的参数b时你需要确定mini-batch大小,这可能要费些时间。

 

#Stochastic gradient descent convergence(随机梯度下降收敛)

如何确保算法收敛以及选择合适的学习速率α?

为了检测算法是否收敛,当随机梯度下降法进行学习时,在我们使用某个样本(x(i),y(i))来更新参数θ之前,先用这个样本算出对应的cost函数,最后为了检查随机梯度下降是否收敛,每1000次迭代就画出前一步中所计算出的cost函数的均值,这样能有效地估计出你的算法在前1000个样本上表现得有多好。

  • 如果曲线的噪声太大或者老是上下震荡,则可以试着增加求均值的样本数量,这样可以更好看到函数变化的趋势;
  • 如果cost函数值在上升,那么就用一个更小的α值。

当运行随机梯度下降时,算法会从某个点开始曲折地到达最小值,但不会完全收敛而是在最小值附近一直徘徊,所以最后得到的只是一个全局最小值的接近值而不是真正的全局最小值。

如果想让随机梯度下降更好地收敛到全局最小值,则让学习速率α的值随时间变化逐渐减小:

  • 但要花时间来确定这两个额外的参数,使得整个算法变得更复杂。因此很少采用这种逐渐减小α的方法,而是让学习速率α保持一个常数。

 

#Online learning(在线学习)

让我们可以模型化一些问题,就是我们有连续一波数据或连续的数据流,想要用算法从中学习的这类问题。

  • 在这个在线学习机制中,我们实际上丢弃了固定数据集这一概念,现在我们获取一个样本,然后利用这个样本以这种方式学习,然后我们丢弃这个样本;
  • 它可以适应变化的用户偏好。

  • learning the predicted click-through rate(点击率CTR预测学习)问题

 

#Map-reduce & data parallelism(减少映射&数据并行)

Map-reduce:

  • 每个机器要对100个样本而不是400个样本求和,都只需要做四分之一的工作,使得它们的运算速度提高到原来的四倍。
  • 中心服务器整合这些结果,更新参数θ_j。

  • 实际上因为网络延迟,结果汇总也需要额外的时间以及其他因素,速度会比4倍要小。

如果想运用在学习算法上,关键是要考虑学习算法是否可以表示成对训练集的一种求和:

  • 所以只要学习算法可以表示成一系列的求和形式,或者表示成在训练集上对函数的求和形式,你可以使用MapReduce技巧来并行化学习算法。

  • 取决于不同的实现,如果你有一个多核机器和某些线性代数的库,实际上有些线性代数库可以自动在一台机器的不同核心上进行并行代数运算。

现在有很好的开源的MapReduce实现,有个开源的系统叫Hadoop。

 


PS.内容为学习吴恩达老师机器学习的笔记【https://study.163.com/course/introduction/1004570029.htm

 

发布了32 篇原创文章 · 获赞 4 · 访问量 6091
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览