前言
我在2022年实习的时候接触了图注意力机制。面试时的考官、也就是后来的带教问我有没有接触过Transformer,我说没有。当时的图注意力机制采用了Additive的实现方式,自己写了一个十分低效的实现,导致模型训练始终比较慢,但是当时被一致认为是新的技术。在面试后不久,我学习Transformer的论文,才接触到Scaled Dot-Production Attention。再后面不久,就是可以称得上“iPhone时刻”的Chat-GPT了。随着大语言模型如雨后春笋般出现和迭代,不断表现或宣传出令人瞠目结舌的智能,人们开始越来越相信一些report中所声称的那样,这些模型是“世界模型”。但是,也有一些相对刺耳(也可能是清醒)的声音警告说,所谓的“世界模型”只不过是在词表示空间内的更高级的一个回归罢了。当人们对一个新事物的了解停留在初级阶段时,往往对其所下的定义千奇百怪。这些不同的理解促进了新事物的飞速扩散和发展,但对工程化的使用益处不大。所以本文的目的是尝试对一些确定性的概念进行梳理,帮助我们更好地理解LLM,思考我们如何把握已有的知识并加以运用,至于悬而未决的部分则留待研究者们去探索吧。
本文对大模型相关原理的阐释很大程度上参考了知名YouTube频道3Blue1Brown的优秀视频,在文中也引用了若干视频截图,在此特别致谢,并推荐大家去看原片。
大模型所立足的“世界”
自然语言处理一直是人工智能的前沿,人工智能为什么能够理解语义?语义怎么在特征空间中表示?
自然语言的基本单位是词,文本、语音都是由词组成的序列。每个词在特征空间中表示为一个向量,大模型在词向量组成的特征空间中训练。可以想象,语义空间是非常复杂的高维空间。因此,可以看到大模型定义的语义空间都具有很高的维度,如Llama 2-7B具有4096的词嵌入维度,GPT-4 则达到12,288,显然,特征空间的维数越高,表示能力越强,但相应地训练成本也越高。
词向量的大小、方向并不是随机的,而是代表着语义。那么,语义的相似性可以用向量的相似性来代替,比如在线性空间中,可以使用余弦相似度或内积来衡量。例如,表示男人(man)和女人(woman)的词向量之间的相似度,比男人和汽车(car)之间的相似性高。另一方面,既然词向量即代表语义,语义之间的加减也应该可以用向量的加减法实现。例如在语义上,(男)演员(actor)和女演员(actress)的差异与男人和女人之间的差异是相同的,那么相应地,在词嵌入的维度上也有:$E_{actress} - E_{actor} \sim E_{woman} - E_{man}$。

一个具有智能的大模型,一定是操作词向量空间的“高手”。经过近两年的飞速发展,虽然模型发布如雨后春笋,但背后的基本模块越发千篇一律,transformer层,与其组成部分注意力层和全连接层,逐渐一家独大。
注意力:大模型的“短期记忆”
理解注意力机制之前,首先要理解其中的三个重要部分:键(Key)、查询(Query)和值(Value),也就是普遍提及的KQV。下面的公式想必已经非常熟悉:
$$Attention(Q, K, V) = Softmax(\frac{QK^T}{\sqrt{d_k}})V$$
其中V前面的$Softmax()$部分被称为注意力系数,那么这个公式是在算什么?
让我们举个比较通俗的例子:给你一堆彩虹糖,然后问你绿色彩虹糖的个数是多少?对于人来说,我们一个一个地数出绿色彩虹糖的个数,1、2、3,三个!但是,这背后的智能是怎么运作呢?如何将其原理用代码逻辑表示出来?

从注意力的角度,这个过程大致是这样的:由于仅统计总数,我们可以随意地将这堆糖豆排成一个序列,根据统计绿色彩虹糖的目标,我们沿着这个彩虹糖序列遍历每个糖豆,用“绿色”去匹配每个糖豆的颜色,如果匹配上了,则将总数加1。当把这个彩虹糖序列遍历完了,就有了最终的结果:3。那么,在这个过程中,K是糖豆本身的颜色,V是1,Q是绿色,于是我们的匹配方法是:如果K与Q是相同的颜色,那么对于这个糖豆(序列中的元素)注意力系数就是1,否则为0。于是,经过这个彩虹糖注意力层后,我们能够得到正确的结果。
上面的例子还有一个点,就是所谓的匹配颜色的方法如何实现呢?回顾上一节的内容,语义的相似可以向量化地去描述,比如用内积。不放把我们的语义局限在色彩空间中,那么只需要3个维度:RGB,显然K和Q之间的内积,就可以代表颜色的匹配程度。现在再去看上面的公式,是不是就非常的合理了?
全连接:大模型的“长期记忆”
给LLM一个句子让其扩写:Kobe Brian is a famous ____. 现在的任何一个模型相信都能流畅地续写出basketball player。似乎LLM本身能够并且已经存储了一些知识。
LLM的智能,广泛地存在于权重矩阵中。这里,权重矩阵W、全连接层、线性变换指代的是同一件事情。即使是在注意力层中,K,Q,V也是上一层输出的向量经过线性变换得来。我们知道线性变换是对词向量在特征空间中操作,那么在这个过程中,模型如何进行长期记忆?
实际上,模型的记忆可以通过Transformer的两层全连接层实现,以下给出了一种实现方式,用来说明模型事实上具备这种能力。现在回忆一下,Transformer的全连接模块由两层全连接层和中间的激活层实现,每层全连接实际上进行了如下运算:
$$y = W^Tx + b$$
其中W是[F, F]大小的矩阵,可以理解成F个F特征空间长度的列向量,每个向量的维度F就对应语义空间。
假设Kobe Brian的语义在已经在全连接层中“记忆”了,那么这个语义对应语义空间中的一个向量,不妨假设其恰好是W中的第一个列向量。那么,在经过注意力层进行语义提取的输入x上,隐含着Kobe Brian的语义,那么根据前面讨论的内容,x在Kobe Brian的语义方向上必然有相当大的分量。于是,第一层全连接做的事情就十分清楚了:对于W的每一个列向量,将该向量与x作内积,得到其在方向上的相关性,然后施加一个偏置(b),然后经过激活函数。那么经过全连接层后的每个神经元的值,表征了x在模型内置的每个语义方向上的强度。
那么,第二个全连接层又做了什么呢?这是,我们需要把x拆成一个一个神经元来分析,看每个神经元对最终输出的y有什么贡献?我们发现,如果将W再按照F个长度为F的行向量理解的话,第一个神经元的贡献就是在y中出现了以第一个神经元的大小为强度的第一个行向量的贡献。以此类推,最终的y大致上就是W的每个行向量按照神经元为权重求和的结果。
那么,大模型如何记住关于科比的事实并给出 Kobe Brian is a famous basketball player呢?很简单,只要把第一层全连接的W第一个列向量定义成Kobe Brian的语义,并在第二层全连接层的W第一个行向量定义成basketball的语义,就能把输入的语义转换成我们期望的正确输出的语义。也就是说,两层全连接的列/行向量一一配对,实现了某种记忆机制。是不是很神奇?
自回归:大模型的训练与推理
小结