在机器学习领域中,梯度下降的方式有三种,分别是:批量梯度下降法BGD、随机梯度下降法SGD、小批量梯度下降法MBGD,并且都有不同的优缺点。

下面我们以线性回归算法(也可以是别的算法,只是损失函数(目标函数)不同而已,它们的导数的不同,做法是一模一样的)为例子来对三种梯度下降法进行比较。

1. 线性回归

假设 特征 和 结果 都满足线性。即不大于一次方。这个是针对 收集的数据而言。
收集的数据中,每一个分量,就可以看做一个特征数据。每个特征至少对应一个未知的参数。这样就形成了一个线性模型函数,向量表示形式:

这个就是一个组合问题,已知一些数据,如何求里面的未知参数,给出一个最优解。 一个线性矩阵方程,直接求解,很可能无法直接求解。有唯一解的数据集,微乎其微。

基本上都是解不存在的超定方程组。因此,需要退一步,将参数求解问题,转化为求最小误差问题,求出一个最接近的解,这就是一个松弛求解。

求一个最接近解,直观上,就能想到,误差最小的表达形式。仍然是一个含未知参数的线性模型,一堆观测数据,其模型与数据的误差最小的形式,模型与数据差的平方和最小:

2. 参数更新

对目标函数进行求导,导数如下:

利用梯度下降跟新参数,参数更新方式如下:

                                                                                                                                                                                                    (1)

3. 批量梯度下降法(Batch Gradient Descent,简称BGD)是梯度下降法最原始的形式,它的具体思路是在更新每一参数时都使用所有的样本来进行更新,也就是方程(1)中的m表示样本的所有个数。

优点:全局最优解;易于并行实现;

缺点:当样本数目很多时,训练过程会很慢。

4. 随机梯度下降法:它的具体思路是在更新每一参数时都使用一个样本来进行更新,也就是方程(1)中的m等于1。每一次跟新参数都用一个样本,更新很多次。如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次,这种跟新方式计算复杂度太高。

但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。

优点:训练速度快;

缺点:准确度下降,并不是全局最优;不易于并行实现。

从迭代的次数上来看,SGD迭代的次数较多,在解空间的搜索过程看起来很盲目。

5.小批量梯度下降法(Mini-batch Gradient Descent,简称MBGD):它的具体思路是在更新每一参数时都使用一部分样本来进行更新,也就是方程(1)中的m的值大于1小于所有样本的数量。为了克服上面两种方法的缺点,又同时兼顾两种方法的有点。

6.三种方法使用的情况:

如果样本量比较小,采用批量梯度下降算法。如果样本太大,或者在线算法,使用随机梯度下降算法。在实际的一般情况下,采用小批量梯度下降算法。

参考:

http://blog.csdn.net/viewcode/article/details/8794401

http://mp.weixin.qq.com/s/fXlbB7KmiX0iIv6xwSxNIA

三种梯度下降的方式:批量梯度下降、小批量梯度下降、随机梯度下降相关推荐

  1. zynq学习03 zynq中三种实现GPIO的方式

    http://m.blog.csdn.net/article/details?id=52123465 http://blog.chinaaet.com/songhuangong/p/43084 本文介 ...

  2. SSO单点登录三种情况的实现方式详解

    SSO单点登录三种情况的实现方式详解 单点登录(SSO--Single Sign On)对于我们来说已经不陌生了.对于大型系统来说使用单点登录可以减少用户很多的麻烦.就拿百度来说吧,百度下面有很多的子 ...

  3. Objective-C:三种文件导入的方式以及atomic和nonatomic的区别

    一.三种文件导入的方式比较:   类的前项声明@class.import.include: 1.采用@class 类名的方式,它会告诉编译器有这么一个类,目前不需要知道它内部的实例变量和方法是如何定义 ...

  4. 浅淡Webservice、WSDL三种服务访问的方式(附案例)

    Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...

  5. Python中的urllib,urllib三种不同的请求方式

    1.urllib获取服务器的资源 自定义爬虫的重要组件 获取百度首页的资源: #3.x的标准写法 import urllib.request import urllib.parse#百度的首页 fro ...

  6. JAVA 三种线程实现创建方式

    JAVA 三种线程实现/创建方式 方式一:继承Thread类 通过继承Thread类来创建一个自定义线程类.Thread类本质上就继承了Runable接口,代表一个线程类.启动线程的唯一办法就是通过T ...

  7. (转)Spring的三种实例化Bean的方式

    http://blog.csdn.net/yerenyuan_pku/article/details/52832793 Spring提供了三种实例化Bean的方式. 使用类构造器实例化. <be ...

  8. swift调用oc_OC与Swift混编,三种场景的实现方式

    多语言并存时期,混编成为一种必须的方式 ,在多场影中实现OC和Swift语言的并存原来是如此简单 第一种场景,App中实现混编 创建桥接文件*.h 新建一个桥接文件,New File 选择 Heade ...

  9. Python中三种表示NA的方式

    Python中三种表示NA的方式 # -*- coding: utf-8 -*- import numpy as np import pandas as pd# data_frame = np.loa ...

  10. HTML三种引入样式的方式

    HTML三种引入样式的方式 1.外部样式:是通过link元素引入 <link rel="stylesheet" type="text/css" href= ...

最新文章

  1. 基于Transformer的高效、低延时、流式语音识别模型
  2. struts2中报错404 No result defined for action com.jcrj.ahsfjd.ajgl.JdshAction and result input解决方法...
  3. Windows自带的端口转发工具netsh使用方法_DOS/BAT
  4. 码云机房今晨出现网络故障,已经恢复
  5. 使用java实现面向对象编程第二章_java面向对象编程——第二章 java基础语法
  6. mysql5.1怎么备份,MySQL 5.1升级到MySQL 5.5的步骤
  7. 苹果和虫子(信息学奥赛一本通-T1038)
  8. 【华为云技术分享】小熊派华为物联网操作系统LiteOS裸机驱动移植02-LCD驱动移植及使用
  9. 数据的降维之特征选择及主成分分析
  10. matlab 求解 Ax=B 时所用算法
  11. perl 安装 ZooKeeper模块
  12. ToDesk 远程软件推荐测评
  13. PDF转DWG格式怎么转?分享两种好用转换方法
  14. android二维码扫描、读取、识别、生成、带logo
  15. AE After Effect 渲染如何输出设置
  16. 嵌入式工程师待遇北京地区最高
  17. 台式计算机diy,电脑:台式机DIY及组装
  18. idea提交项目出现push rejected
  19. Netstat -tln 命令是Linux查看端口使用情况
  20. Spark History Server 架构原理介绍

热门文章

  1. java 打印星号_JAVA打印星号
  2. 按下键盘计算机具体发生了点儿啥?
  3. 【已解决】Nginx基于多端口、多域名配置
  4. adobe illustrator软件能做什么
  5. Python数据处理案例
  6. 骨传导耳机是利用什么原理听歌?什么骨传导耳机好用
  7. 【转载】魔方教程七步玩转魔方
  8. 微信,该文件已过期或已被清理
  9. C语言结构体学习(二)
  10. 2023年度流行色出炉终于轮到火龙果和草莓熊制霸天下了 优漫动游