论文笔记【2】-- Cait : Going deeper with Image Transformers

论文笔记【2】-- Cait : Going deeper with Image Transformers

动机

去优化Deeper Transformer,即,让deeper的 vision transformer 收敛更快,精度更高。

所提方法(改进模型结构)

方法1 : LayerScale

在这里插入图片描述

图中 FFN 代表feed-forward networks; SA代表self- attention; η 代表Layer Normalization; α代表一个可学习的参数(比如,0, 0.5,1 );λ可是一个可学习的参数,它们构成了一个对角矩阵。

通过实验得出:图(a)(b)结构都不会使训练收敛,将(a)(b)结合变成图(c)中的结构,发现其在网络较深时也能收敛。图(d)是本文所用结构,即LayerScale。

LayerScale目的:给不同通道乘上一个λ,见公式好理解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8F01r69H-1633420396150)(images/image-20211005103458445.png)]

这么做的原因 : 个人认为,(b)(c)中的 α 是一个实数,即,FFN或SA的输出特征都统一乘以α;而图(d)中,FFN或SA输出特征的不同channel乘上不同的数值,会使得特征更细化,更精准。类似于CNN中channel注意力的感觉。

方法2 : class-attention layers

在原ViT中,在模型一开始输入时候加入了一个叫做class token的东西,在ViT中这个class token要做两件事:

  1. 引导attention过程,帮助得到attention map。
  2. 这些token还要输入到classifier中,完成分类任务。

作者认为class token要同时做到这2件事其实有点矛盾,参数会朝着矛盾的方向优化。对于分类任务,class token的目的只是为了获得图片的所有信息,用于最后的分类。

既然class token只是为了获得图片的全部信息,那为什么要在一开始就同patch一起送入网络参与attention活动?大可不必吧。所以本文没有按照原ViT的操作,而是将class token 放在模型的最后两层处加入,如下图(中)所示:
在这里插入图片描述

CA层公式表示:
在这里插入图片描述

问题1:为什么class token 放到了网络的后面也可以呢?我们知道图片的信息都在patch embedding里面,所以我们只需要用class token来抽取patch embedding中的信息就相当于class token拥有了图片的信息。

问题2:为什么class token 放到了网络的后面效果更好呢?class token若是和patch embedding同时送入网络,在计算attention时候,class token和patch embedding二者之间就会有信息的相互传递,而然事实上,我们想要的是,用class token 抽取patch embedding中的信息,而不需要将class token 中的信息传递给patch embedding 。所以将class token 往后放,就使得class token专注于它的工作,即专注于抽取图片的信息。

总结:

为了让deeper transformer 更易训练,提高精度。本文在原ViT网络架构的基础上做了两处的改动:LayerScale 和 class-attention layers。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值