梯度下降法
简介
梯度下降法是最小化目标函数 J(θ) 的一种方法,旨在降低真实值和预测值之间的误差,其中 θ∈Rd 为模型参数。梯度下降法利用目标函数计算参数梯度 ΔθJ(θ) 的反方向更新参数。学习率 η (learning rate)决定达到最小值或者局部最小值过程中所采用的的步长大小,即,我们沿着目标函数的斜面下降的方向,直到到达谷底。梯度下降法
梯度下降法有三种形式,它们之间的区别在于计算目标函数梯度时使用到多少数据。根据数据量的大小,我们在参数更新的精度和更新过程中所需要的时间两个方面做出权衡。2.1 批梯度下降法
Vanilla梯度下降法,即批梯度下降法(batch gradient descent),在整个训练集上计算损失函数关于参数 θ 的梯度:
θ=θ−ΔθJ(θ)
因为在执行每次更新时,我们需要在整个数据集上计算所有参数的梯度所以批梯度下降法无法处理超出内存容量限制的数据集。批梯度下降法同样也不能在线跟新模型,即在运行的过程中,不能增加新的样本。
对于给定的迭代次数,首先,我们利用全部数据集计算损失函数关于参数向量 θ 的梯度向量 ΔθJ(θ) 。然后,我们利用梯度的方向和学习率更新参数,学习率决定我们将以多大的步长更新参数。对于凸误差函数,批梯度下降法能够保证收敛到全局最小值,对于非凸函数,则收敛到一个局部最小值。2.2 随机梯度下降法
随机梯度下降法(stochastic gradient descent, SGD)根据每一条训练样本 x(i) 和标签 y(i) 更新参数:
θ=θ−η⋅ΔθJ(θ;x(i);y(i))
对于大数据集,因为批梯度下降法在每一个参数更新之前,会对相似的样本计算梯度,所以在计算过程中会有冗余。而SGD在每一次更新中只执行一次,从而消除了冗余。因而,通常SGD的运行速度更快,同时,可以用于在线学习。与批梯度下降法的收敛会使得损失函数陷入局部最小相比,由于SGD的波动性,一方面,波动性使得SGD可以跳到新的和潜在更好的局部最优。另一方面,这使得最终收敛到特定最小值的过程变得复杂,因为SGD会一直持续波动。然而,已经证明当我们缓慢减小学习率,SGD与批梯度下降法具有相同的收敛行为,对于非凸优化和凸优化,可以分别收敛到局部最小值和全局最小值。2.3 小批量梯度下降法
小批量梯度下降法最终结合了上述两种方法的优点,在每次更新时使用 n 个小批量训练样本:
θ=θ−η⋅ΔθJ(θ;x(i:i+n);y(i;i+n))
这种方法,a)减少参数更新的方差,这样可以得到更加稳定的收敛结果;b)可以利用最新的深度学习库中高度优化的矩阵优化方法,高效地求解每个小批量数据的梯度。通常,小批量数据的大小在50到256之间,也可以根据不同的应用有所变化。当训练神经网络模型时,小批量梯度下降法是典型的选择算法,当使用小批量梯度下降法时,也将其称为SGD。