转载:三种梯度下降法
写在前面
最近需要手写一个Feedforward的网络结构,在选择优化算法的时候,猛然发现原来Batch Gradient Descent和mini-Batch Gradient Descent是两种不同的优化策略,感觉这里遗漏了一大块知识,赶忙补充了一下,此处做一下记录。
Batch Gradient Descent
在优化目标函数的时候,Batch Gradient Descent(BGD)是先计算整个数据集上的梯度,然后再进行更新操作。对于参数
对于目标函数
其中的
从公式
BGD的优点在于对于凸问题,它是能够保证收敛到全局最优点的。而缺点就是,计算量很大,计算每一位的权重都要遍历整个数据集,这代价未免太大了,计算量是无法接受的。随之而来的另外一个缺点就是BGD是无法进行online训练的,它必须要知道全部的训练集的情况下才能进行训练,这对于一些线上系统也是一个问题。
Stochastic Gradient Descent
SGD是对BGD的一个改进方案,改变之处在更新时不需要遍历整个数据集,而是每一个实例都进行更新。具体公式是:
比较公式
如此改变之后,速度明显提高了很多,但是这也是有风险的。由于进行频繁的梯度更新,很有可能直接跳过了最优点。因此,SGD实际上是无法保证收敛到全局最优点的,而且不是那么的稳定。
Mini-Batch Gradient Descent
而Mini-Batch是对上述两种策略的一种中和,它的基本思想就是从整个训练集上选取一个子集,对这个自己进行BGD的更新。具体公式可以表示为:
比较公式
简单来说,先把大小为
相比SGD来说,它更加稳定;相比BGD来说,它计算量较小。
总结
BGD | SGD | mini-Batch | |
---|---|---|---|
训练集 | 固定 | 固定 | 固定 |
单次迭代样本数 | 整个训练集 | 固定 | 训练集的子集 |
算法复杂度 | 高 | 低 | 一般 |
收敛性 | 稳定 | 不稳定 | 较稳定 |
本文来自:三种梯度下降法