WRITING / 文章

什么是Transformer?

本文从自然语言处理的基本思路讲起,说明 RNN、LSTM 因串行处理而存在并行能力不足、长距离信息易被稀释的问题,并介绍 2017 年《Attention Is All You Need》提出的 Transformer。文章解释了注意力机制中的 Query、Key、Value 与多头注意力,以及为弥补顺序信息而加入的位置编码;随后介绍编码器—解码器结构、残差连接与层归一化,以及 BERT、GPT 等不同路线,并总结 Transformer 在并行、全局视野和可扩展性方面的优势。

什么是Transformer?

想来想去,与其写一篇自我介绍,不如从一个真正有分量的技术讲起——Transformer。它几乎撑起了今天所有主流大模型(GPT、BERT、Llama……)的骨架,几乎也是从文本序列模型,构建起了目前大家所认为的人工智能。

Transformer出现的背景

NLP(Natural Language Processing,自然语言处理):它的目标是让计算机能理解、处理和生成人类语言。而这一切的起点很朴素——计算机更擅长处理数字:把文本编码成数字,计算起来就方便得多,处理完再还原成文本。

比如常见的机器翻译,把原始语言转换为为一串数字,然后计算机读取后计算,得到另外一串数字,然后再转化为目标语言。而所谓人工智能,它首先要读懂人类语言,读懂文字。然后把它转换成数字,把它转换成计算机可以理解的语言,然后再进行思考计算,然后再返回结果。这其中,计算机是一个强大的计算器,它把这个人类的语言计算出需要回复的内容,然后再转换成文字,再给人类去看,从而模拟出人类的感觉。

但这中间有关键的问题:文字是怎么处理的?模型是怎么理解一段话中的各类指代关系,以及其中的具体含义的?

早期的解法是 RNN 和 LSTM。

RNN 的思路很直观——从左到右一个词一个词地读,把已经读到的内容压缩进一个不断更新的“隐状态”里往下传,读到句末就得到了整句的意思;相当于是机器在读一个文本的时候,逐字逐句的读,不考虑当前读到的词和前文有什么关联,缺少思考理解这种前后文关联的状况。

LSTM 在此基础上加了一组“门”(输入门、遗忘门、输出门),由网络自己决定该记住什么、丢掉什么,从而缓解了 RNN 记不住远处信息的毛病。这样相当于就是人类每次在读的时候,我都会记录下哪些词是关键的,哪些词并不关键,需要去遗忘。

但它们的骨子里是串行的:第 2 个词必须等第 1 个词算完,GPU 的并行能力基本用不上;句子一长,信息在一步步传递中仍会被不断稀释,出现“记得住开头、记不住中间”的情况。

2017 年的论文《Attention Is All You Need》给出的思路是:干脆不按顺序一个个读,而是让每个词同时看到句子里所有的词,自己去计算该和谁建立多强的关系。

RNN 像一个人只能从头到尾逐字读、而且记性还差;LSTM 教会了他挑着记——哪些词关键、哪些可以丢,但读的方式并没变,还是得一个字一个字往下走。

Transformer 换掉的不是记性,而是读法:它把整段文字同时摊在眼前,不再"顺着读",而是让每个词直接去问所有其它词一句"你跟我有多相关"。相关的就多分一点注意力,不相关的就少分、甚至几乎不看,最后按这份相关度把信息汇总到自己身上。

这一步换下来,前面那两个毛病就同时没了:任意两个词之间都是"一步之遥",隔得再远也能直接建立关联,不存在"读到后面忘了前面";而且所有词是同时算的,不用排队等前一个算完,GPU 的并行能力在这种场景下更凸显了。

而正因为不再顺着读,顺序感也一并丢了("我爱你"和"你爱我"在Transformer的处理中可能没差别),所以要额外把位置信息补回去。

关键点有两个,注意力机制和位置编码。

注意力机制是对上下文关系的处理,位置编码是对语言顺序信息的补充。

为什么要"注意力"和”位置编码“?

人类语言特殊之处在于:一个词的意思,几乎从不只由它自己定。

在词库中,"苹果"可以是水果,也可以是公司;"他打了她,因为他喝多了"——这句里"他"指谁、为什么喝多,都得靠上下文才能定。同一句话换个语境,意思就变了;而且这种依赖常常隔得很远,开头点出的人物,可能到段尾才用代词指出。

所以模型要读懂一句话,需要做的事情是:让每个词去找句子里跟它相关的词。进而把问题转换为三个问题,对于每个词来说:

  • 我看谁? 每个词得主动去"问",这就是 Query。
  • 我的特点是什么? 每个词要有自己挂出去的"标签",这就是 Key。
  • 我携带的信息是什么? 每个词真正携带的内容,这就是 Value。

只做一次注意力,就像只用一种视角看句子。多头注意力就是并行开好几组 Q/K/V,每组各自关注不同层面的关系:有的头关注语法结构,有的头关注指代,有的头关注语义相近等。

最后把这些头的输出拼接、线性变换合在一起,模型就同时拥有了多种"观察角度"。

最终的目的是确保每个词都重新"综合"了一遍全句信息,并且综合的配方是数据自己学出来的。

但是注意力有个副作用:它对所有词一视同仁,本身不知道谁前谁后。"我爱你"和"你爱我"在它眼里可能一样。

所以要额外给每个词加上"位置信息"。原论文用正弦/余弦函数生成,后来的模型也常用可学习的位置向量。加进去之后,模型才知道顺序。

整体结构:编码器 + 解码器

原版 Transformer 是 Encoder-Decoder 结构,用于翻译这类任务:

  • 编码器(Encoder):负责"读懂"输入。
  • 解码器(Decoder):负责"生成"输出。

每个编码器层包含:多头自注意力 → 前馈网络(FFN),每一块外面都包着 残差连接 + 层归一化,让深层网络能稳定训练。

解码器多了一层掩码自注意力(保证生成时只能看已经生成的词,不能偷看未来),以及一个对编码器输出的交叉注意力。

后来大家按任务取舍:

  • BERT 只保留编码器,擅长理解类任务。
  • GPT 只保留解码器,擅长生成。
  • 今天的大模型,基本都是"解码器-only"这条路线。

OpenAI押宝decoder-only这条路,事后证明是对的。

为什么 Transformer 这么强

它的优势:

  1. 并行:所有位置可同时计算,训练快、能吃更多数据。
  2. 全局视野:任意两个词之间都是"一步之遥",长距离依赖不再是难题。
  3. 可扩展:结构规整,堆得多、数据多、算力多,效果就持续变好——这正是后来"大模型 Scaling Law"的基础。

感谢读到这里。

继续读文章 →