自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何理解深度學(xué)習(xí)分布式訓(xùn)練中的large batch size與learning rate的關(guān)系?

人工智能 深度學(xué)習(xí) 分布式
在深度學(xué)習(xí)進(jìn)行分布式訓(xùn)練時(shí),常常采用同步數(shù)據(jù)并行的方式,也就是采用大的batch size進(jìn)行訓(xùn)練,但large batch一般較于小的baseline的batch size性能更差,請(qǐng)問(wèn)如何理解調(diào)試learning rate能使large batch達(dá)到small batch同樣的收斂精度和速度?

[[207640]]

本文源自譚旭在知乎問(wèn)題【如何理解深度學(xué)習(xí)分布式訓(xùn)練中的large batch size與learning rate的關(guān)系?】下的回答。

問(wèn)題詳情:

在深度學(xué)習(xí)進(jìn)行分布式訓(xùn)練時(shí),常常采用同步數(shù)據(jù)并行的方式,也就是采用大的batch size進(jìn)行訓(xùn)練,但large batch一般較于小的baseline的batch size性能更差,請(qǐng)問(wèn)如何理解調(diào)試learning rate能使large batch達(dá)到small batch同樣的收斂精度和速度?

回答:

最近在進(jìn)行多GPU分布式訓(xùn)練時(shí),也遇到了large batch與learning rate的理解調(diào)試問(wèn)題,相比baseline的batch size,多機(jī)同步并行(之前有答案是介紹同步并行的通信框架NCCL(譚旭:如何理解Nvidia英偉達(dá)的Multi-GPU多卡通信框架NCCL?),有興趣可以查看)等價(jià)于增大batch size,如果不進(jìn)行精細(xì)的設(shè)計(jì),large batch往往收斂效果會(huì)差于baseline的小batch size。因此將自己的理解以及實(shí)驗(yàn)總結(jié)如下,主要分為三個(gè)方面來(lái)介紹:(1)理解SGD、minibatch-SGD和GD,(2)large batch與learning rate的調(diào)試關(guān)系,(3)我們的實(shí)驗(yàn)。

(1)理解SGD、minibatch-SGD和GD

在機(jī)器學(xué)習(xí)優(yōu)化算法中,GD(gradient descent)是最常用的方法之一,簡(jiǎn)單來(lái)說(shuō)就是在整個(gè)訓(xùn)練集中計(jì)算當(dāng)前的梯度,選定一個(gè)步長(zhǎng)進(jìn)行更新。GD的優(yōu)點(diǎn)是,基于整個(gè)數(shù)據(jù)集得到的梯度,梯度估計(jì)相對(duì)較準(zhǔn),更新過(guò)程更準(zhǔn)確。但也有幾個(gè)缺點(diǎn),一個(gè)是當(dāng)訓(xùn)練集較大時(shí),GD的梯度計(jì)算較為耗時(shí),二是現(xiàn)代深度學(xué)習(xí)網(wǎng)絡(luò)的loss function往往是非凸的,基于凸優(yōu)化理論的優(yōu)化算法只能收斂到local minima,因此使用GD訓(xùn)練深度神經(jīng)網(wǎng)絡(luò),最終收斂點(diǎn)很容易落在初始點(diǎn)附近的一個(gè)local minima,不太容易達(dá)到較好的收斂性能。

另一個(gè)極端是SGD(stochastic gradient descent),每次計(jì)算梯度只用一個(gè)樣本,這樣做的好處是計(jì)算快,而且很適合online-learning數(shù)據(jù)流式到達(dá)的場(chǎng)景,但缺點(diǎn)是單個(gè)sample產(chǎn)生的梯度估計(jì)往往很不準(zhǔn),所以得采用很小的learning rate,而且由于現(xiàn)代的計(jì)算框架CPU/GPU的多線(xiàn)程工作,單個(gè)sample往往很難占滿(mǎn)CPU/GPU的使用率,導(dǎo)致計(jì)算資源浪費(fèi)。

折中的方案就是mini-batch,一次采用batch size的sample來(lái)估計(jì)梯度,這樣梯度估計(jì)相對(duì)于SGD更準(zhǔn),同時(shí)batch size能占滿(mǎn)CPU/GPU的計(jì)算資源,又不像GD那樣計(jì)算整個(gè)訓(xùn)練集。同時(shí)也由于mini batch能有適當(dāng)?shù)奶荻仍肼昜8],一定程度上緩解GD直接掉進(jìn)了初始點(diǎn)附近的local minima導(dǎo)致收斂不好的缺點(diǎn),所以mini-batch的方法也最為常用。

關(guān)于增大batch size對(duì)于梯度估計(jì)準(zhǔn)確度的影響,分析如下:

假設(shè)batch size為m,對(duì)于一個(gè)minibatch,loss為:

 

梯度

 

整個(gè)minibatch的梯度方差為:

 

由于每個(gè)樣本

 

是隨機(jī)從訓(xùn)練樣本集sample得到的,滿(mǎn)足i.i.d.假設(shè),因此樣本梯度的方差相等,為

 

等價(jià)于SGD的梯度方差,可以看到batch size增大m倍,相當(dāng)于將梯度的方差減少m倍,因此梯度更加準(zhǔn)確。

如果要保持方差和原來(lái)SGD一樣,相當(dāng)于給定了這么大的方差帶寬容量,那么就可以增大lr,充分利用這個(gè)方差容量,在上式中添加lr,同時(shí)利用方差的變化公式,得到等式

 

因此可將lr增加sqrt(m)倍,以提高訓(xùn)練速度,這也是在linear scaling rule之前很多人常用的增大lr的方式[4]。下一小節(jié)將詳細(xì)介紹增大lr的問(wèn)題。

(2)large batch與learning rate

在分布式訓(xùn)練中,batch size 隨著數(shù)據(jù)并行的worker增加而增大,假設(shè)baseline的batch size為B,learning rate為lr,訓(xùn)練epoch數(shù)為N。如果保持baseline的learning rate,一般不會(huì)有較好的收斂速度和精度。原因如下:對(duì)于收斂速度,假設(shè)k個(gè)worker,每次過(guò)的sample數(shù)量為kB,因此一個(gè)epoch下的更新次數(shù)為baseline的1/k,而每次更新的lr不變,所以要達(dá)到baseline相同的更新次數(shù),則需要增加epoch數(shù)量,***需要增加k*N個(gè)epoch,因此收斂加速倍數(shù)會(huì)遠(yuǎn)遠(yuǎn)低于k。對(duì)于收斂精度,由于增大了batch size使梯度估計(jì)相較于badeline的梯度更加準(zhǔn)確,噪音減少,更容易收斂到附近的local minima,類(lèi)似于GD的效果。

為了解決這個(gè)問(wèn)題,一個(gè)方法就是增大lr,因?yàn)閎atch變大梯度估計(jì)更準(zhǔn),理應(yīng)比baseline的梯度更確信一些,所以增大lr,利用更準(zhǔn)確的梯度多走一點(diǎn),提高收斂速度。同時(shí)增大lr,讓每次走的幅度盡量大一些,如果遇到了sharp local minima[8](sharp minima的說(shuō)法現(xiàn)在還有爭(zhēng)議,暫且引用這個(gè)說(shuō)法),還有可能逃出收斂到更好的地方。

但是lr不能***制的增大,原因分析如下。深度神經(jīng)網(wǎng)絡(luò)的loss surface往往是高維高度非線(xiàn)性的,可以理解為loss surface表面凹凸不平,坑坑洼洼,不像y=x^2曲線(xiàn)這樣光滑,因此基于當(dāng)前weight計(jì)算出來(lái)的梯度,往前更新的learing rate很大的時(shí)候,沿著loss surface的切線(xiàn)就走了很大一步,有可能大大偏于原有的loss surface,示例如下圖(a)所示,虛線(xiàn)是當(dāng)前梯度的方向,也就是當(dāng)前l(fā)oss surface的切線(xiàn)方向,如果learning rate過(guò)大,那這一步沿切線(xiàn)方向就走了很大一步,如果一直持續(xù)這樣,那很可能就走向了一個(gè)錯(cuò)誤的loss surface,如圖(b)所示。如果是較小的learning rate,每次只沿切線(xiàn)方向走一小步,雖然有些偏差,依然能大致沿著loss sourface steepest descent曲線(xiàn)向下降,最終收斂到一個(gè)不錯(cuò)的local minima,如圖(c)所示。

 

同時(shí)也可以根據(jù)convex convergence theory[2]得到lr的upper bound:lr<1/L,L為loss surface的gradient curve的Lipschitz factor,L可以理解為loss梯度的變化幅度的上界。如果變化幅度越大,L越大,則lr就會(huì)越小,如果變化幅度越小,L越小,則lr就可以很大。這和上圖的分析是一致的。

因此,如何確定large batch與learing rate的關(guān)系呢?

分別比較baseline和k個(gè)worker的large batch的更新公式[7],如下:

 

這個(gè)是baseline(batch size B)和large batch(batch size kB)的更新公式,(4)中l(wèi)arge batch過(guò)一步的數(shù)據(jù)量相當(dāng)于(3)中baseline k步過(guò)的數(shù)據(jù)量,loss和梯度都按找過(guò)的數(shù)據(jù)量取平均,因此,為了保證相同的數(shù)據(jù)量利用率,(4)中的learning rate應(yīng)該為baseline的k倍,也就是learning rate的linear scale rule。

linear scale rule有幾個(gè)約束,其中一個(gè)約束是關(guān)于weight的約束,式(3)中每一步更新基于的weight都是前一步更新過(guò)后的weight,因此相當(dāng)于小碎步的走,每走一部都是基于目前真實(shí)的weight計(jì)算梯度做更新的,而式(4)的這一大步(相比baseline相當(dāng)于k步)是基于t時(shí)刻的weight來(lái)做更新的。如果在這k步之內(nèi),W(t+j) ~ W(t)的話(huà),兩者近似沒(méi)有太大問(wèn)題,也就是linear scale rule問(wèn)題不大,但在weight變化較快的時(shí)候,會(huì)有問(wèn)題,尤其是模型在剛開(kāi)始訓(xùn)練的時(shí)候,loss下特別快,weight變化很快,W(t+j) ~ W(t)就不滿(mǎn)足。因此在初始訓(xùn)練階段,一般不會(huì)直接將lr增大為k倍,而是從baseline的lr慢慢warmup到k倍,讓linear scale rule不至于違背得那么明顯,這也是facebook一小時(shí)訓(xùn)練imagenet的做法[7]。第二個(gè)約束是lr不能***的放大,根據(jù)上面的分析,lr太大直接沿loss切線(xiàn)跑得太遠(yuǎn),導(dǎo)致收斂出現(xiàn)問(wèn)題。

同時(shí),有文獻(xiàn)[5]指出,當(dāng)batchsize變大后,得到好的測(cè)試結(jié)果所能允許的lr范圍在變小,也就是說(shuō),當(dāng)batchsize很小時(shí),比較容易找打一個(gè)合適的lr達(dá)到不錯(cuò)的結(jié)果,當(dāng)batchsize變大后,可能需要精細(xì)地找一個(gè)合適的lr才能達(dá)到較好的結(jié)果,這也給實(shí)際的large batch分布式訓(xùn)練帶來(lái)了困難。

(3)我們的實(shí)驗(yàn)

最近在考慮分布式訓(xùn)練NLP相關(guān)的深度模型的問(wèn)題,實(shí)驗(yàn)細(xì)節(jié)如下,由于某些工作暫時(shí)還不方便透露,只提供較為簡(jiǎn)略的實(shí)驗(yàn)細(xì)節(jié):

模型baseline參數(shù)為batch size 32, lr 0.25,最終的accuracy為BLEU score: 28.35?,F(xiàn)在進(jìn)行分布式擴(kuò)展到多卡并行。

實(shí)驗(yàn)1:只增加并行worker數(shù)(也就相當(dāng)于增大batch size),lr為baseline的lr0保持不變

 

可以看到隨著batch的變大, 如果lr不變,模型的精度會(huì)逐漸下降,這也和上面的分析相符合。

實(shí)驗(yàn)2:增大batch size,lr相應(yīng)增大

 

可以看到通過(guò)增加lr到5*lr0(理論上lr應(yīng)該增加到8倍,但實(shí)際效果不好,因此只增加了5倍),并且通過(guò)warmup lr,達(dá)到和baseline差不多的Bleu效果。最終的收斂速度大約為5倍左右,也就是8卡能達(dá)到5倍的收斂加速(不考慮系統(tǒng)通信同步所消耗的時(shí)間,也就是不考慮系統(tǒng)加速比的情況下)。

深度學(xué)習(xí)并行訓(xùn)練能很好的提升模型訓(xùn)練速度,但是實(shí)際使用的過(guò)程中會(huì)面臨一系列的問(wèn)題,包括系統(tǒng)層面的架構(gòu)設(shè)計(jì)、算法層面的參數(shù)調(diào)試等,歡迎有興趣的朋友多多探討。 

責(zé)任編輯:龐桂玉 來(lái)源: 36大數(shù)據(jù)
相關(guān)推薦

2023-11-08 10:25:00

模型技術(shù)

2018-08-28 15:47:03

人工智能深度學(xué)習(xí)機(jī)器學(xué)習(xí)

2017-09-01 05:35:58

分布式計(jì)算存儲(chǔ)

2016-08-31 07:02:51

2010-04-02 10:26:14

云計(jì)算

2018-05-19 00:26:13

UAI Train分布式訓(xùn)練

2022-03-15 09:10:00

分布式訓(xùn)練實(shí)踐

2019-06-19 15:40:06

分布式鎖RedisJava

2024-03-19 11:41:12

2024-01-10 08:02:03

分布式技術(shù)令牌,

2014-08-13 10:47:18

分布式集群

2018-07-16 08:39:18

分布式系統(tǒng)集群

2022-07-13 09:53:58

分布式開(kāi)發(fā)

2019-07-22 09:35:23

RedisSentinel

2019-05-05 08:37:39

分布式PyTorchGPU

2018-12-14 10:06:22

緩存分布式系統(tǒng)

2018-11-07 05:38:07

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)算法

2024-05-10 08:18:16

分布式數(shù)據(jù)庫(kù)

2021-07-29 07:48:36

Zookeeper 核心設(shè)計(jì)

2017-07-07 14:41:43

阿里云分布式關(guān)系
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)