机器学习中梯度下降(Gradient Descent, GD)算法只需要计算损失函数的一阶导数,计算代价小,非常适合训练数据非常大的应用。

梯度下降法的物理意义很好理解,就是沿着当前点的梯度方向进行线搜索,找到下一个迭代点。但是,为什么有会派生出 batch、mini-batch、online这些GD算法呢?

原来,batch、mini-batch、SGD、online的区别在于训练数据的选择上:

  batch mini-batch Stochastic Online
训练集 固定 固定 固定 实时更新
单次迭代样本数 整个训练集 训练集的子集 单个样本 根据具体算法定
算法复杂度 一般
时效性 一般(delta 模型) 一般(delta 模型)
收敛性 稳定 较稳定 不稳定 不稳定

1. batch GD

每次迭代的梯度方向计算由所有训练样本共同投票决定,

batch GD的损失函数是:

\[J(\theta ) = \frac{1}{{2m}}\sum\limits_{i = 1}^m {{{({h_\theta }({x^{(i)}}) - {y^{(i)}})}^2}} \]

训练算法为:

\[\begin{array}{l}
repeate\{ \\
\theta : = \theta - \alpha \frac{1}{m}\sum\limits_{i = 1}^m ( {h_\theta }({x^{(i)}}) - {y^{(i)}})x_j^{(i)}\\
\}
\end{array}\]

什么意思呢,batch GD算法是计算损失函数在整个训练集上的梯度方向,沿着该方向搜寻下一个迭代点。”batch“的含义是训练集中所有样本参与每一轮迭代。

2. mini-batch GD

batch GD每一轮迭代需要所有样本参与,对于大规模的机器学习应用,经常有billion级别的训练集,计算复杂度非常高。因此,有学者就提出,反正训练集只是数据分布的一个采样集合,我们能不能在每次迭代只利用部分训练集样本呢?这就是mini-batch算法。

假设训练集有m个样本,每个mini-batch(训练集的一个子集)有b个样本,那么,整个训练集可以分成m/b个mini-batch。我们用\(\omega \)表示一个mini-batch, 用\({\Omega _j}\)表示第j轮迭代中所有mini-batch集合,有:

\[\Omega  = \{ {\omega _k}:k = 1,2...m/b\} \]

那么, mini-batch GD算法流程如下:

\[\begin{array}{l}
repeate\{ \\
{\rm{ }}repeate\{ \\
{\rm{ for each }}{\omega _k}{\rm{ in }}\Omega :\\
{\rm{ }}\theta : = \theta - \alpha \frac{1}{b}\sum\limits_{i = 1}^b ( {h_\theta }({x^{(i)}}) - {y^{(i)}}){x^{(i)}}\\
{\rm{ }}\} for(k = 1,2...m/b)\\
\}
\end{array}\]

3. Stochastic GD (SGD)

随机梯度下降算法(SGD)是mini-batch GD的一个特殊应用。SGD等价于b=1的mini-batch GD。即,每个mini-batch中只有一个训练样本。

4. Online GD

随着互联网行业的蓬勃发展,数据变得越来越“廉价”。很多应用有实时的,不间断的训练数据产生。在线学习(Online Learning)算法就是充分利用实时数据的一个训练算法。

Online GD于mini-batch GD/SGD的区别在于,所有训练数据只用一次,然后丢弃。这样做的好处是可以最终模型的变化趋势。比如搜索广告的点击率(CTR)预估模型,网民的点击行为会随着时间改变。用batch算法(每天更新一次)一方面耗时较长(需要对所有历史数据重新训练);另一方面,无法及时反馈用户的点击行为迁移。而Online Leaning的算法可以实时的最终网民的点击行为迁移。

Ref:

1. http://en.wikipedia.org/wiki/Gradient_descent

【原创】batch-GD, SGD, Mini-batch-GD, Stochastic GD, Online-GD -- 大数据背景下的梯度训练算法的更多相关文章

  1. 转载: scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法

    版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...

  2. 聚类K-Means和大数据集的Mini Batch K-Means算法

    import numpy as np from sklearn.datasets import make_blobs from sklearn.cluster import KMeans from s ...

  3. 【转】大数据批处理框架 Spring Batch全面解析

    如今微服务架构讨论的如火如荼.但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易.在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理.针对OLTP,业界有大量的开源框架.优秀的架 ...

  4. PHP中GD库是做什么用的? PHP GD库介绍11111111

    什么是gd库?    gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片. 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据 ...

  5. spring Batch实现数据库大数据量读写

    spring Batch实现数据库大数据量读写 博客分类: spring springBatchquartz定时调度批处理  1. data-source-context.xml <?xml v ...

  6. 【原创】大数据基础之Impala(1)简介、安装、使用

    impala2.12 官方:http://impala.apache.org/ 一 简介 Apache Impala is the open source, native analytic datab ...

  7. 【原创】Thinking in BigData (1)大数据简介

    提到大数据,就不得不提到Hadoop,提到Hadoop,就不得不提到Google公布的3篇研究论文:GFS.MapReduce.BigTable,Google确实是一家伟大的公司,开启了全球的大数据时 ...

  8. 寻找丢失的微服务-HAProxy热加载问题的发现与分析 原创: 单既喜 一点大数据技术团队 4月8日 在一点资讯的容器计算平台中,我们通过HAProxy进行Marathon服务发现。本文记录HAProxy服务热加载后某微服务50%概率失效的问题。设计3组对比实验,验证了陈旧配置的HAProxy在Reload时没有退出进而导致微服务丢失,并给出了解决方案. Keywords:HAProxy热加

    寻找丢失的微服务-HAProxy热加载问题的发现与分析 原创: 单既喜 一点大数据技术团队 4月8日 在一点资讯的容器计算平台中,我们通过HAProxy进行Marathon服务发现.本文记录HAPro ...

  9. knn/kmeans/kmeans++/Mini Batch K-means/Affinity Propagation/Mean Shift/层次聚类/DBSCAN 区别

    可以看出来除了KNN以外其他算法都是聚类算法 1.knn/kmeans/kmeans++区别 先给大家贴个简洁明了的图,好几个地方都看到过,我也不知道到底谁是原作者啦,如果侵权麻烦联系我咯~~~~ k ...

随机推荐

  1. AvalonDock 2.0 的简单运用

    最近在研究AvalonDock的一些使用,碰到了一些问题.现在拿出来跟大家分享分享. 网上找了一大把AvalonDock 1.3版本的资料,弄出Demo后发现属性面板(DockableContent) ...

  2. 【原创】一起学C++ 之指针、数组、指针算术 ---------C++ primer plus(第6版)

    C++ Primer Plus 第6版 指针和数组基本等价的原因在于指针算术! 一.指针 ⑴整数变量+1后,其值将增加1: ⑵指针变量+1后,增加的量等于它指向的类型的字节数: ⑶C++将数组名解析为 ...

  3. The Best Rank (25)(排名算法)

    To evaluate the performance of our first year CS majored students, we consider their grades of three ...

  4. 提取图像(tif)中水体的矢量数据(shp)研究

    方法一:1、利用envi打开tif数据,原投影信息为beijing54.envi中没有这个投影。这里选择投影信息(WGS-84)选取水体roi——进行监督分类。这里可以对分类后进行处理(消除文字等干扰 ...

  5. WebApi2 jsonp跨域问题

    一:故事背景     以前在写WebApi2的时候,一直是用作前后端分离(WebApi2 +angularjs),可是最近自己在给WebApp写接口的时候遇到了很多坑,总结一下就是跨域问题.而跨域问题 ...

  6. jQuery ajax 实现分页 kkpager插件

    代码片段一: <!--分页组件 JS CSS 开始--> <!--分页组件 CSS--> <link type="text/css" href=&qu ...

  7. EXTJS 4.2 添加滚动条

    bodyStyle: 'overflow-x:hidden; overflow-y:scroll',//显示滚动 文章来源:http://www.cnblogs.com/exmyth/archive/ ...

  8. c#加密汇总【粘】

    方法一: SHA1[不可逆]     //须添加对System.Web的引用     using System.Web.Security;           ...           /// &l ...

  9. VS2010界面主题更换全过程

    VisualStudio 2010的界面默认是蓝色的,背景是白色,字体是宋体,这些设置习惯了还好,但是可能看多了不怎么舒服.而且如果以前是用VS 6.0的知道,它使用的字体更为舒服清晰.所以,可以对V ...

  10. [JavaScript] js 判断闰年

    /** * 判断闰年函数 * @param {number} year 要判断的年份 * @return {bool} 返回布尔值 * * 其实只要满足下面几个条件即可. * 1.普通年能被4整除且不 ...