哪个反向传播步骤最贵? (Tensorflow)

时间:2017-08-22 02:41:43

标签: tensorflow

让我们说我有一个复杂的网络,可以提供可变大小的数据批量。像往常一样,做反向传播基本上需要3个步骤:

  1. 正向通行证:评估损失。
  2. 向后传递:计算渐变值。
  3. 渐变更新:使用优化程序计算渐变更新并将其应用于变量。
  4. 在Tensorflow中,tf.train.Optimizer类通过公开以下方法来处理此问题:

    • compute_gradients:应用步骤#1& #2。
    • apply_gradients:应用步骤#3。
    • 最小化:结合上述两者的效用函数(因此#1,#2和#3)。

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

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

2 个答案:

答案 0 :(得分:2)

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

这是一个重要的知识,因为它涵盖了许多架构(卷积和完全连接)。

如果它不成立,它通常是一个实施效率低下/性能错误。

答案 1 :(得分:0)

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

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