相对位置编码 relative position encoding

本文深入探讨Transformer中的位置编码,特别是绝对位置编码与相对位置编码的区别及应用。通过具体实例介绍了相对位置编码的生成过程,包括一维和二维情况下的位置索引计算方法,以及如何在实际任务中使用相对位置编码来提升模型性能。
摘要由CSDN通过智能技术生成

文章是对视频的总结原作者

Transformer中有两种常用的位置编码,分别为绝对位置编码和相对位置编码,其中绝对位置编码使用的比较多,也是比较简单的。在代码中直接初始化0矩阵,在forward函数中直接与x相加:

self.position_embeddings = nn.Parameter(torch.zeros(1, n_patches, in_channels))

def forward(self,x)

embeddings = x + self.position_embeddings

而相对位置编码,是根据token与token之间的位置关系来生成权重:

假如有5个token,其中一个token与其他所有位置包括自己在内的token之间存在一个权重。 

 w0表示x4与自己的位置关系,0表示与自己的距离,w1表示向右移动一个位置,w-1表示向左移动一个位置。

x3也是同理。

 这样第一个到最后一个就可以表示为:

 

 一共有9个不同的位置编码,分别为w-4, w-3, w-2, w-1, w0, w1, w2, w3, w4。用图片表示为:

 我们用标识对表示为:

 作者使用了一个k阈值,当超过这个特定的阈值,即其他的position_embedding距离自身超过两个位置,其他的position_embedding就和距离最近的position_embedding值一样。

假设k=2,w3和w4就会变成w2,后面同理。 

那么如何用公式表示呢:

作者在text上进行了实验,但是词链就是一个展平了的graph,所以这种方法可以运用到图中,只要你元素中有成对的关系就可以使用。

在小数据集上,相比卷积transformer缺少内在偏置,因此需要加入相对位置编码来解决这个问题,而对于特大数据集,transformer就可以学习到卷积的内在偏置,即这也是为什么在小数据集上transformer的效果不如卷积,而在大数据集上,transformer效果优于卷积。

--------------------------------------------------分割线----------------------------------------------------------------------

继续补充对相对位置编码的理解,图片和思路来自B站霹雳吧啦Wz

结合上面的知识,和上面的text一维不同,图片是二维的,同时拥有长和宽,对图片的每一个位置进行编码,第一个图片四个位置的索引,等于(0,0)-(0,0),(0,0)-(0,1),(0,0)-(1,0),(0,0)-(1,1),其他的三个图片同理。

将上面的相对位置索引进行展平,变成了如图4x4的矩阵。 

在相对位置偏移公式中,B是相对位置偏移,不是相对位置索引,我们根据每一个相对位置索引(4x4矩阵)去relative  position bias table去取相应的参数。

但是我们看到在蓝色方块的右边和红色方块的右边两个索引一样,所以不能简单的行列相加,并且在原文章中,我们使用的一元位置坐标,接下来我们进行转换:

首先:将数值限制到大于0。

接着行标,第一个数乘以2M-1。

 最后得到一个新的索引:

 根据索引我们去relative  position bias table中查找对应的值。

 其中训练网络中针对训练的是relative  position bias table,即relative  position bias table是训练出来的,而窗口m固定,index也是固定的。索引的范围行(-1,0,1),列(-1,0,1)共九个。

得到的bias即公式中的B。

参考:霹雳吧啦Wz

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值