从视觉变换器到掩码自编码器,5 分钟搞定

原文:towardsdatascience.com/from-vision-transformers-to-masked-autoencoders-in-5-minutes-cfd2fa1664ac?source=collection_archive---------3-----------------------#2024-06-28

自然语言处理任务如何泛化到计算机视觉的简单指南

https://essamwissam.medium.com/?source=post_page---byline--cfd2fa1664ac--------------------------------https://towardsdatascience.com/?source=post_page---byline--cfd2fa1664ac-------------------------------- Essam Wisam

·发表于Towards Data Science ·阅读时长 7 分钟·2024 年 6 月 28 日

几乎所有的自然语言处理任务,从语言建模、掩码词预测到翻译和问答,都在 2017 年变换器架构首次亮相时经历了革命性变化。毫不奇怪,在短短 2 至 3 年内,变换器也被应用到计算机视觉任务中,并且在这些任务中展现了卓越的表现。在这篇文章中,我们探讨了两种基础架构,使得变换器能够突破进入计算机视觉领域。

目录

· 视觉变换器

∘ 关键思想

∘ 操作

∘ 混合架构

∘ 结构的丧失

∘ 结果

∘ 自监督学习通过掩码

· 掩码自编码器视觉变换器

∘ 关键思想

∘ 架构

∘ 最终备注与示例

视觉变换器

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f02bd048ad2f7f140d55716a7d214624.png

论文中的图片:“一张图片值 16x16 个词:用于大规模图像识别的变换器”

关键思想

视觉变换器的目的是将标准变换器架构推广到处理和学习图像输入。关于该架构有一个关键思想,作者在文中非常透明地进行了强调:

“受变换器在自然语言处理领域扩展成功的启发,我们尝试将标准变换器直接应用于图像,尽可能少地做修改。”

操作

将“尽可能少的修改”字面理解是合理的,因为他们几乎没有做任何修改。实际上他们修改的是输入结构:

  • 在 NLP 中,transformer 编码器接收一个one-hot 向量序列(或者等价的令牌索引),这些向量代表输入句子/段落,并返回一个上下文嵌入向量序列,后者可以用于进一步的任务(例如分类)。

  • 为了推广 CV,视觉 transformer 接收一个patch 向量序列,这些向量代表了输入图像,并返回一个上下文嵌入向量序列,后者可以用于进一步的任务(例如分类)。

特别地,假设输入图像的维度是(n,n,3),并将其作为输入传递给 transformer,视觉 transformer 所做的是:

  • 它将图像分成 k²个 patch,其中 k 是某个值(例如,k=3),如上图所示。

  • 现在每个 patch 的维度将是(n/k,n/k,3),下一步是将每个 patch 展平为一个向量。

patch 向量的维度将是 3*(n/k)(n/k)。例如,如果图像的维度是(900,900,3),并且我们使用 k=3,那么一个 patch 向量的维度将是 300300*3,表示展平后的 patch 中的像素值。在论文中,作者使用了 k=16。因此,论文的标题是“An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale”,而不是输入一个表示单词的 one-hot 向量,它们代表的是表示图像 patch 的像素向量。

其余操作与原始 transformer 编码器相同:

  • 这些 patch 向量会经过一个可训练的嵌入层。

  • 在每个向量中添加位置嵌入,以保持图像中的空间信息。

  • 输出是num_patches个编码表示(每个 patch 一个),这些表示可以用于对 patch 或图像层面的分类。

  • 更常见的是(如论文中所示),一个 CLS 标记被加到表示序列的最前面,这个标记用于对整个图像进行预测(类似于 BERT)。

那 transformer 解码器怎么样?

记住,这就像 transformer 编码器一样;不同之处在于,它使用了掩码自注意力而不是自注意力(但输入签名保持不变)。无论如何,你应该预期很少使用仅解码器的 transformer 架构,因为简单地预测下一个 patch 可能不是一个很感兴趣的任务。

混合架构

作者还提到,完全可以从 CNN 特征图开始,而不是直接从图像开始,形成一种混合架构(CNN 将输出馈送给视觉 transformer)。在这种情况下,我们可以把输入看作是一个通用的(n,n,p)特征图,而一个 patch 向量的维度将是(n/k)*(n/k)*p。

结构丢失

你可能会想,这种架构不应该那么好,因为它把图像当作线性结构来处理,但实际上并非如此。作者通过提到这一点,试图表明这是故意为之。

“二维邻域结构的使用非常有限……在初始化时,位置嵌入不包含任何关于补丁的二维位置信息,所有补丁之间的空间关系必须从头开始学习。”

我们将看到,变换器(transformer)能够学习这一点,这一点在他们的实验中得到了验证,更重要的是,下一篇论文中的架构也证明了这一点。

结果

结果的主要结论是,对于小数据集,视觉变换器通常不如基于 CNN 的模型,但对于较大数据集,它们能够接近或超越 CNN 模型,并且无论如何都需要显著更少的计算资源:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7e699867cbb8ab95893959a4509a990f.png

来自论文的表格:“一张图片价值 16x16 个词:用于大规模图像识别的变换器”。

在这里,我们看到对于 JFT-300M 数据集(包含 3 亿张图片),在该数据集上预训练的 ViT 模型表现超过了基于 ResNet 的基准模型,同时预训练所需的计算资源明显更少。如图所示,他们使用的最大视觉变换器(ViT-Huge,拥有 6.32 亿参数,k=16)所需的计算量仅为 ResNet 基准模型的 25%,且仍然优于其性能。即使是 ViT-Large,仅使用不到 6.8%的计算资源,其性能也几乎没有下降。

同时,其他研究也展示了 ResNet 在训练时在 ImageNet-1K(仅包含 130 万张图片)上的表现显著更好。

通过遮罩进行的自监督学习

作者们对遮罩补丁预测进行了初步探索,模仿了 BERT 中使用的遮罩语言模型任务(即,遮罩出一些补丁并尝试预测它们)。

“我们使用遮罩补丁预测目标进行初步的自监督实验。为此,我们将 50%的补丁嵌入破坏,通过以下方式之一:将其嵌入替换为可学习的[遮罩]嵌入(80%)、随机替换为其他补丁嵌入(10%),或者保持原样(10%)。”

通过自监督预训练,他们的小型 ViT-Base/16 模型在 ImageNet 上的准确率达到了 79.9%,相比从零开始训练提升了 2%,但仍然比监督预训练低 4%。

遮罩自编码器视觉变换器

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d7cf73cf4ebc0d818ec829d32a024a11.png

来自论文的图片:《Masked Autoencoders Are Scalable Vision Learners》

关键思想

正如我们从视觉变换器的论文中看到的,通过遮罩输入图像的补丁进行预训练的收益并不像在普通 NLP 任务中那样显著,在 NLP 中,遮罩预训练可以在某些微调任务中带来最先进的结果。

本文提出了一种视觉变换器架构,涉及一个编码器和解码器,当通过遮罩进行预训练时,能显著提高基准视觉变换器模型的表现(与使用监督训练的基准模型相比,提升高达 6%)。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/027d64201111d63dce657b96d4ad9c3c.png

来自论文的图像:Masked Autoencoders Are Scalable Vision Learners

这是一些示例(输入、输出、真实标签)。它是一个自编码器,旨在重建输入的同时填充缺失的补丁。

架构

他们的编码器实际上是我们之前解释的普通视觉变换器编码器。在训练和推理过程中,它只处理“观察到的”补丁。

与此同时,他们的解码器实际上是普通的视觉变换器编码器,但它需要:

  • 缺失补丁的遮蔽标记向量

  • 已知补丁的编码器输出向量

所以对于一个图像 [ [ A, B, X], [C, X, X], [X, D, E]],其中 X 表示缺失的补丁,解码器将处理补丁向量的序列 [Enc(A), Enc(B), Vec(X), Vec(X), Vec(X), Enc(D), Enc(E)]。Enc 返回给定补丁向量的编码器输出向量,X 是表示缺失标记的向量。

解码器中的最后一层是一个线性层,它将上下文嵌入(由解码器中的视觉变换器编码器生成)映射到一个长度等于补丁大小的向量。损失函数是均方误差,它计算原始补丁向量与此层预测补丁向量之间的差值平方。在损失函数中,我们只关注解码器对遮蔽标记的预测,忽略与已存在的标记(即 Dec(A)、Dec(B)、Dec©等)对应的部分。

最后的评论和示例

可能令人惊讶的是,作者建议遮蔽图像中约 75%的补丁,而 BERT 仅会遮蔽大约 15%的单词。他们是这样辩解的:

图像是具有大量空间冗余的自然信号——例如,缺失的补丁可以通过相邻的补丁恢复,而无需高层次的理解部分、物体和场景。为了克服这一差异并鼓励学习有用的特征,我们会遮蔽大量的随机补丁。

想自己试试吗?查看 NielsRogge 提供的演示笔记本

这就是这个故事的全部内容。我们经历了一段旅程,理解了基本的变换器模型如何推广到计算机视觉领域。希望你觉得它清晰、有洞察力,且值得你的时间。

参考文献:

[1] Dosovitskiy, A. et al. (2021) An image is worth 16x16 words: Transformers for image recognition at scale, arXiv.org。可在以下网址访问:arxiv.org/abs/2010.11929(访问时间:2024 年 6 月 28 日)。

[2] He, K. et al. (2021) Masked autoencoders are scalable vision learners, arXiv.org。可在以下网址访问:arxiv.org/abs/2111.06377(访问时间:2024 年 6 月 28 日)。

基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值