美文网首页
使用基于t2t的transformer做NMT的一些你需要知道的

使用基于t2t的transformer做NMT的一些你需要知道的

作者: VanJordan | 来源:发表于2019-04-03 11:39 被阅读0次

    总览

    • 使用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的数据集收敛需要的epochbig 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的影响

    • 默认的单GPUbs2048,多GPUbs4096,但是作者在单GPU上发现对于base model如果增大bs6000效果很会比默认的参数好很多。
    • 但是big model 大的bs效果没有什么用,并且有一个收敛最小bs的参数,如果bs小于这个参数那么就会不收敛或者收敛很慢。
    • 建议:bs尽可能的大。

    学习率lr和warmup的影响

    • lr影响不大,使用默认的就好
    • warmup影响也不大
    • transfomer对这两个参数不敏感,使用初始的就好了
    • 对于新的数据集如果没收敛的话,尝试下面的调参策略,以及lrwarmup的关系,降低warmup steps,相当于增大实际最大学习率。
    • 数据量增大的话:其他人经过推算如果数据量增大k倍的话,学习率变为√k才行。
    • 如果是多GPU运行:作者发现默认的0.2的学习率是8GPU能够收敛的最大学习率
    • 8 GPU上调节warm up对只要没有越过收敛底线,其他情况加是差不多的。
    • 因此看学习率合不合适就看收敛速度(BLEU值),因为如果学习在适当区,收敛是可以达到预期的,如果没有在那么训练是不收敛或者收敛到一个很低的水平的,如果是差不多达到预期了那么就没有必要调节学习率,如果很差那么就适当的降低学习率即可。

    多GPU的影响

    • single GPU 上执行4000步和4 GPU上执行1000步的结果是一模一样的,但是收敛的更快.
    • 作者建议:如果有2个实验和8GPU的时候,最好是串行的在8GPU上跑,而不是各占用4GPU并行跑。

    transformer不使用bn和SGD

    • 使用layer normalization不使用batch normalizaion的原因:

    checkpoint average的影响

    • checkpoint average一般会带来0.2 bleu左右的提升。
    • 默认的是每隔10分钟保存一次ckpt,最后平均20个最近的ckpt效果很好,但是这个多少个是根据任务而定的,在作者的实验中就发现一小时保存一次的ckpt平均后的效果更好。
    • 作者建议在距离训练开始阶段较近的比如5W步的时候,平均的ckpt应该少一点,因为还没有训练还不稳定bleu曲线还很陡峭,在结束10W步的时候,平均的ckpt应该多一点,这样效果会更好。

    相关文章

      网友评论

          本文标题:使用基于t2t的transformer做NMT的一些你需要知道的

          本文链接:https://www.haomeiwen.com/subject/yikabqtx.html