mxnet單卡訓練和多卡訓練的學習率如何設定?

時間 2021-05-30 03:33:39

1樓:Haozhi Qi

實驗室網掛了,不知道什麼時候能修好。於是我就來回答一下這個問題。

一句話總結,學習率沒有乙個萬能的設定方法,這個和 rescale_grad, learning rate, normalization 都有關係。關鍵是你要知道你的設定能不能達到你想要的效果。

這篇回答想要解決的問題是,「如果我想要多卡多圖達到的效果和單卡單圖的效果是理論上等效的,那麼 rescale_grad, lr, normalization 到底該怎麼設」。

(實驗上肯定不等效,batch size 256 和 512 還有可能等效,但 256 和 32 這種量級差別就肯定做不到了)

MxNet 中 SGD 的實現在下鏈結處。這裡複製了 without momentum 的 SGD,但下述所有結論均適用於 with momentum 的情況。

SGD 的實現是

其中,W 是這一層的引數,lr 是 learning rate,N 是 rescale grad,G 是 n 張卡反傳回來的梯度之和,wd 是 weight decay。可以看到,影響 W 更新的一共有 4 者。(下文論述中,n 代表卡數,k 代表每張卡的 batch size)。

舉個栗子來說。比如最單純的,image classification 的情況,如果你想要達到的效果是,用一張卡 (n = 1),並且每張卡一張圖 (k = 1)訓練,學習率是 。那當你加卡(變成 n 張卡)或者加圖 (每張卡變成 k 張圖)的時候,應該如下設定:

(我就大膽假設用的就是 softmax loss 做分類了)

如果你的 loss 用的 normalization 選項是 null(預設設定),這個時候 G 變成了原來的 n * k 倍。那麼應該 N = (n * k), 同時 放大 n * k 倍。

如果你的 loss 用的是 batch,那麼此時,G 變成了原來的 n 倍,所以這時的設定應該是 N = n,同時 放大 n * k 倍。訓練的更新次數除以 (n * k)。

也就是說, 這一項,應該永遠都和單卡單圖的情況等價。不同的是,通過 learning rate 的變化來控制每一步所走的距離。

另外說一句題外話,當時寫 msracver/Deformable-ConvNets 的時候,採取的策略是令 N 永遠等於 1。這樣的話 lr 可以每一次都不變。但這樣是有問題的,原因在於此時 這一項和 這一項的比例就發生了變化,跟單卡單圖時候的情形就不一樣了。

網好了,繼續搬磚。

健身健美訓練和體能訓練的區別?

聶耳朵 體能訓練包含 肌肉耐力肌肥大肌肉力量爆發力訓練和身體的平衡穩定柔韌敏捷訓練。而健身房裡面大多數所謂的健身健美一般僅包含肌肥大和肌力量訓練。在系統學習之前,我所認為的體能就是心肺功能,然而並不僅僅如此。知識水平有限,不敢妄答,有興趣建議買本體能訓練專家的圖書 nsca cscs 周琳 應該是三...

遞增組訓練和遞減組訓練的區別在哪兒?

阿俊健身 遞增和遞減都是一種訓練方法 至於效果沒什麼大區別 遞增是從輕重量到大重量一點一點增加 遞減是從大重量每組一點一點減少 也可以結合著做金字塔 遞增組訓練和遞減組訓練的目的是不同的。訓練目的決定訓練形式。遞增組的訓練往往是訓練剛開始,用遞增組進行熱身 第一組的重量相對較小 15RM左右 第二組...

有氧和力量訓練的關係?

夏天的風 在力量方面差別應該不大,體型其實差別也不是很大,進行有氧訓練的應該會更加 勻稱 一些。其實最主要的差別應該是心肺功能,進行有氧運動的心肺功能要強。 衝動的蒸汽 看效果無非是訓練飲食 1.訓練兩者訓練形式一樣的第二個人做了更多的有氧2.飲食第二個人攝入更多的熱量但是多餘的熱量又消耗了3.體重...