本博客是针对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. Runtime常见使用

    一些语法 更改对象的类/获取对象的类 1234 CustomClass *class1 = [[CustomClass alloc]init];Class aclass =object_setClas ...

  2. FPGA小白学习之路(1) System Verilog的概念以及与verilog的对比(转)

    转自CSDN:http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证 ...

  3. 使用Navicat或者其他数据库工具连接阿里云EDS(数据库服务器)实例过程详解

    使用Navicat或者其他数据库工具连接阿里云EDS(数据库服务器)实例过程详解 背景:这几天从阿里云上面购买了云服务器,最垃圾的那种,还送oss和EDS数据库服务器,只不过EDS数据库服务器只有一个 ...

  4. JavaScript实现栈结构(Stack)

    JavaScript实现栈结构(Stack) 一.前言 1.1.什么是数据结构? 数据结构就是在计算机中,存储和组织数据的方式. 例如:图书管理,怎样摆放图书才能既能放很多书,也方便取? 主要需要考虑 ...

  5. c语言之学生管理系统

    0x00 学生管理系统 说到学生管理系统,对于每一个初学c语言的人都是一道不得不过的砍.不过,学习c,我觉得每个人都应该写一个学生管理系统,至于为什么,我想倘若连一个学生管理系统都写不好,哪么他的c是 ...

  6. 微信小程序接入百度OCR(身份证识别)

    微信小程序接入百度OCR(身份证识别) 1.接口描述 支持对二代居民身份证正反面所有8个字段进行结构化识别,包括姓名.性别.民族.出生日期.住址.身份证号.签发机关.有效期限,识别准确率超过99%:同 ...

  7. linux 读取 USB HID鼠标坐标和点击 在 LCD上显示

    首先要,编译内核时启用了 USB HID 设备.启用了 鼠标 . 在开发板上插入usb 时会有如下提示. 可以看到,多了一个 mouse0 和 eventX 打出来的是我的 联想鼠标. 1, 在 终端 ...

  8. golang 学习之路 string转换为其他类型 其他类型转换为string

    将其他值转换为string 一般常用fmt.Sprintf(格式,转换的值) // 使用fmt.Sprintf 转换所有的类型为string 使用 这是第一种 // 注意在sprintf使用中需要注意 ...

  9. MATLAB中的Regex

    regexprep——用于对字符串进行查找并替换. regexp Definition: 用于对字符串进行查找,大小写敏感. startIndex = regexp(str,expression) 返 ...

  10. Vue2.0 【第一季】第5节 v-on:绑定事件监听器

    目录 Vue2.0 [第一季] 第5节 v-on:绑定事件监听器 第五节 v-on:绑定事件监听器 一.使用绑定事件监听器,编写一个加分减分的程序. Vue2.0 [第一季] 第5节 v-on:绑定事 ...