【问题标题】:Which backpropagation step is the most expensive? (Tensorflow)哪个反向传播步骤最昂贵? (张量流)
【发布时间】:2018-01-30 04:16:45
【问题描述】:

假设我有一个复杂的网络,其中包含可变大小的数据批次。像往常一样,进行反向传播基本上需要 3 个步骤:

  1. 前向传播:评估损失。
  2. 向后传递:计算梯度值。
  3. 梯度更新:使用优化器计算梯度更新并将其应用于变量。

在 TensorFlow 中,tf.train.Optimizer 类通过公开以下方法来处理这个问题:

  • compute_gradients:应用第 1 步和第 2 步。
  • apply_gradients:应用第 3 步。
  • minimize:将上述两者结合起来的实用函数(因此也是 #1、#2 和 #3)。

我的问题是,假设我们提供大量数据并且网络可能很深且很复杂,那么这些步骤中的哪一个通常应该会更昂贵?

我是从分布式计算的角度问的。特别是,在多个并行实例试图为同一个网络做出贡献的情况下。例如,如果计算梯度比应用梯度要昂贵得多(比如说,使用 AdamOptimizer),我想知道是否值得在强大的训练服务器中计算梯度,然后将它们发送到参数服务器队列,该队列在为了避免并发问题。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    假设大深度和大批量大小,步骤 2 将(几乎完全)是步骤 1 的两倍。另一方面,步骤 3 将比其他两个便宜得多。

    了解这一点很重要,因为它适用于许多架构(包括卷积和全连接)。

    当它不成立时,通常是实现效率低下/性能错误。

    【讨论】:

      【解决方案2】:

      向后传递期间发生的操作数是向前传递期间发生的操作数的两倍。这是因为,在每一层的反向传播中,必须为该层的权重和前一层的输出计算梯度(以便可以计算前一层权重的梯度)。这是前向传递中操作次数的两倍。

      更多细节在这里: https://cs.toronto.edu/~rgrosse/courses/csc321_2017/slides/lec6.pdf

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-31
        • 2020-05-24
        • 2010-10-12
        • 1970-01-01
        • 2018-02-08
        • 1970-01-01
        相关资源
        最近更新 更多