大型语言模型(LLM)的工作原理详解
本文深入探讨了大型语言模型的核心机制:下一个词元预测、训练过程、对数几率与Softmax、温度参数的影响,以及输出的概率性质。解释了为什么模型会“幻觉”、如何通过思维链提示提高准确性,并澄清了“模型知道”的真正含义。
大型语言模型(LLM)如ChatGPT、Gemini或Claude,用户通常通过输入文本并得到连贯、有知识性甚至令人毛骨悚然的回复来体验它们。然而,其背后的机制比大多数人想象的要更简单也更奇特。本文将从机械层面解析语言模型的工作原理:为何会产生特定输出,为何相同输入在不同运行中产生不同结果,以及“温度”参数的实际含义。
下一个词元预测机
在最基本的层面上,LLM是一个函数,它接收一个词元序列作为输入,并输出一个概率分布,该分布覆盖其整个词汇表,指示下一个词元应是什么。这就是核心操作的完整描述。其他一切——看似合理的推理、对话能力、代码生成——都是通过在大规模数据和海量训练数据上反复执行这一操作而涌现出来的。
具体来说,假设你向模型输入词元“The quick brown fox”。模型不会直接输出“jumps”,而是生成一个概率表:“jumps”可能有42%的概率,“sat”有12%,“leaped”有8%,而词汇表中的其他所有词元则分享剩余的概率质量。然后模型从该分布中采样以选择下一个词元。该词元被追加到序列中,整个过程重复直到达到停止条件。这称为自回归生成。每个生成的词元都成为下一次预测的输入。模型始终在问同一个问题:“根据我目前看到的所有内容,下一个最有可能的词元是什么?”
训练的实际作用
模型通过在海量文本语料库(包括大量互联网文本、书籍、代码和学术论文)上进行训练来学习生成这些概率分布。在训练过程中,模型看到一个词元序列并尝试预测下一个词元。当预测错误时,错误信号通过反向传播在网络中向后流动,轻微调整数十亿个内部参数(模型的“权重”),使得正确预测的概率更高。经过数万亿次这样的更新,模型的权重编码出了一种非凡的东西:语言的压缩统计模型。它学会了“The Eiffel Tower is located in”后面经常跟着“Paris”,Python函数定义以“def”开头,以及以“To be or not to”开头的句子几乎肯定继续以“be”结尾。
关键的是,模型没有单个训练样例的记忆;它内化了统计模式。这就是为什么它能泛化到新输入——它不是检索存储的句子,而是从学习到的分布中采样。
对数几率、Softmax与概率的重要性
在模型生成那些整洁的概率之前,它产生原始得分,称为对数几率——词汇表中每个词元一个实数。这些对数几率是神经网络最后一层的原始输出。为了将对数几率转换为概率分布,模型应用Softmax函数:
P(token_i) = e^(logit_i) / Σ_j e^(logit_j)
Softmax做了两件事:首先,它指数化每个对数几率,放大差异:一个加倍的对数几率会变得指数级更可能。其次,它归一化所有值,使概率总和为1。结果是一个有效的概率分布。
例如,在预测“The quick brown fox”之后的下一个词时,模型为四个词生成原始对数几率:“jumps” 8.3,“leaped” 6.0,“sat” 2.1,“sleeps” -1.5。经过Softmax后,概率分别为90.7%、9.1%、0.18%和0.004%。这是模型在采样前实际交给你的数字。温度、top-k和核采样的所有戏剧都在这里发生,在抽取词元之前对这个分布进行操作。
温度
温度是提示中最被误解的参数。通常被描述为“创造力”或“随机性”,这在技术上正确,但掩盖了其确切工作方式。准确理解它能使你有意地使用它。
温度是一个标量,在应用Softmax之前除以对数几率:
P(token_i) = e^(logit_i / T) / Σ_j e^(logit_j / T)
当T=1.0时,无变化。通过调整T,我们可以“锐化”或“平坦化”分布。例如,对于“jumps”的对数几率8.3:T=0.5时概率约99.0%,T=2.0时约67.5%。而低概率词如“sleeps”在T=2.0时概率从0.004%上升到0.5%。当T>1.0时,概率质量更均匀分布,模型采样到更意外的续写。
实际影响:温度不改变模型知道什么或如何推理,它改变你从概率分布的哪个区域采样。低温时利用模型最自信的预测,高温时探索分布尾部,包含有效但异常的续写——以及不连贯的。合理的心理模型:T=0.0-0.3用于代码生成和事实问答;T=0.7-1.0用于聊天和总结;T=1.2-2.0用于头脑风暴和创意写作,但输出可靠性下降。
输出为何本质上具有概率性
如果你问模型“2+2等于几”,每次都会得到“4”,因为概率质量集中在那个词元上。但对于多个续写合理的提示,模型输出从概率分布中抽取。运行相同提示一百次,你会得到一百个略微不同的输出,有时实质性不同。这不是错误,而是训练的直接结果:训练数据包含巨大差异,不同人以数千种方式表达相同想法,模型学到了这种差异。
这种概率性质有几个实际后果:不能假设模型总是产生相同结构,即使相同提示;模型可能在不同调用中自我矛盾,需要验证;测试提示应在多次运行后进行。
无元知识
模型不存在任何认知意义上的“决定”要说什么。没有内在独白,没有计划步骤。每个词元从左到右依次生成,一旦提交就无法修改。这就是为什么“思维链提示”——要求模型在给出最终答案前逐步推理——实际上能提高复杂任务的准确性。通过生成中间推理词元,模型将后续词元条件于该推理。这并非戏剧化,而是真实有效的。
这也解释了为什么模型会“幻觉”——生成自信但虚假的文本。给定一个上下文期望特定细节的提示(作者名、统计数字、URL),模型从其学习分布中采样一个看似合理的续写。该分布基于真实文本构建,但并非为事实准确性索引。一个看似合理的词元不等于真实的。
“模型知道”的实际含义
当工程师说语言模型“知道”某事时,意思是训练语料库包含许多该信息在上下文中出现的例子,导致模型权重编码了对表达它的续写的强烈先验。模型没有事实数据库;它有数百亿词元共现统计的压缩、有损编码。
实际上:模型对训练中多次见到的事情自信且连贯;对罕见或不一致表达的事情不可靠。它会自信地在训练数据不足的领域编造细节,因为词元预测机制不区分“我学到了”和“我正在模式匹配到看似合理的东西”。
理解这一点有助于设计合适的提示:对于基于常识的任务,模型是强大的加速器;对于需要精确事实回忆的任务(尤其是具体数字、引用或近期事件),模型应被视为需要验证的起点。
总结
语言模型是一个通过最小化预测保留词元误差而训练的下一个词元预测机。它每一步输出一个概率分布,温度控制采样前该分布的尖锐程度。输出是概率性的,因为模型学习了人类语言的自然变化。理解这一点——而不是将模型视为搜索引擎或知识库——是在生产系统中有效使用LLM的基础。