博客已经迁移到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,000的数据库。那么在做Gradient descent时。对于每个θj都有

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

当中的求和要进行m=100,000,000次,假设模型中有n=1000个特征,进行一次迭代的计算量将是O(1011),整个算法的训练将耗费大量的时间。如今我们使用training set的一个非常小的子集去训练模型。看看这样是否会收到好的效果。下图中给出了Jtrain(θ)和Jcv(θ)随m取值变化的图像,假设在小的子集上训练得来的Jcv(θ)比Jtrain(θ)还大得多。那增大training set会继续改善模型;假设在小的子集上得来的Jcv(θ)和Jtrain(θ)已经基本相当,那我们就没有必要再去增大training set了。

(详细原因可查看第六周的bias-variance)

Stochastic Gradient Descent

以线性回归的梯度下降过程为例来介绍随机梯度下降(stochastic gradient descent)。

下图给出了线性回归的hypothesis、损失函数和梯度下降过程:

如今面临的问题是。m值得特别大导致θj的每一次更新须要花费高昂的计算开销和内存开销,并且往往须要递归非常多次才干得到一个好的hypothesis。比如。m=300,000,000(美国人口的数量),计算一次θj就须要300,000,000次的加减运算。

我们将这种原始梯度下降法称为批量梯度下降(batch gradient descent)。

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

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

那么模型在training set上的损失函数变为

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

下图中给出了随机梯度下降的步骤。第一步要做的就是随机重排序你的training set。第二步就是迭代,迭代的内容是依次在每个个数据点上改进參数θ。注意。此处与批量梯度下降的不同在于。批量梯度下降的參数θ的每次改进都是在全部的数据点上,而随机梯度下降的參数θ的每次改进则是在一个数据点上的。区别在于,批量梯度下降的每次改进都是基于整个training set做的,因此每次改进都是奔着全局最优去的,但计算开销太大;而随机梯度下降的每次改进是基于某个数据点做的。计算开销小,不能保证每次改进都是奔着全局最优去的,但整体方向仍然是全局最优。下图右側图中有两种方式的迭代路线示意,批量梯度下降是红色所看到的(大半被遮住了)。直奔全局最优;而随机梯度下降是粉色所看到的,可能要经过非常多次參数改进(没关系。每次更新代价小,事实上更快)才干达到最优。

整体来讲。随机梯度下降比較快,且精度不比批量梯度下降差。

Mini-Batch Gradient Descent

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

Stochastic Gradient Descent Convergence

折一小节我们来介绍推断随机梯度下降是否收敛的技巧。

前面我们说用cost(θ,(x(i),y(i)))来表示hypothesis在数据点(x(i),y(i))处的损失,如今我们计算随机梯度下降每改进θ1000次(用到了1000个数据点),hypothesis在这1000个数据点上平均损失,然后观察其变化情况。下图给出了这个平均损失随迭代次数的变化情况。左上的图像中蓝色线和红色线分别表示一个大的learning rate和一个小的learning rate对这个θ每改进1000次的平均损失变化的影响。

右上的图像中蓝色线和红色线分别表示θ每改进1000次计算一次平均损失和θ每改进5000次计算一次平均损失的区别(5000的相应的图像更平滑)。

左下图像的蓝色线表示θ每改进1000次计算一次的平均损失随迭代次数的变化情况,此时我们发现算法好像不收敛,改成θ每改进5000次计算一次平均损失,再绘制图像(图中红色线)可能就会发现。算法在慢慢收敛。若发现更改后图像如图中粉色线所看到的,那说明这个算法应该不适用,我们须要考虑其它的算法了。

假设图像如右下所看到的。呢就应该换一个小的learning rate。

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

α=const1iterationNumber+const2

当中const1和const2是固定值。iterationNumber是迭代次数(也就是θ的改进次数)。一个好的收敛过程应该是相似于下图这种:

Advanced Topics

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

Online Learning

Map Reduce and Data Paralism

Machine Learning第十周笔记:大规模机器学习的更多相关文章

  1. Machine Learning第十一周笔记:photo OCR

    博客已经迁移至Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完毕了Cousera上Machine Learning的最后一周课程.这周介绍了 ...

  2. Coursera 机器学习 第6章(下) Machine Learning System Design 学习笔记

    Machine Learning System Design下面会讨论机器学习系统的设计.分析在设计复杂机器学习系统时将会遇到的主要问题,给出如何巧妙构造一个复杂的机器学习系统的建议.6.4 Buil ...

  3. 《Machine Learning Yearing》读书笔记

    ——深度学习的建模.调参思路整合. 写在前面 最近偶尔从师兄那里获取到了吴恩达教授的新书<Machine Learning Yearing>(手稿),该书主要分享了神经网络建模.训练.调节 ...

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

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

  5. Machine Learning - 第6周(Advice for Applying Machine Learning、Machine Learning System Design)

    In Week 6, you will be learning about systematically improving your learning algorithm. The videos f ...

  6. Machine Learning - 第3周(Logistic Regression、Regularization)

    Logistic regression is a method for classifying data into discrete outcomes. For example, we might u ...

  7. 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 ...

  8. 斯坦福大学公开课机器学习:advice for applying machine learning | diagnosing bias vs. variance(机器学习:诊断偏差和方差问题)

    当我们运行一个学习算法时,如果这个算法的表现不理想,那么有两种原因导致:要么偏差比较大.要么方差比较大.换句话说,要么是欠拟合.要么是过拟合.那么这两种情况,哪个和偏差有关.哪个和方差有关,或者是不是 ...

  9. 《Structuring Machine Learning Projects》课堂笔记

    Lesson 3 Structuring Machine Learning Projects 这篇文章其实是 Coursera 上吴恩达老师的深度学习专业课程的第三门课程的课程笔记. 参考了其他人的笔 ...

随机推荐

  1. Spark(二) -- Spark简单介绍

    spark是什么? spark开源的类Hadoop MapReduce的通用的并行计算框架 spark基于map reduce算法实现的分布式计算 拥有Hadoop MapReduce所具有的优点 但 ...

  2. 搭建MongoDB分片集群

    在部门服务器搭建MongoDB分片集群,记录整个操作过程,朋友们也可以参考. 计划如下: 用5台机器搭建,IP分别为:192.168.58.5.192.168.58.6.192.168.58.8.19 ...

  3. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-人机界面快速入门 TC3

    右击添加一个PLC项,注意不要用中文   右击VISUs,添加一个视图对象   在POUs中打开MAIN,然后添加代码(定义了一个BOOL和一个INT类型变量)   工具箱中得到一个textfield ...

  4. HDFS主要节点解说(一)节点功能

    1 HDFS体系结构简单介绍及优缺点 1.1体系结构简单介绍  HDFS是一个主/从(Mater/Slave)体系结构.从终于用户的角度来看,它就像传统的文件系统一样,能够通过文件夹路径对文件运行CR ...

  5. Java IO操作:合并流

    合并流:把两个文件合并在一起. 主要操作的是内容. 定义: public class SequenceInputStreamextends InputStream 方法摘要: 操作步骤: 1,分别建立 ...

  6. LoadRunner监控tomcat

    LoadRunner监控tomcat (2012-10-25 14:01:42)转载▼ double atof (const char * string);Action(){    // 保存JVM内 ...

  7. 深入理解Tomcat虚拟文件夹

        我们知道,Web站点中的内容(包含网页,图片,音频文件等)一般都存放在App的文件夹下.但随着站点内容的不断丰富,用户须要把不同层次的内容组织成站点的子文件夹. 我们通常的做法是在站点主文件夹 ...

  8. jQuery.Validate常用的一些规则

    // 手机号码验证 jQuery.validator.addMethod("mobile", function(value, element) { var length = val ...

  9. GitExtensions工具安装与配置

    GitExtensions工具使用教程 第一步:安装 1.双击:GitExtensions24703SetupComplete.msi <ignore_js_op>  <ignore ...

  10. unity, 烘焙lightmap

    1,建一个名为_scene的场景,放一个球体. 2,将球体的Static属性勾选. 3,将默认光源Directional light的Baking属性改为Baked. 4,打开Window->L ...