@pmddomingos: 你可以阅读数百篇充满炒作的大语言模型文章,却仍然不知道它们是如何工作的。或者,你可以阅读这篇,然后...
摘要
一条推文推荐了一篇全面的博客文章,该文章从注意力机制和分布式表示开始,解释了大语言模型的历史,旨在帮助读者揭开LLMs的神秘面纱。
查看缓存全文
缓存时间: 2026/07/16 14:19
你可以阅读数百篇关于LLM的炒作文章,却仍然不知道它们是如何工作的。或者你可以读这一篇,然后比大多数专业人士懂得更多。https://gregorygundersen.com/blog/2025/10/01/large-language-models/…
大型语言模型的历史
来源:https://gregorygundersen.com/blog/2025/10/01/large-language-models/ 大型语言模型(LLM)对我来说仍然有点像魔法。当然,我对其大体机制有所了解,知道它们并非魔法,但我过时的知识储备与前沿技术之间的差距,此刻感觉尤其巨大。事情发展得太快了。所以六个月前,我决定稍微缩小这个差距,深入探究我认为是LLM核心基础之一的东西:神经网络中的注意力机制。
我开始阅读文献中一篇里程碑式的论文,由Google Brain在2017年发表,标题很吸引人:Attention is all you need(Vaswani et al., 2017)(https://gregorygundersen.com/blog/2025/10/01/large-language-models/#vaswani2017attention)。正如标题所示,作者并非发明了注意力机制。相反,他们引入了一种神经网络架构,在某种意义上“全是注意力”。这个架构就是现在著名的transformer。显然,transformer与之前的一切形成了对比,但之前的是什么?transformer又做了哪些不同的事情?
为了回答这些问题,我阅读了大量论文,而随着阅读的深入,我认为在此处自然呈现的背景也越来越多。我深入探究了这个领域,当我出来时,我意识到原本对注意力的研究,已经演变成了一个更大的故事。注意力仍然是主线,但还有其他重要主题,比如神经网络如何泛化,以及那个残酷的教训:简单但可扩展的方法,似乎胜过虽巧妙但不可扩展的方法。这篇文章就是那次深入研究的结果,也是一部风格化的LLM历史。
需要说明的是,现实中的细节无穷无尽,任何总结或综合都不可避免地会淡化这些细节。所以为了综合叙述的需要,我会无意或有意地跳过许多重要且相关的论文和想法。我还会跳过诸如数据预处理、硬件和计算进步等实践层面问题。我的重点将放在我认为的主要方法论里程碑上,而这段历史只是讲述这个故事的众多方式之一。
分布式表示
我先从一个古老的想法开始,这个想法如今已无处不在,在此赘述似乎有些愚蠢。这个想法是:神经网络通过分布式表示自动泛化。这个想法根植于计算神经科学,特别是连接主义(McCulloch & Pitts, 1943)(https://gregorygundersen.com/blog/2025/10/01/large-language-models/#mcculloch1943logical),并在20世纪80年代的论文中得到了明确讨论,例如Learning representations by back-propagation errors(Rumelhart et al., 1986)(https://gregorygundersen.com/blog/2025/10/01/large-language-models/#rumelhart1986learning)和Learning distributed representations of concepts(Hinton, 1986)(https://gregorygundersen.com/blog/2025/10/01/large-language-models/#hinton1986learning)。理解这一点是理解为什么LLM能够运作的关键,从而也能理解驱动它们发展的长期学术研究。
但首先,有一个问题。自然语言处理(NLP)的目标是用计算机模拟人类语言。直到20世纪80年代,NLP系统大多基于手工编写的规则和手工设计的特征。然而,到了20世纪90年代初,研究人员开始探索使用机器学习中的统计方法。一个早期且开创性的例子,请参见A statistical approach to machine translation(Brown et al., 1990)(https://gregorygundersen.com/blog/2025/10/01/large-language-models/#brown1990statistical)。
统计NLP的核心思想是使用统计语言模型来模拟人类语言,该模型是语言中所有可能序列的概率分布。这个分布通常被分解,使得每个词依赖于它前面的所有词:
p(w1:T) = ∏{t=1}^T p(w_t | w{1:t-1})。(1)
在整篇文章中,我将使用符号 w_{i:j} 来表示序列中从位置 i 到 j(包括两端,即 i ≤ j)的元素:
w_{i:j} := {w_i, w_{i+1}, …, w_{j-1}, w_j}。(2)
给定一个好的统计模型 p(w_{1:T}),我们可以做很多事情。例如,我们可以对不同词序列的可能性进行排序,并利用这个排序来决定诸如对话代理的输出之类的事情。或者,如果我们知道源序列 s_{1:T} 和目标序列 w_{1:T} 之间的条件概率,我们可以进行翻译:
p(w_{1:T} | s_{1:T}) ∝ p(s_{1:T} | w_{1:T}) p(w_{1:T})。(3)
这里,p(w_{1:T}) 是我们目标语言的语言模型,而 p(s_{1:T} | w_{1:T}) 是我们的翻译模型。
如今,这种观点如此普遍,以至于可能觉得显而易见,但稍加想象,我认为不难看出这在四十多年前对于一个语言学家来说可能是多么错误。方程 1 没有捕捉到任何语言结构或词性,比如名词、动词或形容词——参见例如(Chomsky, 1956)(https://gregorygundersen.com/blog/2025/10/01/large-language-models/#chomsky1956three)关于形式文法的论述。相反,它将人类语言的复杂性简化为下一个词的预测。如果我们事先不知道这有效,我们可能会怀疑它是否可行。
更重要的是,估计方程 1 中的模型非常困难!主要挑战是维度灾难。词汇表中有很多很多的词。例如,语言学家估计英语大约有一百万个词,根据计数方式不同,上下或许差几十万。此外,在某些任务(如翻译)中,这个问题会爆发,因为存在许多可能的条件概率 p(s_{1:T} | w_{1:T})。因此,在估计我们语言模型的条件概率时,我们不可能遇到所有可能的组合。我们面临数据稀疏问题,估计真实概率变得不可能。
也许解决这个问题最古老的想法是由安德雷·马尔可夫在分析普希金的《叶甫盖尼·奥涅金》时开创性提出的(Markov, 1913)(https://gregorygundersen.com/blog/2025/10/01/large-language-models/#markov1913exmaple)。他假设方程 1 中的每个条件概率只依赖于前 N 个项:
p(w_{1:T}) = ∏{t=1}^T p(w_t | w{1:t-1}) ≈ ∏{t=1}^T p(w_t | w{t-N+1:t-1})。(4)
今天,我们称此为“马尔可夫假设”,方程 4 就是著名的N-gram 模型。特别是对于较小的 N,比如 N=2(双字母组)或 N=3(三字母组),我们可能能够获得数据的合理估计。但问题在于,并且这个问题是驱动注意力机制的核心主题之一:马尔可夫假设破坏了上下文。没有足够的上下文,语言模型永远无法复制自然语言的复杂性和细微差别。
据我理解,这大致是 2000 年左右该领域的状况。但随后在 2003 年,一篇开创性的论文发表了:A neural probabilistic language model(Bengio et al., 2003)(https://gregorygundersen.com/blog/2025/10/01/large-language-models/#bengio2003neural)。在那篇论文中,作者提出了一个新想法:为了避免数据稀疏问题,即维度灾难,我们可以使用神经网络来学习语言模型,利用他们所谓的词的“分布式表示”。(今天,我们可能称之为“词嵌入”。)他们提出了三个核心想法。首先,他们将每个词表示为一个实值向量或嵌入;然后,他们用这些嵌入来表达方程 1;最后,他们训练一个神经网络,通过反向传播(Rumelhart et al., 1986)(https://gregorygundersen.com/blog/2025/10/01/large-language-models/#rumelhart1986learning)同时学习嵌入和方程 1 中概率函数(神经网络)的参数。
这内容很多,所以我们稍微分解一下。我们的目标是学习一个良好的模型 f_Θ 来模拟自然语言,使得
p(w_t | w_{1:t-1}) ≈ f_Θ(w_{t-1}, …, w_{t-N})。(5)
所以左边是真实的条件分布,捕捉下一个词预测。这是语言建模的目标。但在实践中,建模完整上下文是困难的。所以我们满足于右边,这是用大小为 N 的上下文窗口对这个真实分布的参数近似 f_Θ。
在 Bengio 等人的工作中,他们使用两个组件来建模 f_Θ。首先,他们将词表示为向量。令 V 表示我们的词汇表,它只是一个整数集合 V = {1, 2, …, V},索引语言中所有 V 个词。我们将每个词表示为一个 D 维向量,因此我们可以将整个语言表示为一个矩阵 C ∈ R^{V×D}(图 1)。现在对于序列 w_{1:T} 中第 t 个词,我们在词汇表中有一个关联索引,记作 I(w_t) ∈ V。这个符号可能有点奇怪,但我在这里很小心,因为 w_t 不是一个定义良好的数学对象,不能直接索引 C。但 I(w_t) 是一个整数,可以索引 C,所以 c_{I(w_t)} 是一个 D 维向量(C 的一行),表示词汇表中的第 I(w_t) 个词,关联于序列中的第 t 个词。这个向量就是我们所说的“嵌入”或“分布式表示”。
图 1. 矩阵 C ∈ R^{V×D} 表示词汇表 V = {1,2,…,V} 中的每个词。第 i 行是一个 D 维向量,表示第 i 个词,i ∈ V。这个行向量是该词的分布式表示,称为“词嵌入”。
其次,Bengio 等人将词的概率函数(方程 1)表示为一个前馈神经网络 g,带有参数 Ω 和参数 C:
f_Θ(w_{t-1}, …, w_{t-N}) = g_Ω(c_{I(w_{t-1})}, …, c_{I(w_{t-N})})。(6)
然后他们使用反向传播来联合估计参数
Θ := {C, Ω}。(7)
换句话说,他们在学习词嵌入 C 的同时学习神经网络参数 Ω。注意,“分布式表示”既可以指连续值向量(如词嵌入),也可以指分布在神经元上的概念。这种二重性在 C 中得到了体现,它既是可学习参数集又是嵌入本身!
为什么这可能有效?作者解释这个想法的水平如此之高,以至于直接引用原文是值得的:
在所提出的模型中,它将会泛化,因为“相似的”词预计会有相似的特征向量,并且因为概率函数是这些特征值的平滑函数,特征中的一个小变化将导致概率中的一个小变化。因此,训练数据中仅出现上述句子之一,不仅会增加该句子的概率,还会增加其在句子空间中“邻居”的组合数量的概率。
这是一个美妙的想法。如果我们有“组织良好”的词嵌入,即在句子中扮演相似角色(语义上和句法上)的词具有相似的嵌入并且如果从词嵌入到概率的函数是平滑的,那么词的小变化会导致嵌入的小变化,进而导致概率的小变化(图 2)。
图 2. (Bengio et al., 2003) 假设神经网络在词嵌入上会泛化良好,因为输入嵌入的一个小变化可以产生输出概率的一个小变化。因此,如果模型只看到包含某个词的一个句子,它可能仍然能泛化到包含相似词的相似句子。
暂停片刻,真正思考一下这个问题。词是离散的对象,而“词的小变化”虽然对人类来说是直观的,但却是定义不清的。但这种方法具体化了“词小变化”的含义。引用我们稍后会讨论的论文 Linguistic regularities in continuous space word representations (Mikolov et al., 2013) (https://gregorygundersen.com/blog/2025/10/01/large-language-models/#mikolov2013linguistic):
而 N-gram 模型使用彼此之间没有内在关系的离散单元工作,连续空间模型则使用词向量工作,其中相似的词很可能有相似的向量。因此,当模型参数针对特定词或词序列进行调整时,改进将传递到相似词和序列的出现中。
例如,如果“狗”和“猫”在词嵌入空间中彼此靠近,那么“猫在人行道上行走”和“狗在人行道上行走”可能应该具有相似的概率。并且只需要这两个句子中的一个存在于训练数据中,模型就能对两个句子都很好地泛化!
正如我提到的,这个想法在 2003 年并非全新。自 20 世纪 80 年代以来,研究人员就已经知道神经网络可以通过将表示分布在许多神经元上来泛化(Hinton, 1986)。每个新例子都会修改权重,将新知识融入旧知识中。然而,(Bengio et al., 2003) 是 NLP 中的一篇里程碑式论文,因为它是第一次将这个想法应用于语言建模。Bengio 的论文认真对待了这样一个想法:我们可以使用词的分布式表示来构建语言的统计模型。这是第一个暗示,表明我们可以使用神经网络来克服困扰统计 NLP 的维度灾难。
自回归框架
这是一个有希望的想法,但我们忽略了一个重要细节:我们实际上如何训练这个模型?神经网络应该使用什么损失函数或目标?给定一个拟合的模型,我们如何生成一个新序列?这些问题本身很重要,但在概念层面,Bengio 的模型与当今前沿的大型语言模型之间确实没有区别。因此理解这一点对于理解 LLM 至关重要。两者都是自回归模型,并且都使用
相似文章
@CamilleRoux: 对LLMs内部工作原理的精彩解释:tokens、embeddings、positional encoding、attention、feed-forward…
这条推文分享了一篇关于LLMs内部工作原理的详尽解释,涵盖了tokens、embeddings、positional encoding、attention和feed-forward网络,来源于0xkato的一篇博文。
@pallavishekhar_: https://x.com/pallavishekhar_/status/2058460434035060758
解释大型语言模型实际所做的工作(下一个Token预测),以及为什么即使出错时它们听起来也很有信心。提供了一种心智模型和验证检查清单,用于安全使用LLM。
大型语言模型是如何工作的(26分钟阅读)
详细讲解基于Transformer的大型语言模型的工作原理,涵盖分词、嵌入、注意力机制和下一个词元预测,无需复杂数学。
理解大型语言模型
本章回顾了当前对大型语言模型的理解,讨论了它们的Transformer架构、类似人类认知的涌现能力,以及关于LLM是真正理解还是仅仅模拟理解的争论。
@mdancho84:这份277页的PDF揭示了大型语言模型的秘密。以下是内容概述:
一份277页的PDF指南,揭示大型语言模型的深刻见解,由Matt Dancho通过推特讨论串分享。