Machine Learning第十周笔记:大规模机器学习
博客已经迁移到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都有
当中的求和要进行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))的损失为
那么模型在training set上的损失函数变为
下图中给出了随机梯度下降的步骤。第一步要做的就是随机重排序你的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。计算公式例如以下:
当中const1和const2是固定值。iterationNumber是迭代次数(也就是θ的改进次数)。一个好的收敛过程应该是相似于下图这种:
Advanced Topics
最后两小节正在整理中,稍后上传
Online Learning
Map Reduce and Data Paralism
Machine Learning第十周笔记:大规模机器学习的更多相关文章
- Machine Learning第十一周笔记:photo OCR
博客已经迁移至Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完毕了Cousera上Machine Learning的最后一周课程.这周介绍了 ...
- Coursera 机器学习 第6章(下) Machine Learning System Design 学习笔记
Machine Learning System Design下面会讨论机器学习系统的设计.分析在设计复杂机器学习系统时将会遇到的主要问题,给出如何巧妙构造一个复杂的机器学习系统的建议.6.4 Buil ...
- 《Machine Learning Yearing》读书笔记
——深度学习的建模.调参思路整合. 写在前面 最近偶尔从师兄那里获取到了吴恩达教授的新书<Machine Learning Yearing>(手稿),该书主要分享了神经网络建模.训练.调节 ...
- [Machine Learning] 国外程序员整理的机器学习资源大全
本文汇编了一些机器学习领域的框架.库以及软件(按编程语言排序). 1. C++ 1.1 计算机视觉 CCV —基于C语言/提供缓存/核心的机器视觉库,新颖的机器视觉库 OpenCV—它提供C++, C ...
- 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 ...
- Machine Learning - 第3周(Logistic Regression、Regularization)
Logistic regression is a method for classifying data into discrete outcomes. For example, we might u ...
- 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 ...
- 斯坦福大学公开课机器学习:advice for applying machine learning | diagnosing bias vs. variance(机器学习:诊断偏差和方差问题)
当我们运行一个学习算法时,如果这个算法的表现不理想,那么有两种原因导致:要么偏差比较大.要么方差比较大.换句话说,要么是欠拟合.要么是过拟合.那么这两种情况,哪个和偏差有关.哪个和方差有关,或者是不是 ...
- 《Structuring Machine Learning Projects》课堂笔记
Lesson 3 Structuring Machine Learning Projects 这篇文章其实是 Coursera 上吴恩达老师的深度学习专业课程的第三门课程的课程笔记. 参考了其他人的笔 ...
随机推荐
- elasticsearch term 查询二:Range Query
Range Query 将文档与具有一定范围内字词的字段进行匹配. Lucene查询的类型取决于字段类型,对于字符串字段,TermRangeQuery,对于数字/日期字段,查询是NumericRang ...
- druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)
介绍 我是NDPmedia公司的大数据OLAP的资深高级工程师, 专注于OLAP领域, 现将一个成熟的可靠的高性能的海量实时OLAP数据仓库介绍给大家: druid.io NDPmedia在2014年 ...
- 解决防火墙限制远程连接MySQL(导致错误10060可能之一)
打开windows防火墙,打开高级设置 1. 入站规则设置 ① 选择入站规则,然后新建规则,选择端口,然后下一步 ② 选择TCP,选择特定端口,然后输入端口,如有多个端口需要用逗号隔开了 例如: 33 ...
- javascript http库axios
还是那个开源项目中的代码看到的: 直接看axios官方的介绍吧,里面的用法介绍很全: https://github.com/mzabriskie/axios Installing Using npm: ...
- Django——如何使用Template以及如何向template传递变量
如何使用模板系统 在Python代码中使用Django模板的最基本方式如下: 可以用原始的模板代码字符串创建一个 Template 对象, Django同样支持用指定模板文件路径的方式来创建 Temp ...
- 浅谈Android移动开发程序员的职业发展之路
现在几乎每个it公司都在开发移动产品,我最早知道Android还是在09年成都某学院上大学的时候,从新闻上知道有这么一家公司,创始人安迪·鲁宾很有名,但安卓到底是做什么的,我并没有关注. 到2010年 ...
- 【Python3 爬虫】15_Fiddler抓包分析
我们要抓取一些网页源码看不到的信息,例如:淘宝的评论等 我们可以使用工具Fiddler进行抓取 软件下载地址:https://pan.baidu.com/s/1nPKPwrdfXM62LlTZsoiD ...
- SSH 基于ajax实现修改密码功能步骤梳理
1. 为密码输入框进行输入校验,使用easyUI提供的easyui-validatebox <table cellpadding=3> <tr> <td>新密码:& ...
- ASP.NET MVC传递Model到视图的多种方式总结
ASP.NET MVC传递Model到视图的多种方式总结 有多种方式可以将数据传递到视图,如下所示: ViewData ViewBag PartialView TempData ViewModel T ...
- chrome 非安全模式解决开发跨域问题
这个参数可以降低chrome浏览器的安全性,禁用同源策略,利于开发人员本地调试. ps:如果是mac用户(记得 Command + Q 关闭chrome): open -a Google\ Chro ...