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