1. Vision Transformer(ViT)详解:从动机、结构到训练与 CNN 对比
计算机视觉领域近年来最引人注目的变革,莫过于Transformer架构从自然语言处理向图像识别任务的跨界。作为这一变革的代表作,Vision Transformer(ViT)彻底打破了卷积神经网络(CNN)长达十余年的统治地位。本文将深入剖析ViT的核心设计,从最初的研究动机到模型架构细节,再到实际训练技巧,最后与CNN进行全面对比,带您完整理解这一颠覆性技术。
1.1 为什么需要ViT?
2017年Transformer在NLP领域大获成功后,研究者们开始思考:这种基于自注意力机制的架构能否同样适用于图像数据?传统CNN通过局部感受野逐步提取特征,而Transformer的全局注意力机制理论上能更直接地建模长距离依赖关系。但图像与文本存在本质差异——图像是稠密的二维结构数据,而文本是离散的一维序列。
ViT的突破性在于将图像重新表述为序列结构。通过将输入图像分割为固定大小的图像块(patch),每个patch被展平后作为序列的一个元素。这种看似简单的处理方式,却为Transformer在视觉任务中的应用打开了大门。实验证明,当训练数据足够庞大时(如JFT-300M数据集),ViT能够超越当时最先进的CNN模型。
关键洞见:ViT的成功证明了"图像即序列"这一理念的可行性,为后续多模态大模型(如CLIP)奠定了基础。
1.2 ViT模型架构深度解析
1.2.1 Patch Embedding层
原始图像输入首先被分割为N个16×16的patch(以224×224图像为例,得到14×14=196个patch)。每个patch经过展平后得到长度为16×16×3=768的向量(对于RGB图像)。这些向量通过可学习的线性投影(即全连接层)映射到模型维度D(通常为768),形成patch embedding。
python复制# Patch Embedding的PyTorch实现示例
class PatchEmbed(nn.Module):
def __init__(self, img_size=224, patch_size=16, in_chans=3, embed_dim=768):
super(
