zoukankan      html  css  js  c++  java
  • 梯度下降、随机梯度下降和批量梯度下降

    4. 梯度下降法大家族(BGD,SGD,MBGD)

    4.1 批量梯度下降法(Batch Gradient Descent)

        批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新,这个方法对应于前面3.3.1的线性回归的梯度下降算法,也就是说3.3.1的梯度下降算法就是批量梯度下降法。  

        θi=θiαj=0m(hθ(x(j)0,x(j)1,...x(j)n)yj)x(j)iθi=θi−α∑j=0m(hθ(x0(j),x1(j),...xn(j))−yj)xi(j)

        由于我们有m个样本,这里求梯度的时候就用了所有m个样本的梯度数据。

    4.2 随机梯度下降法(Stochastic Gradient Descent)

        随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本j来求梯度。对应的更新公式是:

        θi=θiα(hθ(x(j)0,x(j)1,...x(j)n)yj)x(j)iθi=θi−α(hθ(x0(j),x1(j),...xn(j))−yj)xi(j)

        随机梯度下降法,和4.1的批量梯度下降法是两个极端,一个采用所有数据来梯度下降,一个用一个样本来梯度下降。自然各自的优缺点都非常突出。对于训练速度来说,随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快,而批量梯度下降法在样本量很大的时候,训练速度不能让人满意。对于准确度来说,随机梯度下降法用于仅仅用一个样本决定梯度方向,导致解很有可能不是最优。对于收敛速度来说,由于随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解。

        那么,有没有一个中庸的办法能够结合两种方法的优点呢?有!这就是4.3的小批量梯度下降法。

    4.3 小批量梯度下降法(Mini-batch Gradient Descent)

      小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,1<x<m。一般可以取x=10,当然根据样本的数据,可以调整这个x的值。对应的更新公式是:

        θi=θiαj=tt+x1(hθ(x(j)0,x(j)1,...x(j)n)yj)x(j)i

    注意:每次传入单条样本数据,遍历所有样本数据集,属于批量梯度下降,也叫梯度下降(GD)。本质上是所有样本都参与梯度下降运算。

    此处需要和随机梯度下降做区别,随机梯度下降是每次取样本其中一个点进行梯度下降运算。

    确定到底是哪种梯度下降,只要看梯度更新时,有多少个样本参与计算了。

    1个样本:SGD

    部分样本:MBGD

    所有样本:GD / BGD

    详情可以参考blog:https://www.cnblogs.com/louyihang-loves-baiyan/p/5136447.html

    https://www.cnblogs.com/yamin/p/7210255.html

     

  • 相关阅读:
    简单的Makefile
    共享库
    链接静态库
    /proc/uptime参数的意义
    磁盘挂载失败
    linux环境变量设置
    使用systemd-analyze 工具来分析各个服务进程的启动性能
    面试-2020C/C++后台开发深信服科技股份有限公司一面凉经(一问三不知,我是真的菜。。。)
    笔记-C/C++工程师面试笔记收集整理
    SpringCloud-分布式与集群的使用四(断路器Hystrix)
  • 原文地址:https://www.cnblogs.com/lingjiajun/p/8980951.html
Copyright © 2011-2022 走看看