【Positional embedding】

Positional embedding

本文归纳了transformer-based的模型中的positional-embedding。
首先明白第一点:
Q: Why need positional embedding in Transformer?
A: 跟 CNN/RNN 不同,self-attention并不会记录位置信息。
位置编码可以使self-attention记忆位置信息。

Transformer’s positional embedding

Attention Is All You Need
文章里叫“Positional Encoding”

  • 位置编码将位置信息注入到输入里,本文使用不同频率的正弦、余弦函数。
    在这里插入图片描述
    pos 代表第几个样本/位置信息,2i 处表示第几个特征维度。
    上式也可以写为:

    其中,
    在这里插入图片描述
    i 表示特征维度,k 的取值范围:在这里插入图片描述
  • 同样使用了可学习的positional embedding,发现效果差不多。
  • 换个思路来想一下:

随着特征维度的升高,正余弦函数频率wk 是降低的,
因此,可视化特征维度中几维:横坐标是位置信息
在这里插入图片描述
在这里插入图片描述
可以看到,位置编码的序列如上图所示。序列中每个token(一排)被唯一定义,每个token中的每个维度也被唯一定义,token中不同特征维度按照余弦-正弦-余弦…的方式编码。
也能看到,为了避免编码重复,编码对维度有要求,一般d取512。

ViT (Vision Transformer)

  • 对于C* H * W的图像,reshape成一序列N*(P * P* C)的patches,然后通过Linear projection层(D* D的全连接层)将flatten后的patch map到D维,本文D=P* P* c=16* 16*3=768,N=196,初始输入3 * 224 *224。
  • 为了对图片进行分类,类似于 BERT,ViT 也添加了 [class] token (总输入序列长度为 196 + 1 = 197 ),它的最终输出就对应了图像表示 y ,在经过一个 classification head 之后就得到了图片的最终类别 (classification head 在预训练时为一个带有一层隐藏层的 MLP,微调时为一个线性层,激活函数为 GELU)
  • **在patch embedding加入一个可学习的1D position embedding,作者发现没有使用2D的必要。默认的做法是把它放在输入的右边 **
    整个Transformer流程如下:
    在这里插入图片描述

DETR

在这里插入图片描述

  • Encoder中加入的positional embedding是固定的,‘spatial positional encoding’。
  • Decoder的输入的可学习的positional embedding实际上是object query的一部分。(0+positional embedding)
    疑惑:object query初始值是什么?
    在这里插入图片描述

更新No.1:
object query随机初始化,
转载一下较好的理解DETR object query理解
No.2
这里spatial positional encoding是作者自己提出的二维位置编码方法,该位置编码分别被加入到了encoder的self attention和decoder的multi-head attention,同时object queries也被加入到了decoder的两个attention中.
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值