批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解

https://www.cnblogs.com/lliuye/p/9451903.html

梯度下降法作为机器学习中较常使用的优化算法,其有着三种不同的形式:批量梯度下降(Batch Gradient Descent)、随机梯度下降(Stochastic Gradient Descent)以及小批量梯度下降(Mini-Batch Gradient Descent)。其中小批量梯度下降法也常用在深度学习中进行模型的训练。接下来,我们将对这三种不同的梯度下降法进行理解。
  为了便于理解,这里我们将使用只含有一个特征的线性回归来展开。此时线性回归的假设函数为:

hθ(x(i))=θ1x(i)+θ0hθ(x(i))=θ1x(i)+θ0

  其中 i=1,2,...,mi=1,2,...,m 表示样本数。
  对应的目标函数(代价函数)即为:

J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2

  下图为 J(θ0,θ1)J(θ0,θ1) 与参数 θ0,θ1θ0,θ1 的关系的图:


1、批量梯度下降(Batch Gradient Descent,BGD)

  批量梯度下降法是最原始的形式,它是指在每一次迭代时使用所有样本来进行梯度的更新。从数学上理解如下:
  (1)对目标函数求偏导:

ΔJ(θ0,θ1)Δθj=1m∑i=1m(hθ(x(i))−y(i))x(i)jΔJ(θ0,θ1)Δθj=1m∑i=1m(hθ(x(i))−y(i))xj(i)

  其中 i=1,2,...,mi=1,2,...,m 表示样本数, j=0,1j=0,1 表示特征数,这里我们使用了偏置项 x(i)0=1x0(i)=1 。
  (2)每次迭代对参数进行更新:

θj:=θj−α1m∑i=1m(hθ(x(i))−y(i))x(i)jθj:=θj−α1m∑i=1m(hθ(x(i))−y(i))xj(i)

  注意这里更新时存在一个求和函数,即为对所有样本进行计算处理,可与下文SGD法进行比较。
  伪代码形式为:
  repeat{
       θj:=θj−α1m∑mi=1(hθ(x(i))−y(i))x(i)jθj:=θj−α1m∑i=1m(hθ(x(i))−y(i))xj(i)
      (for j =0,1)
  }

  优点:
  (1)一次迭代是对所有样本进行计算,此时利用矩阵进行操作,实现了并行。
  (2)由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优。
  缺点:
  (1)当样本数目 mm 很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。
  从迭代的次数上来看,BGD迭代的次数相对较少。其迭代的收敛曲线示意图可以表示如下:


2、随机梯度下降(Stochastic Gradient Descent,SGD)

  随机梯度下降法不同于批量梯度下降,随机梯度下降是每次迭代使用一个样本来对参数进行更新。使得训练速度加快。
  对于一个样本的目标函数为:

J(i)(θ0,θ1)=12(hθ(x(i))−y(i))2J(i)(θ0,θ1)=12(hθ(x(i))−y(i))2

  (1)对目标函数求偏导:

ΔJ(i)(θ0,θ1)θj=(hθ(x(i))−y(i))x(i)jΔJ(i)(θ0,θ1)θj=(hθ(x(i))−y(i))xj(i)

  (2)参数更新:

θj:=θj−α(hθ(x(i))−y(i))x(i)jθj:=θj−α(hθ(x(i))−y(i))xj(i)

  注意,这里不再有求和符号
  伪代码形式为:
  repeat{
    for i=1,...,m{
       θj:=θj−α(hθ(x(i))−y(i))x(i)jθj:=θj−α(hθ(x(i))−y(i))xj(i)
      (for j =0,1)
    }
  }

  优点:
  (1)由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。
  缺点:
  (1)准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。
  (2)可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。
  (3)不易于并行实现。

  解释一下为什么SGD收敛速度比BGD要快:
  答:这里我们假设有30W个样本,对于BGD而言,每次迭代需要计算30W个样本才能对参数进行一次更新,需要求得最小值可能需要多次迭代(假设这里是10);而对于SGD,每次更新参数只需要一个样本,因此若使用这30W个样本进行参数更新,则参数会被更新(迭代)30W次,而这期间,SGD就能保证能够收敛到一个合适的最小值上了。也就是说,在收敛时,BGD计算了 10×30W10×30W 次,而SGD只计算了 1×30W1×30W 次。

  从迭代的次数上来看,SGD迭代的次数较多,在解空间的搜索过程看起来很盲目。其迭代的收敛曲线示意图可以表示如下:


3、小批量梯度下降(Mini-Batch Gradient Descent, MBGD)

  小批量梯度下降,是对批量梯度下降以及随机梯度下降的一个折中办法。其思想是:每次迭代 使用 ** batch_size** 个样本来对参数进行更新。
  这里我们假设 batchsize=10batchsize=10 ,样本数 m=1000m=1000 。
  伪代码形式为:
  repeat{
    for i=1,11,21,31,...,991{
       θj:=θj−α110∑(i+9)k=i(hθ(x(k))−y(k))x(k)jθj:=θj−α110∑k=i(i+9)(hθ(x(k))−y(k))xj(k)
      (for j =0,1)
    }
  }

  优点:
  (1)通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。
  (2)每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。(比如上例中的30W,设置batch_size=100时,需要迭代3000次,远小于SGD的30W次)
  (3)可实现并行化。
  缺点:
  (1)batch_size的不当选择可能会带来一些问题。

  batcha_size的选择带来的影响:
  (1)在合理地范围内,增大batch_size的好处:
    a. 内存利用率提高了,大矩阵乘法的并行化效率提高。
    b. 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
    c. 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
  (2)盲目增大batch_size的坏处:
    a. 内存利用率提高了,但是内存容量可能撑不住了。
    b. 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
    c. Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。

  下图显示了三种梯度下降算法的收敛过程:



引用及参考:
[1] https://www.cnblogs.com/maybe2030/p/5089753.html
[2] https://zhuanlan.zhihu.com/p/37714263
[3] https://zhuanlan.zhihu.com/p/30891055
[4] https://www.zhihu.com/question/40892922/answer/231600231

写在最后:本文参考以上资料进行整合与总结,文章中可能出现理解不当的地方,若有所见解或异议可在下方评论,谢谢!

原文地址:https://www.cnblogs.com/bnuvincent/p/11183206.html

时间: 2024-10-07 03:51:35

批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解的相关文章

批量梯度下降BGD、随机梯度下降SGD和小批量梯度下降MBGD对比

一般线性回归函数的假设函数为: 对应的损失函数为: (这里的1/2是为了后面求导计算方便)下图作为一个二维参数(,)组对应能量函数的可视化图: 下面我们来比较三种梯度下降法 批量梯度下降法BGD (Batch Gradient Descent) 我们的目的是要误差函数尽可能的小,即求解weights使误差函数尽可能小.首先,我们随机初始化weigths,然后不断反复的更新weights使得误差函数减小,直到满足要求时停止.这里更新算法我们选择梯度下降算法,利用初始化的weights并且反复更新w

批量梯度下降与随机梯度下降

下面的h(x)是要拟合的函数,J(theta)损失函数,theta是参数,要迭代求解的值,theta求解出来了那最终要拟合的函数h(theta)就出来了.其中m是训练集的记录条数,j是参数的个数. 1.批量梯度下降(BGD)的求解思路如下: (1)将J(theta)对theta求偏导,得到每个theta对应的的梯度 (2)由于是要最小化风险函数,所以按每个参数theta的梯度负方向,来更新每个theta (3)从上面公式可以注意到,它得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数

NN优化方法对比:梯度下降、随机梯度下降和批量梯度下降

1.前言 这几种方法呢都是在求最优解中经常出现的方法,主要是应用迭代的思想来逼近.在梯度下降算法中,都是围绕以下这个式子展开: 其中在上面的式子中hθ(x)代表,输入为x的时候的其当时θ参数下的输出值,与y相减则是一个相对误差,之后再平方乘以1/2,并且其中 注意到x可以一维变量,也可以是多维变量,实际上最常用的还是多维变量.我们知道曲面上方向导数的最大值的方向就代表了梯度的方向,因此我们在做梯度下降的时候,应该是沿着梯度的反方向进行权重的更新,可以有效的找到全局的最优解.这个θ的更新过程可以描

对数几率回归法(梯度下降法,随机梯度下降与牛顿法)与线性判别法(LDA)

本文主要使用了对数几率回归法与线性判别法(LDA)对数据集(西瓜3.0)进行分类.其中在对数几率回归法中,求解最优权重W时,分别使用梯度下降法,随机梯度下降与牛顿法. 代码如下: 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Date : 2017-05-09 15:03:50 4 # @Author : whb ([email protected]) 5 # @Link : ${link} 6 # @Version : $Id$

机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)

本文介绍了机器学习中基本的优化算法-梯度下降算法和随机梯度下降算法,以及实际应用到线性回归.Logistic回归.矩阵分解推荐算法等ML中. 梯度下降算法基本公式 常见的符号说明和损失函数 X :所有样本的特征向量组成的矩阵 x(i) 是第i个样本包含的所有特征组成的向量x(i)=(x(i)1,x(i)2...,x(i)n) y(i) 第i个样本的label,每个样本只有一个label,y(i)是标量(一个数值) hθ(x(i)) :拟合函数,机器学习中可以用多种类型的拟合函数 θ 是函数变量,

监督学习:随机梯度下降算法(sgd)和批梯度下降算法(bgd)

线性回归 首先要明白什么是回归.回归的目的是通过几个已知数据来预测另一个数值型数据的目标值. 假设特征和结果满足线性关系,即满足一个计算公式h(x),这个公式的自变量就是已知的数据x,函数值h(x)就是要预测的目标值.这一计算公式称为回归方程,得到这个方程的过程就称为回归. 假设房子的房屋面积和卧室数量为自变量x,用x1表示房屋面积,x2表示卧室数量:房屋的交易价格为因变量y,我们用h(x)来表示y.假设房屋面积.卧室数量与房屋的交易价格是线性关系. 他们满足公式 上述公式中的θ为参数,也称为权

梯度下降法和随机梯度下降法的区别

这几天在看<统计学习方法>这本书,发现 梯度下降法 在 感知机 等机器学习算法中有很重要的应用,所以就特别查了些资料.  一.介绍       梯度下降法(gradient descent)是求解无约束最优化问题的一种常用方法,有实现简单的优点.梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量.  二.应用场景      1.给定许多组数据(xi, yi),xi (向量)为输入,yi为输出.设计一个线性函数y=h(x)去拟合这些数据. 2.感知机:感知机(perceptron)为二类分类

梯度下降VS随机梯度下降

样本个数m,x为n维向量.h_theta(x) = theta^t * x梯度下降需要把m个样本全部带入计算,迭代一次计算量为m*n^2 随机梯度下降每次只使用一个样本,迭代一次计算量为n^2,当m很大的时候,随机梯度下降迭代一次的速度要远高于梯度下降

梯度下降法、随机梯度下降法、小批量梯度下降法

本文以二维线性拟合为例,介绍批量梯度下降法.随机梯度下降法.小批量梯度下降法三种方法,求解拟合的线性模型参数. 需要拟合的数据集是 $(X_1, y_1), (X_2, y_2)..., (X_n, y_n)$,其中$X^i=(x_1^i, x_2^i)$,表示2个特征,$y^j$是对应的回归值. 拟合得到的函数是 $h_{\theta_1, \theta_2}(X)$,尽可能使${h_{{\theta _1},{\theta _2}}}(X) \approx y$. 损失函数是$J(\thet