第1章:Transformer起源:从RNN到Attention的演进,为什么需要Transformer?
大家好,我是你们这门课的主讲。今天咱们聊聊Transformer的“前世今生”。
说实话,我刚入行那会儿,NLP领域还是RNN和LSTM的天下。那时候谁要是说有个模型能彻底抛弃循环结构,大家肯定觉得他在吹牛。但你看现在,Transformer几乎成了标配。这中间到底发生了什么?
嗯,咱们从头捋一捋。
1.1 RNN时代的荣光与痛点
先说说RNN(循环神经网络)。它的设计思路很直观:处理序列数据时,让网络“记住”之前的信息。
比如翻译句子“I love NLP”,RNN会逐个单词处理,把前一个单词的隐藏状态传给下一个。看起来挺合理,对吧?
但实际用起来,问题就来了。
核心痛点:长距离依赖问题
当句子变长时,RNN很难记住开头的信息。比如“我在北京出生,后来去了上海,再后来到了深圳,最后定居在______”。模型要预测最后一个词,得追溯到“北京”这个关键信息。但RNN处理到后面时,前面的信息早就被“稀释”了。
我在项目中遇到过这种情况:用RNN做文本生成,生成到第50个字时,模型已经完全忘了开头在说什么。生成的内容前后矛盾,简直没法看。
后来大家想了个办法——LSTM(长短期记忆网络)。它加了“门控机制”,理论上能记住更长的信息。但说实话,也只是缓解,不是根治。
为什么?因为RNN家族有个天生的缺陷:串行计算。每个时间步都得等前一个算完,才能算下一个。这导致训练速度极慢,而且很难并行化。
我的经验:用LSTM训练一个中等规模的翻译模型,在8块GPU上跑,也得两三天。而Transformer用同样的资源,半天就能搞定。这就是差距。
1.2 Attention机制的诞生:让模型学会“关注”
2014年,Bahdanau等人提出了Attention机制。说白了,就是让模型在生成每个词时,能“回头看”一下输入序列的所有位置,并给每个位置分配一个权重。
举个例子:翻译“I love NLP”时,生成“我”这个字,模型会重点关注“I”;生成“自然语言处理”时,重点关注“NLP”。
这个想法很朴素,但效果出奇的好。为什么呢?
- 解决了长距离依赖:模型可以直接“看到”输入序列的任何位置,不用一步步传递信息。
- 可解释性增强:你能看到模型在关注哪些词,方便调试。
但注意,早期的Attention是“寄生”在RNN上的。也就是说,它只是RNN的一个增强插件,并没有改变RNN串行计算的本质。
避坑指南:我曾经在项目中尝试只用Attention,去掉RNN,结果发现模型根本学不动。因为那时候的Attention还缺乏位置信息,模型不知道词与词之间的顺序关系。后来我才明白,位置编码是Transformer成功的关键之一。
1.3 从RNN+Attention到纯Attention:Transformer的诞生
2017年,Google的Vaswani等人发表了一篇论文,标题叫《Attention Is All You Need》。
这篇论文的核心思想就一句话:我们不需要RNN,只用Attention就够了。
他们提出了Transformer模型,结构如下:
| 组件 | 作用 | 我的理解 |
|---|---|---|
| 自注意力(Self-Attention) | 让序列中的每个位置都能关注到所有其他位置 | 相当于模型自己跟自己对话,找出哪些词是相关的 |
| 多头注意力(Multi-Head Attention) | 用多组注意力,捕捉不同角度的关系 | 就像从多个维度看问题,更全面 |
| 位置编码(Positional Encoding) | 给模型注入位置信息,弥补Attention没有顺序感的缺陷 | 用正弦余弦函数给每个位置打上“坐标” |
| 前馈神经网络(FFN) | 对每个位置的表示做非线性变换 | 增加模型的表达能力 |
| 层归一化(Layer Norm) | 稳定训练过程 | 防止梯度爆炸或消失 |
你想想看,这个设计有多巧妙。它彻底抛弃了循环结构,所有计算都可以并行进行。而且自注意力机制让每个词都能直接看到所有词,长距离依赖问题迎刃而解。
1.4 为什么我们需要Transformer?
说了这么多,咱们总结一下。为什么Transformer能取代RNN?
- 并行计算:RNN必须串行,Transformer可以并行。训练速度快了不止一个数量级。
- 长距离依赖:RNN处理长序列时信息衰减严重,Transformer通过自注意力直接建立全局依赖。
- 可扩展性:Transformer的架构非常规整,容易堆叠更多层、使用更大规模的数据。后来的BERT、GPT都是基于它构建的。
- 通用性:不仅适用于NLP,在CV、语音、多模态等领域也表现优异。
一句话总结:Transformer用更简单的结构,解决了RNN解决不了的问题,而且做得更好、更快、更稳。
我记得第一次跑通Transformer代码时,看到训练曲线蹭蹭往上涨,心里那个激动啊。相比之下,之前调LSTM的各种trick简直是在“炼丹”。
1.5 本章小结
咱们这一章主要讲了:
- RNN的痛点:串行计算、长距离依赖困难
- Attention机制的引入:让模型学会关注重要信息
- Transformer的诞生:彻底抛弃RNN,只用Attention
- 为什么需要Transformer:并行、高效、可扩展
下一章,咱们会深入拆解Transformer的核心——自注意力机制。到时候我会手撕代码,带你看清楚它到底是怎么工作的。
嗯,今天就到这儿。有问题随时交流。
课后思考:如果让你设计一个比Transformer更高效的架构,你会从哪些方向入手?欢迎在评论区留言讨论。
公众号:蓝海资料掘金营,微信deep3321