ConViT:使用软卷积归纳偏置改进视觉变换器,Python常用面试题

基于 (Cordonnier et al., 2019) 的见解,我们引入了 ConVit,它是 ViT (Dosovitskiy et al., 2020) 的一种变体,它是通过用一种我们称之为门控的新型层替换一些 SA 层而获得的位置自注意(GPSA)层。核心思想是强制执行方程的“知情”卷积配置。 5 在初始化时 GPSA 层,然后让他们决定是否保持卷积。然而,PSA 层的标准参数化(方程 4)受到两个限制,这导致我们两个引入两个修改。

自适应注意力跨度 PSA 中的第一个警告是涉及大量的可训练参数,因为相对位置编码的数量 r δ r_{\delta } rδ​ 是补丁数量的二次方。这导致一些作者将注意力限制在查询补丁周围的补丁子集上 (Ramachandran et al., 2019),代价是丢失远程信息。

为了避免这种情况,我们保持相对位置编码 r δ r_{\delta } rδ​固定,只训练确定注意力头中心和跨度的嵌入 v p o s h v_{pos}^{h} vposh​;这种方法与 Sukhbaatar 等人中引入的自适应注意力范围有关。 (2019) 语言转换器。 r δ r_{\delta } rδ​ 和 v p o s h v_{pos}^{h} vposh​的初始值由方程5给出,我们取 D p o s D_{pos} Dpos​ = 3 去除无用的零分量。

多亏了 D p o s ≪ D h D_{pos}\ll D_{h} Dpos​≪Dh​,与内容注意力所涉及的参数数量相比,位置注意力所涉及的参数数量可以忽略不计。这是有道理的,因为内容交互本质上比位置交互更容易建模。

位置选通 标准 PSA 的第二个问题是等式中的内容和位置术语。 4 个可能具有不同的量级,在这种情况下,softmax 将忽略两者中最小的一个。特别是,上面讨论的卷积初始化方案涉及高度集中的注意力分数,即 softmax 中的高幅度值。在实践中,我们观察到在 vanilla PSA 层上使用卷积初始化方案可以提高早期阶段的性能,但会降低后期性能,因为注意力机制懒惰地忽略了内容信息(参见 SM.A)。

为了避免这种情况,GPSA 层在 softmax 之后对内容和位置项求和,它们的相对重要性由可学习的门控参数 λh(每个注意力头一个)控制。最后,我们对得到的矩阵总和(其项为正)进行归一化,以确保得到的注意力分数定义了概率分布。因此,生成的 GPSA 层参数化如下

(另请参见图 4):

在这里插入图片描述

建筑细节 ViT 将大小为 224 的输入图像切片为 14 × 14 像素的 16 × 16 非重叠块,并使用卷积茎将它们嵌入到维度 D e m b D_{emb} Demb​= 64 N h N_{h} Nh​ 的向量中。然后它通过 12 个块传播补丁,这些块保持它们的维度不变。每个块由一个 SA 层和一个带有 GeLU 激活的 2 层前馈网络 (FFN) 组成,两者都配备了残差连接。 ConViT 只是一个 ViT,其中前 10 个块通过卷积初始化用 GPSA 层替换 SA 层。

在这里插入图片描述

类似于 BERT 等语言转换器(Devlin 等人,2018),ViT 使用一个额外的“类标记”,附加到补丁序列来预测输入的类。由于此类令牌不携带任何位置信息,因此 ViT 的 SA 层不使用位置注意:通过添加维度 Demb 的可学习位置嵌入,位置信息被注入到第一层之前的每个补丁中。由于 GPSA 层涉及位置注意,因此它们不太适合类令牌方法。我们通过将类标记附加到最后一个 GPSA 层之后的补丁来解决这个问题,类似于 (Touvron et al., 2021b)(见图 4)1 中所做的。

为了公平起见,并且由于它们的计算成本较低,我们将 ViT 的绝对位置嵌入保持在 ConViT 中。但是,如SM所示。 F,ConViT 对它们的依赖要少得多,因为 GPSA 层已经使用了相对位置编码。因此,可以轻松删除绝对位置嵌入,无需在更改输入分辨率时对嵌入进行插值(只需根据等式 5 重新采样相对位置编码,就像在我们的开源实现中自动执行的那样)。

训练详情 我们的 ConVit 基于 DeiT(Touvron 等人,2020 年),这是 ViT 的超参数优化版本,已开源2。 由于能够在不使用任何外部数据的情况下获得有竞争力的结果,DeiT 既是一个出色的基线,又相对容易训练:最大的模型 (DeiT-B) 只需要在 8 个 GPU 上进行几天的训练。

在这里插入图片描述

在这里插入图片描述

为了模拟 2 × 2、3 × 3 和 4 × 4 卷积滤波器,我们考虑了具有 4、9 和 16 个注意力头的三种不同的 ConViT 模型(见表 1)。 它们的磁头数量略大于 Touvron 等人的 DeiT-Ti、ConViT-S 和 ConViT-B。 (2020),分别使用了 3、6 和 12 个注意力头。 为了获得相似尺寸的模型,我们使用两种比较方法。

• 与 Touvron 等人建立直接比较。 (2020),我们将 ConViT 的嵌入维度降低到 D e m b / N h D_{emb}/N_{h} Demb​/Nh​ = 48,而不是用于 DeiT 的 64。重要的是,我们保持 (Touvron et al., 2020) 中呈现的所有超参数(调度、数据增强、正则化)不变,以实现公平比较。生成的模型被命名为 ConViT-Ti、ConViT-S 和 ConViT-B。

• 我们还使用相同数量的头部和 D e m b / N h D_{emb}/N_{h} Demb​/Nh​ = 64 训练 DeiTs 和 ConViT,以确保 ConViT 带来的改进不仅仅是由于更多的头部(Touvron 等,2021b)。这导致稍大的模型在 表1 中用“+”表示。为了在 8 个 GPU 上拟合这些模型的同时保持稳定的训练,我们将学习率从 0:0005 降低到 0:0004,将批量大小从 1024 降低到 512。这些最小的超参数变化导致 DeiTB+ 的表现不如 DeiT-S+ ,这不是 ConViT 的情况,表明对超参数变化具有更高的稳定性。

ConViT 的性能 在表1中,我们展示了这些模型在经过 300 轮训练后在 ImageNet 测试集上评估的前 1 名准确率,以及它们的参数数量、触发器数量和吞吐量。每个 ConViT 的性能都优于其相同大小和相同失败次数的 DeiT。重要的是,尽管位置自注意力确实减慢了 ConViTs 的吞吐量,但它们在同等吞吐量下也优于 DeiTs。例如,ConViT-S+ 达到 82:2% 的前 1,以更少的参数和更高的吞吐量超越原始 DeiT-B。无需任何调整,ConViT 在 CIFAR100 上也达到了高性能,参见 SM。 C,我们还报告了学习曲线。

请注意,我们的 ConViT 与 Touvron 等人介绍的蒸馏方法兼容。 (2020) 无需额外费用。如SM.B所示、硬蒸馏提高了性能,使硬蒸馏的 ConViT-S+ 达到 82:9% 的 top-1 准确率,与硬蒸馏的 DeiTB 相同,参数数量减半。然而,虽然蒸馏需要额外的正向通过

在训练的每一步都预先训练 CNN,ConViT 没有这样的要求,在没有额外计算要求的情况下提供与蒸馏类似的好处。

ConViT 的样本效率在表2中,我们以系统的方式研究了 ConViT 的样本效率,通过对 ImageNet-1k 数据集的每一类进行子采样 f = f0:05; 0:1; 0:3; 0:5; 1g,同时将时代数乘以 1=f,以便呈现给模型的图像总数保持不变。正如人们所料,DeiT-S 及其 ConViT-S 对应物的 top-1 准确度随着 f 的减小而下降。然而,ConViT 受到的影响要小得多:虽然只训练了 10% 的数据,但 ConVit 达到了 59.5% 的 top-1 准确率,而其 DeiT 对应的则为 46.5%。

这个结果可以直接与 (Zhai et al., 2019) 进行比较,后者在测试了数千个卷积模型后达到了 56.4% 的 top-1 准确率;因此,ConViT 在样品效率方面具有很强的竞争力。这些发现证实了我们的假设,即卷积归纳偏差对小数据集最有帮助,如图 1 所示。

四. 考察地方的作用

=====================================================================

在本节中,我们证明在标准 SA 层中自然会鼓励局部性,并检查 ConViT 如何从初始化时强加的局部性中受益。

SA 层被拉向局部 我们首先调查在训练过程中自然鼓励 PSA 层变得“局部”的假设(Cordonnier 等人,2019)是否适用于 ViT 中使用的 vanilla SA 层,这些层没有从位置注意力中受益。为了量化这一点,我们通过对每个查询补丁 i 与所有关键补丁 j 的距离 ∥ δ i j ∥ \left \| \delta _{ij} \right \| ∥δij​∥ 求和来定义“非局部性”的度量,这些关键补丁 j 由它们的注意力得分 A i j A_{ij} Aij​ 加权。我们对查询补丁上获得的数字进行平均以获得头 h 的非局部性度量,然后可以在注意力头上平均以获得整个层的非局部性 φ \varphi φ:

在这里插入图片描述

直观地说, D l o c D_{loc} Dloc​ 是注意力中心和查询补丁之间的补丁数量:注意力头离查询补丁越远,非局部性就越高。在图 5(左图)中,我们展示了在 ImageNet 上训练了 300 个 epoch 的 DeiT-S 的 12 层训练期间非局部性度量如何演变。在最初的几个 epoch 中,非局部性在所有层中都从其初始值下降,这证实了 DeiT 变得更加“卷积”。在训练的后期阶段,非局部性度量对于较低层保持较低,并逐渐上升到较高层,表明后者捕获了长期依赖关系,正如在语言转换器中观察到的那样(Sukhbaatar 等人,2019 年)。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在检查注意力图(SM 的图 15)时,这些观察结果特别清楚,并指出局部性在较低层中的有益影响。

在这里插入图片描述

在 SM. 的图 10 中,我们还表明,当使用 Touvron 等人的卷积网络进行蒸馏训练时,非局部性度量较低。 (2020),表明教师的位置部分转移到学生(Abnar et al.,2020)。

GPSA 层逃逸局部性 在 ConViT 中,由于卷积初始化,在 GPSA 层的训练开始时施加了强局部性。 在图 5(右图)中,我们看到这种局部配置在整个训练过程中都被转义了,因为非局部性度量在所有 GPSA 层中都在增长。 然而,训练结束时的非局部性低于 DeiT 达到的非局部性,表明在整个训练过程中保留了一些关于初始化的信息。 有趣的是,最终的非局部性不会像 DeiT 那样在整个层中单调增加。 第一层和最后一层强烈地逃避局部性,而中间层(特别是第二层)保持更多的局部性。

为了获得更多的理解,我们检查了图 6 中门控参数的动态。我们看到,在所有层中,平均门控参数 Ehσ(λh)(黑色),它反映了对位置信息的平均关注量与内容,在整个培训期间减少。该数量在第 6-10 层达到 0,这意味着实际上忽略了位置信息。然而,在第 1-5 层中,一些注意力头保持较高的 σ(λh) 值,因此利用了位置信息。有趣的是,ConViT-Ti 只使用位置信息直到第 4 层,而 ConViT-B 使用它直到第 6 层(参见 App.D),这表明更大的模型——更不明确——从卷积中获益更多事先的。这些观察结果突出了门控参数在可解释性方面的有用性。

在这里插入图片描述

图 7 的注意力图进一步揭示了 ConViT 的内部工作原理,它是通过将嵌入的输入图像传播到各层并在图像的中心选择查询块来获得的。在第 10 层(底行)中,DeiT 和 ConViT 的注意力图看起来性质相似:它们都执行基于内容的注意力。然而,在第 2 层(顶行),ConViT 的注意力图更加多样化:一些 head 关注内容(heads 1 和 2),而另一些则主要关注位置(heads 3 和 4)。在专注于位置的头部中,一些保持高度局部化(头部 4),而另一些则扩大了他们的注意力范围(头部 3)。感兴趣的读者可以在SM中找到更多的注意力图 E

在这里插入图片描述

在这里插入图片描述

强大的地方性是可取的 我们接下来研究 ConViT 的性能如何受到 ConViT 的两个重要超参数的影响:局部强度 α,它决定了头部围绕其注意力中心的聚焦程度,以及由 GPSA 层替换的 SA 层的数量。 我们检查了这些超参数对 ConViT-S 的影响,在 ImageNet 的前 100 类上进行了训练。 如图 8(a)所示,最终测试精度随着局部强度和 GPSA 层数的增加而增加; 换句话说,卷积越多越好。

在图 8(b) 中,我们展示了在不同训练阶段的性能如何受到 GPSA 层的影响。我们看到,在训练的早期阶段,GPSA 带来的提升特别强:在 20 个 epoch 之后,使用 9 个 GPSA 层导致测试精度几乎翻倍,这表明卷积初始化为模型提供了实质性的“领先优势”。除了最终性能的提升之外,这种加速本身就具有实际意义。

消融研究 在表3中,我们在 ConViT 上进行了消融,表示为 [a]。我们尝试去除位置门控 [b]4、卷积初始化 [c]、门控和卷积初始化 [d] 以及 GPSA([e],这给我们留下了一个简单的 DeiT)。

令人惊讶的是,在完整的 ImageNet 上,没有门控 [d] 的 GPSA 已经比 DeiT (+2.5) 带来了实质性的好处,而卷积初始化 ([b], +2.9) 略微增加了 DeiT。至于门控,它在存在卷积初始化([a],+3.1)的情况下有一点帮助,否则就无济于事。由于门控和卷积初始化(可能是由于性能饱和度超过 80% top-1),这些轻微的改进在低数据状态下变得更加清晰。在这里,仅 GPSA 就带来了 +6.8,额外的 +2.3 来自门控,+2.8 来自卷积初始化,+5.1 来自两者,说明了它们的互补性。

我们还研究了在所有 GPSA 层都被冻结的情况下 ConViT 的性能,只留下 FFN 在前 10 层中进行训练。正如人们所料,如果我们随机初始化 GPSA 层([f],与 DeiT 相比为 -5.4),则在完整数据机制中的性能会严重下降。然而,卷积初始化显着地使冻结的 ConViT 达到了非常不错的性能,几乎等于 DeiT 的性能([e],-0.5)。换句话说,用随机“卷积”替换 SA 层几乎不会影响性能。在低数据情况下,冻结的 ConViT 甚至比 DeiT 的表现还要好 (+6.5)。这自然引出了一个问题:注意力是否真的是 ViT 成功的关键(Dong 等,2021;Tolstikhin 等,2021;Touvron 等,2021a)。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值