【算法】梯度下降法

0x01 写在前面

看了网易公开课里Andrew Ng老师的机器学习第二课,主要讲了线性回归、梯度下降、常规方程组,然后看到了一篇整理梯度下降法的文章,觉得写的很好,就整理过来了,在最后会贴出链接的。

0x02 概述

梯度下降的基本思想就是:对于每个点来说,下降最快的方向就是梯度的方向。
性质:选取的初始点不同,可能会得到一个截然不同的优化值。

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



对应的能量函数(损失函数)形式为:



下图为一个二维参数组对应能量函数的可视化图:
【算法】梯度下降法_第1张图片

0x03 批梯度下降法BGD

批梯度下降法(Batch Gradient Descent)是最原始的形式,具体的思想就是在更新每一个参数时都是用所有样本来更新,数学表达式:
(1) 对上述的能量函数求偏导:


(2) 由于是最小化风险函数,所以按照每个参数θ的梯度负方向来更新每个θ:

具体的伪代码形式为:
repeat{          

        (for every j=0, ... , n)
  }
 从上面公式可以注意到,它得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数据,如果样本数目m很大,那么可想而知这种方法的迭代速度!所以,这就引入了另外一种方法,随机梯度下降。
   优点:全局最优解;易于并行实现;

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

0x04 随机梯度下降法SGD

由于批量梯度下降法在更新每一个参数时,都需要所有的训练样本,所以训练过程会随着样本数量的加大而变得异常的缓慢。随机梯度下降法(Stochastic Gradient Descent,简称SGD)正是为了解决批量梯度下降法这一弊端而提出的。
repeat{
    for i=1, ... , m{      


      (for j=0, ... , n
    }
  }
随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。
优点:训练速度快;
缺点:准确度下降,并不是全局最优;不易于并行实现。

0x05 小批量梯度下降法MBGD

MBGD在每次更新参数时使用b个样本(b一般为10),其具体的伪代码形式为:
  Say b=10, m=1000.
  Repeat{
    for i=1, 11, 21, 31, ... , 991{
    


    (for every j=0, ... , n
    }
  }

0x06 参考文献

http://www.cnblogs.com/maybe2030/p/5089753.html

你可能感兴趣的:(【算法】梯度下降法)