NLP学习(14)之基于梯度的优化方法

Apr 10, 2019


基于梯度的优化方法

我们把要最小化或最大化的函数称为目标函数或准则函数。

多维函数的偏导数

  • 二元函数:
    :f对x的偏导数,描述固定y时函数值f随x的变化率。
    :f对y的偏导数,描述固定x时函数值f随y的变化率。
  • 多维函数:,偏导数衡量点x处只有增加时如何变化,

多维函数的梯度

  • 二元函数:
    二元函数的梯度:{}
  • 多维函数:记为,梯度的第i个元素是f关于的偏导数。
    = {}

多维函数的方向导数

  • 二元函数:
    optimization-method-based-on-gradient-fig1
    其中v表示的梯度,u为单位向量。在u方向的方向导数,大小为v在u上的投影长度,方向为u。
  • 多维函数:在多维情况下,

    为了最小化,希望找到使下降的最快的方向,


    因此在u与梯度相反时,取得最小,称为梯度下降。梯度下降建议新的点为:
    ,其中为学习率。

Jacobian和Hessian矩阵

有时需要计算输入和输出都为向量的函数的所有偏导数。如:
,则的Jacobian矩阵
例如:

有时我们也需要计算二阶导数,二阶导数是对曲率的衡量,当函数有多维输入时,二阶导数也有很多,将其合并成一个矩阵,称为Hessian矩阵。

我们可以通过二阶导数预期一个梯度下降步骤能够表现的多好,在点处作的近似二阶泰勒级数:
,其中是梯度,点的Hessian。
当学习率为,那么新的点,代入得:

为零或者负值时,近似的泰勒级数表明增加将永远使下降,但很大的时候,泰勒级数的近似就不准确,因此需要更启发式的选择。
为正时,使近似泰勒级数下降最多的最优步长为,

最坏情况下,最大特征值对应的特征向量对齐,则最优步长为,故在要最小化的函数能用二次函数很好近似时,Hessian矩阵的特征值决定了学习率的量级。

二阶导数测试

二阶导数可以用于确定一个临界点是否是局部极大点,局部极小点,或鞍点,但当时,测试是不确定的。
利用Hessian矩阵的特征值分解,可以将二阶导数测试扩展到多维情况,在临界点处(),我们通过检测Hessian的特征值来判断该临界点是局部极大点,局部极小点,还是鞍点:

  1. 若Hessian正定,则该临界点是局部极小值点。
  2. 若Hessian负定,则该临界点是局部极大值点。
  3. 当所有非零特征值是同号且至少有一个特征值为0时,检测不确定。

在一个方向上导数增加很快,而在另一个方向上倒数增加很慢,此时梯度下降无法利用Hessian中的信息,不知道导数的这种变化,当函数呈长峡谷壮时,梯度下降法的效率极低。
我们可以利用Hessian矩阵的信息来指导搜索,解决这个问题,其中最简单的是牛顿法。

计算得临界点:

基本思想:对x求导的结果要和x的形状相同。

只利用梯度信息的优化算法称为一阶优化算法,如梯度下降;利用Hessian矩阵的优化算法被称为二阶优化算法,如牛顿法。


上一篇博客:Keep Fork Up To Date
下一篇博客:NLP学习(15)之约束优化