当我们与ChatGPT、Gemini、Deepseek这些大语言模型互动时,实际上正在见证一个与人类说话方式完全不同的过程。
我们会自然地先构思想法,然后再把想法转化成文字,而AI模型采用的是一种循环转换的机制。通过理解这个过程,可以帮助我们看清这些强大系统究竟能做什么。
核心架构:Transformer到底是什么
大多数大语言模型的核心,都藏着一个叫做「Transformer」的架构。
这个架构是在2017年由Google提出的,当时一篇名为《Attention Is All You Need》的论文彻底改变了AI领域。
Transformer本质上是一个序列预测算法,由多层神经网络组成。
这个架构有三个关键组成部分:
「嵌入层」:负责把文字转换成数字表示。
「Transformer层」:这是实际进行计算的地方,通常有几十层甚至上百层。
「输出层」:把计算结果再转换回文字。
Transformer能同时处理所有词语,而不是逐个处理。这就是为什么它能从海量的文本数据中学习,并捕捉到词语之间复杂的关系。
这种「并行处理」的能力是它比循环神经网络(RNN)厉害得多的根本原因。
接下来,我们将逐步了解Transformer架构的工作原理。
1. 从文本到词元(Token)
在任何计算发生之前,模型首先必须把文本转换成它能处理的形式。这一步叫做「分词」,就是先把文本拆解成最基本的单元:词元(Token)。
词元不一定是完整的单词,它们可能是子词、词片段,甚至单个字符。
例如:"I love transformers!"
分词器可能将其分解为:["I", " love", " transform", "ers", "!"].
(在这里"transformers"变成了两个独立的词元。)
每个词元都被分配一个唯一的整数ID,比如:
- "I" 可能是词元 150
- "love" 可能是词元 8942
- "transform" 可能是词元 3301
- "ers" 可能是词元 1847
- "!" 可能是词元 254
这些ID是任意分配的,之间并没有内在联系。
150和151这两个词元,并不因为数字接近就表示它们相似。
整个词表通常包含5万到10万个不同的词元,这些是在模型训练过程中学习到的。
2. 将词元转换为嵌入向量
神经网络无法直接处理词元ID,因为它们只是固定标识符。
每个词元ID被映射到一个向量,一个包含数百或数千维连续数字的列表,这些被称为嵌入向量。
为了更直观地理解,我们看一个简化版的例子。
假设我们使用5个维度(真实模型可能使用768到4096个维度):
- 词元 "dog" 变为 [0.23, -0.67, 0.45, 0.89, -0.12]
- 词元 "wolf" 变为 [0.25, -0.65, 0.47, 0.91, -0.10]
- 词元 "car" 变为 [-0.82, 0.34, -0.56, 0.12, 0.78]
注意"dog"和"wolf"有相似的数字,而"car"完全不同。这创建了一个语义空间,相关概念聚集在一起。
为什么需要多维?
因为如果每个词只有一个数字,我们可能会遇到矛盾。例如:
- "stock" 等于 5.2(金融术语)
- "capital" 等于 5.3(相似的金融术语)
- "rare" 等于 -5.2(反义词:罕见)
- "debt" 等于 -5.3(capital的反义词)
现在,"rare"和"debt"都有相似的负值,暗示它们是相关的,这说不通。数百维允许模型表示复杂的关系而不产生这种矛盾。
在这个空间中,我们可以进行数学运算。"king"的嵌入向量减去"man"加上"woman"约等于"queen"。这些关系是在训练过程中从文本数据的模式中涌现出来的。
3. 添加位置信息
Transformer本身并不理解词语顺序。如果没有额外信息,"The dog chased the cat"和"The cat chased the dog"看起来是一样的,因为它们包含相同的词元。
通过添加位置信息可以解决这个问题。每个位置被映射到一个位置向量,就像词元被映射到语义向量一样。
这就像给每个单词贴上一个"序号标签",有了这个标签,模型知道哪个词先出来,哪个词后出来。
对于出现在位置2的词元"dog",它可能看起来像这样:
- 词元嵌入向量: [0.23, -0.67, 0.45, 0.89, -0.12]
- 位置2嵌入向量: [0.05, 0.12, -0.08, 0.03, 0.02]
- 组合(逐元素相加): [0.28, -0.55, 0.37, 0.92, -0.10]
这个组合嵌入捕捉了词语的含义及其使用上下文。这也就是流入Transformer层的内容。
4. Transformer层中的注意力机制
Transformer层实现了注意力机制,这是使这些模型如此强大的关键创新。
每个Transformer层对每个词元使用三个组件进行操作:查询(Query)、键(Key)和值(Value)。
我们可以将其视为模糊字典查找,其中模型将正在寻找的内容(查询)与所有可能的答案(键)进行比较,并返回对应值的加权组合。
例如:"The cat sat on the mat because it was comfortable."
当模型处理"it"这个词时,它需要确定"it"指的是什么。
以下是发生的过程:
首先,"it"的嵌入向量生成一个查询向量,本质上是在问:"我在指代什么名词?"
接下来,这个查询与所有先前词元的键进行比较。每次比较产生一个相似度分数。例如:
- "The"(冠词)产生分数:0.05
- "cat"(名词)产生分数:8.3
- "sat"(动词)产生分数:0.2
- "on"(介词)产生分数:0.03
- "the"(冠词)产生分数:0.04
- "mat"(名词)产生分数:4.1
- "because"(连词)产生分数:0.1
然后,原始分数被转换为加起来等于1.0的注意力权重。例如:
- "cat"获得注意力权重:0.75(75%)
- "mat"获得注意力权重:0.20(20%)
- 所有其他词元:0.05总计(5%合计)
最后,模型从每个词元中获取值向量,并使用这些权重组合它们。例如:
输出 = (0.75 × Value_cat) + (0.20 × Value_mat) + (0.03 × Value_the) + ...
"cat"的值贡献了75%的输出,"mat"贡献了20%,其他几乎被忽略。这个加权组合成为"it"的新表示,捕捉了上下文理解,即"it"最可能指的是"cat"。
这个注意力过程发生在每个Transformer层中,但每个层学习检测不同的模式。
- 「早期层」:学习基本模式,如语法和常见词对。处理"cat"时,这些层可能会大量关注"The",因为它们学习到冠词与其名词是相关的。
- 「中间层」:学习句子结构和短语之间的关系。它们可能会弄清楚"cat"是"sat"的主语,而"on the mat"是表示位置的关系短语。
- 「深层」:提取抽象含义。它们可能会理解这个句子描述了一个物理情境,并暗示猫是舒适的。
每层逐步精炼表示。一层的输出成为下一层的输入,每层添加更多上下文理解。只有最后的Transformer层需要预测实际的词元。
所有中间层执行相同的注意力操作,但只是将表示转换为对下游层更有用的表示。中间层不会输出词元预测,而是输出流向下一层的精炼向量表示。
这种堆叠许多层、每层专门处理语言不同方面的方式,正是让大语言模型能够捕捉复杂模式并生成连贯文本的原因。
5. 转换回文本
在流经所有层之后,最终向量必须被转换回文本。反嵌入层将该向量与每个词元嵌入进行比较并产生分数。
例如,要完成"I love to eat",反嵌入可能产生:
- "pizza": 65.2
- "tacos": 64.8
- "sushi": 64.1
- "food": 58.3
- "barbeque": 57.9
- "car": -12.4
- "42": -45.8
这些任意分数使用softmax转换为概率:
- "pizza": 28.3%
- "tacos": 24.1%
- "sushi": 18.9%
- "food": 7.2%
- "barbeque": 6.1%
- "car": 0.0001%
- "42": 0.0000001%
具有相似分数(65.2对64.8)的词元获得相似的概率(28.3%对24.1%),而低分词元获得接近零的概率。
模型不是直接选概率最高的那个!它是在转一个"概率轮盘",每个词元占一块,概率大的占得大,概率小的占得小。这样它有时候会选"tacos"而不是"pizza",让输出多一点变化和惊喜。如果你每次都选最高的,那AI说话就会变得很机械、很无聊。
这种随机性的原因是,总是选择特定值(如"pizza")会产生重复、不自然的输出。按概率加权的随机采样允许选择"tacos"、"sushi"或"barbeque",产生多样、自然的响应。偶尔会选择低概率的词元,带来有创造性的输出。
6. 迭代生成循环
生成过程对每个词元都会重复。
让我们再看一个例子,输入提示词:"The capital of France"。
「第一轮:」
- 输入:["The", "capital", "of", "France"]
- 通过所有层处理
- 采样:"is" (80%)
- 输出:"The capital of France is"
「第二轮:」
- 输入:["The", "capital", "of", "France", "is"](包含新词元)
- 通过所有层处理(现在是5个词元)
- 采样:"Paris" (92%)
- 输出:"The capital of France is Paris"
「第三轮:」
- 输入:["The", "capital", "of", "France", "is", "Paris"](6个词元)
- 通过所有层处理
- 采样:"." (65%)
- 输出:"The capital of France is Paris."
「第四轮:」
- 输入:["The", "capital", "of", "France", "is", "Paris", "."](7个词元)
- 通过所有层处理
- 采样:[EoS]词元 (88%)
- 停止循环
「最终输出:」"The capital of France is Paris."
[EoS]或序列结束词元表示完成。每一轮都处理所有之前的词元。这就是为什么生成时间会随着回答变长而变慢。
这被称为「自回归生成」,因为每个输出都依赖于所有先前的输出。
如果选择了不寻常的词元,所有后续词元都将受到此选择的影响。
7. 训练与推理:两种不同模式
Transformer流程在两种情况中运行:「训练」和「推理」。
在「训练」期间,模型从数十亿文本示例中学习语言模式。它从随机权重开始,并逐渐调整它们。
以下是训练的工作方式:
「训练文本:」"The cat sat on the mat."
「模型接收:」"The cat sat on the"
使用随机初始权重,模型可能预测:
- "banana": 25%
- "car": 22%
- "mat": 3%(正确答案概率低)
- "elephant": 18%
训练过程计算误差(mat应该更高)并使用反向传播调整每个权重:
- "on"和"the"的嵌入向量被调整
- 所有96层中的注意力权重被调整
- 反嵌入层被调整
每次调整都很微小(0.245到0.247),但它在数十亿个示例中累积。在不同情境中看到"sat on the"后面跟着"mat"数千次后,模型学习了这个模式。训练需要数千个GPU运行数周,成本数百万美元。完成后,权重被冻结。
在「推理」期间,Transformer使用冻结的权重运行:
「用户输入:」"The cat sat on the"
模型使用其学习到的权重处理输入并输出:"mat" (85%), "floor" (8%), "chair" (3%)。它采样"mat"并返回它。不发生权重变化。
模型使用了它学到的知识,但没有学到任何新东西。对话不会更新模型权重。
要教给模型新信息,我们需要用新数据重新训练它,这需要大量计算资源。
总结
Transformer架构为理解和生成人类语言提供了一个优雅的解决方案。
通过将文本转换为数字表示,使用注意力机制捕捉词元之间的关系,并堆叠许多层来学习越来越抽象的模式,Transformer使大语言模型能够产生连贯且有用的文本。
这个过程涉及七个关键步骤,每个生成的词元都会重复:分词、创建词嵌入、位置编码、通过带注意力机制的Transformer层处理、转换为分数、按概率采样、再解码回文本。每一步都建立在前一步的基础上,将原始文本转换为模型可以操作的数学表示,然后再转换回人类可读的输出。
本质上,大语言模型是复杂的模式匹配机器,它们根据从海量数据集中学习到的模式,预测最可能的下一个词元。
AI并不"理解"我们在说什么,它只是在玩一个高级的猜词游戏。
根据它以前看过的海量文本,它能猜到下一个最可能出现的词是什么。这就是为什么它有时候会说出很有道理的话,有时候又会胡说八道。毕竟,它只是在统计概率,而不是真的有想法。
不过即便如此,这个架构已经非常了不起了,不是吗?
感谢阅读。
热门跟贴