从概率论角度拆解自回归语言模型:链式法则分解联合概率,softmax输出token分布。去掉框架抽象,直击本质。
表面上,生成式 AI 看起来就像魔法。你把一段提示词输入大语言模型,它就能流畅地生成结构化代码、翻译复杂文本,或者进行多轮推理。
然而,剥去高层抽象和营销术语的外壳,LLM 本质上是一个概率引擎。它的核心任务只有一个:建模文本的概率分布,并在给定前序 token 序列的条件下,预测最可能出现的下一个 token。
在本文中,我们将跳过框架层面的抽象(如 PyTorch 或 Hugging Face),深入拆解将连续概率分布转化为连贯生成文本的精确数学机制。
从根本上看,任何文本序列 W = (w₁, w₂, …, w_N) 都可以表示为一个联合概率分布 P(w₁, w₂, …, w_N)。
通过对概率的链式法则进行应用,这个联合概率可以分解为一系列条件概率的乘积:
P(w₁, w₂, …, w_N) = ∏ₜ₌₁ᴺ P(wₜ ∣ w₁, w₂, …, wₜ₋₁)
这就是自回归语言模型的数学基础。模型严格依据前序 token w_{<t} 的上下文来预测 token wₜ。
当 Transformer 的最终线性层处理上下文 token 时,它输出的是原始的、未标准化的连续分数,称为 Logits(z)。为了把这些原始数值转化为整个词表 V 上的有效概率分布,我们将其通过 Softmax 函数:
Softmax(zᵢ) = e^{zᵢ} / ∑_{j∈V} e^{zⱼ}
为了控制模型响应的确定性或创造性,我们引入一个缩放因子,称为 Temperature(T):
Softmax(zᵢ, T) = e^{zᵢ/T} / ∑_{j∈V} e^{zⱼ/T}
以下是纯 NumPy 实现温度缩放的简单示例:
def softmax_with_temperature(logits: np.ndarray, temperature: float = 1.0) -> np.ndarray:
# Scale logits by temperature
scaled_logits = logits / max(temperature, 1e-8)
exp_logits = np.exp(scaled_logits - np.max(scaled_logits))
return exp_logits / np.sum(exp_logits)
4 个词表 token 的 Logits 示例
logits = np.array([2.0, 1.0, 0.1, 4.0])
print("Standard Softmax (T=1.0):", np.round(softmax_with_temperature(logits, T=1.0), 3))
print("Deterministic (T=0.2):", np.round(softmax_with_temperature(logits, T=0.2), 3))
print("Creative (T=1.5):", np.round(softmax_with_temperature(logits, T=1.5), 3))
在训练过程中,模型的参数通过最大似然估计(MLE)来更新。为了避免最大化原始概率值(可能导致数值下溢),我们最小化负对数似然(NLL)损失:
𝒩ℒℒ = −∑ₜ₌₁ᴺ log P(wₜ ∣ w_{<t})
通过最小化这个损失,我们迫使网络在训练数据集中将更高的概率质量分配给正确的 token。
理解这些核心数学原理——从贝叶斯法则、交叉熵到采样策略和困惑度——是区分那些只会调用 LLM API 的开发者与能够构建、优化和调试定制 AI 系统的工程师的关键。
如果你想在不依赖高级库的情况下,对生成式 AI背后的数学建立深入、直观的理解,推荐阅读我最新的简明入门教程:

如果你想在不依赖高级库的情况下,对生成式 AI 背后的数学建立深入、直观的理解,推荐阅读我最新的简明入门教程:
📘 The Mathematics of Generative AI: From Probability to Language Models
内容概要:
👉 在 Amazon 获取