现在的大模型几乎都建立在 Transformer 上。它到底解决了什么问题,为什么能成为大模型的地基?「AI 发展史」这个栏目按时间顺序,讲清楚从 Transformer 到今天的 Agent,每一步技术为什么出现、解决了什么问题。第一篇先从 Transformer 出现之前讲起。
想先看个大概,可以先播放下面的动画讲解,两分钟把整条线过一遍,再往下读正文。
2017 年之前,处理文字的模型主要是 RNN。它一个词一个词往下读,每读一个词就把记忆更新一次,读到最后再根据记忆预测下一个词。
朗读用的是浏览器自带的语音,不同设备声音不一样;没有语音的浏览器只显示字幕。
一、RNN:一个字一个字地读
2017 年之前,处理文字的模型主要是 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 的一个辅助零件,大家默认处理文字离不开 RNN。作者认为不再需要 RNN 了,只需要注意力机制就够了。
有一个容易混的地方:这里说的并行,指的是模型读一段已有的文字时,比如训练的时候,或者读你发过去的问题时。模型生成回答时,还是要先生成上一个词,才知道下一个词接什么。用 ChatGPT 时,回答一个字一个字地冒出来,就是这个原因。
四个阶段放在一起看:
| 阶段 | 怎么读 | 记得住吗 | 能并行吗 |
|---|---|---|---|
| RNN | 一个词一个词读,记忆大小固定 | 句子一长就忘 | 不能 |
| LSTM(1997) | 加了几道门,挑着记 | 久一点,长了还是忘 | 不能 |
| RNN 加注意力(2014) | 全部存下来,用的时候回头看 | 能 | 不能 |
| Transformer(2017) | 只用注意力,每个词直接看所有词 | 能 | 能 |
检验一下
RNN 处理长句子时有哪两个问题?
RNN 一步等一步,所以慢;记忆大小固定,前面的信息被不断冲淡,所以记不住。
LSTM 相比 RNN 改进了什么?
LSTM 用遗忘门、输入门、输出门决定记什么、忘什么,重要信息能保留得更久;但记忆容量和串行这两个根本问题都还在,所以说治标不治本。
Transformer 为什么能并行?
并行指的是读一段已有的文字时,每个词的计算互不依赖。生成回答时还是要一个词一个词地生成。
想深入可以看
- Transformer 原论文:Attention Is All You Need(2017)
- 第一次给 RNN 加上注意力的论文:Neural Machine Translation by Jointly Learning to Align and Translate(2014)
- 图解 LSTM 的经典文章:Understanding LSTM Networks
- 图解 Transformer 的经典文章:The Illustrated Transformer