大规模机器学习(Large Scale Machine Learning)

  • 1. 大型数据集的学习(Learning With Large Datasets)
  • 2. 随机梯度下降法(Stochastic Gradient Descent)
  • 3. 小批量梯度下降(Mini-Batch Gradient Descent)
  • 4. 随机梯度下降收敛(Stochastic Gradient Descent Convergence)
  • 5. 在线学习(Online Learning)
  • 6. 映射化简和数据并行(Map Reduce and Data Parallelism)

1. 大型数据集的学习(Learning With Large Datasets)

如果我们对比现在的算法和五年前的算法,很可能得出的结论是现在的算法比五年前的算法要优异的多,这是因为现在的数据集越来越大的原因。机器学习算法的结果和训练集的关系之前就有涉及过,下图所示是训练集的大小和算法精确度的关系,可以很明显地看到算法的强度和数据集的大小有很强的正相关关系。

如果我们有一个特别大的数据集怎么办呢?比如我们有一个1000万的数据集,如果用下图所示的线性回归中的梯度下降法,那么对于计算能力的要求是非常高的。

如果我们有一个大的数据集,我们应该先绘制学习曲线来帮助我没能判断是否需要这么多数据:

如果我们的学习曲线是左图所示的,那么数据集越大,算法的运行效果越好;如果我们的学习曲线是如右图所示的,那么1000的数据集和1000万的数据集的结果其实差别不大,我们就没有必要一定要用大的数据集来训练模型了、

2. 随机梯度下降法(Stochastic Gradient Descent)

我们先回顾一下梯度下降法,其算法过程如下所示:

梯度下降的示意图如下所示,方向是沿着下降最快的方向。

但时如果数据量很大,那么利用梯度下降法的计算量将会非常大,下降速度会很慢,所以我们尝试使用随机梯度下降法来代替梯度下降法。在随机梯度下降法中,我们定义代价函数为一个单一训练实例的代价:

随机梯度下降法为:首先对训练集随机“洗牌”,然后:

随机梯度下降算法在每一次计算之后便更新参数θ\thetaθ,而不是需要首先将所有的训练集求和,在梯度下降算法还没有完成最后一次迭代时,随机梯度下降算法便已经走出很远。但是这样的算法存在的问题是,不是每一步都是朝着正确的方向迈出的。因此算法虽然会逐渐走向全局最小值,但是可能无法达到最小值的那一点,而是在最小值附近徘徊。下图所示是随机梯度下降算法和一般梯度下降算法的对比,红色的为一般梯度下降,紫色的为随机梯度下降。

3. 小批量梯度下降(Mini-Batch Gradient Descent)

小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的算法,每计算常数b次训练实例,便更新一次参数θ\thetaθ:

一般来说,b是介于2~100的数(通常是10),这么做的好处在于,我们可以用向量化的方法来循环b个训练实例,如果我们用的线性代数函数库比较好,能够支持平行处理,那么算法的总体表现将不受影响(与随机梯度下降相同)。如果b的值选择合适的话,Mini-Batch的方法的运行速度可能比批量梯度下降和随机梯度下降的速度更快。

4. 随机梯度下降收敛(Stochastic Gradient Descent Convergence)

这一部分我们介绍随机梯度下降算法的调试,以及学习率α\alphaα的选择。在批量梯度下降中,我们可以令代价函数J为迭代次数的函数,绘制图表,根据图表来判断梯度下降是否收敛。但是,在大规模的训练集的情况下,这是不现实的因为计算代价很大。
在随机梯度下降中,我们每一次更新θ\thetaθ之前都计算一次代价,然后每x次迭代后,求出这x次对训练实例计算代价的平均值,然后绘制这些平均值与x次迭代的次数之间的函数图表。

当我们绘制这样的图表时,可能会得到一个凹凸不平但是不会明显减少的函数凸显如上图左下蓝色线所示。我们可以增加α\alphaα来是的函数更加平缓,也许便能看出下降的趋势,如上图左下红色线所示。或者可能函数图表仍然是不平而且是不下降的,如上图左下洋红色线所示,这说明了我们的模型本身可能存在一些错误。如果我们得到的曲线如右下图所示的不断上升的,那么我们可能会需要选择一个较小的学习率。
我们也可以领学习率随着迭代次数的增加而减小,例如令:

随着我们不断地靠近全局最小值,通过减小学习率,我们使算法收敛而非在最小值附近徘徊。但是通常我们不需要这样做便能有非常好的小姑了,对学习率进行调整所耗费的计算通常是不值得的。

5. 在线学习(Online Learning)

这一部分讨论的一种新的大规模机器学习机制,称为在线机器学习。在很多大型网站上,都部署了很多在线学习机制算法,从大流量的用户数据中进行学习和模型训练。下面就举个例子来说明什么是在线学习:
假设有一个快递公司网站,用户可以访问网站然后选择快递的寄件地址和收件地址,网站会给出相应的快递运输的价格,用户有时会接受这个价格,这就是正样本,有时会拒绝这个价格然后走点,这是一个负样本,所以我们希望有一个学习算法能帮助我们根据这些样本来优化快递的服务价格。也就是说,对于每一个用户,网站希望能在不将数据存储到数据库中便顺利地进行算法学习,每增加一个用户,我们就根据这个样本来更新我们的模型,然后更新完毕,这个样本就被抛弃了,并不会存储起来,这就是在线学习机制。
假设我们正在经营一家快递公司,每当一个用户询问从A到B的快递费用时,我们给用户一个报价,该用户可能选择接受(y=1)或者拒绝(y=0)。现在我们希望构建一个模型,来预测用户接受报价使用我们的物流服务的可能性。因此报价是我们的一个特征,其他特征为距离,起始地点,目标地点以及特定的用户数据。模型的输出是:p(y=1)p(y=1)p(y=1)
在线学习的算法与随机梯度下降算法有些类似,我们对单一的实例进行学习,而非对一个提前定义的训练集进行循环:


从算法中可以看出,在线学习是对每一个新的数据进行学习,一旦学习完毕,就可以丢弃该数据,不需要存储它了。这种方式的好处在于,我们的算法可以很好的适应用户的倾向性,算法可以针对用户的当前行为不断地更新模型以适应该用户。这就是在线学习机制,我们所使用的这个算法与随机梯度下降算法非常类似,位移的区别是,我们不会使用一个固定的数据集,我们要做的是获取一个用户样本,从那个样本中学习,然后丢弃那个样本并继续下去,而且如果你对某一种应用有连续的数据流,在线学习算法非常适用。当然,在线学习的一个优点就是,如果你有一个变化的用户群,又或者你在尝试预测的事情在缓慢变化,就想你的用户品味在缓慢变化,这个在线学习算法可以慢慢地调试你所学习到的假设,将调节更新到最新的用户行为。

6. 映射化简和数据并行(Map Reduce and Data Parallelism)

映射化简和数据并行对于大规模数据机器学习而言是非常重要的概念。如果我们用批量梯度下降算法来对大规模数据进行求解,我们需要对整个训练集进行循环,计算偏导数和代价再求和,计算代价非常大。如果我们能够将我们的数据集分配给多台计算机,让每一台计算机处理数据集的一个子集,然后我们将计算的结果汇总在求和。这样的方法叫做映射简化。具体而言,如果任何机器学习算法能够表达为,对训练集的函数求和,那么就可以将这个任务分配给多个计算机,已达到加速处理的目的。
例如我们有400个训练实例,我们可以将批量梯度下降的求和任务分配给4台计算机进行处理:

很多高级的线性代数函数库已经能够利用多核CPU的多个核心来进行并行地处理矩阵运算,这也是算法的向量化实现如此重要的原因。

入门机器学习(二十一)--大规模机器学习(Large Scale Machine Learning)相关推荐

  1. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 17—Large Scale Machine Learning 大规模机器学习...

    Lecture17 Large Scale Machine Learning大规模机器学习 17.1 大型数据集的学习 Learning With Large Datasets 如果有一个低方差的模型 ...

  2. Machine Learning week 10 quiz: Large Scale Machine Learning

    Large Scale Machine Learning 5 试题 1. Suppose you are training a logistic regression classifier using ...

  3. 【机器学习】课程笔记16_大规模机器学习(Large Scale Machine Learning)

    大规模机器学习 大型数据集的学习(Laerning with Large Datasets) 随机梯度下降(Stochastic Gradient Descent) 小批量梯度下降(Mini-Batc ...

  4. Coursera在线学习---第十节.大规模机器学习(Large Scale Machine Learning)

    一.如何学习大规模数据集? 在训练样本集很大的情况下,我们可以先取一小部分样本学习模型,比如m=1000,然后画出对应的学习曲线.如果根据学习曲线发现模型属于高偏差,则应在现有样本上继续调整模型,具体 ...

  5. 机器学习系列:大规模机器学习(Large Scale Machine Learning)

    目录 1.大型数据集的学习 2.随机梯度下降法 3.小批量梯度下降 4.随机梯度下降收敛 1.大型数据集的学习 如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更好的结果.我们应该怎样应对一 ...

  6. Coursera公开课笔记: 斯坦福大学机器学习第十一课“机器学习系统设计(Machine learning system design)”

    Coursera公开课笔记: 斯坦福大学机器学习第十一课"机器学习系统设计(Machine learning system design)" 斯坦福大学机器学习斯坦福大学机器学习第 ...

  7. 运动控制器编程_快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一

    点击上方"正运动小助手",随时关注新动态! 运动控制器ZHMI组态编程简介一  今天我们来学习一下,运动控制器的ZHMI组态编程简介.本文主要从产品概述.控制器连接触摸屏使用.HM ...

  8. Bootstrap入门(二十一)组件15:警告框

    Bootstrap入门(二十一)组件15:警告框 通过这些简单.灵活的进度条,为当前工作流程或动作提供实时反馈. 进度条组件使用了 CSS3 的 transition 和 animation 属性来完 ...

  9. Large Scale Machine Learning--An Engineering Perspective--1. 大规模机器学习平台的构成

    机器学习/数据挖掘在各种业务场景中的应用已经非常之多了,在线广告/搜索/商品推荐/风险建模/图像处理/语音识别/机器翻译都是机器学习成功应用的典型case. 有效应用机器学习解决业务问题,在我看来依赖 ...

最新文章

  1. 《预训练周刊》第35期:零样本规划器的语言模型:为智能体提取可操作的知识、LaMDA:对话应用的语言模型...
  2. Java客户端操作elasticsearch--查询索引库
  3. Linux kernel 同步机制(下篇)
  4. mysql qps 索引查询_【MySQL】MySQL配置调优之 QPS/TPS/索引缓存命中率、innoDB索引缓存命中率、查询缓存命中率查看...
  5. 对天气数据进行简单的数据分析
  6. Flink DataStream 关联维表实战
  7. java ppt转图片 失真_Apache POI将PPT转换成图片实例代码
  8. android 动态仿磁贴,UWP开发:给App加上动态磁贴
  9. Java中的成员变量和局部变量
  10. MySql中的行锁和表锁的理解
  11. dotnet OpenXML 文本 Kerning 字间距的作用
  12. a href链接弹出新窗口的方法
  13. 中国电子驻车制动器(EPB)行业研究与投资预测报告(2022版)
  14. CF1244C The Football Season
  15. php试卷系统制作_php题库系统与试卷生成系统
  16. 文件管理工具,教你批量删除文件夹原名称并添加编号
  17. Help_SerialPort
  18. pycharm无限延长试用时间
  19. s7.net 写数据到plc_三个C#读写西门子PLC的类库
  20. 网站信息无障碍辅助工具

热门文章

  1. 用c语言的简单循环实现科拉茨猜想
  2. U8G2库使用(转载)
  3. js的 for forEach
  4. 解决HP laserjet Pro M401d打印机提示“ 将介质装入纸盒1,普通纸 信封C5或按OK使用可用介质”
  5. facebook游戏_Facebook的隐私游戏
  6. IT领域问题结构解析随笔
  7. jackson驼峰转下划线注解_springboot与web前端的下划线与驼峰的json转换配置
  8. 系统架构设计笔记(73)—— 政府信息化与电子政务
  9. 合成生物学背景下的先进发酵技术论坛
  10. 2022-2028年中国AEM橡胶行业市场全景评估及发展趋势研究报告