详细摘要 摘要
生成:2025-06-06 20:31摘要详情
- 音频文件
- 2024 | Stanford CS229 I Machine Learning I Building Large Language Models (LLMs)
- 摘要类型
- 详细摘要
- LLM 提供商
- openai
- LLM 模型
- gemini-2.5-pro-preview-06-05
- 已创建
- 2025-06-06 20:31:08
摘要内容
概览/核心摘要 (Executive Summary)
该讲座由斯坦福大学博士生Yann Dubois主讲,全面概述了构建类ChatGPT大型语言模型(LLM)的完整流程,主要分为预训练(Pre-training)和后训练(Post-training)两个核心阶段。讲者强调,尽管学术界传统上关注模型架构与算法,但在工业界,数据、评估和系统优化才是决定模型成败的三个关键支柱。
在预训练阶段,模型通过自回归(Autoregressive)任务,在海量互联网文本上学习预测下一个词元(token),其核心是最大化文本的对数似然。此阶段的关键技术包括高效处理文本的分词(Tokenization)、复杂的数据清洗与处理流程(从TB级原始数据中筛选高质量语料),以及用于评估的困惑度(Perplexity)等指标。一个核心理论是规模法则(Scaling Laws),它揭示了模型性能会随着计算资源、数据量和模型参数的增加而可预测地提升,这为资源分配和性能预测提供了理论依据。
在后训练(对齐)阶段,目标是将预训练好的模型转变为能遵循指令、有用的AI助手。该阶段始于监督式微调(SFT),使用少量高质量的“指令-回答”数据对,教会模型输出的格式。随后,通过基于人类反馈的强化学习(RLHF)或其更简单、更稳定的替代方案直接偏好优化(DPO),根据人类(或更强大的LLM)对不同回答的偏好来进一步优化模型,使其行为与人类价值观对齐。由于对齐后模型的输出是开放式的,评估极具挑战,通常依赖于如Chatbot Arena等平台进行人类或LLM的“头对头”比较。讲座最后简要提及了系统优化(如混合精度训练、算子融合)对于提升训练效率的重要性。
引言:构建LLM的关键组成部分
讲者Yann Dubois指出,构建大型语言模型(LLM)涉及五个关键部分:
- 模型架构 (Architecture):如今LLM几乎都基于Transformer架构。讲者选择不深入探讨此部分,因其已有大量公开资料。
- 训练损失与算法 (Training Loss and Algorithm):模型如何学习。
- 数据 (Data):模型训练所用的语料。
- 评估 (Evaluation):如何衡量模型性能及进展。
- 系统 (Systems):如何让庞大的模型在现代硬件上高效运行。
一个核心观点是,学术界往往过度关注前两者,而工业界的实践成功更多地依赖于后三者。
"in reality, honestly, what matters in practice is mostly the three other topics. So data evaluation and systems, which is what most of industry actually focuses on."
(“说实话,在实践中,真正重要的是另外三个主题:数据、评估和系统,这也是大多数行业实际关注的重点。”)
第一阶段:预训练 (Pre-training)
预训练是经典的语言建模范式,目标是让模型学习整个互联网的语言规律。
核心任务:自回归语言建模 (Autoregressive Language Modeling)
- 定义:语言模型本质上是词元序列的概率分布模型
P(x₁...xₙ)。自回归模型利用概率的链式法则,将其分解为一系列条件概率的乘积:P(xᵢ | x₁...xᵢ₋₁),即预测给定上下文的下一个词元。 - 训练过程:
- 将输入文本分词并嵌入为向量。
- 通过Transformer等神经网络处理,获得上下文表示。
- 通过一个线性层映射到与词汇表大小相同的维度。
- 使用Softmax函数得到下一个词元的概率分布。
- 损失函数:使用交叉熵损失(Cross-Entropy Loss),这等同于最大化训练文本的对数似然(Log Likelihood)。
关键技术:分词 (Tokenization)
分词器(Tokenizer)是将原始文本转换为模型可以处理的词元(token)序列的工具,其重要性常被低估。
- 必要性:
- 通用性:比直接用单词更通用,能处理拼写错误、未登录词(OOV)以及泰语等无空格语言。
- 效率:若按字符分词,序列会过长,而Transformer的计算复杂度与序列长度成二次方关系,导致效率低下。分词器在词汇量和序列长度之间取得了平衡。
- 算法示例:字节对编码 (Byte Pair Encoding, BPE)
- 初始时,将语料库中所有单个字符视为一个词元。
- 迭代地找出最常出现的相邻词元对,并将它们合并成一个新的词元。
- 重复此过程,直到达到预设的词汇表大小。
- 挑战与未来:
- 分词器在处理数学公式和代码时存在困难,例如,数字“327”可能被视为一个独立的词元,使模型难以理解其数值含义。
- 讲者认为,未来可能会随着新架构的出现(如能高效处理长序列的架构),逐步淘汰分词器,转向更底层的字节级处理。
预训练的评估方法 (Evaluation for Pre-training)
- 困惑度 (Perplexity):
- 定义:可以直观理解为模型在预测下一个词元时“犹豫不决”的选项数量。计算上是指数化的平均损失,值越低越好。
- 现状:虽然因其依赖于分词器和评估数据,已不再是主要的学术基准,但在模型开发过程中仍然是极其重要的监控指标。
- 学术基准 (Academic Benchmarks):
- 聚合基准:通过在大量经典的NLP任务上进行评估并聚合分数,如斯坦福的HELM和Hugging Face的Open LLM Leaderboard。
- MMLU (Massive Multitask Language Understanding):目前最常用的学术基准之一,包含覆盖众多领域的专业级多项选择题。
- 评估挑战:
- 不一致性:不同机构对同一基准(如MMLU)的评估方法(如Prompt格式)可能不同,导致结果差异巨大。
- 数据污染 (Test Set Contamination):测试集中的数据可能无意中出现在了模型的训练集中,导致评估结果虚高。这对学术基准的公正性构成了严重威胁。
预训练的核心要素:数据 (Data)
数据是训练LLM的基石,其处理流程远比“在互联网上训练”复杂得多。
- 数据来源:通常始于Common Crawl等网络爬虫项目,其数据量可达PB级别(约2500亿个页面)。
- 数据处理管线:
- 文本提取:从HTML中提取纯文本内容。
- 内容过滤:移除不适宜工作(NSFW)、有害内容和个人身份信息(PII)。
- 数据去重:在文档、段落等多个层级上移除重复内容。
- 启发式过滤:基于规则(如词元分布、文本长度等)移除低质量文档。
- 基于模型的过滤:训练一个分类器,用于识别和筛选高质量文档(例如,以维基百科引用的网页为正样本)。
- 领域分类与加权:将数据分为代码、书籍、娱乐等领域,并调整各领域的采样权重(如提高代码和书籍的权重,因其有助于提升模型的推理能力)。
- 持续预训练:在训练末期,使用极高质量的数据(如维基百科)以较低的学习率继续训练,以“巩固”模型能力。
- 数据规模与保密性:
- 规模:顶尖模型(如Llama 3)的训练数据量已达到15万亿(Trillion)词元。
- 保密性:由于涉及核心竞争力和版权风险,各大公司通常对其数据处理方法和构成严格保密。
核心理论:规模法则 (Scaling Laws)
规模法则是LLM领域的一项惊人发现,深刻影响了模型的开发策略。
- 核心内容:模型性能(以测试损失衡量)与计算量、模型参数量、数据量这三个因素呈幂律关系。在对数-对数坐标系下,性能提升曲线近似为一条直线。这意味着:
> 更大的模型、更多的数据会带来更好的性能,且这种提升是可预测的。 - 实践意义:
- 性能预测:可以根据可用的计算资源,预测出训练出的模型能达到的性能水平。
- 资源优化:帮助决策者在模型大小和数据量之间做出最优权衡。例如,Chinchilla论文发现,对于训练效率而言,每参数约需20个词元的数据是较为理想的配比。
- 开发流程变革:开发者不再直接在大模型上调参,而是在不同规模的小模型上进行实验,拟合规模法则曲线,然后推断出最佳参数配置,最后用全部资源训练最终的大模型。
预训练的成本估算 (Cost Estimation)
以Llama 3 400B模型为例的粗略估算:
- 模型参数:4050亿
- 训练数据:15万亿词元
- 计算量:约 3.8 x 10²⁵ FLOPs
- GPU时间:约2600万 - 3000万 GPU小时
- 总成本:约7500万美元(其中GPU租赁成本约5200万美元,人员薪酬约2500万美元)。
- 碳排放:约4400吨二氧化碳当量,相当于约2000次纽约到伦敦的往返航班。
第二阶段:后训练 (对齐) (Post-training / Alignment)
后训练的目标是将一个只会“续写”的预训练模型,转变为一个能理解并遵循用户指令的AI助手。
方法一:监督式微调 (Supervised Fine-Tuning, SFT)
- 方法:使用一个规模相对较小、高质量的“指令-回答”数据集对预训练模型进行微调。
- 数据来源:可以由人类编写,也可以由更强大的LLM生成(如Alpaca项目)。
- 核心洞察:SFT所需的数据量并不大(数千条即可)。其主要作用不是教授新知识,而是教会模型如何以“助手”的格式来回答问题。知识本身已在预训练阶段习得。
方法二:基于人类反馈的强化学习 (RLHF) 及其替代方案
SFT存在局限性,如受限于人类撰写高质量答案的能力、成本高昂、可能诱发模型“幻觉”等。RLHF旨在解决这些问题。
-
RLHF (Reinforcement Learning from Human Feedback)
- 收集偏好数据:针对同一指令,让模型生成两个或多个回答,然后由人类标注者选出更好的一个。
- 训练奖励模型:训练一个独立的模型(Reward Model),使其能够预测人类会对哪个回答给出更高的评分。
- 强化学习优化:将LLM作为RL中的策略(Policy),奖励模型作为环境(Environment),使用PPO等RL算法进行优化,使LLM倾向于生成能获得更高奖励的回答。
- 挑战:RLHF流程复杂,尤其是PPO算法的实现和调试非常困难且不稳定。
-
DPO (Direct Preference Optimization)
- 方法:作为RLHF的简化替代方案,DPO通过一个巧妙设计的损失函数,直接在偏好数据上进行优化。该损失函数的目标是最大化模型生成“更优”回答的概率,同时最小化生成“较差”回答的概率。
- 优势:DPO省去了训练独立奖励模型和使用复杂RL算法的步骤,实现简单且性能与RLHF相当,已成为当前开源社区和工业界的主流选择。
后训练的评估挑战与方法
评估对齐后的模型极具挑战性,因为回答是开放式的,没有单一的正确答案。
- 评估困境:
- 困惑度失效:经过RLHF/DPO优化的模型不再是纯粹的概率模型,其输出的概率分布不具可比性,因此困惑度不再适用。
- 自动化困难:难以设计自动化的指标来衡量开放式回答的质量。
- 主流评估方法:头对头比较 (Head-to-head Comparison)
- 人类评估 (Chatbot Arena):被视为“黄金标准”。让大量真实用户在匿名情况下与两个模型进行对话,并投票选出更好的一个,通过ELO评分系统对模型进行排序。
- LLM作为裁判 (LLM-as-a-Judge):使用一个非常强大的LLM(如GPT-4)来自动评估两个模型回答的优劣。这种方法成本低、速度快,且与人类评估结果高度相关(如AlpacaEval)。
- 裁判模型的偏见:LLM裁判存在自身偏见,例如强烈偏好更长、更详细的回答。这需要通过引入控制变量等统计方法进行校正。
系统优化 (Systems Optimization)
由于时间限制,讲者简要介绍了几个提升训练效率的系统级技巧。
- GPU计算瓶颈:现代GPU的计算速度增长快于内存和通信带宽,导致GPU大部分时间在等待数据,即模型浮点运算利用率(MFU)不高(通常50%已算优秀)。
- 优化技巧:
- 低精度/混合精度训练 (Low/Mixed Precision Training):使用16位浮点数(FP16/BF16)进行主要的矩阵运算,以减少内存占用和通信开销,同时保留32位浮点数(FP32)用于存储权重以维持精度和稳定性。
- 算子融合 (Operator Fusion):通过
torch.compile等工具,将多个连续的计算操作(Kernel)融合成一个,从而大幅减少GPU内存与计算单元之间的数据传输次数,提升效率。
结论与未来展望
讲座总结了构建LLM的关键流程和核心理念,但仍有许多重要议题未深入探讨,包括:
- 模型架构的演进
- 推理优化(Inference Optimization)
- 多模态(Multimodality)
- 模型的滥用与安全
- 数据来源的法律与伦理问题
讲者推荐了斯坦福大学的相关课程(CS224N, CS324, CS336)供有兴趣的听众深入学习。