第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?

  1. 并行计算:RNN必须串行,Transformer可以并行。训练速度快了不止一个数量级。
  2. 长距离依赖:RNN处理长序列时信息衰减严重,Transformer通过自注意力直接建立全局依赖。
  3. 可扩展性:Transformer的架构非常规整,容易堆叠更多层、使用更大规模的数据。后来的BERT、GPT都是基于它构建的。
  4. 通用性:不仅适用于NLP,在CV、语音、多模态等领域也表现优异。

一句话总结:Transformer用更简单的结构,解决了RNN解决不了的问题,而且做得更好、更快、更稳。

我记得第一次跑通Transformer代码时,看到训练曲线蹭蹭往上涨,心里那个激动啊。相比之下,之前调LSTM的各种trick简直是在“炼丹”。

1.5 本章小结

咱们这一章主要讲了:

  • RNN的痛点:串行计算、长距离依赖困难
  • Attention机制的引入:让模型学会关注重要信息
  • Transformer的诞生:彻底抛弃RNN,只用Attention
  • 为什么需要Transformer:并行、高效、可扩展

下一章,咱们会深入拆解Transformer的核心——自注意力机制。到时候我会手撕代码,带你看清楚它到底是怎么工作的。

嗯,今天就到这儿。有问题随时交流。

课后思考:如果让你设计一个比Transformer更高效的架构,你会从哪些方向入手?欢迎在评论区留言讨论。


公众号:蓝海资料掘金营,微信deep3321