PyTorch
最近版本更新很快,1.2/1.3/1.4几乎是连着出,其中: 1.3/1.4版本主要是新增并完善了PyTorchMobile
移动端部署模块和模型量化模块。 而1.2版中一个重要的更新就是把加入了NLP领域中炙手可热的Transformer
模型,这里记录一下PyTorch
中Transformer
模型的用法(代码写于1.2版本,没有在1.3/1.4版本测试)。
1. 简介
也许是为了更方便地搭建Bert
,GPT-2
之类的NLP模型,PyTorch
将Transformer
相关的模型分为nn.TransformerEncoderLayer
、nn.TransformerDecoderLayer
、nn.LayerNorm
等几个部分。搭建模型的时候不一定都会用到, 比如fastai
中的Transformer
模型就只用到了encoder
部分,没有用到decoder
。
至于WordEmbedding
和PositionEncoding
两个部分需要自己另外实现。
WordEmbedding
可以直接使用PyTorch
自带的nn.Embedding
层。
PositionEncoding
层的花样就多了,不同的模型下面有不同的PositionEncoding
,比如Transformer的原始论文Attention is all you need
中使用的是无参数的PositionEncoding
, Bert
中使用的是带有学习参数的PositionEncoding
。
在本文中介绍的是参考Transformer
原始论文实现的Sequence2sequence
形式的Transformer
模型。