原文towardsdatascience.com/the-ultimate-guide-to-vision-transformers-0a6df32cb248嗨大家好对于那些还不认识我的人来说我的名字是弗朗索瓦我是 Meta 的研究科学家。我对解释高级人工智能概念并使它们更易于理解充满热情。今天让我们深入探讨计算机视觉领域最显著的贡献之一视觉 TransformerViT。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f1010800933e5e726dfb5a1fefc29be0.png将图像转换为补丁图片由作者提供首先让我们回顾一下历史…视觉 Transformer 是由 Alexey Dosovitskiy 等人谷歌大脑于 2021 年在论文《一张图片等于 16×16 个单词》An Image is worth 16×16 words中提出的。当时Transformer 已经显示出在自然语言处理任务上取得卓越性能的关键这在 2017 年发表的必读论文《Attention is All you Need》Attention is All you Need中得到了体现。在 2017 年至 2021 年之间有几次尝试将注意力机制整合到卷积神经网络CNNs中。然而这些大多是混合模型结合 CNN 层和注意力层并且缺乏可扩展性。谷歌通过完全消除卷积并利用其计算能力来扩展模型解决了这个问题。这篇文章回答了百万美元的问题…谷歌视觉团队遵循了谷歌另一团队提供的指南该团队为文本设计了 Transformer。他们解决的关键挑战是“如何将注意力机制应用于图像”在自然语言处理中标记单词或子词是计算注意力的基础。然而图像并不自然地适合这种标记化。单个像素是否应该被视为一个标记或者整个图像应该被视为一个如果将每个像素视为一个单位则需要计算所有像素的注意力机制。对于一个低分辨率的图像如 224×224包含 50,176 个像素这将需要大约25 亿次运算——在当前技术下这是一个不切实际的任务。相反将整个图像视为单个标记过于简单。解决方案介于两者之间将图像转换为一系列补丁。在他们的论文中作者使用了16×16 像素分辨率的补丁。视觉 Transformer 架构https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2bf3ba98fdb455ccbfe1684feab63245.pngVIT 架构图片来自An image is worth 16×16 words关键符号P 16: 补丁大小H, W: 图像的高度和宽度必须是 P 的倍数C 3: 通道数RGBD: 潜在向量大小表示补丁标记展开后的维度。数学上https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/b76fdb927667609bab069447d710edfb.png图片由作者提供这是理解最重要的部分。一旦我们有一个标记序列我们就应用一个 Transformer 编码器。我们只需要了解如何将这些标记添加位置编码以及如何从所有标记中获得一个单一的向量表示。CLS类别标记整个图像的表示如果你熟悉注意力机制你会认识到从N个标记开始并应用L层注意力会导致N个标记——每个补丁一个。这形成了“特征图”其中每个补丁都被编码成一个维度为 D 的向量标记。然而为了对图像进行分类我们需要一个单一的向量来表示它。虽然可以将所有N个标记平均或“池化”成一个单一的向量但作者采用了类似于 BERT 的方法通过引入一个专门用于此用途的标记CLS标记。这个标记被附加到来自图像的其他N个标记上。因此输入序列由N1个标记组成。位置编码https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2e7336403a700bb1f5b7513e95d680df.png位置编码来自 原始 ViT 论文直接将标记输入到注意力机制会导致空间感知能力缺失因为机制不知道每个补丁的位置。为了解决这个问题为每个标记添加了位置编码。位置编码可以是硬编码的例如使用正弦/余弦函数如《Attention is All You Need》论文中所述或在学习过程中学习得到。我个人非常推崇巴顿和萨顿的“苦涩教训”即每当我们要给模型添加归纳偏差时我们发现只要有足够的数据和扩展实际上让模型自己学习它更好。在 VIT 论文中位置编码是可学习的。从前一部分我们看到我们最终得到一个维度为(N1, D)的矩阵。因此位置编码也是一个维度为* (N1, D)* 的矩阵它被添加进去。好的现在我们已经有了一个关于 ViT 架构的稳固概述。在更高分辨率上进行微调在现代深度学习例如2017 年 Transformer 诞生之后解决问题的标准方法变成了第 1 步在一个非常大的数据集上预训练一个非常大的神经网络第 2 步在我们要解决的问题上微调它。在计算机视觉中有一个很酷的技巧可以提升性能在比预训练时使用的分辨率通常是低分辨率更高的分辨率上微调视觉 Transformer (ViT)。但“在更高分辨率上微调”究竟是什么意思这意味着我们使用图像中的更小补丁以获得更多标记还是我们简单地使用更高分辨率的图像它是如何工作的让我们深入探讨这是我偶然遇到的一个问题所以我将深入解释它。当我们提到在更高分辨率上进行微调时我们指的是增加图像分辨率同时保持补丁分辨率不变。例如将图像分辨率从 224×224 增加到 640×640补丁数量将从 196 增加到 1600。这提出了一个挑战因为原本为 196 个标记设计的位置嵌入矩阵不再与新标记的数量相匹配。那么解决方案是什么插值。我们通过使用双三次插值来填充间隙从而扩展了原始的位置嵌入有效地将嵌入的大小调整为与新补丁数量相匹配。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6b980f5eed734dedb64bd24350da33ad.png插值作者图片ViT 的缩放定律https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ef241e9bb058b98bd43c4e93c353138b.pngViT 的缩放定律图片来自原始论文与卷积神经网络CNNs不同视觉 TransformerViTs缺乏内置的归纳偏差如空间局部性和平移不变性。这种缺失意味着 ViTs 必须完全从数据中学习这些模式这使得它们成为高度依赖数据的模型。因此我们可以思考 VIT 的性能如何随着更多数据和更多参数而演变。ViT 的一个优点是它们的性能随着更多数据和更多参数而良好地扩展。然而有一个问题。在数据有限的情况下传统的 CNN 通常更占优势。CNN 的设计考虑到了归纳偏差这使得它们在从较小的数据集中学习时更加高效。它们利用诸如空间层次和局部特征之类的模式这使得它们在数据稀疏时表现更好。因此如果你正在处理一个数据有限的问题CNN 可能是一个更好的选择。但如果你有大量的数据集ViTs 可能提供更好的性能。盈亏平衡点取决于你数据的具体情况。模型到底学到了什么让我们分析一些关键见解嵌入滤波器看起来像什么模型是如何学习位置嵌入的注意力机制关注的是附近的标记还是远处的标记1. 嵌入滤波器很有趣的是要注意ViT 学习的 RGB 嵌入滤波器与 CNN 中发现的相似捕捉基本的视觉纹理如垂直和水平线。本质上尽管 ViTs 不使用卷积但它们学习的嵌入在识别和表示基本图像特征方面起到了类似的作用。2. 位置嵌入当涉及到位置嵌入时ViT 会发展出网格状结构。学习到的嵌入通常表现出一种模式即同一行或列中的值相似。很有趣的是模型能够通过自身学习这种位置编码它能够理解图像的结构尽管它只看到一系列标记。3. 注意力机制ViTs 中的注意力机制在整个网络层中不断发展。在早期阶段它倾向于关注附近的标记这类似于如何捕获局部特征。随着您深入网络注意力机制转向更全局的视角使模型能够整合来自遥远标记的信息并理解整个图像中的高级关系。这种从局部到全局注意力的演变突出了 ViTs 在处理图像时如何构建越来越复杂的表示从而使其能够捕捉复杂的模式。总结来说虽然 ViTs 最初通过学习基本的视觉模式和位置信息开始但它们逐渐发展出推理图像更大和更抽象特征的能力。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/03e70323450f7b07fab61847900ff1cd.png原始论文恭喜您您已经完成了感谢您的阅读在您离开之前想要了解更多精彩的教程请查看我在 Github 上的 AI 教程汇编GitHub – FrancoisPorcher/awesome-ai-tutorials: The best collection of AI tutorials to make you a…You should get my articles in your inbox.Subscribe here.如果您想获取 Medium 上的优质文章您只需每月支付 5 美元即可。如果您通过我的链接 注册您只需支付部分费用而无需额外费用。如果您觉得这篇文章有见地且有益请考虑关注我并为我点赞以获取更多深入的内容您的支持帮助我继续创作有助于我们共同理解的内容。参考文献•“一张图片等于 16×16 个单词”由 Alexey Dosovitskiy 等人2021提出。您可以在 arXiv 上阅读完整论文。