摘要本文是对《ViT 模型精讲1-4 集》的系统梳理。课程以 Vision Transformer 为主线从架构原理、注意力机制、推理 demo 到 CIFAR-100 微调实战完整展示了如何用纯 Transformer 取代 CNN 完成视觉任务。文章覆盖了 patch 切分、线性投影、位置编码、CLS token、Q/K/V 自注意力、多头机制、微调策略、模型加载坑点以及 CV 与 NLP 模型体量差异等核心知识点并提炼出架构、方法论、工程三条主线帮助读者快速建立对 ViT 的整体认知。目录一、这四集到底在讲什么二、第 1 集架构原理——把图片伪装成一句话三、第 2 集注意力机制——Transformer 的心脏四、第 3 集推理 demo 与微调实战——从图片到 CIFAR-100五、第 4 集收尾——训练完成后的坑与 CV/NLP 模型大小之争六、把四集串起来你应该带走的东西一句话总结《ViT 模型精讲1-4 集用纯 Transformer 干掉 CNN从原理图一路干到 CIFAR-100 微调实战》先放可视化把四集的脉络和 ViT 的完整数据流画成了一张图在线链接ViT 模型精讲 1-4 集 · 知识结构图https://go.tabbit.site/projects/o9tjVZZxbBhttps://go.tabbit.site/projects/o9tjVZZxbBhttps://go.tabbit.site/projects/o9tjVZZxbB先交代一下素材情况第 1、3 集我拿到了完整字幕逐句核对过第 2、4 集页面没有暴露字幕文本我依据课程选集结构、第 3 集里的回调比如对 QKV、attention 模块的引用以及 ViT 标准教学内容做了还原这两集的细节描述请以轻量参考对待别当逐字笔记用。哔哩哔哩详细总结一、这四集到底在讲什么这四集是整个 35 集多模态课程的开篇模块主题非常聚焦Vision TransformerViT。老师开篇就定了个调子——“这是比较简单的东西但它引领了一个新的时代”。这话半对半谦虚。简单指的是架构层面的偷懒ViT 几乎没有为视觉任务发明任何新零件它就是把 NLP 里的 Transformer 编码器原封不动搬过来只动了一个脑筋——怎么把一张二维图片伪装成一个句子。而引领时代则是实打实的在它之前视觉世界的通行证是 CNNResNet、YOLO 这一大家子在它之后图片切块当 token 读成了 CLIP、SAM、乃至今天所有多模态大模型视觉侧的标准姿势。可以说不理解 ViT后面 31 集都白看。四集的内在逻辑是一条清晰的原理 → 机制 → 代码 → 工程递进线。第 1 集讲架构思想回答图片怎么变成 Transformer 能吃的东西第 2 集钻进 Transformer 内部把自注意力和多头机制讲透第 3 集画风一转进入 Jupyter Notebook先拿预训练模型做推理 demo再讲模型结构拆解最后引出微调第 4 集把微调收尾聊训练实况、模型加载的坑和硬件门槛。对工程师来说第 3、4 集是真正能抄作业的部分前两集则是你面试时被问ViT 和 CNN 本质区别时能不能答到点子上的关键。二、第 1 集架构原理——把图片伪装成一句话第 1 集的核心贡献可以用一句话概括ViT 让视觉任务全程不使用任何 CNN这在当时是开山之作。具体怎么做老师用了一个非常好懂的例子。假设有一张 900×900 的图片把它切成 3×3 共 9 个方块每个方块叫一个 patch每块 300×300。这里有一个容易忽略但非常关键的细节CNN 的卷积核滑动时感受野之间是有重叠的而 ViT 的 patch 之间没有任何交集是硬生生的网格切分。这意味着 ViT 在输入层面放弃了 CNN 的局部归纳偏置——它不预设相邻像素更相关而是把这个判断权完全交给后面的注意力机制去学。这是两种架构哲学的根本分歧也是面试高频考点。切完块之后遇到第一个工程问题一个 300×300 的 patch 直接拉平是 9 万维的向量太长了直接喂给 Transformer 计算量爆炸。解决方案是线性投影——乘一个权重矩阵 W把 9 万维降到低维实际 ViT-Base 里是 768 维。这一步在代码里通常就是一个卷积核大小等于 patch 大小的卷积层或者等价的全连接层这也是整个模型里唯一跟空间结构沾点边的操作。第二个问题是 Transformer 的先天残疾它对输入序列的顺序不敏感。自注意力本质上是在算集合内两两元素的相关性你把 9 个 patch 的顺序打乱它算出来的结果一模一样——但图片的语义恰恰写在空间排列里。解决办法是 position embedding给每个位置的向量额外加上一个位置向量位置变了加出来的向量就变了模型就能察觉顺序差异。第 1 集还花了相当篇幅讨论位置编码的几种构造方案这一段信息密度很高。第一种是干脆不加位置编码结果就是模型对图片块顺序完全无感效果不行被否掉。第二种是 1D 位置编码就是简单地给位置编 1、2、3……9每个位置一个可学习向量。第三种是 2D 位置编码既然图片是二维的那就拆成行向量和列向量行向量加列向量再加图像向量显式编码第几行第几列。听起来 2D 更合理对吧但老师的结论很直接实验做下来 2D 效果没有 1D 好所以工程上大量采用 1D。这个理论上更美 vs 实验上更好的反差是深度学习里反复上演的戏码值得记住。第四种是相对位置编码老师点到为止只说了现在 NLP 大模型大量在用让大家自行查资料。第 1 集的最后一个巧思是 CLS token分类标记。老师管它叫特别的零位置在 9 个 patch 向量的最前面硬塞一个额外的、不对应任何图片区域的特殊向量。这个向量的职责是当整张图片的发言人——经过多层 Transformer 后每个位置都会输出一个向量但做分类时只取 0 号位这个向量过一层 MLP全连接就得到分类结果。为什么可以这么干因为自注意力让 0 号位在每一层都能跟所有 patch 充分交换信息几层下来它就阅尽全图了。这个设计直接继承自 BERT也是 ViT零创新但极其有效哲学的典型体现。三、第 2 集注意力机制——Transformer 的心脏第 2 集承接第 1 集末尾输入 embedding 序列、输出 embedding 序列的黑盒把黑盒拆开。从第 3 集回看代码结构时的点名attention、全连接、LayerNorm 一一对应可以确认第 2 集的主体是标准 Transformer 编码器层的内部构造LayerNorm → 多头自注意力Multi-Head Self-Attention→ 残差连接shortcut→ LayerNorm → 前馈全连接MLP→ 残差连接。核心当然是自注意力的 Q/K/V 三件套。用大白话讲每个 patch 向量会被三个不同的权重矩阵分别投影成 Query查询、Key键、Value值三个角色。Query 负责我在找什么Key 负责我是什么Value 负责我实际携带的信息。计算过程是拿一个 patch 的 Q 去和所有 patch包括它自己的 K 做点积得到一组相似度分数经 softmax 归一化成权重再用这组权重对所有 V 加权求和得到这个 patch 的新表示。注意一个细节第 3 集里老师特意强调过在 ViT 里做自注意力时图像的 Q、K、V 来自同一套输入向量这就是self的含义——自己跟自己算注意力不像机器翻译的交叉注意力那样一个来自编码器一个来自解码器。多头注意力则是把上述过程并行做若干份把 768 维切成比如 12 个头每头 64 维各自独立算一遍注意力最后拼接投影回去。直觉上不同头可以学到不同类型的依赖关系——有的头关注颜色相近的 patch有的头关注空间相邻的 patch相当于让模型同时戴上多副眼镜看图。残差连接和 LayerNorm 这对配角也不该被跳过残差连接让梯度可以绕过注意力层直接回传是 12 层甚至更深网络能训练起来的前提LayerNorm 则把每层输入的分布稳住防止数值越传越野。第 2 集虽然只有 11 分半但它是理解后面所有模型CLIP 的文本编码器、SAM 的图像编码器、扩散模型里的交叉注意力的通用钥匙属于一遍没懂就再看一遍的那种内容。四、第 3 集推理 demo 与微调实战——从图片到 CIFAR-100第 3 集是四集里最动手的一集15 分半全程在代码里泡着可以切成三段。第一段预训练模型推理。流程是标准的 Hugging Face 套路先加载图像处理器image processor干两件基础但必须的活——把像素值从 0~255 归一化到 0~1并把图片 resize 到模型要求的统一尺寸然后加载 ViT 模型并放到 GPU 上。老师随手从 COCO 数据集拿了两张图做测试一张飞机模型输出airliner航班一张大象模型输出包含Indian elephant印度象“和tusker亚洲象/长牙象”。分得相当准——注意这还是在没经过任何针对 COCO 微调的情况下靠的就是 ImageNet 预训练的泛化能力。这个 demo 的教学意义在于它让你看到预处理 → 模型 → 输出 id → id 映射回 label这条推理链路的完整形态以后换任何模型都是这个模板。第二段模型结构拆解。老师把模型 print 出来逐段对照这一段是把第 1、2 集的理论和代码对齐的关键一步。结构非常干净最前面是 embedding 层对应 patch 切分 线性投影 位置编码那一坨中间是 12 层串联的 ViT Layer每层内部就是 attention 全连接 LayerNorm 的标准配方和架构图严格一一对应最后是一个输出 1000 维的分类头——因为预训练是在 ImageNet 的 1000 个类别上做的768 维的特征向量经全连接映射到 1000 维 logits。类别清单写在配置文件里改任务就要动这里。第三段微调fine-tuning全集最有工程含金量的部分。问题很现实预训练模型分的是大象飞机但你的业务有自己的类别比如老师举的例子是 CIFAR-100100 类。怎么微调老师先给了一个极具普适性的认知框架无论 Transformer 还是 CNN图像网络的层级都有一个分工规律——越靠近输入的层越倾向于提取特征越靠近输出的层越倾向于分类。前者是客观需求圆的、方的、边缘、纹理这些东西全世界通用你分猫分狗和分飞机大炮需要的底层特征是一样的后者是主观需求你们公司的类别划分跟别人家可能完全不同。结论顺理成章微调时没必要动前面的层因为它们学到的通用特征仍然有效动了反而浪费算力还容易训坏。落到操作上有三档选择温和版是只解冻最后几层比如第 9、10、11 层做训练激进省事版——也是老师实际演示的版本——是把前面全部冻结freeze只改最后一层分类头把 1000 类换成 100 类。他特意提醒类别数 100 这个参数必须手动改因为默认是 1000不改直接报错或者输出维度对不上这是新手必踩的坑。冻结多少层没有标准答案原则就一条冻得多训练快但上限略低动得多训练慢但可能更贴合你的数据关键看效果。训练实况部分有几个很接地气的信息点显存占用很小游戏卡 4090 就能跑3080 也没问题——CV 模型对显存的要求远没有 NLP 大模型高老师自己用的是 A6000属于以前跑大模型剩下的训练时每十轮算一次准确率可以看到准确率从 0.46 一路爬到 0.64 以上曲线稳步上行。完整训练要一晚上演示用的模型只训了五六个小时就停了理由是太费电而且 GPU 噪声大——很真实这就是个人玩家跑训练的日常。五、第 4 集收尾——训练完成后的坑与 CV/NLP 模型大小之争第 4 集15 分半把第 3 集开了一半的微调闭环走完核心知识点有三个。第一个是微调后模型加载的坑这个坑非常隐蔽且必踩因为你改了模型结构分类头从 1000 换成 100微调后的模型就不能再用 Hugging Face 自带的便捷方式加载了——它加载时会按原始配置校验结构对不上就失败。解决办法是退回 PyTorch 原生方式先按新结构实例化模型再用 torch.load 把权重灌进去。老师说这都不是什么难事但前提是你知道要这么做否则能在报错信息里怀疑人生半小时。第二个是测试集验证加载微调后的模型在测试集上跑准确率确认训练成果。这是标准的训练闭环——训练集上看曲线测试集上见真章两者差太多就是过拟合的信号。第三个是一个看似闲聊实则深刻的观察为什么 CV 模型普遍比 NLP 模型小老师的解释指向词表——NLP 模型要维护一个庞大的词表每个词对应一个 embedding 向量词表动辄几万几十万个词光 embedding 矩阵就是一笔巨大的参数开销而图像的词就是 patch一张图切成 196 个 patch 也就 196 个位置输入侧的参数需求天差地别。这个对比为后续课程埋下了伏笔后面讲到多模态大模型时你会看到视觉侧和语言侧如何被拼进同一个框架以及这种体量差异如何影响架构选择。六、把四集串起来你应该带走的东西这四集看完脑子里应该留下三条主线。第一条是架构主线图片 → 不重叠 patch → 线性投影降维 → 加 1D 位置编码 → 前面塞一个 CLS token → N 层标准 Transformer 编码器 → 取 0 号位过 MLP 分类。这条链路一个 CNN 零件都没有这是 ViT 的叛逆之处也是它的美感所在——它证明了只要数据管够通用的注意力机制可以自己学会卷积归纳偏置里硬编码的那些先验。第二条是方法论主线特征提取是客观的分类决策是主观的所以微调 冻前面 改后面。这个心法不只适用于 ViT换 ResNet、换任何预训练骨干网络都一样成立是迁移学习里最朴素的真理。第三条是工程主线预处理别偷懒归一化、resize 一个不能少、类别数记得手动改、改了结构就用 PyTorch 原生方式加载、显存不用焦虑消费级显卡够用。这些细节在论文里一个都不会写但全是实操时的真实摩擦力。最后一点吐槽兼提醒这四集的信息密度呈前松后紧分布——第 1 集花一半时间跟弹幕互动没问题的扣个一第 3、4 集则全程干货密集到需要 0.75 倍速。另外课程是 2023 年初录的里面的timm/Hugging Face 用法至今仍然适用但如果你现在从零学建议听完原理直接去读 ViT 原论文An Image is Worth 16x16 Words配合李沐的论文精读视频理论那半边会扎实得多。代码部分跟着第 3、4 集敲一遍CIFAR-100 上把准确率曲线跑出来的那一刻这四集才算真正消化了。补充对比CNN的开始迎接vit。结论CNN靠局部先验省参数Transformer靠全局注意力换性能——纯视觉小任务CNN更划算做视觉或多模态必是Transformer维度CNNTransformerViT核心机制卷积局部窗口 权重共享自注意力全局两两交互感受野局部远距离依赖要堆很深才能建立第一层就能全局交互位置信息天然内含滑动扫描顺序需额外加位置编码参数量共享参数省不共享主要大在MSA更费参数算力需求低早年硬件就能跑高靠近年算力才爆发多模态和NLP两套技术栈难融合与文本同构天然好结合两点提醒一是别只看精度对比模型要把参数量和计算量一起看面试常考二是ViT刚出时精度只是“追平”ResNet它的历史意义不在分类本身而是给多模态铺了统一的底座——就像汽车刚出现跑不过马车但方向变了。
