1. Transformer起源:从NLP到CV的跨界之旅,为什么视觉需要Transformer?
大家好,欢迎来到这门课的第一讲。
说实话,每次讲Transformer的起源,我都忍不住想起2017年那篇《Attention is All You Need》刚出来时的场景。当时我还在做图像分类,看到NLP圈突然冒出来一个不用RNN、不用CNN的新架构,第一反应是:这玩意儿能行吗?
结果呢?三年后,我自己项目里的骨干网络全换成了Transformer变体。嗯,真香。
1.1 从Seq2Seq到自注意力:NLP的自我革命
要理解Transformer为什么能跨界到CV,得先看看它在NLP里解决了什么问题。
在Transformer之前,NLP的主流架构是RNN和LSTM。它们处理序列的方式很直观——从左到右,一个一个看。但有个致命问题:长距离依赖。
举个例子,句子“我在北京住了十年,但依然不喜欢这里的冬天。”——这里的“这里”指的是“北京”。RNN要记住前面10个词的信息,才能正确指代。实际上,随着序列变长,早期信息会逐渐衰减甚至丢失。
我在2016年做过一个文本生成项目,用LSTM写古诗。写到第20个字时,前面押韵的韵脚基本就忘了。调参调了两个月,效果依然不稳定。后来我才意识到,这不是调参能解决的问题——是架构本身的瓶颈。
核心痛点:RNN/LSTM的串行计算方式,导致长序列信息丢失,且无法并行训练。
Transformer的解决方案很直接:自注意力机制。它让每个词都能直接看到序列里的所有其他词,不再需要一步步传递信息。
你想想看,这就像开会时,每个人都能直接跟任何人对话,而不是只能跟旁边的人交头接耳。信息传递效率完全不一样。
1.2 自注意力机制:让每个像素都能“看见”全局
自注意力的核心公式,我相信大家都见过:
Attention(Q, K, V) = softmax(QK^T / √d_k) V
这个公式其实就做了三件事:
- 计算相似度:Q和K的点积,衡量两个位置的相关性
- 归一化权重:softmax把分数变成0-1之间的概率
- 加权求和:用权重对V进行聚合
说白了,就是让每个位置去“问”其他位置:“咱俩关系怎么样?关系好我就多参考你的信息。”
我个人习惯把这个过程想象成一个全连接图。每个节点(词或像素)都跟所有其他节点相连,边的权重由数据自己学习。这种全局建模能力,是CNN和RNN都做不到的。
避坑指南:我曾经在第一次实现自注意力时,忘了除以√d_k。结果softmax后的分布几乎成了one-hot,梯度直接消失。这个缩放因子不是可选项,是必需品。
1.3 为什么视觉需要Transformer?CNN的边界在哪里?
好,现在问题来了:CNN在图像领域已经统治了这么多年,为什么还要引入Transformer?
CNN的核心操作是卷积——用一个固定大小的窗口(比如3×3)在图像上滑动。这带来了两个天然限制:
- 局部感受野:每个卷积核只能看到周围一小块区域
- 权重共享:同一个卷积核在图像各处重复使用
这两个特性让CNN非常高效,但也限制了它的能力。比如,要识别一张图里“远处的猫和近处的狗”之间的关系,CNN需要堆叠很多层才能把信息传过去。
我记得2020年做的一个项目,用ResNet-50做遥感图像分类。图像里有一片湖泊和一座桥,模型总是把桥误分类为“道路”。后来分析才发现,CNN只关注了桥的局部纹理(长条形、灰色),但没有结合“旁边有水”这个全局上下文。
换成Transformer之后,这个问题自然就解决了——每个patch都能直接看到其他patch,桥旁边是水还是陆地,一目了然。
关键对比:
| 特性 | CNN | Transformer |
|---|---|---|
| 感受野 | 局部(需堆叠层数扩大) | 全局(单层即可) |
| 计算方式 | 滑动窗口,权重共享 | 自注意力,动态权重 |
| 长距离依赖 | 弱(需深层网络) | 强(直接建模) |
| 并行性 | 好 | 好(但计算量大) |
| 归纳偏置 | 强(平移不变性) | 弱(需大量数据学习) |
1.4 ViT的诞生:把图像当成句子来读
2020年,Google的ViT(Vision Transformer)论文彻底打开了CV的大门。它的思路简单到令人惊讶:
- 把图像切成固定大小的patch(比如16×16)
- 把每个patch拉平成一个向量
- 加上位置编码,告诉模型这些patch的排列顺序
- 直接扔进标准的Transformer Encoder
就这么简单。没有卷积,没有池化,没有特殊设计。
我第一次看到这个方案时,心里想的是:这也太粗暴了吧?但实验结果证明,在足够大的数据集上(比如ImageNet-21K或JFT-300M),ViT的表现可以超过当时最好的CNN。
注意:ViT有一个前提条件——数据量要足够大。如果只在ImageNet-1K(128万张图)上训练,ViT打不过同等规模的ResNet。这是因为Transformer缺少CNN那种“平移不变性”的归纳偏置,需要更多数据来学习这些视觉先验。
后来有了DeiT(Data-efficient Image Transformers),通过知识蒸馏和更强的数据增强,才让ViT在小数据集上也能训好。这个我们后面章节会详细讲。
1.5 跨界带来的新视角:全局理解才是视觉的未来
Transformer进入CV领域,带来的不只是一个新的骨干网络。它改变了我们思考视觉问题的方式。
以前做目标检测,我们习惯用锚点框、用NMS、用特征金字塔。这些方法本质上都是“局部先验”——假设目标出现在某些位置、某些尺度。
但Transformer的做法是:把检测问题变成“集合预测”。DETR(Detection Transformer)直接输出一组目标框和类别,不需要锚点、不需要NMS。虽然早期DETR收敛慢、小目标效果差,但这个思路让我眼前一亮——原来检测可以这样做。
我个人认为,Transformer给CV带来的最大价值是:让模型学会“理解”而不是“匹配”。CNN擅长匹配局部纹理模式,Transformer擅长理解全局语义关系。未来的视觉系统,一定是两者的结合。
一句话总结:Transformer从NLP跨界到CV,不是要取代CNN,而是补上了CNN在全局建模上的短板。视觉需要Transformer,因为我们需要模型“看见”整张图,而不仅仅是“扫描”局部。
1.6 本章小结
- Transformer起源于NLP对长距离依赖和并行训练的需求
- 自注意力机制让每个位置都能直接访问全局信息
- CNN的局部感受野限制了它对全局上下文的理解
- ViT用最简单的patch+Transformer方案证明了CV也可以不用卷积
- Transformer给CV带来了新的解题思路,尤其是集合预测和全局建模
下一章,我们会深入ViT的架构细节,看看它到底是怎么工作的。到时候我会带大家手撕一下ViT的代码,包括那个容易踩坑的位置编码实现。我们下次见。