总览
- 使用
1080 ti在英捷数据集进行试验。 -
t2t中的bs指的是subword的数量,而不是我们认为的sentence pairs的数量
- 实际训练的
bs等于使用GPU的数量乘以bs
-
approx-bleu是为了提高测试的过程的,使用的是sub-word bleu的计算方法,因此比实际的bleu要高。
-
t2t使用的是自己内建的sub-word方法
-
file_byte_budget是用来控制sample出训练数据用来训练subword词表的数目,确保抽样比较多的training data,对于子单词词汇表来说,训练数据太小的一个标志是日志中报告的min_count太低,因此词汇表只能从一次或两次看到的单词中估计。(因此min_count要大于2才是比较合适的)
- 可以更改
t2t-trainer 中的schedule来不让做approx_bleu这样可以加速训练,感觉应该是有参数可以让比较的是真实的bleu把
训练加速
- 增大
bs对训练加速帮助不大。
- 多
GPU训练对加速的帮助很大。
- 作者发现
small and clear的数据集收敛需要的epoch比big and noise的多。
- 大的数据集在多卡上训练
1week之后效果还在提升,如果数据集是两倍那么需要的训练时间要比两倍还要多,训练数据和训练需要的收敛时间之间并不是线性关系。
big model和base model的对比
- 在单
GPU上尽管base model可以放更多的训练数据,但是效果是不如big model。
- 因此为了有好的训练效果,如果你的
GPU显存是大于11GB的还是使用big model比较好。
- 为了
debug方便(除过模型其他部分的bug)可以使用一个更小的transformer模型,transformer_tiny,等运行正常的情况下再换成大模型transformer。
- 如果为了极限的省显存可以用
Adafactor优化器,因为不用存储adam中的一阶矩二阶矩。
max_length参数的影响
max_length这个参数基本不用改,因为如果训练的bs足够大的话,修改只能降低效果,transformer不能翻译比训练中出现最长的句子还要长的句子。


bs的影响
- 默认的单
GPU的bs是2048,多GPU的bs是4096,但是作者在单GPU上发现对于base model如果增大bs到6000效果很会比默认的参数好很多。
- 但是
big model大的bs效果没有什么用,并且有一个收敛最小bs的参数,如果bs小于这个参数那么就会不收敛或者收敛很慢。
- 建议:
bs尽可能的大。
学习率lr和warmup的影响
-
lr影响不大,使用默认的就好
-
warmup影响也不大
-
transfomer对这两个参数不敏感,使用初始的就好了
- 对于新的数据集如果没收敛的话,尝试下面的调参策略,以及
lr和warmup的关系,降低warmup steps,相当于增大实际最大学习率。
-
数据量增大的话:其他人经过推算如果数据量增大
k倍的话,学习率变为√k才行。
-
如果是多GPU运行:作者发现默认的
0.2的学习率是8GPU能够收敛的最大学习率
- 在
8 GPU上调节warm up对只要没有越过收敛底线,其他情况加是差不多的。
- 因此看学习率合不合适就看收敛速度(
BLEU值),因为如果学习在适当区,收敛是可以达到预期的,如果没有在那么训练是不收敛或者收敛到一个很低的水平的,如果是差不多达到预期了那么就没有必要调节学习率,如果很差那么就适当的降低学习率即可。
多GPU的影响
- 在
single GPU上执行4000步和4 GPU上执行1000步的结果是一模一样的,但是收敛的更快.
- 作者建议:如果有
2个实验和8个GPU的时候,最好是串行的在8个GPU上跑,而不是各占用4个GPU并行跑。
transformer不使用bn和SGD
- 使用
layer normalization不使用batch normalizaion的原因:
checkpoint average的影响
-
checkpoint average一般会带来0.2 bleu左右的提升。 - 默认的是每隔
10分钟保存一次ckpt,最后平均20个最近的ckpt效果很好,但是这个多少个是根据任务而定的,在作者的实验中就发现一小时保存一次的ckpt平均后的效果更好。 - 作者建议在距离训练开始阶段较近的比如
5W步的时候,平均的ckpt应该少一点,因为还没有训练还不稳定bleu曲线还很陡峭,在结束10W步的时候,平均的ckpt应该多一点,这样效果会更好。






































