梯度下降法(GD,gradient descent)是一种优化方法,比如对某个损失函数进行最小化的优化。
其共有三种:
- BGD,batch gradient descent:批量梯度下降
- SGD,stochastic gradient descent:随机梯度下降
- mini-batch GD,mini-batch gradient descent:小批量梯度下降
BGD
假设有损失函数:
f(α0,α1,...,αn,)=m1m∑j=0(y^−y)2
y^是预测值,
y是真实值,共有
m个预测值。
若要最小化损失函数,需要对每个参数
α0,α1,...,αn求梯度,但是对BGD通常是取所有训练样本损失函数的平均作为损失函数,假设有
β个样本,则
F(α0,α1,...,αn)=β1β∑i=0fi(α0,α1,...,αn)
所以有梯度更新:
αi=αi−l⋅∂αi∂F(α0,α1,...,αn)
∂αi∂F(α0,α1,...,αn)是损失函数对参数
αi的偏导数,
l为学习率,即步长,是一个经验值,过大容易找不到相对最优解,过小会使得优化速度过慢,见到一个这样的形容:学习率如人走路,步伐小要急死,步伐大容易扯着蛋hahaha
SGD
如果使用BGD会有一个问题,就是每次迭代过程中都要对几个样本进行求梯度,所以开销非常大,随机梯度下降的思想就是随机采样一个样本来更新参数,注意只是一个样本,大大的降低了计算开销。
mini-batch GD
SGD虽然提高了计算效率,降低了计算开销,但由于每次迭代只随机选择一个样本,因此随机性比较大,所以下降过程中非常曲折,效率也相应降低,所以mini-batch GD采取了一个折中的方法,每次选取一定数目(mini-batch)的样本组成一个小批量样本,然后用这个小批量来更新梯度,这样不仅可以减少计算成本,还可以提高算法稳定性。
对这三者的关系进行一个比喻就是:
个人网站链接