一、链式法则

  1. 反向传播算法是一种利用链式法则计算微分的算法。

  2. 在一维的情况下,链式法则为: 一、链式法则 - 图1

  3. 在多维情况下,设: 一、链式法则 - 图2一、链式法则 - 图3一、链式法则 - 图4一、链式法则 - 图5 的映射且满足 一、链式法则 - 图6一、链式法则 - 图7一、链式法则 - 图8一、链式法则 - 图9 的映射且满足 一、链式法则 - 图10。则有:

    一、链式法则 - 图11

    使用向量记法,可以等价地写作:

    一、链式法则 - 图12

    其中: 一、链式法则 - 图13一、链式法则 - 图14一、链式法则 - 图15 阶雅可比矩阵,一、链式法则 - 图16一、链式法则 - 图17一、链式法则 - 图18 的梯度,一、链式法则 - 图19一、链式法则 - 图20一、链式法则 - 图21 的梯度:

    一、链式法则 - 图22

    反向传播算法由很多这样的雅可比矩阵与梯度的乘积操作组成。

1.1 张量链式法则

  1. 链式法则不仅可以作用于向量,也可以应用于张量:

    • 首先将张量展平为一维向量。
    • 然后计算该向量的梯度。
    • 然后将该梯度重新构造为张量。
  2. 一、链式法则 - 图23一、链式法则 - 图24 对张量 一、链式法则 - 图25 的梯度。一、链式法则 - 图26 现在有多个索引(如:二维张量有两个索引),可以使用单个变量 一、链式法则 - 图27 来表示 一、链式法则 - 图28 的索引元组(如 一、链式法则 - 图29 表示:一个二维张量的索引,每个维度三个元素)。

    这就与向量中的索引方式完全一致: 一、链式法则 - 图30

    如:

    一、链式法则 - 图31

    则有:

    一、链式法则 - 图32

  3. 一、链式法则 - 图33,用单个变量 一、链式法则 - 图34 来表示 一、链式法则 - 图35 的索引元组。则张量的链式法则为:

    一、链式法则 - 图36

    如:

    一、链式法则 - 图37

    则有:

    一、链式法则 - 图38

    .

1.2 重复子表达式

  1. 给定计算图以及计算图中的某个标量 一、链式法则 - 图39 ,根据链式法则可以很容易地写出 一、链式法则 - 图40 对于产生 一、链式法则 - 图41 的任意节点的梯度的数学表达式。

    但是在计算该表达式的时候,许多子表达式可能在计算整个梯度表达式的过程中重复很多次。

    一、链式法则 - 图42

    如图中:

    一、链式法则 - 图43

    可以看到 一、链式法则 - 图44 被计算多次。

    • 在复杂的计算图中,可能存在指数量级的重复子表达式,这使得原始的链式法则几乎不可实现。

    • 一个解决方案是:计算 一、链式法则 - 图45 一次并将它存储在 一、链式法则 - 图46 中,然后采用 一、链式法则 - 图47 来计算梯度。

      这也是反向传播算法采用的方案:在前向传播时,将节点的中间计算结果全部存储在当前节点上。其代价是更高的内存开销。

  2. 有时候必须重复计算子表达式。这是以较高的运行时间为代价,来换取较少的内存开销。