梯度下降法和随机梯度下降法和小批量梯度对比

对于梯度下降法 如果训练样本集特别大(假设为样本3亿:表示在美国大学3亿人口,因此美国的人口普查拥有这样数量级的数据),如果想用这些数据去拟合一个线性回归模型,那么需要对着3亿数据进行求和,计算量太大了,这种梯度下降也被称为批量地图下降法,(批量:表示每次我们都要同事考虑所有训练样本,我们称之为一批训练样本)

可以想象一下如果真有3亿数据存在计算机硬盘中,那么这种算法需要将这3亿人口数据读入到计算机中,仅仅为了计算这个微分项(下图中的),需要不断的将这些数据传入计算机的内存中但是计算机的内存存不了这个多数据,所以需要慢慢读取这些数据,然后进行一次求和,再算出这个微分,做完这些以后,自己才刚刚完成梯度下降法中的其中一步,你还得再来一遍遍历这3亿数据,然后计算和的值,做完这一步你依然只完成了梯度下降法一小步,一直这样下去进行下去,为了计算收敛结果,需要花费很长的时间,对比这种批量梯度下降法,下面介绍一种新的算法随机梯度下降法。这种方法完全不同了,每次迭代中不需要考虑所有的训练样本啦,仅仅只需要考虑一个样本。

一、随机梯度下降(Stochastic gradient descent)

如果我们一定需要一个大规模的训练集,我们可以尝试使用随机梯度下降法来代替批量梯度下降法。

 随机梯度下降算法在每一次计算之后便更新参数\large \Theta,而不需要将所有的训练集求和,而在梯度下降法还没有完成一次迭代的时候,随机梯度下降法便已经走了好远了,但是这样的算法存在一定的问题,不是每一步都是朝着正确的方向迈出的,因此算法虽然会逐渐走向全局最小值的位置,但是可能无法站到那个最小值得那一点,而是在最小值的附近徘徊。

 注意点:随机梯度下降法的外层我们一般认为1-10都是合理的,当然如果m非常的大,即是内层循环非常的大,那么我们外层这时候可以设置为1为合理的。

二、 小批量梯度下降(Mini-Batch gradient descent)

           小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的,每计算常数b次训练实例,便更新一次参数\large \Theta

批量梯度下降:use all examples in each iteration. 
           随机梯度下降:use 1 example in each iteration 
           mini-batch梯度下降:use b examples in each iteration

下面这个例子中: b = 10 m=1000

通常我们令b在2-200之间,这样做的好处是:我们可以用向量化的方式来循环b个训练实例,如果我们用线性代数库比较好,能够支持平行处理,那么算法的总体表现将不受影响(与随机梯度下降相同)

三、下面三种算法优缺点对比:

(1)批量梯度下降法(Batch Gradient Descent) :在更新参数时都使用所有的样本来进行更新。

  优点:全局最优解,能保证每一次更新权值,都能降低损失函数;易于并行实现。

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

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

  优点:训练速度快;

  缺点:准确度下降,并不是全局最优;不易于并行实现。从迭代的次数上来看,随机梯度下降法迭代的次数较多,在解空间的搜索过程看起来很盲目。噪音很多,使得它并不是每次迭代都向着整体最优化方向。

(3)小批量梯度下降法(Mini-batch Gradient Descen):在更新每一参数时都使用一部分样本来进行更新。为了克服上面两种方法的缺点,又同时兼顾两种方法的优点。

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

猜你喜欢

转载自blog.csdn.net/abc13526222160/article/details/84346239