博客已经迁移到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. Android实现二维码扫描登录网页

        之前写过一个二维码扫描demo,用的Zxing的框架,点击下载.兴许扫描二维码中出现一些问题,比方解决压缩图片.调整扫描窗体大小等等. 兴许单位要求做扫描登录实现,发现难点就是怎么知道你扫描的 ...

  2. PHP Xdebug调试专题

    1.介绍与安装 Xdebug是一个PHP扩展,安装配置好后,可以自动记录运行了哪些函数,用了多少毫秒,从哪个文件运行到哪个文件等等 它记下来的调试信息很详细,对一些复杂程序跟踪调试有很大的辅助效果,能 ...

  3. 【HTTPS双向加密认证】

    HTTPS单向认证和双向认证 nearzk-osc 发布时间: 2015/07/30 15:27 阅读: 4177 收藏: 178 点赞: 6 评论: 3 一.背景&概念 HTTPS:在htt ...

  4. 使RESTful Web服务更加实用的10个建议

    提示:随着RESTful Web services的流行程度不断地上升,开发人员需要知道如何避免开发中的陷阱以及让开发出来的Web service达到自己能做到的最好程度. 过去的几年里,我们看到RE ...

  5. webpack入门学习总结

    <h5概述</h5> webpack是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分 ...

  6. apache添加mod_limitipconn限制单个ip并发连接数

    一.基本 官网:http://dominia.org/djao/limitipconn2.html 二.安装 1.下载#wget http://dominia.org/djao/limit/mod_l ...

  7. scrollBy 相对滚动

    scrollBy可以相对当前位置移动滚动条,而不是移动到绝对位置 scrollBy(0, 100); // 滚动条下移100px

  8. Genymotion 在win10 下的安装

    首先我在Genymotion官网上并没有找到他的安装程序.据说是在注冊后,通过邮件里的链接下载,结果也没有看到.最后详细在哪下的,忘了收藏.我下的是 genymotion-2.5.3-vbox.exe ...

  9. GCM与C2DM相比有什么不同

    eoe介绍:http://wiki.eoe.cn/page/Migration.html 官方地址:http://developer.android.com/google/gcm/c2dm.html

  10. 人工智能: 自动寻路算法实现(四、D、D*算法)

    博客转载自:https://blog.csdn.net/kongbu0622/article/details/1871520 据 Drew 所知最短路经算法现在重要的应用有计算机网络路由算法,机器人探 ...