1
比方說,我有一個複雜的網絡,可以使用可變大小的數據批處理。像往常一樣,做反向傳播主要涉及3個步驟:哪個反向傳播步驟是最昂貴的? (Tensorflow)
- 正向傳遞:評估損失。
- 向後傳遞:計算漸變值。
- 漸變更新:使用優化器計算漸變更新並將其應用於變量。
在Tensorflow的tf.train.Optimizer類通過暴露下面的方法來處理它:
- compute_gradients:應用步驟#1 &#2。
- apply_gradients:應用步驟#3。
- 最小化:結合上述兩者的效用函數(因此確實#1,#2 &#3)。
我的問題是,假設我們提供了大量的數據並且網絡可能很深且很複雜,那麼這些步驟中的哪一個預計會更加昂貴?
我從分佈式計算的角度問。特別是從多個並行實例試圖爲同一個網絡做出貢獻的情況。例如,如果計算梯度比使用它們(比如使用AdamOptimizer)要昂貴得多,我想知道是否值得在強大的訓練服務器中計算梯度,然後將它們發送到參數服務器隊列,爲了避免併發問題。