博客已经迁移到Marcovaldo’s blog (http://marcovaldong.github.io/)

刚刚完成了Andrew Ng在Cousera上的Machine Learning的第十周课程,这周主要介绍的是大规模机器学习,现将笔记整理在下面。

Gradient Descent with Large Datasets

Learning With Large Datasets

在前面介绍bias-variance的时候,我们曾提到一个比较各种算法孰优孰劣的实验,结论是”it’s not who has the best algorithm that wins, it’s who has the most data.”但处理大规模的数据库时往往面临着计算问题。假设有一个数据量m=100,000,000m=100,000,000的数据库,那么在做Gradient descent时,对于每一个θj\theta_j都有

θj:=θj−α1m∑i=1m(hθ(x(i))−y(i))x(i)j

\theta_j:=\theta_j - \alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)}
其中的求和要进行 m=100,000,000m=100,000,000次,如果模型中有 n=1000n=1000个特征,进行一次迭代的计算量将是 O(1011)O(10^11),整个算法的训练将耗费大量的时间。现在我们使用training set的一个很小的子集去训练模型,看看这样是否会收到好的效果。下图中给出了 Jtrain(θ)J_{train}(\theta)和 Jcv(θ)J_{cv}(\theta)随m取值变化的图像,如果在小的子集上训练得来的 Jcv(θ)J_{cv}(\theta)比 Jtrain(θ)J_{train}(\theta)还大得多,那增大training set会继续改善模型;如果在小的子集上得来的 Jcv(θ)J_{cv}(\theta)和 Jtrain(θ)J_{train}(\theta)已经基本相当,那我们就没有必要再去增大training set了。(具体原因可查看第六周的bias-variance)

Stochastic Gradient Descent

以线性回归的梯度下降过程为例来介绍随机梯度下降(stochastic gradient descent)。下图给出了线性回归的hypothesis、损失函数和梯度下降过程:

现在面临的问题是,m值得特别大导致θj\theta_j的每一次更新需要花费高昂的计算开销和内存开销,而且往往需要递归很多次才能得到一个好的hypothesis。例如,m=300,000,000m=300,000,000(美国人口的数量),计算一次θj\theta_j就需要300,000,000次的加减运算。我们将这样的原始梯度下降法称为批量梯度下降(batch gradient descent)。

在随机梯度下降中,我们定义模型在数据点(x(i)x^{(i)},y(i)y^{(i)})的损失为

cost(θ,(x(i),y(i)))=12(hθ(x(i))−y(i))2

cost(\theta,(x^{(i)},y^{(i)})) = \frac{1}{2}(h_{\theta}(x^{(i)}) - y^{(i)})^2
那么模型在training set上的损失函数变为

Jtrain(θ)=1m∑i=1mcost(θ,(x(i),y(i)))

J_{train}(\theta) = \frac{1}{m}\sum_{i=1}^{m}cost(\theta,(x^{(i)},y^{(i)}))
下图中给出了随机梯度下降的步骤。第一步要做的就是随机重排序你的training set。第二步就是迭代,迭代的内容是依次在每个个数据点上改进参数 θ\theta。注意,此处与批量梯度下降的不同在于,批量梯度下降的参数 θ\theta的每次改进都是在所有的数据点上,而随机梯度下降的参数 θ\theta的每次改进则是在一个数据点上的。差别在于,批量梯度下降的每次改进都是基于整个training set做的,因此每次改进都是奔着全局最优去的,但计算开销太大;而随机梯度下降的每次改进是基于某个数据点做的,计算开销小,不能保证每次改进都是奔着全局最优去的,但总体方向仍然是全局最优。下图右侧图中有两种方式的迭代路线示意,批量梯度下降是红色所示(大半被遮住了),直奔全局最优;而随机梯度下降是粉色所示,可能要经过很多次参数改进(没关系,每次更新代价小,其实更快)才能达到最优。总体来讲,随机梯度下降比较快,且精度不比批量梯度下降差。

Mini-Batch Gradient Descent

前面我们提到,批量梯度下降对参数θ\theta的每次改进都是基于整个training set做的,而随机梯度下降对参数的改进都是基于某一个数据点做的。那么,我们为什么不可以做一个折中呢?这就引出了mini-batch gradient descent,其对θ\theta的改进是在b(b=2~100)个数据点上做的,这样既保证每次改进基本上都是向着全局最优的方向,又有了比较快的速度。下图给出了在一个m=1000的training set上做mini-btach gradient descent的过程:

Stochastic Gradient Descent Convergence

折一小节我们来介绍判断随机梯度下降是否收敛的技巧。前面我们说用cost(θ,(x(i),y(i)))cost(\theta,(x^{(i)},y^{(i)}))来表示hypothesis在数据点(x(i),y(i))(x^{(i)},y^{(i)})处的损失,现在我们计算随机梯度下降每改进θ\theta1000次(用到了1000个数据点),hypothesis在这1000个数据点上平均损失,然后观察其变化情况。下图给出了这个平均损失随迭代次数的变化情况。左上的图像中蓝色线和红色线分别表示一个大的learning rate和一个小的learning rate对这个θ\theta每改进1000次的平均损失变化的影响。右上的图像中蓝色线和红色线分别表示θ\theta每改进1000次计算一次平均损失和θ\theta每改进5000次计算一次平均损失的区别(5000的对应的图像更平滑)。左下图像的蓝色线表示θ\theta每改进1000次计算一次的平均损失随迭代次数的变化情况,此时我们发现算法好像不收敛,改成θ\theta每改进5000次计算一次平均损失,再绘制图像(图中红色线)可能就会发现,算法在慢慢收敛。若发现更改后图像如图中粉色线所示,那说明这个算法应该不适用,我们需要考虑其他的算法了。如果图像如右下所示,呢就应该换一个小的learning rate。

另外,在随机梯度下降的过程中,我们可以使用一个变化的learning rate,计算公式如下:

α=const1iterationNumber+const2

\alpha = \frac{const1}{iterationNumber + const2}
其中const1和const2是固定值,iterationNumber是迭代次数(也就是 θ\theta的改进次数)。一个好的收敛过程应该是类似于下图这样的:

Advanced Topics

最后两小节正在整理中,稍后上传

Online Learning

Map Reduce and Data Paralism

Machine Learning第十周笔记:大规模机器学习相关推荐

  1. Machine Learning第六周笔记一:评估学习算法和bias/variance

    博客已经迁移到Marcovaldo's bolg (http://marcovaldong.github.io/) 入坑机器学习近一个月,学习资料主要是李航的<统计学习方法>.Peter ...

  2. Machine Learning:十大机器学习算法

    转载自 Machine Learning:十大机器学习算法 摘要: - 机器学习算法分类:监督学习.无监督学习.强化学习 - 基本的机器学习算法:线性回归.支持向量机(SVM).最近邻居(KNN).逻 ...

  3. Machine Learning in Action 读书笔记---第5章 Logistic回归

    Machine Learning in Action 读书笔记 第5章 Logistic回归 文章目录 Machine Learning in Action 读书笔记 一.Logistic回归 1.L ...

  4. Machine Learning in Action 读书笔记---第3章 决策树

    Machine Learning in Action 读书笔记 第3章 决策树 文章目录 Machine Learning in Action 读书笔记 一.决策树算法简介 1 决策树的构造 2 决策 ...

  5. Machine Learning in Action 读书笔记---第4章 基于概率论的分类方法:朴素贝叶斯

    Machine Learning in Action 读书笔记 第4章 基于概率论的分类方法:朴素贝叶斯 文章目录 Machine Learning in Action 读书笔记 一.基于贝叶斯决策理 ...

  6. Machine Learning in Action 读书笔记---第8章 预测数值型数据:回归

    Machine Learning in Action 读书笔记 第8章 预测数值型数据:回归 文章目录 Machine Learning in Action 读书笔记 一.回归 1.回归的一般过程 2 ...

  7. [Machine learning] 国外程序员整理的机器学习资源大全

    阅读目录 本文汇编了一些机器学习领域的框架.库以及软件(按编程语言排序). 1. C++ 1.1 计算机视觉 CCV -基于C语言/提供缓存/核心的机器视觉库,新颖的机器视觉库 OpenCV-它提供C ...

  8. 吴恩达机器学习(十五)大规模机器学习(Batch、Stochastic、Mini-batch gradient descent、MapReduce)

    目录 0. 前言 1. Stochastic Gradient Descent 2. Mini-batch Gradient Descent 3. MapReduce 4. 在线学习(online l ...

  9. Machine Learning – 第2周(Linear Regression with Multiple Variables、Octave/Matlab Tutorial)

    Machine Learning – Coursera Octave for Microsoft Windows GNU Octave官网 GNU Octave帮助文档 (有900页的pdf版本) O ...

最新文章

  1. RabbitMQ 入门系列(6)— 如何保证 RabbitMQ 消息不丢失
  2. 长文总结半监督学习(Semi-Supervised Learning)
  3. C++中关于类中常数静态成员初始化的问题
  4. python绘图turtle小猪_turtle作图:用turtle画一个小猪佩奇(详解!)
  5. 十四个方法提高博客的页面访问量
  6. 如何判断一个new出来的空对象
  7. Windows下开发Perl程序之环境搭建
  8. 升级glic: 解决“libc.so.6: version ‘GLIBC_2.14‘ not found“问题
  9. python中使用函数的优点_在python中使用自定义初始化函数而不是`__init__`的好处...
  10. 100个Java实战项目视频+代码+笔记
  11. 学生成绩管理系统mysql课程设计_数据库课程设计报告-学生成绩管理系统
  12. 去除wmv等视频认证的方法
  13. 芯片技术---芯片到底是什么?
  14. 面试阿里,看这一篇就够了!
  15. MapReduce经典案例-TopN
  16. MATLAB-1: 线性拟合(r2、系数和系数误差)
  17. 2018-10-20-C#-从零开始写-SharpDx-应用-初始化dx修改颜色
  18. 要成功,就要对自己狠心
  19. Notepad++下载与安装教程
  20. Proe Creo 二次开发之模型装配--在指定位置插入模型

热门文章

  1. 如何创建.babelrc文件
  2. oracle新增id怎么写,oracle插入数据时自增ID的解决思路
  3. saltstack入门教程精华案例
  4. 高德地图jsapi marker.markOnAMAP报错
  5. linux内核映射一个页,固定映射地址和 ioremap
  6. 苹果x漫画脸_新一代五十铃mu-X中型SUV首发
  7. STM32 待机模式 和 停止模式 RTC闹钟调试笔记
  8. js获取浏览器宽度高度(整理)
  9. JVM垃圾回收器 七种经典垃圾回收器
  10. 关于 byte 的范围