华为推出的预训练模型nezha的其中一项创新点为使用了相对位置的函数式编码。于是本文对于Transformer相关的模型中对于字词的位置编码方式进行简单的总结。本文参考了浅谈 Transformer-based 模型中的位置表示 - 知乎。
1.原生的transformer中使用的是绝对位置的函数式位置编码,使用的是正余弦函数。由于transformer中为self-attention,这种正余弦函数由于点乘操作,其实会有隐式的相对位置信息存在,但是没有方向性,且通过权重矩阵的映射之后,这种信息可能会消失。
2.bert中使用的是绝对位置的参数式编码,且和相应位置上的词向量进行相加而不是拼接。
3.RPR,相对位置表示。将相对位置信息融入attention的计算中。
4.transformer-XL XLNet, 正余弦函数矩阵和一个偏置项(参数)来表示相对位置。
5.nezha,使用相对位置函数编码。
==================================================
最近(2021-04-21)google又出了一篇关于位置编码对transformer效果的影响:Demystifying the Better Performance of Position Encoding Variants for Transformer
论文地址:https://arxiv.org/abs/2104.08698 有兴趣可以仔细读一下。
摘要:
Transformers是目前nlp效果最好的模型,它把输入序列转化成向量。模型对于输入词的位置信息是加在了输入当中,分段信息也通过这样的方式加入。最近的一些位置编码变体表明相对位置编码的效果会更好。本文对不通的位置编码方式进行系统的比较,理解它们不同表现的原因,并提出一种有效的位置和分段编码方式。
介绍:
Transformers的主要结构为self-attention和feed forward层,这两者对输入token的位置是不敏感的。为了使模型位置敏感,最典型的方式就是把位置嵌入加到token嵌入中。这个位置嵌入只取决于词出现的位置,就是说位置i的嵌入只和i有关,和i位置上的词是无关的。位置嵌入也可以是固定的,比如正弦函数嵌入。对于位置嵌入有很多的研究,这些工作展示了使用相对位置编码会比绝对位置编码效果好,但是不知道为什么。缺乏系统的研究和两种方法优缺点的理解。
本文认为绝对位置编码的效果差是因为融合方式是加入到输入中。文章在分类、问答、翻译任务上进行实验,表明在attention矩阵加入位置编码比在输入token中加入位置信息效果好。这表明位置信息在哪里融合入Transformers中是重要的。文章也比较了不同head和不同层共享位置编码的情况,提出了相对标量位置编码变体和新的相对分段编码方法。
Transformers
绝对位置编码
两种变体:固定的函数式(原生的transformers)和参数式的(BERT)。
相对位置编码
绝对位置编码的一个缺点是要求固定的输入长度。为了泛化到任意序列长度,就是使用相对位置编码。接下来就是介绍一些流行的相对位置编码方法。
1.相对位置编码加入attention计算(K,V)而不是输入,这个部分会增加位置信息参数。并在不同的head共享位置编码提高效率。
2.相对函数编码+学习参数。
相对位置标量
T5中使用的方法,位置编码标量直接加入attention分值矩阵;V向量中不加位置信息。不同的head使用不同的位置编码,不同层共享。
TUPE
略
输入加位置信息的缺点
1.绝对位置编码的时候,如果位置编码加入输入的情况,损失函数对于位置和输入是相同的。在不同的batch中,输入X是不一样的,而位置其实是不变的,所以给予输入X和位置不同的自由度可以提高效果。之前的相对位置编码方法没有这个问题。
2.该定理表明,注意矩阵的秩受绝对位置编码的约束,通过在注意矩阵中加入位置信息来使用per-head(低秩位置矩阵)编码,可以直接得到更高秩的注意。
绝对位置编码:
相对位置编码:
实验:
见论文。