详细摘要 摘要

生成:2025-05-14 13:48

摘要详情

音频文件
2024 | Stanford CS229 I Machine Learning I Building Large Language Models (LLMs)
摘要类型
详细摘要
LLM 提供商
openai
LLM 模型
gemini-2.5-pro-exp-03-25
已创建
2025-05-14 13:48:06

概览/核心摘要 (Executive Summary)

本讲座由斯坦福大学博士生Yann Dubois主讲,全面概述了构建类ChatGPT大型语言模型(LLMs)的关键环节,涵盖预训练(Pretraining)和后训练(Post-training,包括SFT/RLHF)两大阶段。预训练的核心是语言建模,即在海量文本数据(如整个互联网内容)上训练模型预测下一个词元(token)。此阶段重点讨论了数据收集与处理(从Common Crawl原始数据到精炼数据集的复杂流程,强调了数据清洗、去重、过滤和领域加权的重要性)、词元化(Tokenization,如BPE算法及其对模型处理文本的基础作用)、评估指标(从传统的困惑度Perplexity到更全面的学术基准如MMLU)以及规模法则(Scaling Laws,揭示了模型性能与计算资源、数据量、参数量之间的可预测关系,如Chinchilla法则)。讲座强调,在实践中,数据、评估和系统(Systems)的重要性往往超过模型架构本身。

后训练阶段旨在将预训练模型调优为能遵循指令的AI助手。主要方法包括监督微调(Supervised Fine-Tuning, SFT),即在高质量的人类指令-回答对上微调模型,以及基于人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF)。RLHF通过训练奖励模型来学习人类偏好,并使用PPO或更简单高效的DPO(Direct Preference Optimization)算法优化LLM以生成更符合偏好的内容。讲座还探讨了SFT和RLHF中数据收集的挑战(如人工标注成本高、存在偏见)及使用LLM辅助生成训练数据(如Alpaca项目)的策略。评估后训练模型时,由于其开放式生成特性,传统指标失效,转而依赖人类评估(如Chatbot Arena)或LLM作为评估者(如AlpacaEval)。最后,简要提及了系统优化(如低精度训练、算子融合)对LLM训练效率的提升。

关键组件与行业焦点

讲座首先概述了训练LLMs时需要关注的五个关键组件:
1. 模型架构 (Architecture):通常基于Transformer。
2. 训练损失与算法 (Training Loss and Algorithm):如何训练模型。
3. 数据 (Data):训练模型所用的语料。
4. 评估 (Evaluation):如何衡量模型进展。
5. 系统组件 (Systems Component):如何在硬件上高效运行大型模型。

讲者Yann Dubois强调,虽然学术界常聚焦于架构和训练算法,但“在实践中,真正重要的是数据、评估和系统这三个方面,这也是大多数行业实际关注的重点。” 因此,本次讲座将侧重于这三个方面,而非Transformer架构本身。

预训练 (Pretraining)

预训练是经典的语言建模范式,目标是训练模型以理解和生成类人文本,通常基于互联网规模的数据。

语言建模任务 (Language Modeling Task)

  • 核心思想:语言模型是对词元序列概率分布的建模,即 P(x1, x2, ..., xL)
    • 例如,模型应赋予 "The mouse ate the cheese" 较高的概率,而赋予 "The the mouse ate cheese" (语法错误) 或 "The cheese ate the mouse" (语义错误) 较低的概率。
  • 生成模型 (Generative Models):能够从学习到的分布中采样,从而生成新的文本序列。
  • 自回归模型 (Autoregressive Models):当前主流LLMs采用的模式。
    • 定义:将联合概率分解为一系列条件概率的乘积:P(x1) * P(x2|x1) * P(x3|x1,x2) * ...,即 Π P(xi | x1, ..., xi-1)
    • 任务:在给定上文(context)的情况下,预测下一个词元。
    • 缺点:生成长序列时,需要逐步生成,耗时较长。
  • 训练过程
    1. 输入词元序列(如 "She likely prefers")。
    2. 词元化 (Tokenize) 并获取ID。
    3. 通过模型(如Transformer)处理,得到上下文表示。
    4. 通过线性层映射到词汇表大小的输出维度。
    5. 通过Softmax层获得下一个词元的概率分布。
    6. 损失函数:使用交叉熵损失 (Cross-Entropy Loss),比较模型预测分布与真实下一个词元(one-hot编码)的差异。这等价于最大化文本的对数似然 (Maximizing Text Log Likelihood)

词元化 (Tokenization)

词元化是将原始文本转换为模型可以处理的词元序列的过程,“词元化器极其重要 (Tokenizers are extremely important)”
* 必要性
* 比直接使用“词”更通用,能处理拼写错误、未登录词,并适用于无空格分隔的语言(如泰语)。
* 避免按字符切分导致序列过长,从而缓解Transformer架构中二次方复杂度的压力。
* 目标:为常见的子序列分配特定词元,通常一个词元平均对应3-4个字母。
* 算法示例:字节对编码 (Byte-Pair Encoding, BPE)
1. 初始化:从大型文本语料开始,将每个字符视为一个初始词元。
2. 迭代合并:重复找出语料中最常出现的相邻词元对,并将它们合并成一个新的词元。
3. 示例:语料 "to to to too token",初始词元 t, o, k, e, n
* t, o 出现3次,合并为 to
* to, k 出现1次,to, o 出现1次,e, n 出现1次。若 to, k 最频繁(此处示例数据小,实际情况复杂),则合并。
* 实际应用:如GPT-3的词元化器,"tokenizer" 可能被分为 "token" 和 "izer"。
* 处理细节
* 预词元化 (Pre-tokenizers):通常会先按空格和标点符号切分,以提高BPE训练效率,但这更多是计算优化。
* 保留小词元:合并成大词元后,通常仍保留组成它的小词元,以便处理罕见词或拼写错误。
* 唯一ID:每个词元有唯一ID。词义消歧(如 "bank" 的金融义和河岸义)由Transformer模型根据上下文完成,而非词元化器。
* 选择最长匹配:应用词元化器时,总是选择已训练词元中最长的匹配项。
* 挑战与未来
* 现有词元化方法在处理数学公式、代码(如Python的缩进)时存在不足,可能影响模型理解。GPT-4在代码词元化方面有所改进。
* 研究者希望未来能摆脱词元化器,直接按字符或字节处理,但这需要能高效处理长序列的新模型架构。

评估 (Evaluation - Pretraining)

  • 困惑度 (Perplexity)
    • 定义:衡量模型对验证集预测能力的指标,是平均每个词元损失的指数次方 (exp(average_per_token_loss))。
    • 范围:介于1(完美预测)和词汇表大小(完全随机猜测)之间。
    • 直观解释:模型在预测下一个词元时,平均“犹豫”的词元数量。
    • 趋势:从2017年到2023年,标准数据集上的困惑度从约70降至低于10,表明模型预测能力显著提升。
    • 局限性:依赖于所使用的词元化器和评估数据,因此在学术基准比较中逐渐被取代,但仍是LLM开发过程中的重要内部指标。
  • 聚合基准 (Aggregated Benchmarks)
    • 方法:收集大量可自动评估的NLP基准任务(如问答),在所有任务上评估LLM。
    • 代表
      • HELM (Holistic Evaluation of Language Models):斯坦福出品。
      • Hugging Face Open LLM Leaderboard
    • MMLU (Massive Multitask Language Understanding):一个非常流行的学术基准,包含多领域的选择题。
      • 评估方式:给定问题和四个选项,模型需判断哪个选项最可能正确。可以通过计算模型生成各选项的似然度,或直接要求模型选择A/B/C/D。
  • 评估挑战
    • 不一致性 (Inconsistencies):即使是同一基准(如MMLU),不同的评估方法(如提示方式、似然计算方式)可能导致结果差异巨大。例如,Llama 65B在HELM上准确率为63.7%,在另一基准上为48.8%。
    • 训练集-测试集污染 (Train-Test Contamination):测试数据可能意外出现在模型的训练集中,导致评估结果虚高。
      • 检测方法之一:比较模型生成有序测试样本与无序测试样本的似然度,若有序似然度更高,可能存在污染。
      • 对公司内部开发可能不是大问题,但对学术基准至关重要。

数据 (Data - Pretraining)

“收集好的数据是实用大型语言模型的一个巨大组成部分,有人可能会说这实际上是关键。”
* 来源与规模
* 通常声称基于“整个互联网”或“清洗后的互联网”。
* Common Crawl:一个每月抓取新增网页的大型公开数据集,约有2500亿个页面,1PB数据。
* 数据处理流程
1. 提取文本:从HTML中提取主要内容,面临数学公式、样板文件(页眉页脚)提取等挑战。
2. 过滤不良内容:移除NSFW(不适宜工作场所)、有害内容、PII(个人身份信息)。通常使用黑名单网站列表,或训练小模型进行分类移除。
3. 去重 (Deduplication):移除重复的网页、段落(如来自书籍的常见片段)。在规模化数据上极具挑战性。
4. 启发式过滤 (Heuristic Filtering):移除低质量文档。
* 基于规则:如异常词元分布、词长过长/过短、文档过短/过长。
5. 基于模型的过滤 (Model-based Filtering)
* 一个技巧:训练分类器,使其能区分维基百科引用的高质量网页和随机网页,然后用此分类器筛选数据。
6. 领域分类与加权 (Domain Classification and Weighting)
* 将数据分为不同领域(如娱乐、书籍、代码)。
* 对某些领域进行上采样或下采样。例如,增加代码数据可能有助于提升模型的推理能力;书籍通常被上采样,娱乐内容可能被下采样。
7. 高质量数据收尾训练:在训练后期,使用非常高质量的数据(如维基百科、人工收集数据)配合较低的学习率进行训练,类似“过拟合”到高质量数据上。
* 其他考虑:持续预训练以获得更长上下文能力等。
* 挑战与现状
* 效率:如何高效处理海量数据。
* 平衡:如何平衡不同数据来源和领域。
* 合成数据:由于高质量数据有限,合成数据生成是一个重要研究方向。
* 多模态数据:利用图像、音频等多模态数据提升文本性能。
* 保密性:公司通常对数据收集方法保密,涉及竞争优势和版权问题(如训练数据是否包含受版权保护的书籍)。
* 数据集大小示例
* 早期学术常用数据集(如The Pile):约2800亿词元 (约800GB)。
* 当前顶尖模型训练数据量:
* Llama 2: 2万亿 (2 Trillion) 词元。
* Llama 3: 15万亿 (15 Trillion) 词元 (与当前最大公开学术基准SlimPajama相当)。
* GPT-4: 未公开,但据传约13万亿词元。
* The Pile数据集构成示例:arXiv, PubMed Central, Wikipedia, Stack Exchange, GitHub, Books3等。

规模法则 (Scaling Laws)

  • 核心发现 (约2020年,OpenAI等):模型性能(如测试损失)与训练计算量、数据集大小、模型参数量之间存在幂律关系(在log-log坐标系下呈线性)。
    • “更多数据、更大模型通常能带来更好性能,这与传统机器学习中强调的过拟合有所不同。”
    • 这意味着可以通过增加计算、数据或参数来可预测地提升模型性能。
  • 重要性与应用
    • 预测未来性能:可以根据预期的计算资源增长来预测模型性能的提升。
    • 指导模型开发
      • 旧流程:在完整模型上调参,实际用于生产的模型训练时间短。
      • 新流程
        1. 找到“缩放配方”(scaling recipe),如模型增大时学习率如何调整。
        2. 在不同尺寸的小模型上调参。
        3. 拟合规模法则,从小模型外推预测大模型性能。
        4. 将大部分计算资源用于训练最终的、根据预测选定的最佳大模型。
      • 架构比较:通过比较不同架构(如Transformer vs LSTM)在不同规模下的规模法则曲线,可以判断哪种架构在更大规模下更有潜力。关注缩放率(斜率)截距
    • 优化资源分配 (Chinchilla, DeepMind, 2022)
      • 研究在给定计算预算下,如何最优地分配给模型参数量和数据量。
      • Chinchilla法则:发现对于训练最优(最低损失),每增加1个参数,大约需要额外20个词元的训练数据。
      • 考虑推理成本:若考虑推理成本,倾向于训练参数更少但数据量相对更多的模型(如每参数约150词元),因为小模型推理成本更低。
  • “惨痛的教训” (The Bitter Lesson, Richard Sutton, 2019)
    • 鉴于计算能力持续提升(摩尔定律的变种),且规模法则表明利用更多计算能带来更好模型,那么“唯一重要的是拥有能够利用计算的架构”
    • 这意味着系统、数据比具体的架构细节(如激活函数)更重要。“做简单的事情,把它做好,然后扩展它们。”
  • Llama 3 400B 成本估算 (Back-of-the-envelope)
    • 数据:15.6万亿词元
    • 参数:4050亿 (约每参数38.5词元,介于Chinchilla和推理优化之间)
    • 计算量 (FLOPs):约 6 * 参数量 * 数据量 = 3.8 x 10^25 FLOPs (略低于美国政府1 x 10^26 FLOPs的特别审查阈值)。
    • 硬件与时间:使用16000张H100 GPU,约需70天,总计约2600万GPU小时 (Meta称实际用了3000万GPU小时)。
    • 成本:若H100租金为$2/小时,则GPU成本约5200万美元。加上约50名员工一年约2500万美元的薪资,总成本约7500万美元。
    • 碳排放:约440吨二氧化碳当量,相当于纽约到伦敦2000次往返航班。目前尚不构成重大问题,但未来GPT-6/7级别模型可能面临此挑战。
    • 下一代模型:预计每代模型的FLOPs会增加约10倍。

系统 (Systems)

由于时间关系,本部分简要介绍。
* 重要性:计算是瓶颈,优化系统以高效利用GPU至关重要。
* GPU特性
* 为高吞吐量、并行计算优化(多核心,SIMD)。
* 擅长快速矩阵乘法。
* 计算速度提升快于内存和通信带宽,导致GPU常处于空闲等待数据状态(模型FLOPs利用率 (MFU) 衡量此效率,50%已算良好,Llama约为45%)。
* 内存有层级结构(寄存器 -> L1/L2缓存 -> HBM)。
* 优化技巧
* 低精度训练 (Low Precision Training)
* 使用16位浮点数(如BF16, FP16)代替32位(FP32)进行矩阵乘法,减少数据传输量和内存消耗,加快计算。
* 深度学习对精度不敏感,SGD等过程本身有噪声。
* 自动混合精度 (Automatic Mixed Precision, AMP):权重通常以FP32存储和更新,但在计算时转换为FP16,计算结果再转回FP32进行累加。
* 算子融合 (Operator Fusion)
* 减少GPU全局内存(DRAM)与计算单元之间的数据来回传输。
* 将多个连续操作(如 y = cos(cos(x)))融合成一个内核(kernel),数据只需加载一次,在计算单元内完成所有操作,再写回一次。
* PyTorch中 torch.compile() 可实现此功能,通常能带来约2倍加速。
* 其他未详细讨论的系统主题:Tiling, 并行化 (Data Parallelism, Tensor Parallelism, Pipeline Parallelism), Mixture of Experts (MoE)。

后训练/对齐 (Post-training / Alignment)

目标是将预训练的LLM转变为能遵循用户指令、表现得像AI助手的模型。
* 动机:纯语言模型(如GPT-3)在被问及问题时,可能倾向于补全相似的问题,而非直接回答。例如,问“向6岁小孩解释登月”,它可能补全“向6岁小孩解释万有引力”。
* 核心思想:在预训练好的LLM基础上,使用少量高质量的“期望行为”数据进行微调。

监督微调 (Supervised Fine-Tuning, SFT)

  • 定义:在人类编写的“指令-回答”对上,使用与预训练相同的语言建模损失(即预测下一个词元)进行微调。
  • 数据收集
    • 人工编写:如OpenAssistant项目收集的问答对。
    • LLM辅助生成:Alpaca项目 (斯坦福)
      • 使用少量(175个)人工编写的指令-回答对作为种子。
      • 让强大的LLM(如text-davinci-003)基于这些种子生成更多(52000个)类似的指令-回答对。
      • 用这些LLM生成的合成数据对Llama 7B进行SFT,得到Alpaca 7B。
  • 数据量
    • LIMA论文发现:SFT所需数据量惊人地少,从2000个样本增加到32000个,性能提升不大。
    • 直观解释:预训练模型已见过各种用户行为模式,SFT只是告诉模型“更偏好这种特定用户(即遵循指令的用户)的行为模式”,而非学习新知识。知识已在预训练LLM中。

基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback, RLHF)

  • 动机 (SFT的局限性)
    1. 行为克隆 (Behavioral Cloning):SFT试图克隆人类的回答,但受限于人类生成高质量回答的能力(人类可能更擅长判断而非生成)。
    2. 幻觉 (Hallucination):SFT可能导致幻觉。如果人类给出一个模型在预训练时未见过的正确答案(如一个罕见的参考文献),模型可能学会“编造听起来合理的答案”而非“给出它真正知道的答案”。
    3. 成本:生成理想答案的成本高昂。
  • 核心思想:最大化人类偏好,而非直接克隆行为。
  • 流程
    1. 对每个指令,让SFT后的模型生成多个(通常2个)回答。
    2. 让人类标注者选择哪个回答更好。
    3. 使用算法微调模型,使其更倾向于生成被偏好的回答。
  • 算法
    1. 奖励建模 (Reward Modeling, RM)
      • 训练一个模型(通常也是一个LLM)来预测人类对给定“指令-回答”对的偏好程度。
      • 输入:指令 + 两个模型生成的回答 (Y_w, Y_l,一个赢一个输)。
      • 输出:一个标量奖励值。
      • 训练RM:使用Bradley-Terry模型等,将人类的成对偏好数据(哪个更好)转换为RM的训练目标,使其能为每个回答打分,且偏好回答的分数更高。RM输出的logits是连续的,能提供比二元反馈更丰富的信息。
    2. 使用强化学习优化LLM (如PPO)
      • LLM作为RL中的策略 (policy)。
      • 奖励信号来自训练好的RM。
      • 目标:最大化RM给出的期望奖励,同时加入一个正则项(如与原始SFT模型的KL散度)以避免过度优化到RM的缺陷上(“奖励黑客”)。
      • PPO (Proximal Policy Optimization):ChatGPT最初采用的方法。
      • 挑战:PPO实现复杂,超参数多,训练不稳定。
    3. 直接偏好优化 (Direct Preference Optimization, DPO) (斯坦福提出):
      • 核心思想:无需显式训练奖励模型,也无需复杂的RL步骤。直接通过一个损失函数来最大化生成“获胜”回答的概率,同时最小化生成“失败”回答的概率。
      • 数学等价性:在某些假设下,DPO的全局最优解与PPO等价。
      • 优势:实现简单得多,性能与PPO相当,已成为开源社区和工业界的标准做法。
  • RLHF数据收集
    • 人类标注
      • 挑战:慢、贵;标注者难以聚焦于正确性等核心要素,易受长度等表面特征影响(导致模型输出越来越长);标注者分布影响模型行为;众包伦理问题(低薪、接触有害内容)。
      • 人类标注者之间的一致性也有限(如AlpacaFarm实验中,人类对二元偏好选择的一致性约66%,即使是论文作者也只有67-68%)。
    • LLM辅助标注 (AI Feedback)
      • 用强大的LLM(如GPT-4)代替人类进行偏好选择。
      • AlpacaFarm发现:LLM标注比人类便宜得多(约50倍),且与人类标注众数的一致性甚至更高(因LLM无个体差异,但可能有系统性偏见)。
      • 已成为开源社区和工业界收集RLHF数据的常用方法。
  • RLHF效果:通常能显著提升模型在遵循指令、生成有用回答方面的性能,超越单纯的SFT。

评估 (Evaluation - Post-training)

评估对齐后的LLM(如ChatGPT)极具挑战性。
* 挑战
* 传统指标失效:验证集损失/困惑度不适用,因为RLHF(尤其PPO)改变了优化目标,模型不再是单纯的概率分布建模,其输出的似然度可能不校准。
* 任务多样性:用户可能提出各种类型的问题(生成、问答、摘要等)。
* 开放式生成:答案没有唯一标准,难以自动化评估。
* 评估方法
1. 人类评估
* Chatbot Arena (LMSYS):最受信任的基准之一。用户与两个匿名的LLM进行多轮对话,然后投票选出哪个更好。通过大量用户和对话进行Elo评分排名。
* 问题:参与者可能偏向技术背景,导致提问偏向技术类;成本高、速度慢,不适合快速迭代开发。
2. LLM作为评估者 (LLM-as-a-Judge)
* AlpacaEval (斯坦福):用强大的LLM(如GPT-4)来判断两个模型针对同一指令生成的回答哪个更好。
* 优势:速度快(<3分钟)、成本低(<$10),与Chatbot Arena的人类评估结果相关性高(约98%)。
* 挑战 (偏见)
* 位置偏见:LLM可能偏好先出现的答案。
* 冗长偏见:LLM(和人类)通常偏好更长的输出。例如,提示GPT-4更冗长地回答,其在AlpacaEval中对自身的胜率会从50%提升到64.4%。
* 缓解:可以通过因果推断工具(如回归分析)控制长度等混淆变量的影响。

其他未讨论主题与未来学习

  • 架构细节、推理优化、用户界面、多模态、滥用、数据稀缺性、数据收集的合法性等。
  • 推荐课程 (斯坦福)
    • CS224N (NLP with Deep Learning): 背景知识。
    • CS324 (Large Language Models): 深入理论。
    • CS336 (Large Language Models from Scratch): 实践构建,工作量大。

核心结论

构建大型语言模型是一个涉及数据、算法、评估和系统工程的复杂过程。预训练阶段通过在大规模无标签数据上进行语言建模,赋予模型基础的语言理解和生成能力,其中数据处理和规模法则是关键。后训练阶段(SFT和RLHF/DPO)则通过人类反馈或AI反馈将模型对齐到期望的行为,使其成为有用的AI助手。在整个过程中,高质量的数据、有效的评估方法以及高效的系统支持至关重要,其影响力往往超过对模型架构本身的微小调整。该领域仍在快速发展,面临诸多挑战和机遇。