天天看点

李宏毅机器学习笔记——反向传播算法

  1. 前向传播 forward propagation 过程:当前馈神经网络接收输入 并产生输出 时,信息前向流动。 输入 提供初始信息,然后信息传播到每一层的隐单元,最终产生输出
  2. 反向传播算法 back propagation 允许来自代价函数的信息通过网络反向流动以便计算梯度。
  • 反向传播并不是用于学习整个神经网络的算法,而是仅用于计算梯度的算法。 神经网络的学习算法是随机梯度下降这类基于梯度的算法。
  • 反向传播不仅仅适用于神经网络,原则上它适用于计算任何函数的导数。
  1. 计算图 computational graph :
  • 图中的每个节点代表一个变量 (可以是标量、向量、矩阵或者张量)。
  • 操作: operation 为一个或者多个变量的简单函数。
  • 多个操作组合在一起可以描述一个更复杂的函数。
  • 一个操作仅返回单个输出变量 (可以是标量、向量、矩阵或者张量)。
  • 如果变量 是变量 通过一个操作计算得到,则在图中绘制一条从 到

链式法则

  1. 反向传播算法是一种利用链式法则计算微分的算法。
  2. 在一维的情况下,链式法则为:
  3. 在多维情况下,设: 为 到 的映射且满足 为 到 的映射且满 足 。则有:

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

    其中: 为 的 阶雅可比矩阵, 为 对 的梯度, 为 对 的梯度:

张量链式法则

  1. 链式法则仅可以作用于向量,也可以应用于张量:
  • 首先将张量展平为一维向量。
  • 然后计算该向量的梯度。
  • 然后将该牱度重新构造为张量。
  1. 记 为 对张量 的梯度。 现在有多个索引 (如:二维张量有两个索引),可以使用单个变量 来表 示 的索引元组(如 表示: 一个二维张量的系引,每个维度三个元素)。

    这就与向量中的系引方式完全一致: 。

    奴:

    则有:

  2. 设 ,用单个变量 来表示 的索引元組。则张量的链式法则为:

    如:

    则有:

反向传播算法

  1. 反向传播算法:
  • 输入:
  • 计算图
  • 初始化参数向量

    。 输出:

  • 运行计算
  • 给出一个 grad_table 表,它存储的是已经计算出来的偏导数。

    对应的表项存储的是偏导数

  • 初始化 grad_table
  • 沿着计算图 计算偏导数。遍历 从
  • 计算 。其中: 是已经存储的 grad_table[ui , 为实时计算的。

    图 中的边 定义了一个操作,而该操作的偏导只依赖于这两个变量,因此可以实时求 解

  • 存储 _able
  • 逅回
  1. 反向传播算法计算所有的偏导数,计算量与 中的边的数量成正比。

    其中每条边的计算包括计算偏导数,以及执行一次向量点积。

  2. 上述反向传播算法为了减少公共子表达式的计算量,并没有考虑存储的开销。这避免了重复子表达式的指数 级的增长。

    。 某些算法可以通过对计算图进行简化从而避免更多的子表达式。

    。 有些算法会重新认算这些子表达式而不是存储它们,从而节省内存。

参考

继续阅读