首页 > 其他分享 >【论文阅读】CONDITIONAL POSITIONAL ENCODINGS FOR VISIONTRANSFORMERS

【论文阅读】CONDITIONAL POSITIONAL ENCODINGS FOR VISIONTRANSFORMERS

时间:2023-06-30 18:57:08浏览次数:35  
标签:平移 编码 VISIONTRANSFORMERS 位置 卷积 CONDITIONAL POSITIONAL positional encodings

来自美团技术团队2023年ICLR会议上发表的论文

论文地址:https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2102.10882.pdf

一、Motivation

由于Transformer中的Self-Attention操作是Permutation-Invariant的,也就是说,对于同一个序列,任意顺序进行排列,Self-Attention得到的一样的结果。关于置换不变性的推导如下:

 

这种置换不变性显然不是我们所期望的,为了打破这种性质,不难看出,我们需要为每个位置赋予一个独特的标志,这样当求和过程中各个item的位置发生变化后,其对应的item的值也会发生变化,从而打破了这种排列不变性。 这个独特的标志即为Positional Encodings。

Positional Encodings的重要性:

由于self-attention的permutation-invariant使得transformer需要一个特殊的positional encodings来显式地引入sequence中tokens的位置信息,因为无论是文本还是图像sequence,位置信息都是非常重要的。论文中以DeiT-tiny为实验模型,分别采用no positional encodings,learnable absolute positional encodings,fixed sin-cos positional encodings以及relative postional encodings等,不同的策略在ImageNet下的效果如下表所示:

 

主要结论如下:

  1. positional encodings对模型性能比较关键,不采用任何PE效果最差;
  2. relative postional encodings相比absolute positional encodings效果稍差,绝对位置编码比较重要;
  3. 用显式的PE,当图像分辨率提升时直接对PE插值处理,性能会下降;

目前的位置编码分为两种类型:

  1. Fixed Positional Encodings:将各个位置设置为固定值,例如ViT中的绝对位置编码,就是固定位置编码
  2. Learnable Positional Encoding:即训练开始时,初始化一个和输入token数目一致的tensor,这个tensor会在训练过程中逐步更新。

但是,以上的编码方式都存在一些问题:

  1. 位置编码的长度是固定的,如果在测试过程中,遇到了更大尺寸的输入序列,通常的解决方式是通过插值进行上采样来改变序列的长度,在没有fine-tune的情况下,这种方式会影响模型的效果
  2. 对于视觉任务来说,我们期待的模型是平移等变的,但是加上了位置编码后,模型不再具有平移等变性
  3. 即使是相对位置编码,一方面引入了额外的计算量,另一方面,需要对原始的ViT进行修改。并且对于分类任务而言,相对位置编码无法提供绝对位置信息,会干扰分类效果

在这里,顺便解释一下平移不变性和平移等变性,Translation Invariance和Translation Equivariance

  1. 平移不变性(Translation Invariance):在图像分类任务中,不变性意味着,当所需要识别的目标出现在图像的不同位置时,模型对其识别所得到的标签应该相同。即当输出进行变换后,还能得到相同的输出。
  2. 平移等变性(Translation Equivariance):例如在目标检测任务中,如果输入的图像中,对应的目标发生了平移,那么最终检测出的候选框也应发生相应的变化。即对输入进行变换后,输出也会发生相应的变换。

二、Method

这篇文章为 ViT 提出了条件位置编码 (CPE) 方案。与以前的固定或可学习的位置编码不同,它们是预先定义的并且独立于输入标记,CPE 是动态生成的,并且以输入标记的本地邻域为条件。因此,CPE 可以很容易地泛化到比模型在训练期间看到的更长的输入序列。此外,CPE 可以在图像分类任务中保持所需的平移不变性,从而提高分类精度。
一个理想的、对视觉任务有效的positional encoding应该满足以下条件:

  1. 使得网络具有Permutation-Variant,但是具有Translation-Invariant
  2. 具有较强的归纳能力,能够处理不同长度的序列
  3. 具有一定的提供绝对位置的能力

利用局部关系的构建的Positional Encoding即可满足以上要求,为什么呢,论文没有仔细写,我认为有以下原因:

  1. 首先,这是一个置换变量,当输入序列发生了变化,那么也会影响某些局部邻域的顺序
  2. 当图像中物体的位置发生了平移,并不会影响局部邻域,所以满足了平移等变性
  3. 因为计算过程中只涉及到邻域的计算,所以可以很好地推广到不同长度的序列
  4. 如果已知任意一个输入的token绝对位置,就可以通过token间的相互关系得到所有地token的位置

Positional Encoding Generator

 

首先分割原图像,产生的小块图像进行 feature tokens,再 reshape 成二维数据(蓝色),再基于一个 F 函数进行转换(绿色)尺寸不变,再分割成小块,输入进 Transformer 中,其中 F 函数,即为条件。F 函数是一个二维卷积,理论上可以是任何形式的二维卷积。这里强调是二维卷积,而不是三维卷积,因为首先进行分割,再将分割后的特征进行了扁平化,所以是二维的(如果直接对图片使用卷积,那卷积核应该是三维的)

这里解释一下为什么二维卷积就变成条件位置编码了呢?卷积操作大家都可以理解,卷积核越大,包含的周边信息就越多,这个过程可以理解为将原始图像的顺序排列的特征有了空间信息,空间信息越多,分类的准确率就越高。

本质上说:CPE 本质解决的问题就是提高了分割后的小图片的空间信息,由于将图片分割成小图片后,排成一排输入进 Transformer 中时,会失去原本的图片的空间信息,最开始的位置编码,并不能完美的解决这个问题,而修改后的条件编码,一定程度上解决了这个问题。

写在最后

CNN + Transformer 的架构值得尝试!

 

标签:平移,编码,VISIONTRANSFORMERS,位置,卷积,CONDITIONAL,POSITIONAL,positional,encodings
From: https://www.cnblogs.com/yeonni/p/17517625.html

相关文章

  • Appnium报错TypeError: visibility_of_element_located() takes 1 positional argumen
    报错信息: 原因:类型错误,visibility_of_element_located()方法需要1个参数位,但提供了两个解决方法:添加括号!让其成为一个整体 ......
  • pytorch 使用多GPU训练模型测试出现:TypeError: forward() missing 1 required positio
    转载:https://blog.csdn.net/lingyunxianhe/article/details/119454778?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168718901716800227455818%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=16871890171680022745......
  • Exploiting Positional Information for Session-based Recommendation
    目录概符号说明Forward/Backward-awarenessDualPositionalEncodingQiuR.,HuangZ.,ChenT.andYinH.Exploitingpositionalinformationforsession-basedrecommendation.ACMTransactionsonInformationSystems,2021.概本文讨论了一些常用positionalencodi......
  • 各种@Conditional记录
    注解生效条件@ConditionalOnJava应用使用指定的Java版本时生效@ConditionalOnBean容器中存在指定的Bean时生效@ConditionalOnMissingBean容器中不存在指定的Bean时生效@ConditionalOnExpression满足指定的SpEL表达式时生效@ConditionalOnClass......
  • QA|外部调用类方法总报错missing 1 required positional argument:'self'|UI自动化
    外部调用类方法总报错missing1requiredpositionalargument:'self' 原因:实例化这个类实例化错了,少了括号()解决:改成如下就可以了 参考学习:调用类方法时报错:missing1requiredpositionalargument:'self'-hehehe_wy7-博客园(cnblogs.com) ......
  • Spring6 探析之@Conditional 注解
    Spring6探析之@Conditional注解介绍我们写业务逻辑时,会用到if-else条件,@Conditional注解可以通过条件判断是否要将Bean注入到IOC容器中,它可以标记在类和方法上,我们先看一下源码吧@Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME......
  • Transformer 模型中的positional encoding(位置编码)计算理解(2)
            以下(以上)内容来自(参考):https://www.bilibili.com/video/BV1Di4y1c7Zm?p=2&vd_source=6292df769fba3b00eb2ff1859b99d79e  importnumpyasnpdefgetPositionEncoding(seq_len,dim,n=10000):##seq_len:序列长度##dim词向量的维......
  • [Pix2Pix] Image-to-Image Translation with Conditional Adversarial NetWorks
    paper:https://arxiv.org/pdf/1611.07004.pdf[CVPR2017]code:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pixhttps://phillipi.github.io/pix2pix/[official]数据组织:需要成对图像这是加利福利亚大学在CVPR2017上发表的一篇论文,讲的是如何用条件生成对抗......
  • 你还弄不清xxxForCausalLM和xxxForConditionalGeneration吗?
    Part1基本介绍大语言模型目前一发不可收拾,在使用的时候经常会看到transformers库的踪影,其中xxxCausalLM和xxxForConditionalGeneration会经常出现在我们的视野中,接下来我们就来聊聊transformers库中的一些基本任务。这里以三类模型为例:bert(自编码)、gpt(自回归)、bart(编码-解码)首......
  • 【批处理】powershell RMDIR删除文件夹及文件报错,Remove-Item: A positional paramet
    1、场景  由于测试导致的缓存文件较多,需要删除,手动删除太慢,所以直接用命令删除 2、报错备注:没装powershell的电脑可以用的  3、处理方法cmd--%/cRMDIR/Q/SC:\Users\ADMINI~1\AppData\Local\Temp参数解释:--%,停止解析符号,告诉PowerShell停止解析其余参数,并......