【发布时间】:2018-01-30 04:16:45
【问题描述】:
假设我有一个复杂的网络,其中包含可变大小的数据批次。像往常一样,进行反向传播基本上需要 3 个步骤:
- 前向传播:评估损失。
- 向后传递:计算梯度值。
- 梯度更新:使用优化器计算梯度更新并将其应用于变量。
在 TensorFlow 中,tf.train.Optimizer 类通过公开以下方法来处理这个问题:
- compute_gradients:应用第 1 步和第 2 步。
- apply_gradients:应用第 3 步。
- minimize:将上述两者结合起来的实用函数(因此也是 #1、#2 和 #3)。
我的问题是,假设我们提供大量数据并且网络可能很深且很复杂,那么这些步骤中的哪一个通常应该会更昂贵?
我是从分布式计算的角度问的。特别是,在多个并行实例试图为同一个网络做出贡献的情况下。例如,如果计算梯度比应用梯度要昂贵得多(比如说,使用 AdamOptimizer),我想知道是否值得在强大的训练服务器中计算梯度,然后将它们发送到参数服务器队列,该队列在为了避免并发问题。
【问题讨论】:
标签: tensorflow