2017-08-22 15 views
1

比方說,我有一個複雜的網絡,可以使用可變大小的數據批處理。像往常一樣,做反向傳播主要涉及3個步驟:哪個反向傳播步驟是最昂貴的? (Tensorflow)

  1. 正向傳遞:評估損失。
  2. 向後傳遞:計算漸變值。
  3. 漸變更新:使用優化器計算漸變更新並將其應用於變量。

在Tensorflow的tf.train.Optimizer類通過暴露下面的方法來處理它:

  • compute_gradients:應用步驟#1 &#2。
  • apply_gradients:應用步驟#3。
  • 最小化:結合上述兩者的效用函數(因此確實#1,#2 &#3)。

我的問題是,假設我們提供了大量的數據並且網絡可能很深且很複雜,那麼這些步驟中的哪一個預計會更加昂貴?

我從分佈式計算的角度問。特別是從多個並行實例試圖爲同一個網絡做出貢獻的情況。例如,如果計算梯度比使用它們(比如使用AdamOptimizer)要昂貴得多,我想知道是否值得在強大的訓練服務器中計算梯度,然後將它們發送到參數服務器隊列,爲了避免併發問題。

回答

1

假設深度和批量較大,步驟2將會(幾乎完全),比步驟1貴兩倍。另一方面,步驟3將比其他兩個便宜得多。

這是一個很重要的知識點,因爲它在許多體系結構(卷積和完全連接)中都有效。

當它不成立時,通常是實施效率低下/性能問題。