干货|代码原理教你搞懂SGD随机梯度下降、BGD、MBGD

2017 年 11 月 25 日 机器学习研究会

推荐阅读时间:8min~15min


文章主要目录如下:


1.批量梯度下降法BGD原理讲解

2.随机梯度下降法SGD原理讲解

3.小批量梯度详解MBGD原理讲解

4.具体实例以及三种实现方式代码详解

5.三种梯度下降法的总结


在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练。其实,常用的梯度下降法还具体包含有三种不同的形式,它们也各自有着不同的优缺点。


下面我们以线性回归算法来对三种梯度下降法进行比较。


一般线性回归函数的假设函数为:


对应的损失函数为:

(这里的1/2是为了后面求导计算方便)


下图作为一个二维参数(theta0,theta1)组对应能量函数的可视化图:



下面我们来分别讲解三种梯度下降法

1
批量梯度下降法BGD


我们的目的是要误差函数尽可能的小,即求解weights使误差函数尽可能小。首先,我们随机初始化weigths,然后不断反复的更新weights使得误差函数减小直到满足要求时停止。这里更新算法我们选择梯度下降算法,利用初始化的weights并且反复更新weights:


这里代表学习率,表示每次向着J最陡峭的方向迈步的大小为了更新weights,我们需要求出函数J的偏导数。首先当我们只有一个数据点(x,y)的时候,J的偏导数是:




则对所有数据点上述损失函数的偏导(累和)为:



再最小化损失函数的过程中,需要不断反复的更新weights使得误差函数减小更新过程如下:


那么好了,每次参数更新的伪代码如下:



由上图更新公式我们就可以看到,我们每一次的参数更新都用到了所有的训练数据(比如有m个,就用到了m个),如果训练数据非常多的话,是非常耗时的

下面给出批梯度下降的收敛图:



从图中,我们可以得到BGD迭代的次数相对较少。

2
随机梯度下降法SGD


由于批梯度下降每跟新一个参数的时候,要用到所有的样本数,所以训练速度会随着样本数量的增加而变得非常缓慢。随机梯度下降正是为了解决这个办法而提出的。它是利用每个样本的损失函数对θ求偏导得到对应的梯度,来更新θ:



更新过程如下:

 


随机梯度下降是通过每个样本来迭代更新一次,对比上面的批量梯度下降,迭代一次需要用到所有训练样本(往往如今真实问题训练数据都是非常巨大),一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。


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


随机梯度下降收敛图如下:


我们可以从图中看出SGD迭代的次数较多,在解空间的搜索过程看起来很盲目。但是大体上是往着最优值方向移动。

3
min-batch 小批量梯度下降法MBGD


我们从上面两种梯度下降法可以看出,其各自均有优缺点,那么能不能在两种方法的性能之间取得一个折衷呢?算法的训练过程比较快,而且也要保证最终参数训练的准确率而这正是小批量梯度下降法(Mini-batch Gradient Descent,简称MBGD)的初衷。


我们假设每次更新参数的时候用到的样本数为10个不同的任务完全不同,这里举一个例子而已


更新伪代码如下:


4
实例以及代码详解



这里参考他人博客,创建了一个数据,如下图所示:



待训练数据A、B为自变量,C为因变量。


转自:机器学习算法与自然语言处理


完整内容请点击“阅读原文

登录查看更多
12

相关内容

专知会员服务
42+阅读 · 2020年7月7日
【斯坦福】凸优化圣经- Convex Optimization (附730pdf下载)
专知会员服务
210+阅读 · 2020年6月5日
【新书册】贝叶斯神经网络,41页pdf
专知会员服务
173+阅读 · 2020年6月3日
机器学习者都应该知道的五种损失函数!
数盟
5+阅读 · 2018年6月21日
已删除
将门创投
10+阅读 · 2018年5月2日
比xgboost强大的LightGBM:调参指南(带贝叶斯优化代码)
数据挖掘入门与实战
23+阅读 · 2018年4月9日
面试整理:关于代价函数,正则化
数据挖掘入门与实战
8+阅读 · 2018年3月29日
干货|EM算法原理总结
全球人工智能
17+阅读 · 2018年1月10日
算法优化|梯度下降和随机梯度下降 — 从0开始
全球人工智能
6+阅读 · 2017年12月25日
神经网络bp算法推导
统计学习与视觉计算组
11+阅读 · 2017年11月17日
绝对干货 | 随机梯度下降算法综述
菜鸟的机器学习
14+阅读 · 2017年10月30日
干货 | 深度学习之损失函数与激活函数的选择
机器学习算法与Python学习
15+阅读 · 2017年9月18日
Meta-Learning with Latent Embedding Optimization
Arxiv
6+阅读 · 2018年7月16日
Arxiv
7+阅读 · 2018年6月8日
Arxiv
7+阅读 · 2018年1月21日
VIP会员
相关资讯
机器学习者都应该知道的五种损失函数!
数盟
5+阅读 · 2018年6月21日
已删除
将门创投
10+阅读 · 2018年5月2日
比xgboost强大的LightGBM:调参指南(带贝叶斯优化代码)
数据挖掘入门与实战
23+阅读 · 2018年4月9日
面试整理:关于代价函数,正则化
数据挖掘入门与实战
8+阅读 · 2018年3月29日
干货|EM算法原理总结
全球人工智能
17+阅读 · 2018年1月10日
算法优化|梯度下降和随机梯度下降 — 从0开始
全球人工智能
6+阅读 · 2017年12月25日
神经网络bp算法推导
统计学习与视觉计算组
11+阅读 · 2017年11月17日
绝对干货 | 随机梯度下降算法综述
菜鸟的机器学习
14+阅读 · 2017年10月30日
干货 | 深度学习之损失函数与激活函数的选择
机器学习算法与Python学习
15+阅读 · 2017年9月18日
Top
微信扫码咨询专知VIP会员