文献阅读:RoFormer: Enhanced Transformer with Rotary Position Embedding

Posted Espresso Macchiato

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文献阅读:RoFormer: Enhanced Transformer with Rotary Position Embedding相关的知识,希望对你有一定的参考价值。

1. 工作简介

这篇文章是苏剑林的一篇关于Transformer当中的位置编码的优化考察。

众所周知,transformer的attention机制本身是不带有位置信息的,因此对于文本序列,attention机制本身就会丢失掉原文当中的序列信息,造成信息缺失,影响到模型的效果表达,这个应该已经算是面试中常见的八股文问题了。

但是,对于位置编码的具体实现,大概会去考虑这个问题的人就大幅减少了。而苏剑林这里就是对这部分内容进行了详细的考察和优化尝试,这点真心还是很佩服他的。

2. 常见位置编码方式

首先,我们来考察一下现有的一些位置编码的方法。

这部分的内容我们主要参考苏剑林的博客《让研究人员绞尽脑汁的Transformer位置编码》进行一些自己的整理。

1. 绝对位置编码

1. Bert

绝对位置编码的一个典型的例子就是Bert模型。

他的思路非常的简单粗暴,既然attention层本身无法识别位置信息,那么我就在输入当中显式地多加一个序列位置信号,然后让模型自己去学习这个序列位置信号的分布。

具体来说,就是讲原本的输入 x i x_i xi变成了 x i + p i x_i + p_i xi+pi,其中, p i p_i pi表示的就是第i个位置的绝对位置编码。

这种编码方式的好处在于说简单直接,而且模型直接参数拟合的方式也不会产生人为的信号偏差,但是缺点在于说推理阶段只能使用训练中预先定义好的位置编码,比如bert,最大输入句长就是512,超过了512模型就失去了编码能力。

此外,位置编码的训练充分度也会是一个需要考虑的问题。

2. Attention Is All You Need

绝对位置编码的另一个典型例子就是vanilla transformer

不过,不同于Bert那样直接交给模型去训练position embedding,经典Transformer的位置Embedding的定义是直接通过三角函数的方式进行预先定义好的。

他的出发点在于说参考了三角函数的性质:

c o s ( α + β ) = c o s α ⋅ c o s β − s i n α ⋅ s i n β s i n ( α + β ) = s i n α ⋅ c o s β − c o s α ⋅ s i n β \\left\\ \\beginaligned cos(\\alpha+\\beta) &= cos\\alpha \\cdot cos\\beta - sin\\alpha \\cdot sin\\beta \\\\ sin(\\alpha+\\beta) &= sin\\alpha \\cdot cos\\beta - cos\\alpha \\cdot sin\\beta \\endaligned \\right. cos(α+β)sin(α+β)=cosαcosβsinαsinβ=sinαcosβcosαsinβ

这个性质刚好可以用于描述两个位置之间的相对距离关系。

因此,文中先验地给出一个人工预设的位置编码如下:

p k , 2 i = s i n ( k / 1000 0 2 i / d ) p k , 2 i + 1 = c o s ( k / 1000 0 2 i / d \\left\\ \\beginaligned p_k, 2i &= sin(k/10000^2i/d) \\\\ p_k, 2i+1 &= cos(k/10000^2i/d \\endaligned \\right. pk,2ipk,2i+1=sin(k/100002i/d)=cos(k/100002i/d

其中, k k k表示第 k k k个位置, 2 i , 2 i + 1 ∈ [ 0 , d ) 2i, 2i+1 \\in [0, d) 2i,2i+1[0,d),表示position embedding当中某一个具体维度上的值。

可以看到,这样的情况下位置表征就是先验确定的了,我们无需交由模型进行额外地拟合,而且长度使用上也更加自由,基本没有长度限制,但是代价就是给模型增加了人工的先验限制,学习到的embedding特征不但要满足token本身的信息表征,还要满足三角函数形式的数据分布表达,收缩了解空间的表达域。

2. 相对位置编码

在考察相对位置编码之前,我们首先来看一下位置编码到底做的是一个什么样的事。

它本质上就是在原本的词向量 x i x_i xi上面额外地加上一个用于标定位置信息的位置向量 p i p_i pi,从而使得attention层的输入带有位置信息。

我们将attention层的运算进行具体的展开如下:

Q = ( x + p ) ⋅ W Q K = ( x + p ) ⋅ W K V = ( x + p ) ⋅ W V A = s o f t m a x ( Q ⋅ K T d ) O = A ⋅ V \\left\\ \\beginaligned Q &= (x + p) \\cdot W_Q \\\\ K &= (x + p) \\cdot W_K \\\\ V &= (x + p) \\cdot W_V \\\\ A &= softmax(\\fracQ \\cdot K^T\\sqrtd) \\\\ O &= A \\cdot V \\endaligned \\right. QKVAO=(x+p)WQ=(x+p)WK=(x+p)WV=softmax(d QKT)=AV

我们将位置向量 p p p写入之后可以得到:

Q ⋅ K T = x W Q ⋅ W K T x T + x W Q ⋅ W K T p T + p W Q ⋅ W K T x T + + p W Q ⋅ W K T p T O = A ⋅ ( x W V + p W V ) \\left\\ \\beginaligned Q \\cdot K^T &= xW_Q \\cdot W_K^T x^T + xW_Q \\cdot W_K^T p^T + pW_Q \\cdot W_K^T x^T + + pW_Q \\cdot W_K^T p^T\\\\ O &= A \\cdot (xW_V + pW_V) \\endaligned \\right. QKTO=xWQWKTxT+xWQWKTpT+pWQWKTxT++pWQWKTpT=A(xWV+pWV)论文阅读 Skeleton-based abnormal gait recognition with spatio-temporal attention enhanced

论文阅读 Skeleton-based abnormal gait recognition with spatio-temporal attention enhanced

文献阅读:Sentence-BERT:Sentence Embeddings using Siamese BERT-Networks

Eclipse“Enhanced Class Decompiler”插件在调试时不反编译

文献学习文献分类查询阅读及管理

文献学习文献分类查询阅读及管理