Machine Learning第十周笔记:大规模机器学习

刚刚完成了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

时间: 2024-10-12 15:53:27

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

Machine Learning第八周笔记

刚刚完成了Machine Learning第八周的课程,这一周主要介绍了K-means和降维,现将笔记整理在下面. Unsupervised Learning Clustering Unsupervised Learning: Introduction 今天我们开始介绍无监督式学习(unsupervised learning).下面两张图分别代表典型的有监督式学习和无监督式学习.一个典型的有监督式学习是从一个有标记的训练数据集出发(图中的两类数据点分别用圈圈和叉叉表示,圈圈一类,叉叉一类),目标

Machine Learning第十一周笔记:photo OCR

博客已经迁移至Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完毕了Cousera上Machine Learning的最后一周课程.这周介绍了machine learning的一个应用:photo OCR(optimal character recognition,光学字符识别),以下将笔记整理在以下. Photo OCR Problem Description and Pipeline 最后几小节介绍机器学习的一个应用--photo O

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

本文汇编了一些机器学习领域的框架.库以及软件(按编程语言排序). 1. C++ 1.1 计算机视觉 CCV —基于C语言/提供缓存/核心的机器视觉库,新颖的机器视觉库 OpenCV—它提供C++, C, Python, Java 以及 MATLAB接口,并支持Windows, Linux, Android and Mac OS操作系统. 1.2 机器学习 MLPack DLib ecogg shark 2. Closure Closure Toolbox—Clojure语言库与工具的分类目录 3

Machine Learning for hackers读书笔记(十二)模型比较

library('ggplot2')df <- read.csv('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\12-Model_Comparison\\data\\df.csv') #用glm logit.fit <- glm(Label ~ X + Y,family = binomial(link = 'logit'),data = df) logit.predictions <- ifelse(predict(logit

Machine Learning for hackers读书笔记(十)KNN:推荐系统

#一,自己写KNN df<-read.csv('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\10-Recommendations\\data\\example_data.csv')head(df) #得出距离矩阵distance.matrix <- function(df){ #生成一万个NA,并转成100*100的矩阵 distance <- matrix(rep(NA, nrow(df) ^ 2), nrow = nrow

Machine Learning - 第7周

SVMs are considered by many to be the most powerful 'black box' learning algorithm, and by posing a cleverly-chosen optimization objective, one of the most widely used learning algorithms today. Support Vector Machines Large Margin Classification Opt

Machine Learning - 第4周

  Neural Networks: Representation神经网络 Motivations Non-linear Hypotheses 在这节课和接下来的课程中 我将给大家介绍 一种叫"神经网络"(Neural Network) 的机器学习算法   我们将首先讨论 神经网络的表层结构 在后续课程中 再来具体讨论的学习算法 神经网络实际上是一个 相对古老的算法 并且后来沉寂了一段时间 不过到了现在 它又成为许多机器学习问题 的首选技术   不过我们为什么还需要这个学习算法? 我们

Machine Learning &ndash; 第2周

Octave for Microsoft Windows MathWorks   Linear Regression with Multiple Variables Environment Setup Instructions Setting Up Your Programming Assignment Environment Installing Octave/MATLAB on Windows Installing Octave/MATLAB on Mac OS X (10.10 Yosem

跟着Andrew Ng挑战Machine Learning:第一周 —— 概念+单一变量线性回归

声明: 开个新坑,督促自己坚持学习.这个系列同样是学习心得以及总结,用到的资料都是从吴恩达大神在Coursera上的课程中摘下来的.另外,依照Coursera的要求,保证学员的学习质量,在这一系列心得中不会出现与Coursera习题答案有关的代码. 为了帮助自己更深刻的理解,除了一些人名.引用或者算法的缩写,比如'BFGS'.'L-BFGS'等等之外,尽量使用中文.这一系列的文章结构都是按照大神的课程来的,理解成翻译其实也没毛病. 什么是机器学习? 有很多种说法,大致意思都是:"机器学习是用数据