为什么我们使用基于一阶偏微分的SGD优化算法,而不使用包含二阶偏微分的牛顿法?

牛顿法是基于二阶泰勒级数展开来近似目标函数的优化方法。
目标函数J(θ)J(\theta)θ0\theta_0处的二阶展开为
J(θ)J(θ0)+(θθ0)TθJ(θ0)+12(θθ0)TH(θθ0)J(\theta) \approx J(\theta_0) + (\theta - \theta_0)^T \nabla_{\theta} J(\theta_0) + \frac{1}{2} (\theta - \theta_0) ^T H (\theta - \theta_0)
上式令θJ(θ)=0\nabla_{\theta} J(\theta) = 0,可以解得θ=θ0H1θJ(θ0)\theta^{*} = \theta_0 - H^{-1}\nabla_{\theta}J(\theta_0)

对于二次函数(或在局部是二次的函数),Hessian矩阵HH正定,那么H1H^{-1}可计算,牛顿法会使参数直接跳到极小值点。
对于非二次的函数,只要Hessian矩阵在当前保持正定,牛顿法依然适用,可以迭代地更新下去。
相比起一阶方法,牛顿法能够充分利用二阶微分的信息,减少迭代的次数,缩短训练时间。但它有以下缺陷:

  1. 牛顿法需要计算矩阵的逆。一个k×kk\times k的矩阵的求逆运算的复杂度是O(k3)O(k^3),这将大大增加计算的负担。
  2. 牛顿法在局部二次曲面上会直接求得极小值点,而极小值点的梯度为零。这就使得模型陷入了局部最优,无法通过梯度更新逃离局部最优解。
  3. 牛顿法只适用于Hessian矩阵正定的情况。在高维空间中,这一点不一定成立。例如,在鞍点附近,Hessian矩阵同时具有正负特征值。牛顿法将会得到错误的方向。
  4. 最严重的问题是,牛顿法会被吸引到鞍点。但高维参数空间中,鞍点比局部极值普遍。梯度下降法会沿着梯度的反方向前进,如果梯度反方向没有鞍点,那么它不会主动去找鞍点。所以梯度下降能够逃离鞍点,但牛顿法不能。牛顿法旨在寻找梯度为零的点,它会主动找到鞍点,并锁死在那里(因为鞍点的梯度为零)。