【ML】梯度下降、随机梯度下降与批梯度下降算法之间的比较

这三种算法都用于反向传播的优化损失函数算法。在每轮迭代中更新一次权重w,根据多次迭代,最终无限的靠近我们预期的权重最优值。batch GD, mini-batch GD, SGD都可以看成SGD的范畴, 只不过区别在于每次取多少的样本了。

1. 梯度下降算法:

主要优点:梯度更新准确

(1) 如果数据集比较小,完全可以采用全数据集(Full Batch Learning)的形式,采用全数据有两个好处:

a. 由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。【在每次更新时用所有样本,要留意,在梯度下降中,对于 【ML】梯度下降、随机梯度下降与批梯度下降算法之间的比较 的更新,所有的样本都有贡献,也就是参与调整 【ML】梯度下降、随机梯度下降与批梯度下降算法之间的比较
b. 由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。 Full Batch Learning 可以使用 Rprop 只基于梯度符号并且针对性单独更新各权值。

(2) 但是梯度下降也存在一下这些缺点:

a. 梯度下降算法并不能保证被优化函数达到全局最优解,只有当损失函数为凸函数时,梯度下降算法才能保证达到全局最优解,因此不能保证一定达到全局最优,受限于损失函数是否为凸函数。

b. 梯度下降算法的另外一个问题是计算时间太长,因为要在全部训练数据上最小化损失,在海量训练数据下,这样是十分耗时。【如果样本不多的情况下,当然是这样收敛的速度会更快啦。但是很多时候,样本很多,更新一次要很久,这样的方法就不合适】

2. 随机梯度下降算法:

主要优点:快

为了加速训练的过程,可以使用随机梯度下降算法(stochastic gradient descent-SGD)。随机梯度下降算法也是称为"在线学习"。

(1) 这个算法优化的不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。【在每次更新时用1个样本,可以看到多了随机两个字,随机也就是说我们用样本中的一个例子来近似我所有的样本,来调整θ,因而随机梯度下降是会带来一定的问题,因为计算得到的并不是准确的一个梯度,对于最优化问题,凸问题,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近

(2) 但是带来了如下问题:

在某一条数据上损失函数更小并不代表在全部数据上的损失函数更小,于是使用随机梯度下降优化得到的神经网络甚至可能无法达到全局最优。

3. 批梯度下降算法:

主要优点:快

为了综合梯度下降算法和随机梯度下降算法的优缺点,在实际应用中一般采用这两个算法的这种----->每次计算一小部分训练数据的损失函数。批梯度下降算法(Mini-batches Learning)在深度学习很多算法的反向传播算法中非常常用。这一小部分训练数据也称为一个batch,因此也引入了batch_size的概念,batch_size顾名思义就是来度量每一个batch中实例的个数。

(1) 引入batch有很好的优势:

a. 通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。

b. 每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。

--->但是批梯度下降算法带来一个问题,那就是如何选取最优的batch_size?

(2) 可不可以选择一个适中的 Batch_Size 值呢?

当然可以,这就是批梯度下降法(Mini-batches Learning)。因为如果数据集足够充分,那么用一半(甚至少得多)的数据训练算出来的梯度与用全部数据训练出来的梯度是几乎一样的。

(3) 在合理范围内,增大 Batch_Size 有何好处?

a. 内存利用率提高了,大矩阵乘法的并行化效率提高。

b. 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。

c. 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。

(4) 盲目增大 Batch_Size 有何坏处?

a. 内存利用率提高了,但是内存容量可能撑不住了。

b. 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。

c. Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。

另外附上三种方法的梯度更新笔记:

 

【ML】梯度下降、随机梯度下降与批梯度下降算法之间的比较

参考链接:

1.三种方法的介绍:https://zhuanlan.zhihu.com/p/37714263

2. 证明了为什么梯度下降算法可以收敛https://www.zhihu.com/question/27012077/answer/122359602