Tensorflow 哪一个反向传播步骤最昂贵?(张量流)

Tensorflow 哪一个反向传播步骤最昂贵?(张量流),tensorflow,Tensorflow,比如说,我有一个复杂的网络,它由可变大小的数据批提供。通常,进行反向传播主要包括3个步骤: 向前传球:评估损失 向后传递:计算渐变值 梯度更新:使用优化器计算梯度更新并将其应用于变量 在Tensorflow中,tf.train.Optimizer类通过公开以下方法来处理此问题: 计算梯度:应用步骤#1和#2 应用#渐变:应用步骤#3 最小化:将上述两种功能结合在一起的效用函数(因此可以实现#1、#2和#3) 我的问题是,假设我们提供了大量数据,并且网络可能很深很复杂,那么一般来说,这些步骤中

比如说,我有一个复杂的网络,它由可变大小的数据批提供。通常,进行反向传播主要包括3个步骤:

  • 向前传球:评估损失
  • 向后传递:计算渐变值
  • 梯度更新:使用优化器计算梯度更新并将其应用于变量
  • 在Tensorflow中,tf.train.Optimizer类通过公开以下方法来处理此问题:

    • 计算梯度:应用步骤#1和#2
    • 应用#渐变:应用步骤#3
    • 最小化:将上述两种功能结合在一起的效用函数(因此可以实现#1、#2和#3)
    我的问题是,假设我们提供了大量数据,并且网络可能很深很复杂,那么一般来说,这些步骤中的哪一步应该更昂贵


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

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

    这是需要了解的一个重要方面,因为它适用于许多体系结构(卷积和完全连接)


    当它不起作用时,通常是执行效率低下/性能缺陷。

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

    详情如下: