本博客是针对Andrew Ng在Coursera上的machine learning课程的学习笔记。


在大数据集上进行学习(Learning with Large Data Sets)

由于机器学习系统的性能表现往往要求其算法是low biased(在训练集上的训练误差小),并且在尽可能大的数据集上做训练。

It's not who has the best algorithm that wins. It's who has the most data.

比如对于一般线性回归或者logistic回归,有如图的参数迭代更新的公式,假设我们如果有一百万个训练样本(m=100,000,000),则每一次更新参数都需要做一百万次的加和,那么计算量就很大。另外,对于high bias的算法学习曲线(如下图的靠右图),此时增加样本数量也不太可能减少误差,可能合适地增加输入特征才是更有效的。而如左边的情况high variance,用更大的数据集是更有效的。

随机梯度下降(Stochastic Gradient Descent)

由于之前讲的梯度下降(又称Batch Gradient Descent)在样本量大时计算量非常大,更新速度会很慢,为了避免这个问题,我们可以采用随机梯度下降。

具体做法是:我们不再在对参数进行更新时遍历加总所有样本的误差值,而是每次迭代更新从中只随机选取一个样本进行误差计算,(本质是先将数据集打乱,再逐一进行参数学习,但还是要对所有的样本进行一次遍历),因此保证了参数是在快速地向全局最优解靠近的(但可能由于样本选取的随机性,导致梯度下降的方向并不是那么稳定地向全函数最小值处行进,相当于是牺牲稳度换取速度)。

因此相对于batch GD,stochastic GD可以在很多时候实现更高效地学习。因为stochastic GD每次迭代更新参数,都只需要用到一个样本,而遍历整个样本的轮数可能进行1-10次后就能获得非常好的假设了,而batch GD是每一次更新一个参数都需要遍历整个数据集,那么每次迭代都要用到m个样本。

小堆梯度下降(Mini-Batch Gradient Descent)

小堆梯度下降有时候可以比随机梯度下降速度更快!

小堆梯度下降其实就是将随机梯度下降中只用一个样本进行每轮迭代的做法,变成了用b个样本进行每轮迭代(此之谓mini-batch,因为每轮迭代用到的样本数量在1-m之间)。

而什么时候小堆GD效率会比随机GD高呢?那就是我们有比较好的vectorization的计算实现时。

保证随机GD的收敛与学习速率的选择

如何知道我们的GD算法在像收敛的方向运行?

  • 在Batch GD中,我们是画损失函数和GD迭代次数的图像。
  • 在Stochastic GD中,我们可以在固定的迭代次数后,画成本函数的在这些迭代上的平均值

下图中蓝色线代表较大的学习速率$\alpha$,红色代表较小的学习速率(每次迭代参数更新的幅度更小)。四幅图代表了stochastic GD的图像可能出现的情况。

上面两幅图的区别是画图的采样点的频率不同,左上方的图是画每迭代1000次的成本函数,右上方的图每迭代5000次的平均成本函数图像。由于分母变大,分子相对变化较小,因此迭代次数高的函数图像更平稳。

下面两幅图也是可能出现的情况。左下方的图蓝色的线是由于学习速率过大,不稳定,应该调小学习速率。而右下方的图则是曲线上扬,说明学习速率太大,算法发散了,也需要调小学习速率。

可以让学习速率随着迭代次数增加而减少,以保证逐渐稳定地收敛到最优解。

在线学习(Online Learning)

在很多机器学习运行的系统中,很多学习数据是不断在产生的,如何可以让系统随着数据的涌入保持学习,而不是只能获得一次性用固定数据训练的模型,以获得更优的性能,就是在线学习所要解决的问题。

给定以下一个快递服务网站的情形:

如图所示,在线学习系统在每次有新的数据产生(一个用户访问了网站,并给出是否使用快递服务的决策)时,系统都会对参数进行一次更新。

另一个例子:电商网站的产品搜索。

Map Reduce 和 数据并行化

有时候,数据集太大,如果只在一台主机上运行,可能很久才能获得结果,于是我们希望可能用尽量少的时间获得好的结果。

首先来看map-reduce的做法:将数据集按照我们手头拥有的计算资源的数量,即我们可以用来运行机器学习算法的主机的数量平均分配。然后,每个主机利用分配给它那部分的样本运行算法,去计算损失函数的偏导数值,并获得一个属于该主机的结果$temp^{(i)}_j$。最后,将所有主机的结果结合在一起,用来对参数做更新。

而很多机器学习算法本质就是对训练集上进行和加总的一些计算。

而其实不是只有多台主机才能实现并行化,在一台多核的主机上也可以进行,做法和多主机的情况是类似的。而且在这种情况下,有一个好处是,不需要担心因为网络延迟导致的数据传输缓慢等问题,而这是多主机并行化可能会面对的问题。

大规模机器学习(Large Scale Machine Learning)的更多相关文章

  1. [C12] 大规模机器学习(Large Scale Machine Learning)

    大规模机器学习(Large Scale Machine Learning) 大型数据集的学习(Learning With Large Datasets) 如果你回顾一下最近5年或10年的机器学习历史. ...

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

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

  3. 斯坦福第十七课:大规模机器学习(Large Scale Machine Learning)

    17.1  大型数据集的学习 17.2  随机梯度下降法 17.3  微型批量梯度下降 17.4  随机梯度下降收敛 17.5  在线学习 17.6  映射化简和数据并行 17.1  大型数据集的学习

  4. Ng第十七课:大规模机器学习(Large Scale Machine Learning)

    17.1  大型数据集的学习 17.2  随机梯度下降法 17.3  微型批量梯度下降 17.4  随机梯度下降收敛 17.5  在线学习 17.6  映射化简和数据并行 17.1  大型数据集的学习 ...

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

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

  6. Lessons learned developing a practical large scale machine learning system

    原文:http://googleresearch.blogspot.jp/2010/04/lessons-learned-developing-practical.html Lessons learn ...

  7. (原创)Stanford Machine Learning (by Andrew NG) --- (week 10) Large Scale Machine Learning & Application Example

    本栏目来源于Andrew NG老师讲解的Machine Learning课程,主要介绍大规模机器学习以及其应用.包括随机梯度下降法.维批量梯度下降法.梯度下降法的收敛.在线学习.map reduce以 ...

  8. 吴恩达机器学习笔记60-大规模机器学习(Large Scale Machine Learning)

    一.随机梯度下降算法 之前了解的梯度下降是指批量梯度下降:如果我们一定需要一个大规模的训练集,我们可以尝试使用随机梯度下降法(SGD)来代替批量梯度下降法. 在随机梯度下降法中,我们定义代价函数为一个 ...

  9. 吴恩达机器学习笔记(十一) —— Large Scale Machine Learning

    主要内容: 一.Batch gradient descent 二.Stochastic gradient descent 三.Mini-batch gradient descent 四.Online ...

随机推荐

  1. SpringBoot(七)-SpringBoot JPA-Hibernate

    步骤 1.在pom.xml添加mysql,spring-data-jpa依赖2.在application.properties文件中配置mysql连接配置文件3.在application.proper ...

  2. 谈谈Vue的递归组件

    2月最后一天,而且还四年一遇,然而本月居然一篇博客没写,有点说不过去.所以,今天就来谈谈Vue的递归组件.我们先来看一个例子: See the Pen 递归组件 by imgss (@imgss) o ...

  3. 【原创】(三)Linux进程调度器-进程切换

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  4. 使用HtmlAgilityPack和ScrapySharp抓取网页数据遇到的几个问题解决方法——格式编码问题

    需要用到对应市区县街道居委会的区域编码,于是找到统计局的网页,对这些数据进行抓取,用到了HtmlAgilityPack和ScrapySharp,由于也是第一次从网页抓取数据,所以对于HtmlAgili ...

  5. MVC08

    1. c# 索引器(indexer) using System; using System.IO; namespace IO { class Program { ]; static void Main ...

  6. JS基础入门篇(十二)—JSON和Math

    1.JSON JSON: 对象格式的字符串 轻量的数据传输格式 注意事项: 键名 需要 使用 双引号 包起来 JOSN有两个方法:JSON.parse和 JSON.stringify. JSON.pa ...

  7. Codeforces Round #295 (Div. 2) B. Two Buttons 520B

    B. Two Buttons time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  8. NetAnalyzer笔记 之 十一 打造自己的协议分析语言(1)初衷与语法构想

    回头看看NetAnalyzer开发系文档上次一篇竟然是2016年,老脸一红.不过这几年墨云成功过的讨到一个温柔贤淑的老婆,有了一个幸福的家庭,去年9月又有了一个大胖儿子,想想也就释然了^_^ 其实这几 ...

  9. javascript入门进阶(一)

    javascript 入门进阶 这里主要讲解一下在入门阶段很难注意的一些知识点,不一定有用.但是会了总比不会强. 1.HTML为<script>标签准备的6个属性: -async:可选.表 ...

  10. HTTPS 笔记

    随着互联网的迅速发展,网络安全问题日益凸显,现在 Chrome 浏览器已经开始阻止非 https 网站的访问了.对于 https 的流程一直不是十分清晰,借着还没有完全复工有时间,大概画了个图总结一下 ...