我们考虑一个代价函数
C
,这个函数可以将一个参数向量
C(θ)=1n∑i=1nL(fθ,zi)
(这个数值被称为训练损失)或者
C(θ)=∫L(fθ,z)P(z)dz
(这个数值被称为泛化损失)。其中在监督学习中,我们有
z=(x,y)
且
fθ(x)
是参数为
θ
的
y
的预测值。
梯度
函数
∂C(θ)∂θ=limδθ→0C(θ+δθ)−C(θ)δθ
这代表的是,变化
△θ
引起的函数的变化
△C
,其中
△θ
是一个非常小的值。
当 θ 是一个向量,则梯度 ∂C(θ)∂θ 也是一个向量,其中每个元素是关于 θi 的 ∂C(θ)∂θi ,其中假设其他参数是固定的,仅仅改变 △θi 并测量函数的变化量 △C 。当 △θi 很小的时候, △C△θi 变为了 ∂C(θ)∂θi 。
梯度下降法
我们希望找到一个
θ
以最小化
C(θ)
的值。我们可以对其求导:
∂C(θ)∂θ=0
然后我们找到最小值点(最大值点和马鞍点),但是通常我们找不到这个方程的解析解。所以我们要使用数值最优化方法。多数的最优化方法是基于
局部下降的:通过对
θ
的迭代调整,减少
C(θ)
的值,直到数值不能继续下降。最终我们可以找到一个局部极小点(幸运地话,可以找到全局极小点)。
在基于梯度的优化方法中,最简单的方法是梯度下降法。它存在很多变型形式,我们先定义 最原始的梯度下降:
θk+1=θk−εk∂C(θk)∂θk
其中,
θk
代表第
k
次迭代的参数,随机梯度下降
我们可以发现
C
的公式是一个平均值,是在独立同分布(i.i.d)的样本集上的。为了更快的迭代
θk+1=θk−εk∂L(θk,z)∂θk
其中,z是训练集的下一个样本,或者在
在线设定中(没有固定的训练样本数,但是存在连续不断的样本流)是训练分布的下一个采样的样本。随机梯度下降法(SGD)其实更加通用,它的更新方向是一个随机变量,这个随机变量的期望是真实的梯度下降方向。SGD除了它随机性的增长以外,收敛条件和其他的梯度下降法相同。
SGD比原始的梯度下降法具有更快的速度,因为它更新的速度很快。特别是在大数据集的情况下,或者对于在线设定。其实,对于机器学习任务而言,只有在最优化函数不能分解时,才使用传统的梯度下降法。
批量梯度下降法
批量梯度下降法是SGD的一个变型,它使用一小批(
B
个,例如20或者100个)样本的平均值来获得下降方向。最大的好处在于,可以不使用
批量梯度下降法的一个好处,在于可以减小梯度估计中的噪声成分(