七、共轭梯度法

7.1 最速下降法

  1. 最速下降法是梯度下降法的一个特例:在每次梯度下降时,学习率的选择是使得当前函数值下降最快的那个学习率。

    七、共轭梯度法 - 图1

    梯度下降法仅仅指明:负梯度的方向是使得代价函数值下降的方向。它并没有说明沿着负梯度的方向推进多少步长。

    最速下降法通过显式对学习率建模,求解沿着负梯度的方向需要推进多少步长。

  2. 在最速下降法中,假设上一次搜索方向是 七、共轭梯度法 - 图2,当前搜索方向是 七、共轭梯度法 - 图3。可以证明有:

    七、共轭梯度法 - 图4

    即:前后两次搜索的方向是正交的。

    七、共轭梯度法 - 图5

    证明过程:

    已知 七、共轭梯度法 - 图6 的梯度 七、共轭梯度法 - 图7,根据 七、共轭梯度法 - 图8 ,则有:

    七、共轭梯度法 - 图9

  3. 在最速下降法中,前进过程是锯齿形的。在某种意义上,这意味着消除了之前的线性搜索方向上取得的进展:

    如果前一次搜索已经找出了某个方向上的最小值,最速下降法不会保持这一方向。

7.2 共轭梯度法

  1. 共轭:给定一个正定矩阵 七、共轭梯度法 - 图10 ,如果非零向量 七、共轭梯度法 - 图11 满足:七、共轭梯度法 - 图12 ,则称向量 七、共轭梯度法 - 图13 关于 七、共轭梯度法 - 图14 共轭。
  2. 如果 七、共轭梯度法 - 图15 为单位矩阵,则有 七、共轭梯度法 - 图16。即:向量共轭是向量点积为0的推广。

7.2.1 共轭梯度原理

  1. 对于线性空间 七、共轭梯度法 - 图17,如果能找到 七、共轭梯度法 - 图18 个向量 七、共轭梯度法 - 图19,且它们满足:七、共轭梯度法 - 图20 ,则可以证明这一组向量是线性无关的。

    此时这一组向量可以作为线性空间的一组基向量,空间中任意向量 七、共轭梯度法 - 图21 都可以用这组向量表示:七、共轭梯度法 - 图22

  2. 对于二次函数极值问题(其中 七、共轭梯度法 - 图23 为正定矩阵):七、共轭梯度法 - 图24 ,将 七、共轭梯度法 - 图25 代入上式,令 七、共轭梯度法 - 图26

    七、共轭梯度法 - 图27

    根据 七、共轭梯度法 - 图28 ,有:

    七、共轭梯度法 - 图29

  3. 现在变量 七、共轭梯度法 - 图30 已经被分开,可以分别优化。

    于是求解第 七、共轭梯度法 - 图31 项的最小值:

    七、共轭梯度法 - 图32

    直接求导即可得到:

    七、共轭梯度法 - 图33

    最优解为:

    七、共轭梯度法 - 图34

  4. 上述最优解可以这样理解:

    • 目标函数沿着方向 七、共轭梯度法 - 图35 (即:七、共轭梯度法 - 图36)求解极小值,得到 七、共轭梯度法 - 图37
    • 总和所有的 七、共轭梯度法 - 图38 个方向求得的极小值,得到 七、共轭梯度法 - 图39

    现在的问题是:七、共轭梯度法 - 图40 个关于 七、共轭梯度法 - 图41 共轭的向量组 七、共轭梯度法 - 图42未知。

7.2.2 共轭梯度搜索

  1. 共轭梯度法通过迭代来搜索关于 七、共轭梯度法 - 图43 共轭的向量组 七、共轭梯度法 - 图44

  2. 令梯度 七、共轭梯度法 - 图45,由于 七、共轭梯度法 - 图46 ,则有:

    七、共轭梯度法 - 图47

    假设 七、共轭梯度法 - 图48 为对称的正定矩阵,则有:七、共轭梯度法 - 图49 。因此有:七、共轭梯度法 - 图50

  3. 任取一个初始点 七、共轭梯度法 - 图51

    • 如果 七、共轭梯度法 - 图52,则停止计算。因为此时 七、共轭梯度法 - 图53 就是极值点。

    • 否则,令 七、共轭梯度法 - 图54 ,即:七、共轭梯度法 - 图55 沿着点 七、共轭梯度法 - 图56 的梯度方向。

      沿着 七、共轭梯度法 - 图57 方向搜索: 七、共轭梯度法 - 图58,使得沿着这个方向,目标函数下降最多。

      七、共轭梯度法 - 图59

      解得:

      七、共轭梯度法 - 图60

      由于 七、共轭梯度法 - 图61,因此有:

      七、共轭梯度法 - 图62

  4. 选择第二个迭代点:

    七、共轭梯度法 - 图63

    注意:这里有 七、共轭梯度法 - 图64,但是不保证后面的 七、共轭梯度法 - 图65

    构建下一个搜索方向,使得 七、共轭梯度法 - 图66七、共轭梯度法 - 图67 关于 七、共轭梯度法 - 图68 共轭。

    令:七、共轭梯度法 - 图69,代入 七、共轭梯度法 - 图70,有:

    七、共轭梯度法 - 图71

  5. 同理:得到 七、共轭梯度法 - 图72 时,计算梯度 七、共轭梯度法 - 图73,同时用 七、共轭梯度法 - 图74七、共轭梯度法 - 图75 来构建下一个搜索方向:

    七、共轭梯度法 - 图76

    得到:

    七、共轭梯度法 - 图77

    .

7.2.3 共轭梯度算法

  1. 共轭梯度法的搜索方向 七、共轭梯度法 - 图78 会保持前一次线性搜索方向上 七、共轭梯度法 - 图79 取得的进展:

    七、共轭梯度法 - 图80

    其中 七、共轭梯度法 - 图81 的大小控制了:要保留多大比例的上一次搜索方向。

  2. 在实际应用中,目标函数往往是高于二次的函数。此时为非线性共轭梯度, 七、共轭梯度法 - 图82 就是海森矩阵 七、共轭梯度法 - 图83

    直接计算 七、共轭梯度法 - 图84 也需要计算海森矩阵的逆矩阵,比较复杂。有两个计算 七、共轭梯度法 - 图85 的流行方法(不需要计算海森矩阵的逆矩阵):

    这里不再保证 七、共轭梯度法 - 图86七、共轭梯度法 - 图87 关于 七、共轭梯度法 - 图88 是共轭的。

    • Fletcher-Reeves

      七、共轭梯度法 - 图89

    • Polak_Ribiere

      七、共轭梯度法 - 图90

  3. 目标函数在高于二次的函数时,往往可能存在局部极值。此时共轭梯度法不能在 七、共轭梯度法 - 图91 维空间内依靠 七、共轭梯度法 - 图92 步搜索到达极值点。

    此时需要重启共轭梯度法,继续迭代,以完成搜索极值点的工作。

  4. 共轭梯度法:

    • 输入:

      • 初始参数 七、共轭梯度法 - 图93
      • 包含 七、共轭梯度法 - 图94 个样本的训练集
    • 算法步骤:

      • 初始化:

        七、共轭梯度法 - 图95

      • 迭代,直到到达停止条件。迭代步骤为:

        • 计算梯度:

          七、共轭梯度法 - 图96

        • 计算 七、共轭梯度法 - 图97

          七、共轭梯度法 - 图98

          如果是非线性共轭梯度:则可以以一定的频率重置 七、共轭梯度法 - 图99 为零(如每当 七、共轭梯度法 - 图100 为 5 的倍数时)。

        • 计算搜索方向: 七、共轭梯度法 - 图101

        • 执行线性搜索: 七、共轭梯度法 - 图102

          在前面推导过程中,并没有出现这一步。这是因为:在非线性共轭梯度下,以及修改的 七、共轭梯度法 - 图103 的情况下,不再满足 七、共轭梯度法 - 图104七、共轭梯度法 - 图105 关于 七、共轭梯度法 - 图106 是共轭的。

          对于真正的二次函数:存在 七、共轭梯度法 - 图107 的解析解,无需显式搜索。

          • 应用更新: 七、共轭梯度法 - 图108
          • 七、共轭梯度法 - 图109

7.2.4 共轭梯度算法性质

  1. 神经网络的目标函数比二次函数复杂得多,但是共轭梯度法在这种情况下仍然适用。此时非线性共轭梯度算法会偶尔采取一些重置操作(重置 七、共轭梯度法 - 图110 为零)。

  2. 尽管共轭梯度算法是批方法(需要所有的样本来计算梯度),目前也开发出了mini-batch版本。

  3. 理论上,对于二次函数的目标函数,需要迭代 七、共轭梯度法 - 图111 步,七、共轭梯度法 - 图112 为参数的个数。每一步中都需要计算梯度。

    在神经网络中,这样有两个问题:

    • 当参数的数量 七、共轭梯度法 - 图113 巨大时,迭代的量非常大,而且难以并行(后面的迭代依赖前面的迭代),计算量非常庞大。
    • 当样本的数量巨大时,每次迭代中的梯度计算的计算量非常庞大。