Stanford CS229 机器学习 2026年春季 讲义 13: LLMs 和 下一词预测损失
表示学习和嵌入
表示学习旨在创建一个映射(由 $\theta$ 参数化),将原始输入 $x$(例如图像、文本、音频或视频)转换为 $m$ 维欧几里得空间中的向量 $v_{\theta}(x)$。这些向量通常称为 嵌入,其设计目的是使相似的输入映射到相似的嵌入(在空间中彼此靠近的点),而不相似的输入映射到远离的嵌入。
嵌入使得 相似性搜索 成为可能,系统可以通过在向量空间中查询嵌入的最近邻来识别相似项目。虽然嵌入曾被用作线性分类(线性探测)的输入,但现代应用更倾向于端到端模型或直接相似性搜索。
调整嵌入:有监督 vs. 无监督学习
有监督预训练
在有监督预训练过程中,神经网络在一个大型带标签的数据集上(例如带有 1000 个标签的 ImageNet)被训练以预测离散类别。表示是从 倒数第二层(最终分类头之前的最后一层)提取的,并且分类头被丢弃用于下游相似性任务。
- 局限性: 此方法需要昂贵的大规模带标签数据集。如果标签集不够多样化(例如,只有二元标签),那么学习到的表示可能无法捕捉足够的复杂模式以对其他任务有用。
对比学习(无监督)
对比学习通过鼓励模型将同一输入的不同版本视为相似、将不同输入视为不相似来在无标签的情况下学习表示。
- 增强: 使用诸如随机裁剪(最关键的)、翻转、模糊或添加高斯噪声等技术,将单张图像 $x$ 转换为两个不同的版本 $\hat{x}$ 和 $\tilde{x}$。
- 目标: 模型被训练以最小化同一图像增强的嵌入之间的距离($f_{\theta}(\hat{x})$ 和 $f_{\theta}(\tilde{x})$),同时最大化不同图像增强之间的距离($x$ 和 $z$)。
解决假阴性: 当两张不同的图像(例如,两只不同的猫)被视为负样本并被推开时,可能会出现问题。然而,在大型数据集中,大多数随机对真正不相似(例如,猫和椅子),因此将随机图像推开的好处超过了将相似但不完全相同的图像推开的“副作用”。
SimCLR 目标函数
为了高效地实现对比学习,通常使用类似 SimCLR 的基于批次的方法。该过程涉及采样一个包含 $B$ 张图像的批次,为每张图像创建两个增强版本,并基于归一化嵌入的内积(或余弦相似度)构建相似性矩阵。
数学公式
对于给定的增强 $\hat{x}_i$,损失函数将任务视为多类分类问题:识别批次中其他 $2B-1$ 个嵌入中哪个是对应的配对 $\tilde{x}_i$。
$$ \mathcal{L}_i = -\log \frac{\exp(\text{sim}(\hat{x}_i, \tilde{x}i) / \tau)}{\sum{j=1}^{2B} \exp(\text{sim}(\hat{x}_i, x_j) / \tau)} $$
- 分子: 鼓励正样对(同一图像的增强)的相似度较大。
- 分母: 鼓励所有其他配对(负样对)的相似度较小。
实际优化
- 困难负样本挖掘: 随机采样的负样本对通常太容易区分。“困难负样本”——外观相似但并非完全相同的示例(例如,一个孩子踢足球的照片 vs. 一段关于国际足联世界杯的文本)——被用来使损失函数更具挑战性,从而得到更鲁棒的表示。
- 数据源采样: 从同一数据源(例如,同一代码库或编程语言)采样批次 $B$ 会产生天然更难的负样本,防止损失过快变得过小。
语义搜索和 RAG
实现语义搜索
- 索引: 计算所有文档 $D_1, \dots, D_n$ 的嵌入,并将其存储在 向量数据库 中。
- 查询: 使用相同的模型 $f_{\theta}$ 对查询 $q$ 进行嵌入。
- 检索: 系统找到使 $f_{\theta}(q)$ 与 $f_{\theta}(D_i)$ 的内积最大的文档 $D_i$。
检索增强生成(RAG)
- 过程: 收到查询时,系统通过语义搜索从私有语料库中检索出一小部分相关文档。这些文档随后作为提示(上下文)的一部分提供给 LLM,LLM 基于查询和检索到的文本生成答案。
- 相较于微调的优势:
- 模块化: 检索系统与 LLM 分离。
- 数据治理: 可以在检索阶段应用访问控制(例如,防止某些用户检索敏感备忘录)。
- 更新便利: 从语料库中删除一份文档会立即将其从模型的潜在答案中移除,而从微调模型中“遗忘”信息仍是一个开放的研究问题。
替代检索方法
虽然语义搜索很普遍,但一些前沿模型(例如,来自 Anthropic 的模型)利用 LLM 生成复杂的 正则表达式 以进行关键词搜索。这对于结构化数据(如代码)特别有效,因为函数名和文件树提供了严格的匹配模式。