源码:https://github.com/kimiyoung/transformer-xl
简介:Transformer-XL(extra long)是为了进一步提升Transformer建模长期依赖的能力。它的核心算法包含两部分:
片段递归机制(segment-level recurrence):上一个片段的状态会被缓存下来然后在计算当前段的时候再重复使用上个时间片的隐层状态
相对位置编码机制(relative positional encoding):参考了RPR中把相对位置编码加入到self-attention中的思想
1.
训练时报错:
环境:pytorch 1.5.1, python3.7
错误:StopIteration: Caught StopIteration in replica 0 on device 0.
降低pytorch的版本,测试1.3.1是可以正常训练的,1.4.0应该也可以
参考:https://github.com/kimiyoung/transformer-xl/issues/123
2.
配置文件中的
batch_size
和
gpu0_bsz
作用:主要是在多卡训练时,用来平衡第一个GPU的显存使用量
网络在反向传播的时候,计算loss的梯度默认都在0卡上计算。因此会比其他显卡多用一些显存,为了提高训练速度,可以通过调整batch_size最大化使用GPU显存。
做法是改进了pytorch的DataParallel,其中gpu0_bsz为0卡使用的batch_size,其他卡的batch_size为
总batch_size/(num_device-1)。
例如:使用3卡训练,batch_size=152,gpu0_bsz=24,则表示,0卡的batch_size=24,1卡2卡的batch_size=(152-24)/(3-1)=64
参考:https://www.codenong.com/cs106117774/
3.
AdaptiveEmbedding
对Embedding层进行压缩,就是高频词用大的维度表示比如512维,低频词用小的维度如64维。再用Linear层project到相同的维数。
参考:https://zhuanlan.zhihu.com/p/98080699
详解参考:
[1]. https://zhuanlan.zhihu.com/p/271984518