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

#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

 

Fregata 是一个基于 Apache Spark 的轻量级、超快速、大规模机器学习库,并在 Scala 中提供了高级 API。特性更准确:对于各种问题,Fregata 可以实现比 MLLib 更高的精度。更快速:对于广义线性模型,Fregata 在绝大部分数据上都能够扫描一遍数据即收敛。对于 10 亿 X 10 亿的数据集,Fregata 可以在 1 分钟内用内存缓存训练广义线性模型,或在没有内存缓存的情况下训练 10 分钟。通常,Fregata 比 MLLib 快 10-100 倍。算法无需调参(调参相对简单):Fregata 使用 GSA SGD 优化。GSA 算法是梯度型随机优化算法,也是 Fregata采用的核心优化方法。它是基于随机梯度下降法(SGD)的一种改进:保持了 SGD 易于实现,内存开销小,便于处理大规模训练样本的优势,同时免去了 SGD 不得不人为调整学习率参数的麻烦。 更轻量:Fregata 只使用 Spark 的标准 API,能快速,无缝地集成到 Spark 大多数业务的数据处理流程上。架构这份文档是关于 Fregata 0.1 版本的core : 主要实现基于 GSA 的独立算法,包括分类、回归和聚类分析Classification:支持二进制和多重分类Regression:即将发布Clustering:即将发布spark : 主要通过包裹 core.jar 实现基于 spark 的大规模机器学习算法,并提供相应的算法Fregata 支持 spark 1.x 以及带 scala 2.10 和 scala 2.11 的 2.x算法Logistic RegressionCombine Freatures Logistic RegressionSoftMaxRDT 标签:Fregata
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值