總覽
- 使用
1080 ti
在英捷數(shù)據(jù)集進(jìn)行試驗康二。 -
t2t
中的bs
指的是subword
的數(shù)量,而不是我們認(rèn)為的sentence pairs
的數(shù)量
- 實(shí)際訓(xùn)練的
bs
等于使用GPU
的數(shù)量乘以bs
-
approx-bleu
是為了提高測試的過程的,使用的是sub-word bleu
的計算方法,因此比實(shí)際的bleu
要高。
-
t2t
使用的是自己內(nèi)建的sub-word
方法
-
file_byte_budget
是用來控制sample
出訓(xùn)練數(shù)據(jù)用來訓(xùn)練subword
詞表的數(shù)目牙丽,確保抽樣比較多的training data
,對于子單詞詞匯表來說兔魂,訓(xùn)練數(shù)據(jù)太小的一個標(biāo)志是日志中報告的min_count
太低烤芦,因此詞匯表只能從一次或兩次看到的單詞中估計。(因此min_count
要大于2
才是比較合適的)
- 可以更改
t2t-trainer 中的schedule
來不讓做approx_bleu
這樣可以加速訓(xùn)練析校,感覺應(yīng)該是有參數(shù)可以讓比較的是真實(shí)的bleu把
訓(xùn)練加速
- 增大
bs
對訓(xùn)練加速幫助不大构罗。
- 多
GPU
訓(xùn)練對加速的幫助很大。
- 作者發(fā)現(xiàn)
small and clear
的數(shù)據(jù)集收斂需要的epoch
比big and noise
的多智玻。
- 大的數(shù)據(jù)集在多卡上訓(xùn)練
1week
之后效果還在提升遂唧,如果數(shù)據(jù)集是兩倍那么需要的訓(xùn)練時間要比兩倍還要多,訓(xùn)練數(shù)據(jù)和訓(xùn)練需要的收斂時間之間并不是線性關(guān)系吊奢。
big model和base model的對比
- 在單
GPU
上盡管base model
可以放更多的訓(xùn)練數(shù)據(jù)盖彭,但是效果是不如big model
。
- 因此為了有好的訓(xùn)練效果页滚,如果你的
GPU
顯存是大于11GB
的還是使用big model
比較好召边。
- 為了
debug
方便(除過模型其他部分的bug
)可以使用一個更小的transformer
模型,transformer_tiny
裹驰,等運(yùn)行正常的情況下再換成大模型transformer
隧熙。
- 如果為了極限的省顯存可以用
Adafactor
優(yōu)化器,因為不用存儲adam
中的一階矩二階矩幻林。
max_length參數(shù)的影響
max_length
這個參數(shù)基本不用改贞盯,因為如果訓(xùn)練的bs
足夠大的話,修改只能降低效果滋将,transformer
不能翻譯比訓(xùn)練中出現(xiàn)最長的句子還要長的句子邻悬。
bs的影響
- 默認(rèn)的單
GPU
的bs
是2048
,多GPU
的bs
是4096
症昏,但是作者在單GPU
上發(fā)現(xiàn)對于base model
如果增大bs
到6000
效果很會比默認(rèn)的參數(shù)好很多随闽。
- 但是
big model
大的bs
效果沒有什么用,并且有一個收斂最小bs
的參數(shù)肝谭,如果bs
小于這個參數(shù)那么就會不收斂或者收斂很慢掘宪。
- 建議:
bs
盡可能的大。
學(xué)習(xí)率lr和warmup的影響
-
lr
影響不大攘烛,使用默認(rèn)的就好
-
warmup
影響也不大
-
transfomer
對這兩個參數(shù)不敏感魏滚,使用初始的就好了
- 對于新的數(shù)據(jù)集如果沒收斂的話,嘗試下面的調(diào)參策略坟漱,以及
lr
和warmup
的關(guān)系鼠次,降低warmup steps
,相當(dāng)于增大實(shí)際最大學(xué)習(xí)率。
-
數(shù)據(jù)量增大的話:其他人經(jīng)過推算如果數(shù)據(jù)量增大
k
倍的話腥寇,學(xué)習(xí)率變?yōu)?code>√k才行成翩。
-
如果是多GPU運(yùn)行:作者發(fā)現(xiàn)默認(rèn)的
0.2
的學(xué)習(xí)率是8GPU
能夠收斂的最大學(xué)習(xí)率
- 在
8 GPU
上調(diào)節(jié)warm up
對只要沒有越過收斂底線,其他情況加是差不多的赦役。
- 因此看學(xué)習(xí)率合不合適就看收斂速度(
BLEU
值)麻敌,因為如果學(xué)習(xí)在適當(dāng)區(qū),收斂是可以達(dá)到預(yù)期的掂摔,如果沒有在那么訓(xùn)練是不收斂或者收斂到一個很低的水平的术羔,如果是差不多達(dá)到預(yù)期了那么就沒有必要調(diào)節(jié)學(xué)習(xí)率,如果很差那么就適當(dāng)?shù)慕档蛯W(xué)習(xí)率即可乙漓。
多GPU的影響
- 在
single GPU
上執(zhí)行4000
步和4 GPU
上執(zhí)行1000
步的結(jié)果是一模一樣的级历,但是收斂的更快.
- 作者建議:如果有
2
個實(shí)驗和8
個GPU
的時候,最好是串行的在8
個GPU
上跑叭披,而不是各占用4
個GPU
并行跑鱼喉。
transformer不使用bn和SGD
- 使用
layer normalization
不使用batch normalizaion
的原因:
checkpoint average的影響
-
checkpoint average
一般會帶來0.2 bleu
左右的提升。 - 默認(rèn)的是每隔
10
分鐘保存一次ckpt
趋观,最后平均20
個最近的ckpt
效果很好扛禽,但是這個多少個是根據(jù)任務(wù)而定的,在作者的實(shí)驗中就發(fā)現(xiàn)一小時保存一次的ckpt
平均后的效果更好皱坛。 - 作者建議在距離訓(xùn)練開始階段較近的比如
5W
步的時候编曼,平均的ckpt
應(yīng)該少一點(diǎn),因為還沒有訓(xùn)練還不穩(wěn)定bleu
曲線還很陡峭剩辟,在結(jié)束10W
步的時候掐场,平均的ckpt
應(yīng)該多一點(diǎn),這樣效果會更好贩猎。