现在的大模型几乎都建立在 Transformer 上。它到底解决了什么问题,为什么能成为大模型的地基?「AI 发展史」这个栏目按时间顺序,讲清楚从 Transformer 到今天的 Agent,每一步技术为什么出现、解决了什么问题。第一篇先从 Transformer 出现之前讲起。

想先看个大概,可以先播放下面的动画讲解,两分钟把整条线过一遍,再往下读正文。

动画讲解Transformer 解决了什么,两分钟看一遍13 步 · 约 2 分钟 · 可以随时暂停、跳步
1 / 13

2017 年之前,处理文字的模型主要是 RNN。它一个词一个词往下读,每读一个词就把记忆更新一次,读到最后再根据记忆预测下一个词。

朗读用的是浏览器自带的语音,不同设备声音不一样;没有语音的浏览器只显示字幕。

一、RNN:一个字一个字地读

2017 年之前,处理文字的模型主要是 RNN(循环神经网络)。它读一句话的方式,和人一个字一个字往下读差不多:读第一个词,得到一份「记忆」;读第二个词时,把这份记忆和第二个词合在一起,更新成新的记忆;就这样一直读到最后,再根据记忆预测下一个词。

这种读法有两个问题。

第一个问题是慢。RNN 只能串行,由前一个词推到下一个词,每一步都要等上一步算完。显卡擅长同时做大量计算,可 RNN 一步等一步,显卡的能力用不上,训练大模型就特别费时间。

第二个问题是记不住。RNN 的记忆是一组大小固定的数字,每读一个新词就更新一次,新信息不断写进来,旧信息就被一点点冲淡。读到后面,开头的信息就剩得很少了,而且也都比较模糊了,就像人的记忆一样。举个例子:

我在法国长大,后来去了很多地方,换过好几份工作,现在住在北京,但我仍然能说一口流利的____。

要填出「法语」,模型得记住开头的「法国」。可是读到空格时,「法国」已经隔了二十多个词,信息早就模糊了。这叫「长距离依赖」问题。

RNN 一个词一个词地读,每一步的记忆传给下一步,关于「法国」的信息越传越淡

二、LSTM:加了几道门

LSTM(长短期记忆网络)是 RNN 的升级版,1997 年提出。它仍然一个词一个词往下读,记忆的大小也没有变,改进在于加了遗忘门、输入门、输出门这几道门:遗忘门决定丢掉哪些旧信息,输入门决定写进哪些新信息,输出门决定这一步用记忆里的哪些内容。

有了这几道门,重要的信息能保留得更久。但记忆的容量没变,句子一长照样装不下,也照样只能串行。两个问题都还在,治标不治本。

三、RNN 加注意力:学会回头看

一个很自然的想法是:把关键事实存储下来。可读到「法国」的时候,模型并不知道二十多个词以后会有个空格要填「法语」,读的时候判断不了什么是关键。

2014 年,研究者在做机器翻译时想出了更进一步的办法:全部存下来,用的时候再挑。每个词读完都把信息留着,一个也不丢;等到需要的时候,比如读到空格,再回头把所有词看一遍,给每个词打一个「和我现在有多相关」的分数。「法国」得分很高,「工作」「北京」得分低,模型就把注意力集中在「法国」上。这就是注意力机制(Attention)。

读到要填的空时,模型回头给每个词打分,「法国」的分数最高

这样记不住的问题解决了。可是主体还是 RNN,还是串行,速度还是慢。

四、Transformer:只要注意力

2017 年,Google 的研究者发表了论文《Attention Is All You Need》,提出了 Transformer。它把 RNN 整个拿掉,只留下注意力机制。

拿掉 RNN 以后,处理一个词时,模型直接拿整句话的原始词来打相关度分数,不需要等别的词先算出什么结果。第 1 个词到第 100 个词的计算互不依赖,可以同时进行。Transformer 可以并行地建立每个词之间的联系,并且不需要互相等待,正好发挥显卡的长处。训练快了,模型才能做到非常大,后来才有了 GPT 这些大模型。

RNN 处理 6 个词要一步等一步走 6 步,Transformer 在第 1 步就把 6 个词同时算完

论文的标题直译是「你只需要注意力」。在它之前,注意力只是 RNN 的一个辅助零件,大家默认处理文字离不开 RNN。作者认为不再需要 RNN 了,只需要注意力机制就够了。

有一个容易混的地方:这里说的并行,指的是模型读一段已有的文字时,比如训练的时候,或者读你发过去的问题时。模型生成回答时,还是要先生成上一个词,才知道下一个词接什么。用 ChatGPT 时,回答一个字一个字地冒出来,就是这个原因。

四个阶段放在一起看:

阶段 怎么读 记得住吗 能并行吗
RNN 一个词一个词读,记忆大小固定 句子一长就忘 不能
LSTM(1997) 加了几道门,挑着记 久一点,长了还是忘 不能
RNN 加注意力(2014) 全部存下来,用的时候回头看 能 不能
Transformer(2017) 只用注意力,每个词直接看所有词 能 能

检验一下

RNN 处理长句子时有哪两个问题?

LSTM 相比 RNN 改进了什么?

Transformer 为什么能并行?

想深入可以看

← 全部文章