@aiwithmayank:大型语言模型实际工作原理的最佳解释是一个免费的斯坦福讲座,而且它从一只老鼠吃奶酪开始……
摘要
一条推文推广了斯坦福大学的免费CS324课程,该课程关于大型语言模型,用一个老鼠吃奶酪的简单例子来解释LLM的工作原理,并包含交互式演示。
查看缓存全文
缓存时间: 2026/06/18 20:20
关于大型语言模型实际工作原理的最佳解释,来自一堂免费的斯坦福课程,而它始于一只老鼠吃奶酪的故事。
这是斯坦福大学 CS324 大型语言模型课程的导论部分,公开在网络上,任何人都可以访问。
我带着怀疑点开了它。网上所有“人工智能工作原理”的内容,要么是幼稚的入门讲解,要么是满屏的方程式。这都不是。它从一个简单的想法开始。语言模型只是猜测一个句子有多大概率。“那只老鼠吃了奶酪”比“那个奶酪吃了老鼠”得分更高。相同的单词,但其中一个有意义,而模型以某种方式知道这一点。这个简单的例子让我豁然开朗。
然后它逐步、诚实地展开:
香农在 1948 年发明了这种方法来衡量英语的“熵”,远在 ChatGPT 诞生之前。 为什么旧的 n-gram 模型会忘记几个词之前的上下文。 神经网络如何解决了记忆问题,但训练成本极高。 2017 年 Transformer 如何最终攻克了这一难题,然后一切开始爆发。
它由斯坦福大学 Percy Liang 团队撰写,是真正的研究人员。笔记中还有可点击的演示,让你实时观察模型如何选择下一个词。
没有付费墙,没有账号注册。斯坦福大学研究生级别的课程,免费开放,而与此同时,有人却向你出售标价 300 美元的“AI 基础”PDF,内容却远不及此详尽。
如果你曾经在听到“它预测下一个 token”时只是点头,却没有真正理解,那么这个链接就是你需要的。
完全免费。只需打开并阅读。
https://stanford-cs324.github.io/winter2022/lectures/introduction/…
导论
来源:https://stanford-cs324.github.io/winter2022/lectures/introduction/ [ \newcommand{\sV}{\mathcal{V}} \newcommand{\nl}[1]{\textsf{#1}} \newcommand{\generate}[1]{\stackrel{#1}{\rightsquigarrow}} ]
欢迎来到 CS324!这是一门关于理解与开发大型语言模型的新课程。
什么是语言模型?
语言模型(LM)的经典定义是关于 token 序列的概率分布。假设我们有一个词表 (\sV),包含一组 token。语言模型 (p) 为每个 token 序列 (x_1, \dots, x_L \in \sV) 分配一个概率(介于 0 和 1 之间的数字):
[ p(x_1, \dots, x_L). ]
这个概率直观地告诉我们一个 token 序列“好”的程度。例如,如果词表是 (\sV = { \nl{ate}, \nl{ball}, \nl{cheese}, \nl{mouse}, \nl{the} }),语言模型可能会分配(演示):
[ p(\nl{the}, \nl{mouse}, \nl{ate}, \nl{the}, \nl{cheese}) = 0.02, ] [ p(\nl{the}, \nl{cheese}, \nl{ate}, \nl{the}, \nl{mouse}) = 0.01, ] [ p(\nl{mouse}, \nl{the}, \nl{the}, \nl{cheese}, \nl{ate}) = 0.0001. ]
从数学上讲,语言模型是一个非常简单且优美的对象。但这种简单性具有欺骗性:为所有序列分配(有意义的)概率需要非凡的(但隐含的)语言能力和世界知识。
例如,LM 应该隐含地给 (\nl{mouse the the cheese ate}) 分配一个非常低的概率,因为它不符合语法(句法知识)。LM 应该隐含地给 (\nl{the mouse ate the cheese}) 分配比 (\nl{the cheese ate the mouse}) 更高的概率,这是因为世界知识:两个句子在句法上相同,但在语义合理性上不同。
生成。按照定义,语言模型 (p) 接受一个序列并返回一个概率来评估其好坏。我们也可以根据语言模型生成一个序列。最纯粹的方法是,从语言模型 (p) 中以概率 (p(x_{1:L})) 采样一个序列 (x_{1:L}),记作:
[ x_{1:L} \sim p. ]
如何高效地计算这取决于语言模型 (p) 的形式。在实践中,我们通常不直接从语言模型中采样,这既是因为真实语言模型的局限性,也是因为我们有时希望得到的不是“平均”序列,而是更接近“最佳”的序列。
自回归语言模型
将序列 (x_{1:L}) 的联合分布 (p(x_{1:L})) 写出来的常见方法是使用概率的链式法则:
[ p(x_{1:L}) = p(x_1) p(x_2 \mid x_1) p(x_3 \mid x_1, x_2) \cdots p(x_L \mid x_{1:L-1}) = \prod_{i=1}^L p(x_i \mid x_{1:i-1}). ]
例如(演示):
[ \begin{align*} p(\nl{the}, \nl{mouse}, \nl{ate}, \nl{the}, \nl{cheese}) = , & p(\nl{the}) \ & p(\nl{mouse} \mid \nl{the}) \ & p(\nl{ate} \mid \nl{the}, \nl{mouse}) \ & p(\nl{the} \mid \nl{the}, \nl{mouse}, \nl{ate}) \ & p(\nl{cheese} \mid \nl{the}, \nl{mouse}, \nl{ate}, \nl{the}). \end{align*} ]
特别地,(p(x_i \mid x_{1:i-1})) 是条件概率分布,表示给定前 (i-1) 个 token (x_{1:i-1}) 时下一个 token (x_i) 的概率。
当然,任何联合概率分布在数学上都可以这样写,但自回归语言模型是指其中每个条件分布 (p(x_i \mid x_{1:i-1})) 都可以高效计算(例如,使用前馈神经网络)。
生成。现在要从自回归语言模型 (p) 生成整个序列 (x_{1:L}),我们根据已生成的 token 逐个采样:
[ \text{for } i = 1, \dots, L: \ \hspace{1in} x_i \sim p(x_i \mid x_{1:i-1})^{1/T}, ]
其中 (T \ge 0) 是温度参数,控制我们希望语言模型输出的随机性:
- (T = 0):在每一步 (i) 确定性地选择最可能的 token (x_i)
- (T = 1):从原始语言模型中“正常”采样
- (T = \infty):从整个词表 (\sV) 上的均匀分布采样
然而,如果我们只是将概率提高到 (1/T) 次方,概率分布可能不会总和为 1。我们可以通过重新归一化分布来解决这个问题。我们将归一化后的版本 (p_T(x_i \mid x_{1:i-1}) \propto p(x_i \mid x_{1:i-1})^{1/T}) 称为退火条件概率分布。例如:
[ p(\nl{cheese}) = 0.4, \quad\quad\quad p(\nl{mouse}) = 0.6 ] [ p_{T=0.5}(\nl{cheese}) = 0.31, \quad\quad\quad p_{T=0.5}(\nl{mouse}) = 0.69 ] [ p_{T=0.2}(\nl{cheese}) = 0.12, \quad\quad\quad p_{T=0.2}(\nl{mouse}) = 0.88 ] [ p_{T=0}(\nl{cheese}) = 0, \quad\quad\quad p_{T=0}(\nl{mouse}) = 1 ]
附注:退火一词源于冶金学,指热的材料逐渐冷却,同样出现在采样和优化算法(如模拟退火)中。
技术说明:对每个条件分布应用温度 (T) 参数 (p(x_i \mid x_{1:i-1})^{1/T}) 然后迭代采样,与从长度 (L) 序列的退火分布中采样(除非 (T=1))是不等价的。
条件生成。更一般地,我们可以通过指定某个前缀序列 (x_{1:i})(称为提示)并采样剩余部分 (x_{i+1:L})(称为补全)来执行条件生成。例如,使用 (T=0) 生成(演示):
[ \underbrace{\nl{the}, \nl{mouse}, \nl{ate}}\text{prompt} \generate{T=0} \underbrace{\nl{the}, \nl{cheese}}\text{completion}. ]
如果我们将温度改为 (T = 1),我们可以得到更多样化的结果(演示),例如 (\nl{its house}) 和 (\nl{my homework})。
正如我们很快会看到的,条件生成使语言模型能够通过简单地改变提示来解决各种任务。
总结
- 语言模型是关于序列 (x_{1:L}) 的概率分布 (p)。
- 直观地,一个好的语言模型应具备语言能力和世界知识。
- 自回归语言模型允许在给定提示 (x_{1:i}) 的情况下高效生成补全 (x_{i+1:L})。
- 温度可用于控制生成中的变异性。
简要历史
信息论、英语的熵、n-gram 模型
信息论。语言模型可以追溯到克劳德·香农,他在 1948 年以其开创性论文《通信的数学理论》(链接)创立了信息论。在这篇论文中,他引入了分布的熵:
[ H(p) = \sum_x p(x) \log \frac{1}{p(x)}. ]
熵衡量任何算法将样本 (x \sim p) 编码(压缩)成比特串所需的期望比特数:
[ \nl{the mouse ate the cheese} \Rightarrow 0001110101. ]
- 熵越低,序列越“结构化”,编码长度越短。
- 直观地说,(\log \frac{1}{p(x)}) 是表示以概率 (p(x)) 出现的元素 (x) 所用的编码长度。
- 如果 (p(x) = \frac{1}{8}),我们应分配 (\log_2(8) = 3) 比特(或 (\log(8) = 2.08) 纳特)。
附注:实际达到香农极限并不简单(例如,LDPC 码),这是编码理论的主题。
英语的熵。香农特别感兴趣的是测量英语的熵,将英语表示为字母序列。这意味着我们假设存在一个“真实”分布 (p)(其存在性存疑,但仍是一个有用的数学抽象),可以生成英语文本样本 (x \sim p)。
香农还定义了交叉熵:
[ H(p, q) = \sum_x p(x) \log \frac{1}{q(x)}, ]
它衡量使用模型 (q) 给出的压缩方案(用长度为 (\frac{1}{q(x)}) 的码来表示 (x))对样本 (x \sim p) 进行编码所需的期望比特(纳特)数。
通过语言建模估计熵。一个关键性质是,交叉熵 (H(p, q)) 是熵 (H(p)) 的上界:
[ H(p, q) \ge H(p), ]
这意味着我们可以通过仅从真实数据分布 (p) 的样本构建一个(语言)模型 (q) 来估计 (H(p, q)),而 (H(p)) 通常是无法直接获取的(如果 (p) 是英语)。
因此,我们可以通过构建更好的模型 (q)(以 (H(p, q)) 衡量)来获得对熵 (H(p)) 更精确的估计。
香农游戏(人类语言模型)。香农在 1948 年首先使用了 n-gram 模型作为 (q),但在他 1951 年发表的论文《印刷英语的预测与熵》(链接)中,他引入了一种巧妙的方案(称为香农游戏),其中 (q) 由人类提供:
[ \nl{the mouse ate my ho_} ]
人类不擅长为任意文本提供校准过的概率,所以在香农游戏中,人类语言模型会反复猜测下一个字母,并记录猜的次数。
用于下游应用的 n-gram 模型
语言模型首先在需要生成文本的实际应用中得以使用:
- 20 世纪 70 年代的语音识别(输入:声学信号,输出:文本),以及
- 20 世纪 90 年代的机器翻译(输入:源语言文本,输出:目标语言文本)。
噪声信道模型。当时解决这些任务的主导范式是噪声信道模型。以语音识别为例:
- 我们假设存在一些来自某个分布 (p) 的文本。
- 这些文本被实现为语音(声学信号)。
- 然后,给定语音,我们希望恢复(最可能的)文本。这可以通过贝叶斯规则实现:
[ p(\text{text} \mid \text{speech}) \propto \underbrace{p(\text{text})}\text{language model} \underbrace{p(\text{speech} \mid \text{text})}\text{acoustic model}. ]
语音识别和机器翻译系统使用了基于单词的 n-gram 语言模型(最初由香农为字符引入)。
N-gram 模型。在 n-gram 模型中,token (x_i) 的预测仅取决于最后 (n-1) 个字符 (x_{i-(n-1):i-1}),而不是全部历史:
[ p(x_i \mid x_{1:i-1}) = p(x_i \mid x_{i-(n-1):i-1}). ]
例如,一个三元组((n=3))模型将定义:
[ p(\nl{cheese} \mid \nl{the}, \nl{mouse}, \nl{ate}, \nl{the}) = p(\nl{cheese} \mid \nl{ate}, \nl{the}). ]
这些概率是基于各种 n-gram(例如,(\nl{ate the mouse}) 和 (\nl{ate the cheese}))在大型文本语料库中出现的次数计算的,并进行适当的平滑处理以避免过拟合(例如,Kneser-Ney 平滑)。
将 n-gram 模型拟合到数据中在计算上极其廉价且可扩展。因此,n-gram 模型在大量文本上进行了训练。例如,Brants 等人(2007)(链接)在 2 万亿个 token 上训练了一个 5-gram 模型用于机器翻译。作为对比,GPT-3 仅在 3000 亿个 token 上训练。然而,n-gram 模型存在根本性的局限。考虑以下前缀:
[ \nl{Stanford has a new course on large language models. It will be taught by ___} ]
如果 (n) 太小,模型将无法捕捉长距离依赖关系,下一个词无法依赖于 (\nl{Stanford})。然而,如果 (n) 太大,它在统计上是不可靠的。
相似文章
@Ai_Tech_tool: 与其看一小时 Netflix,不如看这堂 2 小时的斯坦福讲座,它将教你更多关于 GPT 和 Claude 等大语言模型的底层原理,……
文章推荐了一门关于 ChatGPT 和 Claude 等大语言模型基础的斯坦福讲座,认为该讲座提供了极具价值的技术见解。
@polydao: 这堂关于AI推理的斯坦福课程比大多数ML课程更能让你了解LLM在生产环境中的运作方式 > Clau…
一场关于AI推理的斯坦福讲座强调了KV-cache等实际瓶颈以及推测性解码和连续批处理等技术,比典型ML课程提供更多现实世界的洞察。
@CamilleRoux: 对LLMs内部工作原理的精彩解释:tokens、embeddings、positional encoding、attention、feed-forward…
这条推文分享了一篇关于LLMs内部工作原理的详尽解释,涵盖了tokens、embeddings、positional encoding、attention和feed-forward网络,来源于0xkato的一篇博文。
@techNmak: 这是学习LLM工作原理的最佳方式。交互式3D,逐步讲解。涵盖:→ 嵌入 → 层归一化 → 自注意力…
一个交互式3D逐步指南,通过可视化方式学习LLM工作原理,涵盖嵌入、自注意力、softmax等关键Transformer概念。推荐使用视觉化方法,而非阅读论文。
@techNmak:我终于找到有人解释为什么LLM推理与常规推理根本不同……没有过度……
一条推文分享了一个链接,提供了一个清晰易懂的解释,说明为什么LLM推理与传统推理不同,并以一个随意的走路视频呈现。