Jiahong 的个人博客

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

NLP——技术报告解读-Kimi-K1.5

注:本文包含 AI 辅助创作

  • 参考链接:
    • 原始论文:Kimi K1.5: Scaling Reinforcement Learning with LLMs, Moonshot AI (Kimi), 20250103
    • Kimi K1.5: Long Context RL 的成功实践 - Chayenne Zhao的文章 - 知乎
      • 包含关于 partial Rollout 方法较为详细的讨论

Paper Summary

  • 论文报告了最新多模态大语言模型 Kimi K1.5 的训练实践,包括其 RL 训练技术、多模态数据配方和基础设施优化
    • 并从实践中总结了一个关键结论:上下文长度的扩展对于持续提升大语言模型的性能至关重要
  • 论文通过优化的学习算法和 Infra 优化(如部分轨迹回放,partial rollouts)实现了高效的长上下文强化学习训练
  • 论文结合了多种技术改进了策略优化(policy optimization)
    • 为长思维链 RL 制定了数学框架,并推导出一种在线镜像下降(online mirror descent)的变体以实现鲁棒的优化
    • 通过实验验证了采样策略(sampling strategies)、长度惩罚(length penalty)和数据配方优化(data recipe optimization)对强化学习性能的提升作用
  • 即使不依赖更复杂的技术(如 MCTS、价值函数 和 过程奖励模型),仅通过长上下文扩展和改进的策略优化也能实现强大的性能
  • 作者还观察到长到短(long2short)方法的潜力(即利用长思维链(long-CoT)技术改进短思维链(short-CoT)模型)
    • 这些方法显著提升了短思维链模型的性能
    • 可以尝试将长到短方法与长思维链强化学习迭代结合,以进一步提高给定上下文长度预算下的 Token Efficient 和性能
  • 论文建立了一个简单而有效的 RL 框架,无需依赖更复杂的技术(如蒙特卡洛树搜索、价值函数和过程奖励模型),其关键组成部分包括:
    • 长上下文扩展(long context scaling)
    • 改进的策略优化方法(policy optimization methods)
  • 论文的系统在跨多模态的多个基准测试中实现了最先进的推理性能,与 OpenAI 的 o1 模型相当
  • 论文提出了有效的长到短(long2short)方法(利用长思维链技术改进短思维链模型)实现了最先进的短思维链推理结果,大幅超越现有短思维链模型(如 GPT-4o 和 Claude Sonnet 3.5),优势最高达 +550%

Introduction and Discussion

  • 在扩展定律(scaling law)的背景下,基于 NTP 的语言模型预训练已得到广泛研究
    • 其中模型参数和数据规模的成比例扩展会带来智能的持续提升 (2020; 2022)
    • 但这种方法受限于可用高质量训练数据的数量 (2024; 2023)
  • 论文介绍了 Kimi K1.5 的训练配方,这是论文最新通过 RL 训练的多模态大语言模型
    • 目标是探索一种可能的新扩展方向
    • 通过将 RL 与大语言模型结合,模型能够通过奖励驱动的探索进行学习,从而不再受限于静态的预存数据集
  • K1.5 的设计和训练包含以下几个关键要素:
    • 长上下文扩展(Long context scaling) :
      • 论文将 RL 的上下文窗口扩展至 128k,并观察到随着上下文长度的增加,性能持续提升
      • 论文方法的核心思想是通过部分轨迹回放(partial rollouts)提高训练效率(即通过重用先前轨迹的大部分内容来采样新轨迹,避免从头重新生成新轨迹的成本)
      • 论文的观察表明,上下文长度是大语言模型 RL 持续扩展的关键维度
    • 改进的策略优化(Improved policy optimization) :
      • 论文推导了长思维链 RL 的公式化表示,并采用了一种在线镜像下降(online mirror descent)的变体进行鲁棒策略优化
      • 该算法通过有效的采样策略、长度惩罚(length penalty)和数据配方的优化进一步改进
    • 简洁框架(Simplistic Framework) :
      • 长上下文扩展与改进的策略优化方法相结合,为大语言模型学习建立了一个简洁的 RL 框架
      • 由于论文能够扩展上下文长度,学习到的思维链展现出规划(planning)、反思(reflection)和修正(correction)的特性
      • 增加的上下文长度相当于增加了搜索步数。因此,论文证明即使不依赖更复杂的技术(如蒙特卡洛树搜索、价值函数和过程奖励模型),也能实现强大的性能
    • 多模态(Multimodalities) :
      • 论文的模型联合训练文本和视觉数据,具备跨两种模态联合推理的能力
  • 论文还提出了有效的长到短方法,利用长思维链技术改进短思维链模型
    • 包括对长思维链激活应用长度惩罚以及模型融合(model merging)
  • 论文的长思维链版本在跨多模态的多个基准测试中实现了最先进的推理性能
    • AIME 77.5 分
    • MATH 500 96.2 分
    • Codeforces 94% 分位数
    • MathVista 74.9 分
    • 与 OpenAI 的 o1 模型相当
  • 论文的短思维链模型也实现了最先进的推理结果
    • AIME 60.8 分
    • MATH500 94.6 分
    • LiveCodeBench 47.3 分
    • 大幅超越现有短思维链模型(如 GPT-4o 和 Claude Sonnet 3.5),优势最高达 +550%
  • 结果如图 1 和图 2 所示

Approach: Reinforcement Learning with LLMs

  • Kimi K1.5 的开发包含多个阶段:
    • 预训练(pretraining)
    • 基础监督微调(vanilla supervised fine-tuning, SFT)
    • 长思维链监督微调(long-CoT supervised fine-tuning)
    • RL
  • 本报告重点关注强化学习部分:
    • 概述 RL 提示集构建(Section 2.1)
    • 概述 长思维链监督微调(Section 2.2)
    • 深入讨论 RL 训练策略(Section 2.3)
  • 注:预训练和基础监督微调的更多细节可见 Section 2.5

RL Prompt Set Curation

  • 通过初步实验,论文发现 RL 提示集的质量和多样性对强化学习的有效性至关重要
    • 一个精心构建的提示集不仅能引导模型进行鲁棒推理 ,还能降低奖励破解(reward hacking)和过拟合表面模式的风险
  • 高质量的 RL 提示集需满足以下三个关键特性:
    • 多样性覆盖(Diverse Coverage) :提示应涵盖 STEM、编程和通用推理等多个领域 ,以增强模型的适应能力并确保广泛的适用性
    • 难度平衡(Balanced Difficulty) :提示集应包含简单、中等和困难问题的均衡分布 ,以促进渐进式学习并避免过拟合特定难度级别
    • 可准确评估(Accurate Evaluability) :提示应支持通过验证器进行客观可靠的评估 ,确保模型表现基于正确的推理而非表面模式或随机猜测
  • 多样性覆盖 :为实现多样性覆盖,论文采用自动过滤器筛选需要丰富推理且易于评估的问题
    • 数据集包含来自 STEM 领域、竞赛和通用推理任务的文本及图文问答数据
    • 此外,论文开发了标签系统,按领域和学科对提示分类,确保各主题的均衡代表性(2023)
  • 难度平衡 :论文采用基于模型的方法,利用模型自身能力自适应评估每个提示的难度
    • 对于每个提示,SFT 模型以较高采样温度生成 10 次答案 ,通过通过率(pass rate)作为难度代理
      • 通过率越低,难度越高
    • 这种方法使难度评估与模型内在能力对齐,显著提升 RL 训练效果
    • 通过此方法,我们可以预过滤大部分简单案例,并在 RL 训练中灵活探索不同采样策略
  • 可准确评估 :为避免奖励破解(2021;2022),论文需确保每个提示的推理过程和最终答案均可被准确验证
    • 实证表明,某些复杂推理问题的答案可能较简单且易猜测,导致误判(即模型通过错误推理得到正确答案),论文排除了易出现此类问题的题型,如多选题、判断题和证明题
    • 对于通用问答任务,论文提出一种简单有效的方法识别并移除易破解提示:
      • 要求模型在不进行思维链推理的情况下猜测答案
      • 若模型在 \(N=8\) 次尝试内猜中正确答案 ,则该提示被视为易破解并被移除
    • 注:开发更先进的验证模型仍是未来研究方向

Long-CoT Supervised Fine-Tuning

  • 基于优化的 RL 提示集,论文通过提示工程构建一个小型高质量的长思维链预热数据集,包含文本和图像输入的已验证推理路径
  • 该方法类似于拒绝采样(rejection sampling, RS),但专注于通过提示工程生成长思维链推理路径
  • 预热数据集旨在封装人类推理的关键认知过程,包括:
    • 规划(Planning) :模型在执行前系统化步骤;
    • Evaluation :对中间步骤的批判性分析;
    • 反思(Reflection) :重新审视并优化方法;
    • 探索(Exploration) :考虑替代解决方案
  • 通过对该数据集进行轻量级 SFT,模型能有效内化这些推理策略
  • 微调后的长思维链模型在生成详细且逻辑连贯的响应方面表现更优,从而提升多样化推理任务的性能

Reinforcement learning

Problem Setting
  • 给定一个训练数据集,论文的目标是训练一个策略模型 \(\pi_\theta\) 以准确解决测试问题
    $$\mathcal{D} = \{(x_i, y^*_i)\}_{i=1}^n$$
    • 其中 \(x_i\) 表示问题,\(y^*_i\) 表示对应的真实答案
  • 在复杂推理任务中,从问题 \(x\) 到答案 \(y\) 的映射并非直接完成
    • 为解决这一挑战,思维链(Chain of Thought, CoT)方法提出使用一系列中间步骤 来连接 \(x\) 和 \(y\):
      $$ z = (z_1, z_2, \ldots, z_m)$$
      • 其中每个 \(z_i\) 是一个连贯的 Token 序列,作为解决问题的关键中间步骤 (2022)
    • 在解决问题 \(x\) 时,思维 \(z_t \sim \pi_\theta(\cdot|x, z_1, \ldots, z_{t-1})\) 通过自回归方式采样生成,随后生成最终答案 \(y \sim \pi_\theta(\cdot|x, z_1, \ldots, z_m)\)
    • 论文用 \(y, z \sim \pi_\theta\) 表示这一采样过程
    • 需要注意的是,思维和最终答案均以语言序列的形式生成
  • 为了进一步增强模型的推理能力,可使用规划算法(planning algorithms)探索不同的思维过程,从而在推理时生成改进的思维链 (2024;)
    • 规划算法的核心思想是通过价值估计显式构建一个思维搜索树
    • 这使得模型能够探索思维过程的多种可能延续,或在遇到死胡同时回溯以研究新的方向
    • 规划算法的具体流程如下:
      • 设 \(\mathcal{T}\) 为一个搜索树,其中每个节点表示一个部分解 \(s = (x, z_{1:|s|})\),包含问题 \(x\) 和一系列思维
        $$ z_{1:|s|} = (z_1, \ldots, z_{|s|})$$
        • \(|s|\) 表示序列中思维的数量
      • 规划算法使用一个评判模型 \(v\) 提供反馈 \(v(x, z_{1:|s|})\),帮助评估当前解决问题的进展并识别现有部分解中的错误
      • 反馈可以是一个判别分数或语言序列 (2024)
      • 根据所有 \(s \in \mathcal{T}\) 的反馈,规划算法选择最有潜力的节点进行扩展,从而生长搜索树
      • 上述过程迭代重复,直到生成完整的解
  • 从算法视角来看:
    • 给定第 \(t\) 次迭代时的历史搜索记录
      $$ (s_1, v(s_1), \ldots, s_{t-1}, v(s_{t-1}))$$
    • 规划算法 \(\mathcal{A}\) 迭代确定下一个搜索方向
      $$ \mathcal{A}(s_t|s_1, v(s_1), \ldots, s_{t-1}, v(s_{t-1})) $$
    • 并为当前搜索进展提供反馈
      $$ \mathcal{A}(v(s_t)|s_1, v(s_1), \ldots, s_{t-1}, v(s_{t-1}))$$
    • 由于思维和反馈均可视为中间推理步骤,且这些组件均可表示为语言 Token 序列,论文用 \(z\) 替换 \(s\) 和 \(v\) 以简化符号
    • 因此,论文将规划算法视为直接作用于推理步骤序列的映射
      $$ \mathcal{A}(\cdot|z_1, z_2, \ldots) $$
    • 在这一框架下,规划算法使用的搜索树中存储的所有信息被扁平化为提供给算法的完整上下文
  • 这为生成高质量思维链提供了一个有趣的视角:与其显式构建搜索树并实现规划算法,不如考虑训练一个模型来近似这一过程
    • 此时,思维数量(即语言 Token 数量)类似于传统规划算法分配的计算预算
    • 长上下文窗口的最新进展(注:大模型的上下文越来越长了)为训练和测试阶段的无缝扩展提供了可能
    • 如果可行,这种方法将使模型能够通过自回归预测直接在推理空间中进行隐式搜索
    • 因此,模型不仅学会解决一组训练问题,还培养了有效解决单个问题的能力,从而提升对未见测试问题的泛化能力
  • 论文考虑使用 RL 训练模型生成思维链 (OpenAI, 2024)
    • 设 \(r\) 为一个奖励模型,用于根据真实答案 \(y^*\) 判断给定问题 \(x\) 的答案 \(y\) 的正确性,并分配一个值
      $$ r(x, y, y^*) \in \{0, 1\} $$
    • 对于可验证的问题,奖励直接由预定义的标准或规则确定
      • 例如,在编程问题中,论文评估答案是否通过测试用例
    • 对于自由形式的真实答案,论文训练一个奖励模型 \(r(x, y, y^*)\) 来预测答案是否与真实答案匹配
    • 给定问题 \(x\),模型 \(\pi_\theta\) 通过采样过程 \(z \sim \pi_\theta(\cdot|x)\) 和 \(y \sim \pi_\theta(\cdot|x, z)\) 生成思维链和最终答案
      • 生成的思维链的质量通过其是否能导向正确的最终答案来评估
  • 综上所述,论文考虑以下目标来优化策略:
    $$
    \max_{\theta} \mathbb{E}_{(x, y^*) \sim \mathcal{D}, (y, z) \sim \pi_\theta} \left[ r(x, y, y^*) \right].
    $$
  • 通过扩展强化学习训练,论文的目标是训练一个模型,使其能够结合以下两者的优势 :
    • 简单基于提示的思维链(simple prompt-based CoT)
    • 规划增强思维链(planning-augmented CoT)
  • 在推理时 ,模型仍通过自回归方式采样语言序列 ,从而避免了部署时复杂并行化的需求
  • 这种方法与简单基于提示的方法的关键区别在于
    • 模型不应仅遵循一系列推理步骤,而应通过学习关键规划技能(如错误识别、回溯和解决方案优化)来利用所有探索过的思维作为上下文信息
Policy Optimization
  • 论文采用一种在线策略镜像下降(online policy mirror descent,OPMD)的变体作为训练算法 (Abbasi-2019; 2019; 2020)
    • 该算法迭代执行
    • 关于 Mirror Descent 方法的介绍见附录
  • 在第 \(i\) 次迭代时,论文将当前模型 \(\pi_{\theta_i}\) 作为参考模型,并优化以下相对熵正则化的策略优化问题:
    $$
    \max_{\theta} \mathbb{E}_{(x, y^*) \sim \mathcal{D} } \left[ \mathbb{E}_{(y, z) \sim \pi_\theta} \left[ r(x, y, y^*) \right] - \tau \text{KL}(\pi_\theta(x) || \pi_{\theta_i}(x)) \right],
    $$
    • 其中 \(\tau > 0\) 是控制正则化程度的参数
    • 注意:是每次迭代都要求解上面的优化问题,而这个优化问题的求解可能是经过多个小步骤的,所以在不同大迭代轮次之间,参数已经发生了改变,下文中使用每次大迭代之后的策略 \(\pi_{\theta_i}\) 采样样本后,实际上是一种 Off-policy 策略而不是 On-policy 策略
  • 该目标具有闭式解:
    $$
    \pi^*(y, z|x) = \pi_{\theta_i}(y, z|x) \exp(r(x, y, y^*)/\tau)/Z.
    $$
    • 这里 \(Z = \sum_{y’, z’} \pi_{\theta_i}(y’, z’|x) \exp(r(x, y’, y^*)/\tau)\) 是归一化因子
  • 对两边取对数,论文得到对于任意 \((y, z)\) 满足以下约束,这使得论文能够在优化过程中利用 Off-policy 数据:
    $$
    r(x, y, y^*) - \tau \log Z = \tau \log \frac{\pi^*(y, z|x)}{\pi_{\theta_i}(y, z|x)}.
    $$
  • 我们得到以下最终代理损失函数(surrogate loss):
    $$
    \color{red}{L(\theta) = \mathbb{E}_{(x, y^*) \sim \mathcal{D} } \left[ \mathbb{E}_{(y, z) \sim \pi_{\theta_i} } \left[ \left( r(x, y, y^*) - \tau \log Z - \tau \log \frac{\pi_\theta(y, z|x)}{\pi_{\theta_i}(y, z|x)} \right)^2 \right] \right]}.
    $$
  • \(\tau \log Z\) 的近似表示 :可以使用样本 \((y_1, z_1), \ldots, (y_k, z_k) \sim \pi_{\theta_i}\):
    $$
    \tau \log Z \approx \tau \log \frac{1}{k} \sum_{j=1}^k \exp(r(x, y_j, y^*)/\tau).
    $$
    • 注:上式是对 \(Z = \sum_{y’, z’} \pi_{\theta_i}(y’, z’|x) \exp(r(x, y’, y^*)/\tau)\) 的估计
  • \(\tau \log Z\) 的近似表示改进 :论文进一步发现,使用采样奖励的均值在实践中效果显著:
    $$\overline{r} = \text{mean}(r(x, y_1, y^*), \ldots, r(x, y_k, y^*))$$
    • 这是合理的,因为当 \(\tau \to \infty\) 时,\(\tau \log Z\) 趋近于 \(\pi_{\theta_i}\) 下的期望 Reward(详细证明见附录)
  • 最后,论文的算法(代理损失的梯度)总结如下:对于每个问题 \(x\),使用参考策略 \(\pi_{\theta_i}\) 采样 \(k\) 个响应,梯度由下式给出:
    $$
    \color{red}{\frac{1}{k} \sum_{j=1}^k \left( \nabla_\theta \log \pi_\theta(y_j, z_j|x)(r(x, y_j, y^*) - \overline{r}) - \frac{\tau}{2} \nabla_\theta \left( \log \frac{\pi_\theta(y_j, z_j|x)}{\pi_{\theta_i}(y_j, z_j|x)} \right)^2 \right).}
    $$
  • 对于熟悉策略梯度方法的读者,这一梯度类似于使用采样奖励均值作为基线的策略梯度 (2019; 2024)
    • 主要区别在于响应是从 \(\pi_{\theta_i}\) 采样而非 On-policy 采样,并且应用了 \(l_2\) 正则化
      • 注:前文中有关于 Off-policy 和 On-policy 的讨论,每次大的迭代内都包含一些小的迭代,\(\pi_{\theta_i}\) 是第 \(i\) 次大迭代后的策略
    • 因此,可以将其视为常规 On-policy 正则化策略梯度算法在 Off-policy 情况下的自然扩展 (2017)
  • 论文从 \(\mathcal{D}\) 中采样一批问题,并将参数更新为 \(\theta_{i+1}\)(注:这里需要更新很多个小步骤),随后将其作为下一次迭代的参考策略
    • 由于每次迭代因参考策略的变化而考虑不同的优化问题,论文在每次迭代开始时重置优化器(这里是指大的迭代)
  • 在论文的训练系统中,论文排除了价值网络(value network),这一设计选择在先前的研究中也有采用 (2024)
    • 这一选择显著提高了训练效率,论文假设传统强化学习中用于信用分配(credit assignment)的价值函数可能不适用于论文的场景
  • 考虑一种情况:
    • 模型生成了一个部分思维链 \((z_1, z_2, \ldots, z_t)\),并且存在两个潜在的下一步推理步骤 \(z_{t+1}\) 和 \(z’_{t+1}\)
    • 假设 \(z_{t+1}\) 直接导向正确答案,而 \(z’_{t+1}\) 包含一些错误
    • 如果存在一个预言价值函数(oracle value function),它将表明 \(z_{t+1}\) 相对于 \(z’_{t+1}\) 具有更高的价值
      • 根据标准信用分配原则,选择 \(z’_{t+1}\) 会因为相对于当前策略具有负优势而受到惩罚
    • 但探索 \(z’_{t+1}\) 对于训练模型生成长思维链极具价值
  • 通过使用从长思维链推导出的最终答案的合理性作为奖励信号 ,模型可以从选择 \(z’_{t+1}\) 中学习试错模式,只要它成功恢复并达到正确答案
    • 理解:使用合理性作为奖励信号而不是正确性?那是否也可以将 价值模型 建模为这个合理性呢?这与是否使用 价值网络没有关系吧!
  • 这一例子的关键启示是,论文应鼓励模型探索多样化的推理路径,以增强其解决复杂问题的能力
    • 这种探索方法生成了丰富的经验,支持关键规划技能的开发
  • 论文的主要目标不仅限于在训练问题上实现高准确率,而是专注于使模型掌握有效的问题解决策略,最终提升其在测试问题上的表现
Length Penalty
  • 论文观察到一种“过度思考”(overthinking)现象:即在强化学习训练过程中,模型的响应长度显著增加
  • 虽然这带来了性能提升,但过长的推理过程在训练和推理时成本高昂,且通常不符合人类偏好
  • 为解决这一问题,论文引入了一种长度奖励(length reward)以抑制 Token 长度的快速增长,从而提高模型的 Token Efficiency
  • 给定问题 \(x\) 的 \(k\) 个采样响应 \((y_1, z_1), \ldots, (y_k, z_k)\) 和真实答案 \(y^*\)
    • 设
      • \(\text{len}(i)\) 为 \((y_i, z_i)\) 的长度
      • \(\min_\text{len} = \min_i \text{len}(i)\) 和 \(\max_\text{len} = \max_i \text{len}(i)\)
    • 如果
      • \(\max_\text{len} = \min_\text{len}\)
      • 论文将所有响应的长度奖励设为零,因为它们的长度相同
    • 否则,长度奖励由下式给出:
      $$
      \text{len_reward}(i) = \begin{cases}
      \lambda & \text{if } r(x, y_i, y^*) = 1 \\
      \min(0, \lambda) & \text{if } r(x, y_i, y^*) = 0
      \end{cases}, \quad \text{where } \lambda = 0.5 - \frac{\text{len}(i) - \min_\text{len} }{\max_\text{len} - \min_\text{len} }.
      $$
  • 本质上,论文的奖励思路是:
    • 在正确答案中:鼓励更短的响应 ,并惩罚更长的响应;
    • 在错误答案中:显式惩罚具有错误答案的长响应
    • 对奖励的理解:如果答案出错,即使很短的回答也不给奖励,因为可能错误的让模型觉得应该缩短队列造成结果出错
    • 这一基于长度的奖励随后通过加权参数添加到原始奖励中
  • 在初步实验中,长度惩罚可能会导致在训练初期减缓进度
    • 为缓解这一问题,论文提出在训练过程中逐步预热长度惩罚
    • 具体来说,论文首先使用标准策略优化(不包含长度惩罚),随后在剩余训练中应用恒定长度惩罚
Sampling Strategies
  • 强化学习算法本身具有相对良好的采样特性(更困难的问题提供更大的梯度),但其训练效率仍然有限
  • 一些定义良好的先验采样方法可能带来更大的性能提升
  • 论文利用多种信号进一步改进采样策略
    • 首先,论文收集的强化学习训练数据自然带有不同的难度标签(例如,数学竞赛问题比小学数学问题更难)
    • 其次,由于强化学习训练过程对同一问题多次采样,论文还可以跟踪每个问题的成功率作为难度指标
  • 论文提出两种采样方法,利用这些先验知识提高训练效率
    • 课程采样(Curriculum Sampling) :论文首先在较简单的任务上训练模型,随后逐步过渡到更具挑战性的任务
      • 由于初始强化学习模型性能有限 ,将有限的计算预算用于非常困难的问题通常只会产生少量正确样本,导致训练效率较低
      • 同时,论文收集的数据自然包含年级和难度标签,使得基于难度的采样成为一种直观且有效的方式
    • 优先级采样(Prioritized Sampling) :除了课程采样外,论文还使用优先级采样策略 ,专注于模型表现不佳的问题
      • 论文跟踪每个问题的成功率 \(s_i\),并按照与 \(1 - s_i\) 成比例的概率采样问题 ,使得成功率较低的问题获得更高的采样概率
      • 这使模型能够集中精力改进其薄弱环节,从而加速学习并提升整体性能
More Details on Training Recipe
  • 代码测试用例生成(Test Case Generation for Coding) :
    • 由于网络上许多编程问题的测试用例不可用 ,论文设计了一种自动生成测试用例的方法 ,作为训练模型的奖励
      • 问题:网络上测试用例不可用的原因是什么?是因为不专业吗?
    • 论文主要关注不需要特殊评判(special judge)的问题,并假设这些问题的真实解决方案可用,以便利用这些解决方案生成更高质量的测试用例
      • 问题:不需要特殊评判是指什么?
    • 论文使用广受认可的测试用例生成库 CYaRon 来增强论文的方法,测试用例的生成如下:
      • 基于问题描述,论文使用 Based Kimi K1.5 模型生成测试用例
      • CYaRon 的使用说明和问题描述作为生成器的输入
      • 对于每个问题,论文生成 50 个测试用例,并随机抽取 10 个真实提交结果对每个测试用例进行验证
        • 如果至少 7 个提交结果匹配,则该测试用例被视为有效
      • 经过这轮筛选后,论文得到一组选定的测试用例
    • 如果至少 9 个提交结果通过全部选定的测试用例,则该问题及其关联的测试用例被加入训练集
    • 在统计数据方面,从 1,000 个在线竞赛问题样本中,约 614 个问题不需要特殊评判
    • 论文开发了 463 个测试用例生成器,生成了至少 40 个有效测试用例,最终将 323 个问题纳入训练集
    • 问题:本节的描述不够清晰,还需要重新理解一下
  • 数学奖励建模(Reward Modeling for Math)
    • 评估数学解决方案的一个挑战在于,不同的书写形式可能表示相同的答案
      • 例如,\(a^2 - 4\) 和 \((a + 2)(a - 2)\) 可能是同一问题的有效解
    • 论文采用两种方法提高奖励模型的评分准确性:
      • 1)经典奖励模型(Classic RM) :受 InstructGPT (2022) 方法的启发,论文实现了一个基于价值头(value-head)的奖励模型,并收集了约 800K 数据点进行微调
        • 该模型最终以“问题”、“参考答案”和“响应”作为输入,输出一个标量以指示响应是否正确
      • 2)思维链奖励模型(Chain-of-Thought RM) :近期研究 (2024; 2024) 表明,结合思维链推理的奖励模型,在需要细微正确性标准的任务(如数学)上显著优于经典方法
        • 论文收集了约 800K 带有思维链标注的示例对 Kimi 模型进行微调
        • 基于与经典奖励模型相同的输入,思维链方法在提供最终正确性判断(以 JSON 格式输出)之前显式生成逐步推理过程,从而实现更鲁棒且可解释的奖励信号
    • 在人工抽查中,经典奖励模型的准确率约为 84.4% ,而思维链奖励模型达到了 98.5% 的准确率
    • 在强化学习训练过程中,论文采用思维链奖励模型以确保更准确的反馈
  • 视觉数据(Vision Data)
    • 为提升模型在真实世界图像中的推理能力,并实现视觉输入与 LLM 的更有效对齐,论文的视觉强化学习(Vision RL)数据主要来源于三个类别:
      • 真实世界数据
      • 合成视觉推理数据
      • 文本渲染数据
    • 1)真实世界数据(Real-world data) :
      • 涵盖需要图形理解和推理的各年级科学问题、需要视觉感知和推理的位置猜测任务,以及涉及理解复杂图表的数据分析等
      • 这些数据集提升了模型在真实场景中的视觉推理能力
    • 2)合成视觉推理数据(Synthetic visual reasoning data) :
      • 人工生成的图像和场景,旨在提升特定的视觉推理技能,如理解空间关系、几何模式和物体交互
      • 这些合成数据集为测试模型的视觉推理能力提供了可控环境,并提供了无限的训练样本
    • 3)文本渲染数据(Text-rendered data) :
      • 通过将文本内容转换为视觉格式,确保模型在处理不同模态的文本查询时保持一致
      • 通过将文论文档、代码片段和结构化数据转换为图像,论文确保无论输入是纯文本还是渲染为图像(如截图或照片),模型都能提供一致的响应
      • 这也有助于增强模型处理 text-heavy 图像的能力
    • 每种类型的数据对于构建全面的视觉语言模型都至关重要,使其能够有效管理广泛的真实应用,同时确保跨不同输入模态的一致性能

Long2short: Context Compression for Short-CoT Models(长到短:短链思维模型的上下文压缩)

  • 尽管长链思维(long-CoT)模型表现出强大的性能,但与标准的短链思维(short-CoT) LLM 相比,它在测试时需要消耗更多的 Token
  • 论文将长链思维模型的思维先验(thinking priors)迁移到短链思维模型中,从而在有限的测试 Token 预算下提升性能
  • 本节介绍了几种解决这一“长到短”(long2short)问题的方法,包括
    • 模型融合(model merging)
    • 最短拒绝采样(shortest rejection sampling)
    • 直接偏好优化(Direct Preference Optimization, DPO)
    • 长到短强化学习(long2short RL)
  • 模型融合(Model Merging)
    • 模型融合在保持泛化能力方面已被证明是有效的
    • 论文还发现,在融合长链思维模型和短链思维模型时,该方法能显著提升 Token Efficient
    • 具体而言,论文通过简单地对两个模型的权重进行平均来实现融合:
      $$
      \theta_{\text{merged} } = \frac{\theta_{\text{long-CoT} } + \theta_{\text{short-CoT} } }{2}
      $$
      • 其中,\(\theta_{\text{long-CoT} }\) 和 \(\theta_{\text{short-CoT} }\) 分别表示长链思维模型和短链思维模型的参数
  • 最短拒绝采样(Shortest Rejection Sampling)
    • 论文观察到,对于同一问题,模型生成的响应长度存在较大差异
    • 最短拒绝采样方法对同一问题采样 \(n\) 次 ,并选择其中最短的正确响应用于 SFT
      • 注:实验中 \(n=8\)
  • 直接偏好优化(DPO)
    • 与最短拒绝采样类似,论文利用长链思维模型生成多个响应样本
    • 选择最短的正确解作为正样本 ,而较长的响应作为负样本
      • 包括 错误的较长响应 和 比所选正样本长 1.5 倍的正确响应
    • 这些正负样本对构成了用于 DPO 训练的成对偏好数据
  • 长到短强化学习(Long2short RL)
    • 在标准强化学习训练阶段后,论文选择一个在性能和 Token Efficient 之间达到最佳平衡的模型作为基础模型,并进行单独的长到短 RL 训练阶段
    • 在第二阶段(RL 训练阶段)中,论文应用了第 2.3.3节 中介绍的长度惩罚(length penalty),显著减少最大展开长度(maximum rollout length),以进一步惩罚超出预期长度但可能正确的响应

Other Training Details

Pretraining
  • Kimi K1.5 的基础模型是在多样化、高质量的多模态语料库上训练的
    • 语言数据涵盖五个领域:英语、中文、代码、数学推理和知识
    • 多模态数据集包括
      • 图像描述(Captioning)数据集
      • 图文交错(Image-text Interleaving)数据集
      • 光学字符识别(Optical Character Recognition, OCR)数据集
      • 知识和问答数据集
    • 使模型具备视觉-语言能力
    • 严格的质控确保了预训练数据的相关性、多样性和平衡性
  • 论文的预训练分为三个阶段:
    • 1)视觉-语言预训练(Vision-language pretraining) :
      • 首先建立强大的语言模型基础,随后逐步引入视觉-语言交错数据,获得多模态能力
    • 2)冷却阶段(Cooldown) :
      • 使用精选的合成数据巩固模型能力,尤其是在数学推理、知识任务和代码生成方面
    • 3)长上下文激活(Long-context activation) :
      • 将序列处理能力扩展到 131,072 个 Token ,支持需要长上下文的任务
Vanilla Supervised Finetuning(标准监督微调)
  • 论文构建了涵盖多个领域的标准监督微调语料库
  • 对于非推理任务(如问答、写作和文本处理),论文通过人工标注构建初始种子数据集,并训练种子模型
  • 随后,论文收集多样化的提示(prompts),利用种子模型为每个提示生成多个响应 ,标注者对响应进行排名并优化排名靠前的响应,形成最终版本
  • 对于数学和编程等推理任务,由于基于规则和奖励模型的验证比人工判断更准确高效,论文采用拒绝采样(rejection sampling)扩展监督微调数据集
  • 论文的标准监督微调数据集包含约 1M 文本示例,其中:
    • 500K 示例用于通用问答
    • 200K 用于代码生成
    • 200K 用于数学和科学
    • 5K 用于创意写作
    • 20K 用于长上下文任务(如摘要、文档问答、翻译和写作)
  • 此外,论文还构建了 1000K 图文示例,涵盖图表解读、OCR、基于图像的对话、视觉编程、视觉推理以及带有视觉辅助的数学/科学问题
  • 训练分为两个阶段:
    • 1)在 32k Token 序列长度下训练 1个 Epoch,学习率从 \(2 \times 10^{-5}\) 衰减到 \(2 \times 10^{-6}\)
    • 2)在 128k Token 序列长度下训练 1个 Epoch,学习率重新预热到 \(1 \times 10^{-5}\),最终衰减到 \(1 \times 10^{-6}\)
    • 问题1:为什么长 Token 序列要在后面训练?不能混合训练吗?先后顺序可以变化吗?
    • 问题2:为什么长 Token 序列要用更低的学习率?
  • 为提升训练效率,论文将多个训练示例打包到单个训练序列中

RL Infrastructure

Large Scale Reinforcement Learning Training System for LLM
  • 在人工智能领域,RL 已成为 LLM 训练的关键方法 (2022; 2024)
    • 其灵感来源于在复杂游戏(如围棋、星际争霸 II 和 Dota 2)中取得的成功,例如 AlphaGo (2017)、AlphaStar (2019) 和 OpenAI Dota Five (2019)
  • 遵循这一传统,Kimi K1.5 系统采用了一种迭代同步(iterative synchronous)的 RL 框架,通过持续学习和适应来增强模型的推理能力
    • 该系统的关键创新是引入了部分展开(Partial Rollout)技术,用于优化复杂推理轨迹的处理
  • 如图 3a 所示,RL 训练系统通过迭代同步(iterative synchronous)的方式运行,每次迭代包含展开阶段和训练阶段
    • 在展开阶段 ,由 Central Master 协调的 Rollout Workers 通过与模型交互生成展开轨迹,产生对各类输入的响应序列
      • 这些轨迹随后被存储在一个 **Replay Buffer 中** ,通过打乱时间相关性来确保训练数据的多样性和无偏性
      • 问题:为什么要打乱时间相关性?不同时间点生成的数据是独立的吧
    • 在训练阶段 , Trainer Workers 访问这些经验来更新模型的权重
    • 这一循环过程使模型能够从其行为中持续学习,逐步调整策略以提升性能
  • Central Master 作为核心调度器,管理 Rollout Workers、Trainer Workers、奖励模型评估(Evaluation with Reward Models)和 Replay Buffer 之间的数据流和通信
    • 它确保系统协调运行,平衡负载并促进高效的数据处理
  • Trainer Workers 访问这些展开轨迹(无论是单次迭代完成还是跨多次迭代分割)来计算梯度更新,从而优化模型参数并提升性能
    • 在这一过程中,Reward Model 评估模型输出的质量并提供关键反馈以指导训练过程
    • 奖励模型的评估对于确定模型策略的有效性并引导模型实现最佳性能尤为重要
  • 此外,系统还集成了一个代码执行服务(Code Execution Service) ,专门用于处理代码相关问题,并与奖励模型紧密结合
    • 代码执行服务 在实际编码场景中评估模型的输出 ,确保模型的学习与真实编程挑战紧密对齐
    • 通过将模型的解决方案与实际代码执行结果进行验证,这一反馈循环对于优化模型策略和提升代码相关任务的性能至关重要
Partial Rollouts for Long CoT RL
  • 本研究的一个核心思想是扩展长上下文 RL (long-context RL)训练的规模
  • Partial Rollouts 通过管理长轨迹和短轨迹的展开,有效解决了处理长链式思维(Long CoT)特征的挑战
    • 该技术设定了一个固定的输出 Token 预算,限制每次展开轨迹的长度
    • 如果在展开阶段轨迹超出 Token 限制,未完成的部分会被保存到 Replay Buffer ,并在下一次迭代中继续
    • 这确保了单个长轨迹不会独占系统资源
    • Rollout Workers是异步运行的 ,当部分工作器处理长轨迹时,其他工作器可以独立处理新的短展开任务
      • 这种异步操作通过确保所有 Rollout Workers 积极参与训练过程,最大化计算效率,从而优化系统的整体性能
  • 如图 3b 所示,部分展开系统通过将长响应分割为跨迭代的片段(从迭代 \(n-m\) 到迭代 \(n\))来工作
    • Replay Buffer 作为中央存储机制,保存这些响应片段,其中只有当前迭代(迭代 \(n\))需要按策略计算
    • 之前的片段(迭代 \(n-m\) 到 \(n-1\))可以从缓冲区高效复用,无需重复展开
    • 这种分段方法显著降低了计算开销:
      • 系统不是一次性展开整个响应,而是逐步处理和存储片段,从而能够生成更长的响应,同时保持快速的迭代时间
      • 在训练过程中,某些片段可以从损失计算中排除,以进一步优化学习过程 ,使整个系统既高效又可扩展
    • 问题:这种跨段的偏短不符合重要性采样规则了吧,还算是 On-policy 的策略吗?上面说的在损失中排除部分片段是为了解决这个问题吗?
      • 回答:生成后,有两个选择,选择1)保存历史生成的概率(理论效果更优);选择2)用当前策略重新计算生成概率(可能引入未知不一致问题),在更新前一般都需要用当前的 Actor 重新计算 log_prob 的,所以这里虽然不是同一个 Actor 生成的,但是其重要性权重使用的 prob 能保证是最新的
      • 一个参考博客,包含较为详细的讨论:Kimi K1.5: Long Context RL 的成功实践 - Chayenne Zhao的文章 - 知乎
  • 部分展开的实现还包括重复检测功能
    • 系统识别生成内容中的重复序列并提前终止,减少不必要的计算,同时保持输出质量
    • 检测到的重复内容可以被分配额外的惩罚,从而有效抑制提示集中冗余内容的生成
Hybrid Deployment of Training and Inference
  • RL 训练过程包含以下阶段:
    • 训练阶段(Training Phase) :
      • 初始阶段,Megatron (2020) 和 vLLM (2023) 在单独的容器中运行,由一个称为检查点引擎(Checkpoint Engine)的中间进程封装(详见第 2.6.3 节)
      • Megatron 启动训练过程
      • 训练完成后,Megatron 卸载 GPU 内存,准备将当前权重传输给 vLLM
    • 推理阶段(Inference Phase) :
      • Megatron 卸载后,vLLM 以虚拟模型权重启动,并通过 Mooncake (2024) 从 Megatron 接收最新权重进行更新
      • 展开完成后,检查点引擎停止所有 vLLM 进程
    • 后续训练阶段(Subsequent Training Phase) :
      • vLLM 占用的内存释放后,Megatron 重新加载内存并启动新一轮训练
  • 论文发现现有工作难以同时支持以下所有特性:
    • 1)复杂的并行策略(Complex parallelism strategy) :
      • Megatron 和 vLLM 可能采用不同的并行策略
      • 在 Megatron 中分布在多个节点的训练权重可能难以与 vLLM 共享
    • 2)最小化空闲 GPU 资源(Minimizing idle GPU resources) :
      • 对于按策略 RL,近期工作如 SGLang (2024) 和 vLLM 可能在训练过程中保留部分 GPU,这反过来会导致训练 GPU 闲置
      • 更高效的方式是在训练和推理之间共享相同的设备
    • 3)动态扩展能力(Capability of dynamic scaling) :
      • 在某些情况下,通过增加推理节点数量(同时保持训练过程不变)可以显著加速
      • 论文的系统能够在需要时高效利用闲置 GPU 节点
  • 如图 4 所示,论文在 Megatron 和 vLLM 之上实现了这一混合部署框架(详见第 2.6.3 节),实现了从训练到推理阶段少于 1 分钟的切换时间,反之约为 10 秒
  • 混合部署策略(Hybrid Deployment Strategy)
    • 论文提出了一种训练和推理任务的混合部署策略,利用 Kubernetes Sidecar 容器共享所有可用 GPU,将两种工作负载部署在同一 Pod 中。该策略的主要优势包括:
      • 促进高效的资源共享和管理,避免训练节点在等待推理节点时闲置(当两者部署在不同节点时)
      • 利用独立的部署镜像,训练和推理可以各自独立迭代以获得更好的性能
      • 该架构不仅限于 vLLM,其他框架也可以方便地集成
  • 检查点引擎(Checkpoint Engine)
    • 检查点引擎负责管理 vLLM 进程的生命周期,暴露 HTTP API 以支持对 vLLM 的各种操作触发
    • 为了确保整体一致性和可靠性,论文使用由 etcd 服务管理的全局元数据系统来广播操作和状态
    • 由于 CUDA 图、NCCL 缓冲区和 NVIDIA 驱动等因素,vLLM 卸载后完全释放 GPU 内存可能具有挑战性
      • 为了最小化对 vLLM 的修改,论文在需要时终止并重启它以获得更好的 GPU 利用率和容错能力
    • Megatron 中的工作器将拥有的检查点转换为共享内存中的 Hugging Face 格式
      • 此转换还考虑了流水线并行(Pipeline Parallelism)和专家并行(Expert Parallelism),因此这些检查点中仅保留张量并行(Tensor Parallelism)
      • 共享内存中的检查点随后被分片并注册到全局元数据系统中
      • 论文使用 Mooncake 通过 RDMA 在对等节点之间传输检查点
      • 需要对 vLLM 进行一些修改以加载权重文件并执行张量并行转换
Code Sandbox
  • 论文开发了沙箱作为一个安全的环境,用于执行用户提交的代码,并针对代码执行和代码基准评估进行了优化
  • 通过动态切换容器镜像,沙箱支持 MultiPL-E (2023)、DMOJ Judge Server、Lean 等 (2023)、Jupyter Notebook 和其他镜像的不同用例
  • 对于编码任务中的 RL,沙箱通过提供一致且可重复的评估机制,确保训练数据判断的可靠性
  • 其反馈系统支持多阶段评估,例如代码执行反馈和仓库级编辑,同时保持统一的上下文以确保跨编程语言的公平基准比较
  • 论文将服务部署在 Kubernetes 上以实现可扩展性和弹性,并通过 HTTP 端点对外暴露以支持外部集成
    • Kubernetes 的自动重启和滚动更新等功能确保了可用性和容错性
  • 为了优化性能并支持 RL 环境,论文在代码执行服务中集成了多项技术以提升效率、速度和可靠性,包括:
    • 使用 Crun(Using Crun) :论文使用 crun 作为容器运行时而非 Docker ,显著减少了容器启动时间
    • Cgroup 复用(Cgroup Reusing) :论文为容器预创建 cgroup,这对于高并发场景至关重要,因为为每个容器创建和销毁 cgroup 可能成为瓶颈
    • 磁盘使用优化(Disk Usage Optimization) :论文使用带有 tmpfs 上层的覆盖文件系统来控制磁盘写入,提供固定大小的高速存储空间
      • 这种方法对临时工作负载特别有益
  • 这些优化提升了代码执行中的 RL 效率,为评估 RL 生成的代码提供了一致且可靠的环境,这对于迭代训练和模型改进至关重要

Experiments

Evaluation

  • 由于 K1.5 是一个多模态模型(multimodal model),论文在不同模态的多个基准测试上进行了全面评估(详细的评估设置见附录 C)
  • 论文的基准测试主要包括以下三类:
    • 文本基准测试(Text Benchmark) :MMLU (2020)、IF-Eval (2023)、CLUEWSC (2020)、C-EVAL (2023)
    • 推理基准测试(Reasoning Benchmark) :HumanEval-Mul (2024)、Codeforces (2024)、MATH-500 (2023)
    • 视觉基准测试(Vision Benchmark) :MMMU (2024)、MATH-Vision (2024)、MathVista (2023)

Main Results

  • K1.5 长链思维模型(K1.5 long-CoT model)
    • Kimi K1.5 长链思维模型的性能如表 2 所示
    • 通过长链思维监督微调(如第 2.2 节所述)和视觉-文本联合强化学习(如第 2.3 节所述),模型的长期推理能力显著增强
    • 测试时计算规模的扩展进一步提升了其性能,使模型在多种模态上实现了最先进的结果
    • 论文的评估表明,模型在长上下文中的推理、理解和信息综合能力有了显著提升,代表了多模态人工智能能力的重大进步
  • K1.5 短链思维模型(K1.5 short-CoT model)
    • Kimi K1.5 短链思维模型的性能如表 3 所示
    • 该模型整合了多种技术,包括传统的监督微调(如第 2.5.2 节所述)、强化学习(如第 2.3 节所述)以及长链到短链的知识蒸馏(如第 2.4 节所述)
    • 结果表明,K1.5 短链思维模型在多项任务中表现优于或与领先的开源和专有模型相当,包括文本、视觉和推理任务,尤其在自然语言理解、数学、编程和逻辑推理方面表现突出

Long Context Scaling

  • 论文使用一个中等规模的模型来研究 LLM 在强化学习中的扩展特性
  • 图 5 展示了小型模型变体在数学提示集上训练时,训练准确率和响应长度随训练迭代的变化情况
    • 随着训练的进行,论文观察到响应长度和性能准确率同步增长
    • 在更具挑战性的基准测试中,响应长度的增长更为显著,这表明模型学会了为复杂问题生成更详细的解决方案
  • 图 6 表明,模型的输出上下文长度与其问题解决能力之间存在强相关性
    • 论文最终的 K1.5 运行将上下文长度扩展到 128k,并在困难的推理基准测试中观察到持续的性能提升

Long2short

  • 文比较了第 2.4 节中提出的长链到短链强化学习算法与 DPO、最短拒绝采样和模型合并方法,重点关注长链到短链问题的 Token Efficiency (2024),即如何将长链思维模型的优势传递给短链模型
  • 在图 7 中:
    • K1.5-long 代表论文用于长链到短链训练的长链思维模型
    • K1.5-short w/ rl 表示通过长链到短链强化学习训练得到的短链模型
    • K1.5-short w/ dpo 表示通过 DPO 训练提升 Token Efficiency 的短链模型
    • K1.5-short w/ merge 表示模型合并后的结果
    • K1.5-short w/ merge + rs 表示对合并模型应用最短拒绝采样得到的短链模型
    • K1.5-shortest 表示论文在长链到短链训练中获得的最短模型
  • 如图 7 所示
    • 与其他方法(如 DPO 和模型合并)相比,长链到短链强化学习算法展示了最高的 Token Efficiency
    • K1.5 系列的所有模型(橙色 Token )均表现出比其他模型(蓝色 Token )更优的 Token Efficiency
      • 例如,K1.5-short w/ rl 在 AIME2024 上的 Pass@1 得分为 60.8(8 次运行的平均值),平均仅使用 3,272 个 Token
      • 同样,K1.5-shortest 在 MATH500 上的 Pass@1 得分为 88.2,同时消耗的 Token 数量与其他短链模型相当

Ablation Studies

Scaling of model size and context length
  • 论文的主要贡献是通过 RL 增强模型生成长链思维的能力,从而提升其推理能力
  • 一个自然的问题是:这与单纯增加模型规模相比如何?
  • 为了证明论文方法的有效性,论文使用相同数据集训练了两个不同规模的模型,并记录了强化学习训练期间所有检查点的评估结果和平均推理长度
  • 这些结果如图 8 所示
    • 较小模型初始性能不如较大模型,但较小模型通过优化后的长链思维可以达到与大规模模型相当的性能
    • 大规模模型通常表现出更好的 Token Efficiency
      • 这也表明,如果目标是追求最佳性能,扩展大规模模型的上下文长度具有更高的上限,并且更节省 Token
      • 但如果测试时计算有预算限制,训练较小模型并扩展上下文长度可能是可行的解决方案
Effects of using negative gradients
  • 论文研究了在设置中使用 ReST (2023) 作为策略优化算法的有效性
  • ReST 与其他 RL-based 的方法(包括论文的方法)的主要区别在于
    • ReST 通过拟合当前模型采样的最佳响应来迭代优化模型,而不会对错误响应施加负梯度惩罚
  • 如图 10 所示
    • 论文的方法在样本复杂度上优于 ReST,这表明引入负梯度显著提升了模型生成长链思维的效率
      • ReST 不会使用负梯度,详情见附录
    • 论文的方法不仅提高了推理质量,还优化了训练过程,以更少的训练样本实现了稳健的性能
      • 这一发现表明,策略优化算法的选择在论文的设置中至关重要,因为 ReST 与其他 RL-based 的方法在其他领域中的性能差距并不明显 (2023)
      • 论文的结果凸显了选择适当优化策略以最大化长链思维生成效果的重要性
      • 问题:这里强调的 优化策略/策略优化算法 是什么?
Sampling strategies
  • 本节进一步证明了第 2.3.4 节中提出的课程采样策略的有效性
  • 论文的训练数据集 \(\mathcal{D}\) 包含不同难度级别的问题
  • 论文的方法 :
    • 通过课程采样方法 ,论文首先使用 \(\mathcal{D}\) 进行预热阶段 ,随后仅专注于困难问题来训练模型
  • 基线方法 :
    • 采用均匀采样策略且无课程调整
  • 如图 9 所示,论文的结果清楚地表明,课程采样方法显著提升了性能
    • 这种改进可以归因于该方法逐步挑战模型的能力,使其能够更稳健地理解和解决复杂问题
    • 通过在初始通用阶段后专注于更困难的问题,模型能够更好地增强其推理和问题解决能力

附录 B:Pretraining

  • RL 的效率与基础模型的性能密切相关
  • 前沿模型如 Gemini (2024) 和 Llama (2024) 强调了预训练数据质量对于实现高性能的重要性
  • 但许多最新的开源模型并未完全公开其数据处理流程和配方,这为更广泛社区的理解带来了挑战
  • 尽管论文目前并未开源专有模型,但论文致力于全面公开数据流程和方法论
  • 本节主要关注多模态预训练数据配方,随后简要讨论模型架构和训练阶段

B.1 Language Data

  • 论文的预训练语料库旨在为训练 LLM 提供全面且高质量的数据,它涵盖五个领域:
    • 英语(English)
    • 中文(Chinese)
    • 代码(Code)
    • 数学与推理(Mathematics & Reasoning)
    • 知识(Knowledge)
  • 论文对每个领域采用复杂的过滤和质量控制机制,以确保训练数据的最高质量
  • 对于所有预训练数据,论文对每个数据源进行了严格的单独验证,以评估其对整体训练配方的具体贡献
  • 这种系统性评估确保了多样数据组成的质量和有效性
English and Chinese textual data
  • 论文开发了一个多维质量过滤框架,结合多种评分方法以减少个体偏见并确保全面的质量评估。论文的框架包括:
    • 1)基于规则的过滤(Rule-based filtering) :
      • 论文实施领域特定的启发式方法,移除问题内容,包括重复内容、机器翻译文本和低质量的网络抓取内容
      • 论文还过滤掉包含过多特殊字符、异常格式或垃圾模式的文档
    • 2)基于 FastText 的分类(FastText-based classification) :
      • 论文训练了专门的 FastText (2016; 2024) 模型,基于语言特征和语义连贯性识别内容质量
      • 这有助于识别具有自然语言流和正确语法结构的文档
    • 3)基于 Embedding 的相似性分析(Embedding-based similarity analysis) :
      • 使用文档 Embedding (2024),论文计算文档级相似性分数,以识别并移除近重复内容,同时保留语义上有价值的变体
      • 这种方法有助于保持训练语料库的多样性
    • 4)LLM-based 质量评估(LLM-based quality assessment) :
      • 参考 (2024),论文利用 LLM 根据连贯性、信息量和潜在教育价值对文档进行评分
      • 这种方法特别适用于识别简单方法可能忽略的细微质量指标
  • 每个文档的最终质量分数是这些单独分数的组合
  • 基于广泛的实证分析,论文实施了动态采样率,高质量文档在训练期间被上采样,而低质量文档被下采样
Code data
  • 代码数据主要包括两类
  • 对于从代码文件提取的纯代码数据,论文遵循 BigCode (2023; 2024) 的方法论,对数据集进行了全面的预处理
    • 首先,移除杂项语言,并应用基于规则的清理程序以提高数据质量
    • 随后,通过策略性采样技术解决了语言不平衡问题
      • 具体而言,Token 语言如 JSON、YAML 和 YACC 被下采样,而 32 种主要编程语言(包括 Python、C、C++、Java 和 Go)被上采样以确保平衡表示
  • 对于从各种数据源获取的文本-代码交错数据,论文使用基于 Embedding 的方法召回高质量数据
    • 这种方法确保了数据的多样性并保持了其高质量
Math & Reasoning data
  • 数学和推理数据组件对于开发强大的分析和问题解决能力至关重要
  • 数学预训练数据主要从公开可用的互联网资源中检索,包括网页文本和 PDF 文档 (2023)
  • 最初,论文发现通用领域的文本提取、数据清理过程和 OCR 模型在数学领域中表现出较高的假阴性率
  • 因此,论文首先开发了专门的数据清理程序和 OCR 模型,特别针对数学内容,旨在最大化数学数据的召回率
  • 随后,论文实施了两阶段数据清理过程 :
    • 1)使用 FastText 模型进行初步清理,移除大部分无关数据
    • 2)利用微调的语言模型进一步清理剩余数据,从而获得高质量的数学数据
Knowledge data
  • 知识语料库经过精心策划,以确保全面覆盖学术领域
  • 论文的知识库主要包括学术练习、教科书、研究论文和其他通用教育文献
  • 这些材料的大部分通过 OCR 处理数字化,为此论文开发了专有模型,针对学术内容(尤其是数学公式和特殊符号)进行了优化
  • 论文使用内部语言模型为文档添加多维度标签,包括:
    • 1)OCR 质量指标,用于评估识别准确性
    • 2)教育价值指标,衡量教学相关性
    • 3)文档类型分类(如练习、理论材料)
  • 基于这些多维度标注,论文实施了一个复杂的过滤和采样流程
    • 首先,文档通过 OCR 质量阈值进行过滤
      • 论文的 OCR 质量评估框架特别关注检测和过滤常见的 OCR 伪影,尤其是表明识别失败的重复文本模式
    • 其次,通过评分系统仔细评估每份文档的教育价值
      • 具有高教学相关性和知识深度的文档被优先考虑,同时在理论深度和教学清晰度之间保持平衡
      • 这有助于确保论文的训练语料库包含高质量的教育内容,能够有效促进模型的知识获取
    • 最后,为了优化训练语料库的整体组成,不同文档类型的采样策略通过大量实验经验性确定
      • 论文进行隔离评估,以识别对模型知识获取能力贡献最显著的文档子集
      • 这些高价值子集在最终训练语料库中被上采样
      • 为了保持数据多样性并确保模型的泛化能力,论文仔细保留其他文档类型的平衡表示
      • 这种数据驱动的方法帮助论文优化了聚焦知识获取与广泛泛化能力之间的权衡

B.2 Multimodal Data

  • 论文的多模态预训练语料库旨在提供高质量数据,使模型能够处理和理解来自多种模态(包括文本、图像和视频)的信息
  • 为此,论文还从五个类别中精选了高质量数据以构建语料库
    • 这五个类别是:字幕(captioning)、交错(interleaving)、OCR(光学字符识别)、知识(knowledge)和通用问答(general question answering)
  • 在构建训练语料库时,论文开发了多条多模态数据处理流程以确保数据质量,包括:过滤、合成和去重
    • 建立有效的多模态数据策略在联合训练视觉和语言时至关重要,因为它既保留了语言模型的能力,又促进了跨多种模态的知识对齐
  • 论文在本节中详细描述这些来源,分为以下类别:
Caption data
  • 论文的字幕数据为模型提供了基本的模态对齐和广泛的世界知识
  • 通过融入字幕数据,多模态 LLM 能够以高效的学习方式获取更广泛的世界知识
  • 论文整合了各种开源的中英文字幕数据集 (2022; 2024),并从多个来源收集了大量内部字幕数据
  • 但在整个训练过程中,论文严格限制合成字幕数据的比例,以减轻因真实世界知识不足而导致的幻觉风险
  • 对于通用字幕数据,论文遵循严格的质量控制流程,避免重复并保持高图像-文本相关性
  • 论文还在预训练期间改变图像分辨率,以确保视觉塔在处理高分辨率和低分辨率图像时均保持高效
Image-text interleaving data
  • 在预训练阶段,模型从交错数据中获益良多,例如:
    • 多图像理解能力可以通过交错数据提升;
    • 交错数据通常为给定图像提供详细知识;
    • 更长的多模态上下文学习能力也可以通过交错数据获得
  • 论文发现交错数据对保持模型的语言能力有积极贡献
    • 图像-文本交错数据是论文训练语料库的重要组成部分
    • 论文的多模态语料库考虑了开源的交错数据集 (2024; 2024),并利用教科书、网页和教程等资源构建了大规模的内部数据
  • 论文发现合成交错数据有助于多模态 LLM 保持文本知识的表现
    • 为了确保每张图像的知识得到充分学习,对于所有交错数据,除了标准的过滤、去重和其他质量控制流程外,论文还集成了数据重新排序程序,以保持所有图像和文本的正确顺序
OCR data
  • 光学字符识别(Optical Character Recognition, OCR)是一种广泛采用的技术,可将图像中的文本转换为可编辑格式
  • 强大的 OCR 能力对于更好地将模型与人类价值观对齐至关重要
    • 论文的 OCR 数据来源多样,包括开源和内部数据集,涵盖干净和增强的图像
  • 除了公开可用的数据外,论文还开发了大量的内部 OCR 数据集,涵盖多语言文本、密集文本布局、基于网络的内容和手写样本
  • 此外,遵循 OCR 2.0 (2024) 中概述的原则,论文的模型还配备了处理多种光学图像类型的能力,包括图形、表格、几何图表、流程图和自然场景文本
  • 论文应用了广泛的数据增强技术(如旋转、扭曲、颜色调整和噪声添加)以增强模型的鲁棒性
  • 最终,论文的模型在 OCR 任务中表现出高水平的熟练度
Knowledge data
  • 多模态知识数据的概念与之前提到的文本预训练数据类似,只是这里论文专注于从多样来源汇集全面的人类知识库,以进一步增强模型的能力
    • 例如,论文数据集中精心策划的几何数据对于培养视觉推理技能至关重要,确保模型能够理解人类创建的抽象图表
  • 论文的知识语料库遵循标准化的分类法,以平衡各个类别的内容,确保数据来源的多样性
    • 与纯文本语料库类似(从教科书、研究论文和其他学术材料中收集知识),多模态知识数据使用布局解析器和 OCR 模型处理这些来源的内容
    • 论文也纳入了来自互联网和其他外部资源的过滤数据
  • 由于论文的知识语料库的很大一部分来自基于互联网的材料,信息图表可能导致模型仅关注基于 OCR 的信息
  • 在这种情况下,仅依赖基本的 OCR 流程可能会限制训练效果
  • 为了解决这个问题,论文开发了一个额外的流程,以更好地捕获图像中 Embedding 的纯文本信息
General QA Data
  • 在训练过程中,论文观察到将大量高质量的问答数据集纳入预训练会带来显著的好处
  • 论文纳入了严格的学术数据集,涉及基础任务、表格/图表问答、网络代理和通用问答
  • 论文还编制了大量内部问答数据以进一步增强模型的能力
  • 为了保持难度和多样性的平衡,论文对通用问答数据集应用了评分模型和细致的手动分类,从而实现了整体性能的提升

B.3 Model Architecture

  • Kimi K 系列模型采用了 Transformer Decoder (2017) 的变体,集成了多模态能力以及架构和优化策略的改进,如图 11 所示
  • 这些进步共同支持了稳定的大规模训练和高效推理,专门针对大规模强化学习和 Kimi 用户的操作需求
  • 广泛的扩展实验表明,基础模型的大部分性能来自于预训练数据质量和多样性的提升
  • 关于模型架构扩展实验的具体细节超出了本报告的范围,将在未来的出版物中讨论

B.4 Training Stages

  • Kimi K1.5 模型的训练分为三个阶段:
    • 视觉-语言预训练阶段(vision-language pretraining stage)
    • 视觉-语言冷却阶段(vision-language cooldown stage)
    • 长上下文激活阶段(long-context activation stage)。每个阶段专注于特定的能力提升
Vision-language pretraining stage
  • 首先,仅在语言数据上进行训练,建立强大的语言模型基础
  • 随后,模型逐渐引入视觉-语言交错数据,获得多模态能力
    • 视觉塔最初在隔离状态下训练,不更新语言模型参数
    • 然后论文解冻语言模型层,最终将视觉-文本数据的比例提高到 30%
    • 最终的数据混合及其权重是通过在较小模型上进行的消融研究确定的
Vision-language cooldown stage
  • 在冷却阶段,模型继续使用高质量的语言和视觉-语言数据集进行训练,以确保卓越的性能
  • 通过实证研究,论文观察到在冷却阶段融入合成数据会带来显著的性能提升,尤其是在数学推理、知识任务和代码生成方面
  • 冷却数据集的英语和中文部分从预训练语料库的高保真子集中精选而来
  • 对于数学、知识和代码领域,论文采用混合方法:
    • 利用选定的预训练子集,同时通过专有语言模型生成内容进行增强
    • 论文利用现有的数学、知识和代码语料库作为源材料,通过拒绝采样技术生成问答对以保持质量标准 (2023; 2024)
    • 这些合成的问答对在纳入冷却数据集之前经过了全面验证
Long-context activation stage
  • 在长上下文激活阶段,K1.5 通过上采样的长上下文冷却数据进行训练,使其能够处理扩展序列并支持需要更长上下文的任务
  • 为了确保基础模型具备出色的长文本能力,论文上采样了长上下文数据,并在长上下文训练期间使用了 40% 的完全注意力数据和 60% 的部分注意力数据
    • 完全注意力数据(full attention data) :部分来自高质量的自然数据,部分来自合成的长上下文问答和摘要数据
    • 部分注意力数据(partial attention data) :来自冷却数据的均匀采样
  • RoPE 频率 (2024) 设置为 1,000,000
  • 在此阶段,论文通过将最大序列长度从 4,096 逐步增加到 32,768,最终达到 131,072,逐步扩展了长度激活训练

附录 C Evaluation Details

C.1 Text Benchmark

  • MMLU (2020)
    • 涵盖了 STEM、人文、社会科学等 57 个学科
    • 其难度范围从初级水平到高级专业水平,测试模型的世界知识和问题解决能力
  • IF-Eval (2023)
    • 一个用于评估大语言模型遵循可验证指令能力的基准
    • 包含 500 多个提示,例如“写一篇超过 800 字的文章”等
    • 由于版本变动,表 3 中报告的 IF-Eval 分数来自一个中间模型
    • 论文将根据最终模型更新分数
  • CLUEWSC (2020)
    • 是 CLUE 基准中的共指消解任务,要求模型判断句子中的代词和名词短语是否共指,数据来自中文小说
  • C-EVAL (2023)
    • 一个全面的中文评估套件,用于评估基础模型的高级知识和推理能力
    • 包含 52 个学科的 13,948 道选择题,涵盖四个难度级别

C.2 Reasoning Benchmark

  • HumanEval-Mul
    • 是 MultiPL-E (2022) 的一个子集
    • MultiPL-E 将 HumanEval 和 MBPP 基准扩展到 18 种编程语言,涵盖多种编程范式和流行度
    • 论文选择了 8 种主流编程语言(Python、Java、C++、C#、JavaScript、TypeScript、PHP 和 Bash)的 HumanEval 翻译版本
  • LiveCodeBench (2024)
    • 一个全面且无污染的基准,用于评估大语言模型在编码任务中的表现
    • 具有实时更新功能以防止数据污染,涵盖多种编码场景,提供高质量的问题和测试,并平衡问题难度
    • 论文使用 2408-2411 版本(v4)的问题测试短思维链模型,使用 2412-2502 版本(v5)的问题测试长思维链模型
  • AIME 2024
    • 包含 2024 年美国数学邀请赛(AIME)的竞赛题目
    • AIME 是一项仅限邀请的高中生数学竞赛,评估高级数学技能,要求扎实的基础和高水平的逻辑思维
  • MATH-500 (2023)
    • 一个综合性数学基准,包含 500 道涵盖代数、微积分、概率等主题的数学问题
    • 测试计算能力和数学推理能力,分数越高表明数学问题解决能力越强
  • Codeforces
    • 一个知名的在线评测平台,也是评估长思维链编码模型的流行测试平台
    • 为了在 Div2 和 Div3 竞赛中取得更高排名,论文使用 K1.5 长思维链模型生成的代码片段进行多数投票,测试用例也由同一模型生成
    • Codeforces ELO 评分的百分位数提取自 OpenAI Day12 Talk

C.3 Image Benchmark

  • MMMU (2024)
    • 包含从大学考试、测验和教科书中精心挑选的 11.5K 个多模态问题
    • 涵盖六大主要学术领域:艺术与设计、商业、科学、健康与医学、人文与社会科学以及技术与工程
  • MATH-Vision (MATH-V) (2024)
    • 一个精心策划的集合,包含 3,040 个高质量的视觉上下文数学问题,源自真实数学竞赛
    • 涵盖 16 个不同的数学学科,并按 5 个难度级别分级
    • 该数据集提供了全面多样的挑战,非常适合评估大语言模型在数学推理方面的能力
  • MathVista (2023)
    • 一个整合了多种数学和视觉任务的基准,要求参与者展示细粒度的深度视觉理解和组合推理能力以成功完成任务

附录:证明 \(\tau \to \infty\)时,\(\tau \log Z\)趋近于\(\pi_{\theta_i}\)下的期望Reward

  • 目标:证明当 \(\tau \to \infty\) 时,\(\tau \log Z\) 趋近于 \(\pi_{\theta_i}\) 下的期望 Reward
  • 已知
    $$ Z = \sum_{y’, z’} \pi_{\theta_i}(y’, z’ | x) \exp(r(x, y’, y^{*}) / \tau)$$
    • \(r(x, y’, y^{*})\) 为奖励函数
    • \(\pi_{\theta_i}(y’, z’ | x)\) 是参考策略下的概率分布
  • 对 \(Z\) 取对数并乘以 \(\tau\),得到
    $$ \tau \log Z = \tau \log\left(\sum_{y’, z’} \pi_{\theta_i}(y’, z’ | x) \exp(r(x, y’, y^{*}) / \tau)\right)$$
  • 当 \(\tau \to \infty\) 时,(泰勒展开的一阶近似)
    $$ \exp(r / \tau) \approx 1 + r / \tau$$
    • 补充 \(e^x\) 在 \(x=0\) 处泰勒展开完整式子:
      $$ e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!} = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots + \frac{x^n}{n!} + \cdots $$
  • 代入上式可得:
    $$
    \begin{align}
    \tau \log Z &\approx \tau \log\left(\sum_{y’, z’} \pi_{\theta_i}(y’, z’ | x) \left(1 + \frac{r}{\tau}\right)\right) \\
    &= \tau \log\left(1 + \frac{1}{\tau} \sum_{y’, z’} \pi_{\theta_i}(y’, z’ | x) r\right) \\
    \end{align
    }
    $$
  • 当 \(\tau \to \infty\) 时, 进一步使用 \(\log(1+x)\) 在 \(x=0\) 处的泰勒展开的一阶近似(\(\log(1+x) \approx x\)):
    $$ \ln(1+x) = \sum_{n=1}^{\infty} \frac{(-1)^{n+1} x^n}{n} = x - \frac{x^2}{2} + \frac{x^3}{3} - \frac{x^4}{4} + \cdots + \frac{(-1)^{n+1} x^n}{n} + \cdots $$
  • 于是有
    $$
    \begin{align}
    \tau \log Z &= \tau \log\left(1 + \frac{1}{\tau} \sum_{y’, z’} \pi_{\theta_i}(y’, z’ | x) r\right) \\
    &\approx \tau \cdot \frac{1}{\tau} \sum_{y’, z’} \pi_{\theta_i}(y’, z’ | x) r \quad (\text{因为} \text{当}\epsilon \to 0\log(1+\epsilon) \approx \epsilon ) \\
    &= \mathbb{E}_{\pi_{\theta_i} }[r]
    \end{align
    }
    $$
  • 因此,当 \(\tau \to \infty\) 时,\(\tau \log Z\) 趋近于 \(\pi_{\theta_i}\) 下的期望 Reward

附录:Mirror Descent 方法介绍

  • Mirror Descent是一种用于优化问题的迭代算法,特别适用于解决大规模和约束的凸优化问题
  • 它是梯度下降的一种推广,结合了梯度下降和凸分析中的 Bregman 距离,使得算法能够在不同的空间中进行优化
  • 基本思想 :
    • Mirror Descent通过将原始问题映射到一个更易处理的空间来进行优化
    • 它利用一个称为镜像映射(mirror map)的凸函数,将原空间中的点映射到镜像空间中
    • 在镜像空间中进行梯度更新 ,然后通过镜像映射的逆映射将更新后的点映射回原空间
  • 适用于处理具有特定结构的优化问题,如约束优化,特别适合高维空间中的优化问题
  • 具体计算流程 :
    • 初始化 :
      • 选择一个初始点 \( x_0 \)
      • 选择一个镜像映射函数 \( \psi \),通常是一个强凸函数
    • 迭代步骤(对于每个迭代 \( t \)):
      • 1)计算梯度 :计算当前点的梯度 \( \nabla f(x_t) \)
      • 2)镜像映射 :将当前点映射到镜像空间 \( z_t = \nabla \psi(x_t) \)
      • 3)梯度更新 :在镜像空间中进行梯度更新(其中 \( \eta \) 是学习率):
        $$ z_{t+1} = z_t - \eta \nabla f(x_t) $$
      • 4)逆镜像映射 :将更新后的点映射回原空间:
        $$ x_{t+1} = (\nabla \psi)^{-1}(z_{t+1}) $$
    • 终止条件 :
      • 根据问题的性质,可以选择固定迭代次数或根据梯度的变化情况来终止迭代
  • 问题:论文 2.3.2 节中讲的优化方法似乎和这个 OPMD 没什么直接关系?

附录:CYaRon 介绍

  • CYaRon 是一款由 Luogu 开发的用于生成随机测试数据的 Python 库,其全称为“Yet Another Random Olympic-informatics”
  • CYaRon 包含很多功能:
    • 随机图生成 :支持简单图、非简单图、有向图、无向图以及带权图和无权图的生成,可以满足不同算法对图结构测试数据的需求
    • 随机树生成 :能够生成链状、随机树或菊花图等不同形态的树,并可设定树的强度,方便对树相关的算法进行测试
    • 多维向量生成 :支持生成允许相同或不同的多维向量,还能快速生成数量可达(10^6)的数列,为数据结构和算法的测试提供了大量的向量和数列数据
    • 函数解析生成数列 :根据给定的函数生成对应的数列,这对于测试一些基于数学函数规律的算法非常有帮助
    • 随机多边形生成 :可以生成随机多边形,并计算其面积和周长,适用于几何算法的测试
    • 字符串、单词、句子的生成 :从字典中生成随机的字符串、单词和句子,可用于自然语言处理相关算法的测试
  • 安装方法 :通常使用Python的包管理工具pip进行安装,在命令行中输入pip install cyaron,即可将CYaRon下载并安装到Python环境中
  • 使用示例
    • 生成随机整数 :使用Random.randint方法,如cyaron.Random.randint(1, 100)可以生成1到100之间的随机整数
    • 生成随机浮点数 :通过Random.uniform方法,例如cyaron.Random.uniform(1.0, 10.0)可生成1.0到10.0之间的随机浮点数
    • 生成随机字符串 :利用Random.string方法,如cyaron.Random.string(8)能生成一个长度为8的随机字符串
    • 生成随机日期 :使用Random.date方法,如cyaron.Random.date("2000-01-01", "2023-12-31")可以生成2000年1月1日到2023年12月31日之间的随机日期
  • 应用场景 :CYaRon主要应用于信息学奥林匹克(OI)等编程竞赛中,帮助出题者快速、便捷地生成高质量的测试数据,以检验参赛选手的算法正确性和效率

附录:ReST(Reinforced Self-Training)方法介绍

  • ReST 是指强化自训练(Reinforced Self-Training)算法(Google DeepMind 2023 年提出),用于语言模型的对齐
  • ReST 的核心原理是 将语言模型的对齐问题视为一个不断增长的Batch RL(离线强化学习)问题 ,通过离线强化学习方法,交替进行数据集增长(Grow)和策略改进(Improve)两个步骤,来高效地调度强化学习过程中的策略生成和更新
  • ReST 的训练步骤(交替执行一下步骤) :
    • Grow 步骤 :
      • 从当前策略 \(\pi_{\theta}\) 中采样出许多输出序列,以此扩充训练数据集,相当于强化学习里的行动或数据生成步骤
      • 即对于 \(x \sim D\),有 \(y \sim \pi_{\theta}(y|x)\),从而创建出一个轨迹增强数据集 \(D_g\)
    • Improve 步骤 :
      • 用评分函数给扩充后的数据集进行排序和筛选
        • 通常会根据人类偏好提前训练一个奖励模型作为评分函数(也可以在中途继续优化奖励模型)
      • 定义一个过滤函数,只保留奖励高于特定阈值 \(\tau\) 的样本,再用监督学习损失(或离线强化学习损失)在筛选后的数据上微调当前最优策略
        • 注意:这里相当于仅仅保留了正样本,并没有对负样本施加惩罚
      • 在多次执行 Improve 步骤时,会不断提高过滤阈值,且每次微调新策略时,都会在前一个策略的基础上,用更低的学习率进行,以保证在固定数据集 \(D_g\) 上实现策略的优化
  • ReST 在多个 Improve 步骤中利用了 Grow 步骤的输出结果,不像在线强化学习那样需要在模型训练过程中多次采样新样本,大大减轻了计算负担
  • 同时,在ReST 中,新的训练数据是从优化后的策略里采样得到的,所以策略质量不受原始数据的束缚
    • 在离线强化学习里,策略的好坏常常受原始数据集质量的限制
  • ReST 算法简单、运行稳定,需要调整的超参数也很少

AGI——张祥雨访谈笔记-多模态大模型

  • 参考链接:
    • 原始音频:102. 和张祥雨聊,多模态研究的挣扎史和未来两年的2个“GPT-4时刻”, 20250603
    • 完整版文字稿:张小珺Jùn商业访谈102期 | 对话张祥雨(完整文字稿) - aaronxic的文章 - 知乎
    • 一些解读:【大模型 40】张祥雨访谈 多模态大模型研究的挣扎史和未来 - hzwer 黄哲威的文章 - 知乎

整体总结

  • 整个访谈主要围绕 AGI 的实现路径展开,主要内容是 LLM,多模态大模型及他们相关的推理
  • 张祥雨是 ResNet 的二作,是最早从事 CV 的一群人
  • 本文主要是总结一下访谈内容的一些大事件发展的时间线、张祥雨的核心观点
  • 注:本文的梳理借助了 AI 辅助生成

张祥雨的学术与研究经历相关总结

  • 2009年 :
    • 数据 :李飞飞团队提出 ImageNet 数据集,包含 120多万图像,为计算机视觉(CV)研究提供了大量数据支持
    • 理解:自此数据已经相对充足,缺的是模型复杂度和算力
  • 2012年 :
    • 模型 :AlexNet 在 ImageNet 图像识别竞赛中取得显著成功,其关键在于对模型、数据和算力的规模化应用
    • 算力 :英伟达的 CUDA 技术在此时性能得到大幅提升,为深度学习的算力需求提供了有力支撑
  • 2012-2016年 :
    • 将模型做大 :张祥雨读博期间,专注于模型规模化(model scaling)研究,致力于将模型做得更大,包括增加宽度、深度和分辨率等方面
    • 理解:在视觉领域存在分辨率,其他领域更多的是宽度和深度
  • 2016年 :
    • ResNet的诞生 :张祥雨与何恺明、孙剑等提出残差网络(ResNet),解决了模型深度增加时效果下降的问题,使网络层数可提升至几十层、上百层甚至上千层
    • 张祥雨认为此时模型规模化问题在当时已基本解决,毕业后加入旷视开始研究小模型
    • 理解:张祥雨认为,对于大模型来说,模型架构(网络结构)不是很重要,最重要的是大方向(比如 ResNet 或 LLM 的自回归等);对于小模型来说,倒是需要一定的模型架构(网络结构)的优化,否则效果可能差距很大
      • 个人理解这种区别主要来源于小模型的拟合能力有限,需要设计架构适应任务,大模型拟合能力强,对网络结构要求不高,只要有足够好的数据就可以
  • 2017-2018年 :
    • 把模型做小 :张祥雨在旷视研究小模型,后转向神经网络架构搜索(NAS),旨在利用自动化手段设计能在特定硬件上高效运行的模型
    • 理解:这里是为了应用
  • 2019年 :
    • 张祥雨提出SPOS(Single Path One-Shot)工作,可在特定硬件上以较小代价搜索出在目标数据集上效果最佳的模型
    • 张祥雨团队目标重新转向做大模型,此时难点在于数据规模化(data scale), CV 领域缺乏类似自然语言处理中 Bert 和 GPT 的突破
  • 2020年 :
    • Vision Transformer(ViT)系列出现,将 Transformer 架构引入 CV 领域并取得成功
    • 学术界开始尝试将自然语言处理方法迁移到 CV ,如 iGPT、BEiT 等
    • 理解:此时的迁移吃到了一波红利,相当于踩着 LLM 的路在走
  • 2021年底 :
    • 张祥雨分析早期对比学习在大模型上不奏效的原因,认为其学到的不变性是手工设计而非数据驱动,同时对 Masked Image Modeling(MIM)的上限表示谨慎乐观
  • 2022年初 :
    • 张祥雨发表观点文章,指出 MIM 没有明显的规模化效应(scaling law),随后该领域研究逐渐减少
    • 理解:目前来看走这条路的人也已经越来越少
  • 2022年 :
    • 张祥雨受 Jason Wei 关于思维链和涌现性的论文启发,对纯视觉领域研究产生悲观情绪,认为静态图像在生成、理解和人类对齐方面存在割裂,开始转向多模态研究
    • 张祥雨构思利用视觉和语言的对齐关系开展多模态研究,短期目标基于图文混排数据,长期目标关注视频和具身系统
  • 2023年 :
    • 张祥雨团队开发第一代多模态模型 Step-1,将数据组织成图文混排形式,文字和图像均进行 Token 化处理,图像生成外挂预训练的 Diffusion 模块
      • 该模型图像理解能力强,但生成效果差,且生成部分对理解部分影响小
    • 张祥雨团队在 2023年底完成 Step-1 模型,参数约 100B+,随后在 2024 年初启动更大的 Step-2 模型,参数达万亿(1000B+),激活值 200B+
      • 但训练中发现数据不足导致效果不佳,且模型在数学推理能力上出现先升后降的现象
  • 2024年 :
    • 张祥雨团队发现大模型在数学推理能力上存在先上升后平缓再下降的现象,分析认为这是 Next Token Prediction(NTP)范式的本质缺陷导致,模型在训练中倾向于跳步,而跳步在复杂问题中易出错(详细理解见下文:观点3)
    • 张祥雨团队尝试通过 RL 解决大模型数学推理问题,但收益有限,直到 o1 模型出现,其通过引入反思等思维链模式,大幅提升了模型推理能力
    • 张祥雨团队在视觉生成与理解一体化研究中遇到困难,发现生成部分可控性差,后受语言模型启发,开启视觉空间上的 COT(思维链)研究,尝试通过在图像上进行圈点批注等操作实现视觉推理,但生成数据泛化能力不足
      • 理解:这里张祥雨团队尝试了生成图片的 COT 数据给模型,但是效果不好,最终分析时由于 RL 本身很难带来新的东西,预训练中没有见过的推理能力很难通过 RL 训练出来;也就是说预训练才是学知识的,RL 是在引导模型把预训练见过的知识用起来
  • 2025年 :
    • 张祥雨团队看到 Gemini 和 GPT-4o 模型在图像生成可控性上的进展,认为通过清洗数据和控制任务难度,可实现简单任务的高可控生成,并计划基于此构建生成与理解一体化模型
    • 张祥雨认为多模态推理的 “GPT4时刻” 比较乐观,认为一两年内可能到来;此外,自主学习和在线学习可能在两年内取得突破
      • 理解:理由是因为大家都在做这个方向

多模态与 AGI 发展相关

  • 2022年底 :ChatGPT 发布,展示了大模型的强大能力,改变了人们对大模型的看法,大幅推动了 AGI 领域的发展
  • 2023年 :
    • Gemini-1.0 和 GPT4V 等多模态模型发布,但在图像生成与理解一体化方面未取得实质性突破,仍通过外挂生成模块实现
    • 业界开始关注多模态模型的发展,但对其难度估计不足
  • 2024年 :
    • o1 模型出现,其基于 RL 和思维链模式,在推理能力上取得显著突破,被视为类似 “GPT时刻” 的进展
    • 张祥雨团队发现多模态模型在生成与理解融合上的困难,开始探索视觉空间的 COT 和视频数据的利用
    • 理解:访谈中提到,单独训练理解模型和生成模型后,融入两者做不到 1+1>2 的效果
  • 2025年 :
    • 4o 最新版在图像生成可控性上表现出色,与语言模型融合较好,为多模态发展提供了新的方向
    • 业界对多模态推理、自主学习和在线学习等领域的研究持续深入,认为这些是实现 AGI 的关键步骤

观点1:关于模型规模化(Scaling)

  • 核心观点 :模型规模化是推动深度学习发展的重要动力,包括模型、数据和算力的规模化。在不同阶段,规模化的难点不同,如早期模型规模化是关键,后期数据规模化成为瓶颈
  • 论点支撑 :
    • AlexNet 的成功源于在 2012 年实现了模型、数据和算力的合理规模化
    • ResNet 解决了模型深度规模化的问题,使模型层数得以大幅增加
    • 2019年 后,自然语言处理领域通过自监督学习实现了数据规模化,而 CV 领域在数据规模化上进展缓慢,缺乏类似 Bert 和 GPT 的突破
      • 理解:CV 领域不同于 NLP 领域,因为 NLP 领域的语言数据都是人类创造的, 而 CV 领域的图片本身就在那里(不含有思维和人类思想),难以通过自回归实现数据规模化
    • 大模型训练中,数据质量和数量至关重要,2021年 国内大模型效果不佳的原因之一是数据不足,导致模型训练不充分

观点2:关于多模态研究

  • 核心观点 :多模态是实现AGI的重要路径,但目前多模态模型在生成与理解一体化上仍存在困难,需要解决数据、架构和算法等多方面的问题
  • 论点支撑 :
    • 静态图像在生成、理解和人类对齐方面存在割裂,无法像自然语言那样形成自闭环,因此需要结合语言等其他模态
      • 理解:自然语言是人类创造的,天然带着人类的偏好和反馈,但是图片是天然就有的;
      • 理解:自闭环的本质是 “认知逻辑的符号化自洽” ,即像自然语言那样,在生成、理解及与人类意图对齐的过程中,能够形成一套完整、自洽且相互关联的系统,各环节之间可实现高效协同与反馈,无需依赖外部过多的额外信息或干预即可完成从输入到输出的连贯处理
    • 早期多模态模型尝试将图像和文字统一处理,但生成效果差,生成与理解部分相互独立,未实现真正融合
    • 视觉生成需要类似语言模型的 COT ,但目前视觉 COT 仍处于初级阶段,生成数据泛化能力不足
    • 视频数据蕴含更丰富的信息,是多模态研究的长期方向,但数据清洗和与语言模态对齐是难点
    • Gemini 和 4o 模型在图像生成可控性上的进展表明,通过数据清洗和任务限制,可实现简单任务的多模态融合,为多模态的 “GPT4时刻” 奠定基础

观点3:关于推理能力与Next Token Prediction(NTP)范式

  • 核心观点 :NTP 范式是支撑当前大模型的基础算法,但在推理能力,尤其是数学推理能力上存在本质缺陷,导致大模型在复杂推理任务上表现不佳
  • 论点支撑 :
    • NTP 的本质是联合概率建模和数据压缩,其优化目标是最大化压缩率,而非直接优化推理任务的正确性
    • 大模型在训练中倾向于跳步,以提高压缩率,但跳步在复杂数学问题中易出错,导致推理能力下降
    • 小模型由于能力有限,无法拟合复杂函数,只能老老实实地一步步推理,在简单数学问题上正确率较高
    • RL 可在一定程度上缓解 NTP 的缺陷,但效果有限,o1 模型通过引入反思等思维链模式,激发了模型的推理能力,是对 NTP 范式的重要改进
  • 理解:访谈中提到,张祥雨认为大模型容易跳步的原因是因为模型够大,能够记住预训练的分布(数据中本就存在部分跳过的场景,小模型不够大,反而无法跳过中间步骤);大模型的这种跳步有一定概率会失败,特别在数学推理需要多步的场景,容易导致大模型一个地方错了,后面全错

观点4:关于自主学习与在线学习

  • 核心观点 :自主学习和在线学习是实现 AGI 的关键步骤,能够使模型在真实环境中自主探索、学习和进化,解决当前模型依赖人工标注和环境不可规模化的问题
  • 论点支撑 :
    • 当前的RL方法依赖人工定义目标和环境,缺乏内生驱动力,无法像人类一样自主学习
    • 自主学习需要解决从自然语言等非结构化反馈中获取信息、无限长上下文建模和内生奖励设计等问题
    • 在线学习可使模型在真实环境中持续改进,与环境动态交互,提高模型的适应性和泛化能力
    • 自主学习和在线学习的突破可能在两年内实现,将推动 AGI 向更高水平发展
  • 理解:
    • 自主学习的定义:能够像人类一样,主动地从环境中获取信息、学习新知识,并将其融入到已有的知识体系中,以不断提升自身的智能水平和适应能力
      • 自主学习不仅包括对数据的学习,还涉及到对学习策略的自我优化,能够根据不同的任务和环境,自主地选择合适的学习方法和算法
      • 注:自主学习的核心是无需人工对每个具体的知识点进行详细标注和指导
    • 在线学习的定义:在动态的环境中,能够实时地从新出现的数据流中学习,并不断调整和更新自身的模型和策略,以应对环境的变化和新的任务要求

观点5:关于架构与算法的关系

  • 核心观点 :架构服务于算法和系统,算法的突破是推动 AGI 发展的核心动力,而不是单纯的架构创新
  • 论点支撑 :
    • ResNet 的成功源于解决了模型深度增加时的梯度问题,是算法和训练方法的创新,而非架构本身的独特性
    • Linear Attention 等架构改进是为了适应 NTP 范式的并行化需求,而非本质性突破
    • o1 模型的成功源于思维链模式和 RL 算法的应用,而非架构的变化
    • 未来 AGI 的发展将依赖算法的创新,如自主学习算法,而架构将根据算法需求进行优化
  • 理解:
    • 这里所说的架构是指模型架构(即神经网络之间的连接方式等),而算法在这里则是指一种广泛通用的方法(比如 NTP 范式、ResNet等)

观点6:关于长上下文(Long Context)

  • 核心观点 :长上下文在应用中重要,但当前 Transformer 架构在长上下文建模上存在效率低、易受干扰等问题,需要借鉴人类记忆机制,采用分层记忆和多模块协作的方式解决
  • 论点支撑 :
    • 人类记忆分为短期记忆、中期记忆和长期记忆,具有分层和选择性遗忘的特点,而 Transformer 的长上下文建模缺乏类似机制,导致效率低下
    • 长上下文会导致模型注意力涣散,干扰后续推理,解决方法包括采用多模型协作、分层记忆和任务驱动的上下文裁剪等
    • 多 Agent 协作和思维链扩展可有效减少对长上下文的依赖,实现更高效的推理
  • 理解:
    • 访谈中提到,这里所说的多 Agent 其实是类比于人类不同脑区负责不同功能的做法,使用一个上层的脑区来负责切分关注模块,下层的脑区仅需要理解较短的上下文即可
    • 访谈中还提到,类似于这种方法,使用 RL 来训练,可以实现端到端训练

观点7:RL 只能激发预训练阶段学到的知识

  • 核心观点 :RL 只能激发预训练阶段学到的知识,不能给模型输入新的知识
  • 理解:实际上这个已经成为了大家的共识了

NLP——A-Survey-on-Post-Training-of-LLMs

注:本文包含 AI 辅助创作

  • 参考链接:
    • 可参考:(PoLMs Survey)A Survey on Post-training of Large Language Models, arXiv 20250308, HUST
    • 又名(增加了开源地址):Large Language Models Post-training: Surveying Techniques from Alignment to Reasoning, arXiv 20250521, HUST
    • 开源地址:github.com/Mr-Tieguigui/LLM-Post-Training

Paper Summary

  • 重点说明:
    • 论文首次全面综述了后训练语言模型(Post-training Language Model, PoLM) ,系统追溯了从 2018 年 ChatGPT 的对齐起源到 2025 年 DeepSeek-R1 的推理里程碑的发展轨迹
    • 论文评估了广泛的技术(即微调、对齐、推理、效率以及集成与适配)
    • 论文的分析强调,后训练语言模型显著提升了大语言模型的能力,从最初的对齐创新发展到复杂的推理框架;
    • 揭示了一些持续存在的挑战,包括偏差持久性、计算可扩展性以及依赖上下文的伦理对齐
  • LLM 的出现从根本上改变了自然语言处理领域,使其在从对话系统到科学探索等多个领域都变得不可或缺,但 LLMs 的预训练架构在特定场景中往往存在局限性,包括
    • 推理能力有限(restricted reasoning capacities)
    • 伦理不确定性(ethical uncertainties)
    • 特定领域性能欠佳(suboptimal domain-specific performance)
  • 这些挑战需要先进的 后训练语言模型(PoLM) 来解决,例如 OpenAI-o1/o3 和 DeepSeek-R1(统称为大型推理模型,Large Reasoning Model, LRM)
  • 论文首次对 PoLM 进行了全面综述,系统追溯了其在五个核心范式中的演变:
    • 微调(Fine-tuning) ,用于提高特定任务的准确性;
    • 对齐(Alignment) ,确保伦理一致性并与人类偏好对齐;
    • 推理(Reasoning) ,在奖励设计面临挑战的情况下推进多步推理;
    • 效率(Efficiency) ,在复杂性不断增加的情况下优化资源利用;
    • 集成与适配(Integration and Adaptation) ,在解决一致性问题的同时跨多种模态扩展能力
  • 从 2018 年 ChatGPT 的基础对齐策略到 2025 年 DeepSeek-R1 在推理方面的创新进展,论文阐述了 PoLM 如何利用数据集来减轻偏见、深化推理能力并增强领域适应性
  • 论文的贡献包括:
    • 对 PoLM 演变的开创性综合分析
    • 对技术和数据集进行分类的结构化分类法
    • 强调 LRM 在提高推理能力和领域灵活性方面作用的战略议程
  • 作为首个此类范围的综述,论文整合了近期 PoLM 的进展,并为未来研究建立了严谨的理论框架,促进在精度、伦理稳健性和跨科学与社会应用的多功能性方面表现卓越的 LLM 的发展

Introduction and Discussion

  • 人们普遍认为,真正的智能赋予论文推理能力、检验假设的能力以及为未来可能发生的事情做准备的能力

    It is generally agreed upon that authentic intelligence equips us with reasoning capabilities, enables us to test hypotheses, and prepares for future eventualities. —— Jean Khalfa 《WHAT IS INTELLIGENCE(1994)》

  • 语言模型(Language Models, LMs)(2018, 2018)代表了旨在建模和生成人类语言的复杂计算框架
    • 这些模型通过使机器能够以接近人类认知的方式理解、生成和与人类语言交互,彻底改变了自然语言处理领域(2011)
  • 与通过与环境互动和接触语境自然习得语言技能的人类不同,机器必须经过广泛的、数据驱动的训练才能发展出类似的能力(2025)
    • 这带来了重大的研究挑战,因为要使机器理解和生成人类语言,同时进行自然的、符合语境的对话,不仅需要大量的计算资源,还需要完善的模型开发方法(2024, 2023)
  • 以 GPT-3(2020)、InstructGPT(2023)和 GPT-4(2023)为代表的 LLMs 的出现,标志着语言模型进化的一个变革性阶段
    • 这些模型以其庞大的参数规模和先进的学习能力为特点,旨在捕捉海量数据集中的复杂语言结构、语境关系和细微模式
    • 这使大语言模型不仅能够预测后续词语,还能在包括翻译、问答和摘要在内的广泛任务中生成连贯的、与语境相关的文本
    • 大语言模型的发展引发了极大的学术兴趣(2024, 2023),其发展可分为两个主要阶段:预训练和后训练
  • 预训练 :预训练的概念源于计算机视觉(Computer Vision, CV)任务中的迁移学习(2023)
    • 其主要目标是利用大量数据集开发一个通用模型,以便轻松微调用于各种下游应用
    • 预训练的一个显著优势是它能够利用任何未标记的文本语料库,从而提供丰富的训练数据源
    • 然而,早期的静态预训练方法,如神经网络语言模型(Neural Network Language Models, NNLM)(2000)和Word2vec(2013),难以适应不同的文本语义环境,这促使了像 BERT(2018)和 XLNet(2019)这样的动态预训练技术的发展
    • BERT 通过利用 Transformer 架构和在大规模未标记数据集上采用自注意力机制,有效解决了静态方法的局限性
      • BERT 确立了“预训练和微调”的学习范式,启发了众多后续研究,这些研究引入了多种架构,包括 GPT-2(2019)和 BART(2019)
  • 后训练 :后训练指的是在模型经过预训练后采用的技术和方法,旨在完善模型,使其适应特定任务或用户需求
    • 随着拥有 175B 参数的 GPT-3(2020)的发布,后训练领域的兴趣和创新显著激增
    • 各种旨在提高模型性能的方法应运而生,包括:
      • 微调(2020, 2021):利用标记数据集或特定任务数据调整模型参数;
      • 对齐策略(2022, 2022, 2023):优化模型以更好地符合用户偏好;
      • 知识适应技术(2022, 2021):使模型能够整合特定领域的知识;
      • 推理改进(2024, 2024):增强模型进行逻辑推理和决策的能力
    • 以上这些技术统称为后训练语言模型(Post-training Language Models, PoLMs),促成了GPT-4(2023)、LLaMA-3(2024)、Gemini-2.0(2025)和 Claude-3.5(2024)等模型的开发,标志着大语言模型能力的显著进步
    • 然而,后训练模型通常难以在不重新训练或大幅调整参数的情况下适应新任务 ,这使得后训练模型的开发成为一个活跃的研究领域
  • 如前所述,预训练语言模型(Pre-trained Language Models, PLMs)主要旨在提供通用知识和能力,而后训练语言模型则专注于使这些模型适应特定任务和需求
    • 最新的大语言模型 DeepSeek-R1(2025)就是这种适应的一个显著例子,它展示了后训练语言模型在增强推理能力、符合用户偏好以及提高跨领域适应性方面的进化(2024)
    • 此外,开源大语言模型(如 LLaMA(2023)、Gemma(2024)和 Nemotron(2024))和特定领域的大型数据集(如 PromptSource(2022)和 Flan(2023))的日益普及,正促使学术研究人员和行业从业者开发后训练语言模型
    • 这一趋势凸显了人们越来越认同后训练语言模型领域中定制化适应的重要性
  • 在现有文献中,预训练语言模型已被广泛讨论和综述(2023, 2023, 2023, 2020),而后训练语言模型却很少被系统地综述
    • 为了推进这些技术,有必要彻底审视现有研究,以确定关键挑战、差距和进一步完善的机会
    • 本综述旨在通过为不断发展的后训练研究提供一个结构化框架来填补这一空白
  • 如图1所示,它探讨了后训练的多个阶段,特别关注从 ChatGPT 到 DeepSeek 所采用的阶段
    • 这些技术涵盖了广泛的方法,包括微调、大语言模型对齐、推理增强和效率改进
    • 图中的蓝色部分专门突出了 DeepSeek 所应用的后训练方法集,强调了有助于其在适应用户偏好和特定领域需求方面取得成功的创新策略

Major Contributions

  • 论文是第一篇关于后训练语言模型的全面综述,对该领域的最新进展进行了彻底、结构化的探索
  • 以前的综述通常集中在大语言模型开发的特定方面,如偏好对齐(2024)、参数高效微调(2024)和大语言模型的基础技术(2025),但它们主要集中在狭窄的子主题上
  • 相比之下,本综述采用整体方法,全面回顾了后训练中常用的核心技术,并对其进行了系统分类
  • 此外,论文研究了对这些方法至关重要的数据集和实际应用,如图2所示,并确定了开放挑战和未来研究的有前景的方向
  • 本综述的主要贡献如下:
    • 全面的历史综合(Comprehensive Historical Synthesis) :论文首次深入综合了后训练语言模型,追溯了它们从 ChatGPT 最初的 RLHF 到 DeepSeek-R1 创新的冷启动强化学习方法的演变
      • 这种综合涵盖了关键技术(即微调、对齐、推理、效率以及整合与适应),分析了它们的发展和相关挑战,如计算复杂性和伦理考虑
      • 通过将这一进展作为一个连贯的叙述呈现,并辅以必要的参考文献,论文为研究人员提供了近年来后训练演变的全面概述,作为该领域的基础资源
    • 结构化分类法和框架(Structured Taxonomy and Framework) :论文引入了一个结构化分类法(如图2所示),将后训练方法分为五个不同类别,并将数据集组织为七种类型,同时将应用划分为专业、技术和交互领域
      • 该框架阐明了这些方法的相互关系和实际意义,提供了对其发展的系统视角
      • 通过提供明确定义的类别和分析见解,论文提高了新手和专家的可访问性和理解度,建立了一个全面的指南,用于驾驭后训练研究的复杂性
    • 未来方向(Future Directions) :论文强调了新兴趋势,特别是大型推理模型(Large Reasoning Models, LRMs)的兴起,如 o1(2024)和 DeepSeek-R1(2025),它们利用大规模强化学习突破推理的界限
      • 论文强调,持续进步对于进一步提高推理能力和领域适应性至关重要
      • 论文的分析确定了关键挑战,包括可扩展性限制、伦理对齐风险和多模态整合障碍
      • 论文提出了研究途径,如自适应强化学习框架和公平感知优化
      • 这些方向旨在推动后训练向前发展,确保大语言模型在精度、可信度方面达到更高水平,以满足未来的需求

Organization

  • 本综述被系统地组织起来,以全面探讨后训练语言模型,涵盖其历史演变、方法、数据集、应用和未来轨迹
  • 第2节提供了后训练语言模型的历史概述
  • 第3节研究微调,包括
    • 3.1节中的 SFT
    • 3.3节中的强化微调(Reinforcement Fine-Tuning, RFT)
  • 第4节讨论对齐,包括
    • 4.1节中的 RLHF
    • 4.2节中的 RLAIF(Reinforcement Learning from AI Feedback, RLAIF)
    • 4.3节中的直接偏好优化
  • 第5节关注推理,包括
    • 5.1节中的 Self-Refine 方法
    • 5.2节中的用于推理的强化学习
  • 第6节综述提高效率的方法,包括
    • 6.1节中的模型压缩
    • 6.2节中的参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)
    • 6.3节中的知识蒸馏
  • 第7节研究整合与适应,探讨多模态方法、领域适应和模型合并
  • 第8节回顾后训练中使用的数据集
  • 第9节探讨大语言模型的应用
  • 第10节评估开放问题和未来方向
  • 第11节以总结和研究展望结束

Overview

History of PoLMs

  • LLM 的发展是 NLP 领域的关键篇章,而后训练方法则是推动其从通用预训练架构向专门化、任务自适应系统演进的重要催化剂
  • 本节将阐述后训练语言模型(Post-training Language Models, PoLMs)的历史轨迹,追溯其从以 BERT(2018)和 GPT(2018)为代表的预训练里程碑,到以当代模型(如 o1(2024)和 DeepSeek-R1(2025))为体现的复杂后训练范式的发展过程
  • 如图3所示,这一进程反映了从建立广泛语言能力到增强任务特定适应性、伦理对齐、推理复杂性和多模态整合的转变,标志着大语言模型能力的变革之旅
  • 现代后训练语言模型历史的开端与 2018年 的预训练革命相契合,以 BERT(2018)和 GPT(2018)的发布为标志,它们重新定义了自然语言处理的基准
    • BERT 的双向自编码框架利用 Transformer 架构和自注意力机制,在问答等任务中出色地捕捉了上下文相互依赖关系
    • GPT 的自回归设计则优先考虑生成连贯性,为文本生成树立了先例
  • BERT 和 GPT 模型确立了“预训练和微调”范式,随后在 2019年 通过 T5(2019)得到改进,T5 将各种任务统一在文本到文本框架下,促进了多任务学习,并为后训练进展奠定了坚实基础
  • 2020年起,后训练语言模型的格局开始发生重大演变,这是因为人们越来越需要使预训练模型能够凭借有限的数据高效适应各种任务
    • 早期创新(如 Prefix-Tuning(2021)和 Prompt-Tuning(2021))引入了轻量级适应策略,通过修改模型输入而非重新训练整个架构,实现了多任务灵活性,从而节省了计算资源并扩大了适用性
    • 这一时期还出现了向以用户为中心的优化的关键转变 ,2021年 RLHF(Reinforcement Learning from Human Feedback, RLHF)(2022)问世,该技术利用人类评估使模型输出与主观偏好保持一致,提高了对话场景中的实际效用
    • 到 2022年 ,RLHF 随着 PPO(2017)的采用而成熟,改进了对齐稳定性并减轻了对噪声反馈的过拟合
    • 2022年末 ,ChatGPT(2023)的发布集中体现了这些进步,展示了 RLHF 在创建响应迅速、与用户对齐的大语言模型方面的变革潜力,并推动了后训练语言模型研究的激增
    • 同时, CoT 提示(2022)作为一种推理增强策略出现,鼓励模型在复杂任务中阐明中间步骤,从而提高了逻辑推理和问题解决领域的透明度和准确性
  • 2022年 至 2024年 间,后训练语言模型(PoLMs)向解决领域特异性(domain specificity)、伦理稳健性(ethical robustness)和多模态整合(multi-modal integration)等方向多元化发展,反映出对大语言模型优化的日益细致的方法
    • 领域适应技术(如检索增强生成(Retrieval-Augmented Generation, RAG)(2020))应运而生,用于整合外部知识库,无需完全重新训练就能为专业领域提供富含上下文的输出,这对于需要最新信息的专业应用而言是一项关键进步
    • 伦理对齐方面的努力也在加强,2023年 直接偏好优化(Direct Preference Optimization, DPO)(2024)通过直接根据人类偏好优化模型输出来简化 RLHF,绕过了中间奖励建模,以提高效率和稳健性
    • 同时,对多模态能力的追求也获得了关注,像 PaLM-E(2023)和 Flamingo(2022)等模型开创了视觉-语言整合,随后 BLIP-2(2023)和 LLaVA(2023)将这些努力扩展到医学成像等更广泛的领域
    • 效率创新与这些发展并行,特别是通过混合专家(Mixture of Experts, MoE)架构实现;
      • 谷歌 2022年 的 Switch-C Transformer(2022)引入了 1.6T 参数的稀疏激活,分布在 2048 个专家中,而 Mixtral(2024)完善了这一范式,平衡了可扩展性和性能
    • 这一时期的推理增强(如自我对弈(Self-play)(2024)和结合思维链的蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS)(2021))通过模拟迭代推理路径进一步增强了大语言模型的决策能力,为以推理为重点的高级模型奠定了基础
  • 随着混合专家模型的兴起,一项重大的架构进步出现了,与传统的密集架构不同,混合专家模型通过动态激活选择性参数子集,在优化计算效率的同时适应了庞大的参数规模
    • 这一范式由谷歌 2022年 的 Switch-C Transformer(2022)开创,其特点是 1.6T 参数分布在 2048 个专家中,这种开创性方法平衡了资源需求和性能提升
    • 后续版本(如 Mixtral(2024)和 DeepSeek V2.5(2024),其中 DeepSeek V2.5 利用 236B 总参数(160 个专家,激活参数 21B))进一步完善了这一框架,在 LMSYS 基准测试中取得了最先进的结果,并证明了稀疏混合专家架构在可扩展性和功效方面都能与密集模型相媲美
      • 注:LMSYS,即 LmArena,是一个 LLM 排行榜基准
    • 这些发展强调了向注重效率的后训练语言模型的转变,使大语言模型能够以更低的计算开销处理复杂任务,这是扩大其实用性的关键一步
    • 到 2025年 ,DeepSeek-R1(2025)成为后训练语言模型创新的里程碑,它摆脱了对传统 SFT 的依赖,采用思维链推理和探索性强化学习策略
      • 以 DeepSeek-R1-Zero 为代表,该模型整合了自我验证、反思和扩展的思维链生成,在开放研究范式中验证了强化学习驱动的推理激励,并引入了蒸馏技术(distillation techniques,2025),将复杂的推理模式从更大的架构转移到更小的架构
      • 这些技术不仅相对单独的强化学习训练产生了更优异的性能,还预示了一种可扩展的、以推理为中心的大语言模型范式,有望解决后训练方法中计算效率和任务适应性的长期挑战

Formula Foundations of PoLMs

Principle of Policy Optimization
  • PPO 算法(2017)是一种关键的强化学习技术,在 RLHF(2022)等场景中特别有用,在这些场景中,保持稳定性和效率至关重要
    • PPO 通过限制策略更新的大小来实现这些目标,确保模型行为的变化是渐进和可控的,从而防止性能出现灾难性的变化
    • 这在微调大规模语言模型时尤为重要,因为剧烈的策略更新可能导致不良或不可预测的行为
  • 定义(Definition) :在 PPO 的背景下,状态 \(s_{t} \in S\) 表示时间 \(t\) 的环境,包括模型做出决策所需的所有相关信息
    • 动作 \(a_{t} \in A(s_{t})\) 表示模型在状态 \(s_{t}\) 下做出的选择
      • 这个动作是模型所做的一系列决策的一部分
    • 执行动作后,智能体会收到奖励 \(r_{t} \in \mathbb{R}\),作为来自环境的反馈,表明所采取动作的成功或失败
    • 优势函数 \(A^{\pi}(s, a)\) 衡量在当前策略 \(\pi\) 下,在状态 \(s\) 中采取动作 \(a\) 相对于该状态下动作的预期值的优势
    • 它正式定义为动作值函数 \(Q^{\pi}(s, a)\) 和状态值函数 \(V^{\pi}(s)\) 之间的差异,定义如下:
      $$A^{\pi}(s, a)=Q^{\pi}(s, a)-V^{\pi}(s) \tag{1}$$
      • 其中 \(Q^{\pi}(s, a)\) 表示在状态 \(s\) 中采取动作 \(a\) 并遵循策略 \(\pi\) 所获得的预期累积奖励,\(V^{\pi}(s)\) 是从状态 \(s\) 开始并遵循策略 \(\pi\) 的预期累积奖励
      • 这两个函数都考虑了未来的奖励,并通过因子 \(\gamma\) 进行贴现(discounted by \(\gamma\))
  • 策略更新(Policy Update) :PPO 算法基于优势函数进行增量更新,从而优化策略 \(\pi_{\theta}\),策略更新使用剪辑目标函数执行:
    $$L^{CLIP}(\theta)=\hat{\mathbb{E} }_{t}\left[\min \left(r_{t}(\theta) \hat{A}_{t}, \operatorname{clip}\left(r_{t}(\theta), 1-\epsilon, 1+\epsilon\right) \hat{A}_{t}\right)\right]$$
    • 其中 \(r_{t}(\theta)\) 表示在当前策略 \(\pi_{\theta}\) 下采取动作 \(a_{t}\) 的概率与在旧策略 \(\pi_{\theta_{\text {old } } }\) 下的概率之比。该比率定义为:
      $$r_{t}(\theta)=\frac{\pi_{\theta}\left(a_{t} | s_{t}\right)}{\pi_{\theta_{\text {old } } }\left(a_{t} | s_{t}\right)}$$
      • \(\hat{A}_{t}\) 是时间步 \(t\) 的估计优势,剪辑函数 \(\operatorname{clip}\left(r_{t}(\theta), 1-\epsilon, 1+\epsilon\right)\) 将策略更新限制在由超参数 \(\epsilon\) 控制的安全范围内
      • 这种剪辑机制确保更新不会与先前的策略偏离太多,从而在训练期间保持稳定性
  • 值函数更新 :值函数 \(V_{\phi}\) 估计在策略 \(\pi_{\theta}\) 下,从给定状态 \(s_{t}\) 获得的预期累积奖励
    • 为了确保值函数提供准确的估计,通过最小化预测值与实际奖励之间的均方误差来优化它:
      $$\phi_{k+1}=\arg \min_{\phi} \mathbb{E}_{s_{t} \sim \pi_{\theta_{k} } }\left[\left(V_{\phi}\left(s_{t}\right)-R\left(s_{t}\right)\right)^{2}\right]$$
      • 其中 \(R(s_{t})\) 是从状态 \(s_{t}\) 获得的实际累积奖励,\(V_{\phi}(s_{t})\) 是在当前策略下的估计值
      • 目标是调整参数 \(\phi\),以最小化预测奖励和实际奖励之间的差异,提高值函数的准确性
Principle of RLHF
  • 基于人类反馈的强化学习(Reinforcement Learning with Human Feedback,RLHF)是一种通过在学习过程中利用人类生成的反馈使模型与人类偏好保持一致的关键方法
    • 这种方法包含一个明确捕捉人类输入的奖励函数,使模型能够更好地适应用户偏好和实际应用
  • 定义 :在 RLHF 中,语言模型 \(\rho\) 生成词汇表 \(\sum\) 中标记序列的概率分布
    • 模型 \(\rho\) 从输入空间 \(X=\sum^{\leq m}\) 生成标记序列 \(x_{0}, x_{1}, …, x_{n-1}\),其中每个标记都条件依赖于先前的标记
    • 模型的输出由以下条件概率分布定义:
      $$\rho\left(x_{0} \cdots x_{n-1}\right)=\prod_{0 \leq k<n} \rho\left(x_{k} | x_{0} \cdots x_{k-1}\right)$$
    • 模型 \(P\) 在由输入空间 \(X\) 、 \(X\) 上的数据分布 \(D\) 和输出空间 \(Y=\sum^{\leq n}\) 定义的任务上进行训练
      • 例如,在文本摘要中,如(2020)所示,GPT-2模型(2019)使用 RLHF 进行训练,其中任务涉及基于CNN/DailyMail(2015)和TL;DR(2017)等数据集预测文本摘要
  • 目标函数 :策略 \(\pi\) 是一个与原始模型 \(\rho\) 结构相同的语言模型
    • 最初,策略 \(\pi\) 被设置为等于 \(\rho\),目标是通过优化策略来最大化输入-输出对 \((x, y)\) 的预期奖励 \(R(x, y)\)
    • 奖励函数 \(R(x, y): X \times Y \to \mathbb{R}\) 为每个输入-输出对分配一个标量值,通过解决以下最大化问题获得最优策略 \(\pi^{*}\) :
      $$\pi^{*}=\max_{\pi} \mathbb{E}[R]= \max_{\pi} \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi(\cdot | x)}[R(x, y)]$$
    • 这个目标函数代表了一个标准的强化学习问题,其中模型通过在环境中的交互学习最大化预期奖励,并以人类反馈为指导
Principle of DPO
  • 直接偏好优化(Direct Preference Optimization, DPO)在 RLHF 的基础上,直接根据人类偏好(通常以成对比较的形式表达)优化模型的输出
    • 直接偏好优化消除了对传统奖励函数的需求,而是专注于通过最大化基于偏好的奖励来优化模型行为
  • 目标函数(Objective Function) :论文从与先前方法(2019, 2023, 2020)相同的强化学习目标开始,采用通用奖励函数 \(r^{*}\) 。KL约束奖励最大化目标的最优解由下式给出:
    $$\pi_{r}(y | x)=\frac{1}{Z(x)} \pi_{\text {ref } }(y | x) \exp \left(\frac{1}{\beta} r(x, y)\right)$$
    • 其中 \(Z(x)\) 是确保输出在所有可能动作上归一化的配分函数
    • 即使利用真实奖励 \(r^{*}\) 的最大似然估计 \(r_{\phi}\),也可以近似配分函数 \(Z(x)\),从而简化优化过程
    • 这种表述通过直接根据人类反馈调整策略,实现了更高效的偏好优
  • 偏好模型(Preference Model) :使用 Bradley-Terry model(1952),该模型对两个输出 \(y_{1}\) 和 \(y_{2}\) 之间的偏好进行建模,最优策略 \(\pi^{*}\) 满足以下偏好模型:
    $$p^{*}\left(y_{1} \succ y_{2} | x\right)=\frac{1}{1+\exp \left(\beta \log \frac{\pi^{*}\left(y_{2} | x\right)}{\pi_{\text {ref } }\left(y_{2} | x\right)}-\beta \log \frac{\pi^{*}\left(y_{1} | x\right)}{\pi_{\text {ref } }\left(y_{1} | x\right)}\right)}$$
    • 其中 \(p^{*}(y_{1} \succ y_{2} | x)\) 表示在给定输入 \(x\) 的情况下,人类偏好输出 \(y_{1}\) 胜过 \(y_{2}\) 的概率
    • 这种方法有效地将人类偏好纳入模型的优化过程
Principle of GRPO
  • 组相对策略优化(Group Relative Policy Optimization, GRPO)算法是强化学习中 PPO 算法的一种变体,最早在DeepSeek之前的工作《DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models》(2024)中提出
    • 组相对策略优化省略了评论家模型,而是使用组分数估计基线,与 PPO 相比显著减少了训练资源消耗
  • 定义 :组相对策略优化和 PPO 算法之间最显著的区别在于优势函数的计算方法
    • 从 2.2.1节 的式(1)中可以看出,PPO 中的优势函数 \(A^{\pi}(s, a)\) 的值源于 Q值 和 V值 之间的差异
  • 目标函数 :具体而言,对于每个问题 \(q\),组相对策略优化从旧策略 \(\pi_{\theta_{\text {old } } }\) 中采样一组输出 \(\left\{o_{1}, o_{2}, \ldots, o_{G}\right\}\),然后通过最大化以下目标来优化策略模型:
    $$\begin{aligned} \mathcal{J}_{G R P O}(\theta) & =\mathbb{E}\left[q \sim P(Q),\left\{o_{i}\right\}_{i=1}^{G} \sim \pi_{\theta_{oid } }(O | q)\right] \\ & \frac{1}{G} \sum_{i=1}^{G} \frac{1}{\left|o_{i}\right|} \sum_{t=1}^{\left|o_{i}\right|}\left\{ m i n \left[\frac{\pi_{\theta}\left(o_{i, t} | q, o_{i,<t}\right)}{\pi_{\theta_{old } }\left(o_{i, t} | q, o_{i,<t}\right)} \hat{A}_{i, t}, clip\left(\frac{\pi_{\theta}\left(o_{i, t} | q, o_{i,<t}\right)}{\pi_{\theta_{old } }\left(o_{i, t} | q, o_{i,<t}\right)}, 1-\epsilon, 1+\epsilon\right) \hat{A}_{i, t}\right] -\beta D_{K L}\left[\pi_{\theta} | \pi_{ref }\right]\right\}, \end{aligned}$$
    • 其中 \(\epsilon\) 和 \(\beta\) 是超参数,\(\hat{A}_{i, t}\) 是仅基于每个组内输出的相对奖励计算的优势,这将在5.2小节中详细介绍

PoLMs for Fine-Tuning

  • 微调是使预训练的 LLM 适应特定任务的基础,它通过有针对性地调整参数来优化模型的能力
  • 这个过程利用有标签或特定任务的数据集来提升性能,从而缩小通用预训练和特定领域需求之间的差距
  • 本章将探讨三种主要的微调范式:
    • 监督微调(Supervised Fine-Tuning,在3.1节中介绍),它利用带 annotations(标注)的数据集来提高特定任务的准确性;
    • 自适应微调(Adaptive Fine-Tuning,在3.2节中介绍),它通过 Instruction Tuning 和基于提示的方法来定制模型行为;
    • 强化微调(Reinforcement Fine-Tuning,在3.3节中介绍),它结合强化学习,根据奖励信号迭代优化输出,通过动态交互促进模型的持续改进

SFT

  • SFT (2022)通过利用特定任务的带标签数据集,使预训练的大语言模型适应特定任务
  • 与依赖指令提示的 Instruction Tuning不同,监督微调直接使用带 annotations 的数据来调整模型参数 ,使模型既精确又能适应上下文,同时还保留了广泛的泛化能力
  • 监督微调弥合了预训练阶段编码的广泛语言知识与目标应用的细致需求之间的差距(2021)
  • 预训练的大语言模型通过接触大量语料库,获取了通用的语言模式,这减少了在微调时对大量特定领域数据的依赖
  • 模型的选择至关重要:
    • 较小的模型,如 T5(2019),在数据集有限、资源受限的环境中表现出色;
    • 较大的模型,如 GPT-4(2023),则凭借其更强的能力在复杂、数据丰富的任务中表现优异
Dataset Preparation for SFT
  • 构建高质量的监督微调数据集是一个多方面的过程,对微调的成功至关重要
  • 监督微调数据集的构建(SFT Dataset Construction) :监督微调数据集通常被构建为 \(D=\{(I_{k}, X_{k})\}_{k = 1}^{N}\),其中 \(I_{k}\) 是一条指令,\(X_{k}\) 是其相应的实例
    • 这种配对能让大语言模型识别特定任务的模式并生成相关输出
    • 像 Self-Instruct(2022)这样的方法,通过合成新的指令-输出对,丰富了数据集的多样性,并使用如 ROUGE-L(2015)这样的指标过滤重复内容,以保持多样性
  • 监督微调数据集的筛选(SFT Dataset Screening) :筛选确保最终数据集中只保留高质量的指令-实例对
    • 使用筛选函数 \(r(·)\) 来评估每对 \((I_{k}, X_{k})\) 的质量,从而得到一个经过筛选的子集 \(D’\) :
      $$\mathcal{D}’=\{(I_{k}, X_{k}) \in \mathcal{D} | r(I_{k}, X_{k}) \geq \tau\}$$
      • 其中 \(\tau\) 是用户定义的质量阈值
      • 例如,指令跟随难度(Instruction Following Difficulty, IFD)指标(2023)用于量化给定指令引导模型生成预期响应的有效程度
      • IFD 函数表示为:
        $$r_{\theta}(Q, A)=\frac{\sum_{i = 1}^{N} \log P(w_{i}^{A} | Q, w_{1}^{A}, …, w_{i - 1}^{A} ; \theta)}{\sum_{i = 1}^{N} \log P(w_{i}^{A} | w_{1}^{A}, …, w_{i - 1}^{A} ; \theta)}$$
        • 其中 \(Q\) 表示指令,\(A\) 是预期响应,\(\theta\) 代表模型的可学习参数
        • 这个指标通过比较在有指令和无指令情况下生成响应的可能性,提供了一种标准化的方法来衡量指令对响应生成的促进效果
        • 不符合选定 IFD 阈值的指令-实例对将被排除,从而得到一个优化后的数据集 \(D’\)
        • 注:特别需要注意的是,上述表达式中的分子分母均小于 0,所以,\(r_{\theta}(Q, A) > 1\) 时,说明 分子小于分母
      • 注:这里 IFD 的表达式中同时省略了分子分母的负号,虽然结果一致,但会对理解 IFD 指标带来一定的困扰
        • 补充:IFD 的原始计算方式(原始论文:From Quantity to Quality: Boosting LLM Performance with Self-Guided Data Selection for Instruction Tuning, 20240406):IFD 通过计算条件回答分数(Conditioned Answer Score,CAS)与直接答案分数(Direct Answer Score,DAS)的比值得到,公式为:
          $$ \mathrm{IFD}_\theta(Q,A)=\frac{s_\theta(A|Q)}{s_\theta(A)}$$
          • \(s_\theta(A|Q)\) 表示模型在给定指令 \(Q\) 的情况下生成答案 \(A\) 的分数
            $$ s_{\theta}(A | Q) = -\frac{1}{N} \sum_{i = 1}^{N} \log P\left(w_{i}^{A} | Q, w_{1}^{A}, w_{2}^{A}, \cdots, w_{i - 1}^{A} ; \theta\right)$$
          • \(s_\theta(A)\) 表示模型直接生成答案 \(A\) 的分数
            $$ s_{\theta}(A) = -\frac{1}{N} \sum_{i = 1}^{N} \log P\left(w_{i}^{A} | w_{1}^{A}, \cdots, w_{i - 1}^{A} ; \theta\right) $$
        • 补充:IFD 指标意义 :IFD 值可以反映指令对模型生成答案的影响程度
          • IFD 值超过 1 的数据通常被视为异常数据
            • 理解:由于分子分母都是正数,此时说明分子大于分母,即条件概率小于直接生成概率: \(P(A|Q,W) < P(A|W) \),这说明,加入 Q 对 A 的生成非但没有帮助,反而是负向影响
          • IFD 高但不超过 1,意味着提示对模型生成答案有帮助,但帮助不显著,这类样本属于 “difficulty” 样本;
            • 理解:此时条件概率大于直接生成概率 \(P(A|Q,W) > P(A|W) \),但是大的不多,即 Q 对 A 的生成影响不大,此时 模型难以将答案与给定的指令内容对齐 ,这种样本对模型来说挑战较大
          • 低 IFD 值表明提示极大地简化了答案的生成,属于 “easy” 样本
            • 理解:此时条件概率大于直接生成概率 \(P(A|Q,W) > P(A|W) \),且大很多,即 Q 对 A 的生成影响非常大,这种样本很容易学习(甚至不需要学习?)
          • 较高的 IFD 分数表明模型难以将答案与给定的指令内容对齐 ,说明指令难度更高 ,对模型调优更有利
  • 监督微调数据集的评估(SFT Dataset Evaluation) :
    • 评估监督微调数据集需要选择一个高质量的子集 \(D_{eval}\),作为衡量模型性能的基准
    • 这个子集可以从经过筛选的数据集 \(D’\) 中抽样,或者从独立的部分数据中获取,以确保公正性
    • 传统的监督微调评估方法,如 Few-Shot GPT(2020)和微调策略(2023),资源消耗大,而指令挖掘(Instruction Mining)(2023)提供了一种更高效的替代方法
      • 指令挖掘使用线性质量规则和一组指标,如响应长度和平均奖励模型分数(2023),来衡量数据集质量,并评估这些指标与整体数据集质量之间的相关性
      • 注:指令挖掘(Instruction Mining)通常是指从大量数据中自动或半自动地筛选、提取和构建高质量的指令遵循(instruction-following)数据的过程
      • 问题:到底是 SFT Evaluation 还是 SFT Dataset Evaluation?

Process of SFT

  • 如图4所示,数据集准备好以后,微调过程从一个预训练的大语言模型开始
    • 这个预训练模型通常是通过在大规模原始数据集上进行无监督或自监督预训练得到的)
    • 预训练阶段的目标是获取适用于各种任务的通用特征表示(2021)
  • 在微调阶段,模型的参数会使用特定任务的带 annotations 数据进行调整,使模型符合给定应用的要求(这个阶段常用的目标函数是交叉熵损失函数)
  • 对于一个有 \(N\) 个样本和 \(C\) 个类别的分类任务,它可以表示为:
    $$L_{\text{fine-tune}}(\theta)=-\frac{1}{N} \sum_{i = 1}^{N} \sum_{j = 1}^{C} y_{ij} \log P(y_{j} | x_{i} ; \theta)$$
    • 其中 \(y_{ij}\) 是样本 \(i\) 在类别 \(j\) 中的真实标签,\(P(y_{j} | x_{i} ; \theta)\) 表示模型预测样本 \(i\) 属于类别 \(j\) 的概率
    • 最小化这个损失函数可以使模型更好地与真实标签对齐,从而提高在目标任务上的性能
  • 一个突出的例子是 BERT 模型(2018),它在如 BooksCorpus 和 Wikipedia 等广泛的语言语料库上进行了广泛的预训练
  • 在微调阶段,这些广泛的表示会使用特定任务的数据(例如用于情感分析的 IMDB 数据集(2011))进行优化,使 BERT 能够专注于诸如情感分类和问答等任务

Full-Parameter Fine-Tuning

  • 全参数微调指的是调整预训练模型的所有参数的过程,这与像 LoRA(2021)或 Prefix-Tuning(2021)等仅修改部分参数的参数高效方法不同
  • 全参数微调通常用于需要高精度的任务,如医疗和法律领域(2023),但它需要大量的计算资源
    • 例如,微调一个有 65B 参数的模型可能需要超过 100GB 的 GPU 内存,这给资源受限的环境带来了挑战
      • 理解:这里低估了吧,65B 模型全参数微调至少需要 1000GB 显存
    • 为了缓解这些限制,像 LOMO(2023)这样的内存优化技术被引入,它减少了梯度计算和优化器状态的内存占用
    • 模型的参数根据以下规则更新:
      $$\theta_{t + 1}=\theta_{t}-\eta \nabla_{\theta} L(\theta_{t})$$
      • 其中 \(\theta_{t}\) 表示在迭代 \(t\) 时的模型参数,\(\eta\) 是学习率,\(\nabla_{\theta} L(\theta_{t})\) 表示损失函数的梯度
      • 使用混合精度训练(Mixed Precision Training)(2017)和激活检查点(Activation Checkpointing)(2016)等内存优化技术,有助于减少内存需求,使大型模型能够在硬件资源有限的系统上进行微调
  • 从 GPT-3 到 InstructGPT(2022)就是一个全参数微调的显著例子,在这个过程中,模型的整个参数集使用为指令跟随任务设计的数据集进行了微调。这种方法能带来最佳性能,但由于需要更新所有参数,计算成本很高

Adaptive Fine-Tuning

  • 自适应微调通过修改预训练模型的行为,更好地满足用户特定需求,并处理更广泛的任务
  • 这种方法引入了额外的提示来指导模型生成输出,为定制模型的响应提供了一个灵活的框架
  • 自适应微调中值得注意的方法包括 Instruction Tuning 和基于提示的微调(prompt-based tuning),这两种方法都通过引入特定任务的指导,显著增强了大语言模型的适应性

Instruction Tuning

  • Instruction Tuning(2023)是一种通过在专门构建的指令数据集上对基础大语言模型进行微调,来优化模型的技术
  • 这种方法大大提高了模型在各种任务和领域中的泛化能力,增强了其灵活性和准确性
  • 如图5所示,这个过程首先将现有的 NLP 数据集(例如用于文本分类、翻译和摘要的数据集)转换为自然语言指令,这些指令包括任务描述、输入示例、预期输出和示例演示
    • 像 Self-Instruct(2022)这样的技术,通过自动生成额外的指令-输出对,进一步增强了这些数据集的多样性,扩大了模型接触的任务范围
    • 微调过程使模型的参数与这些特定任务的指令保持一致,从而使大语言模型在熟悉和以前未见过的任务中都能表现出色
    • 例如,InstructGPT(2022)和 GPT-4(2023)在众多应用中,指令跟随能力都有显著提升
  • Instruction Tuning 的有效性在很大程度上取决于指令数据集的质量和广度
    • 高质量的数据集应涵盖广泛的语言、领域和任务复杂性,以确保模型具有广泛的适用性(2023)
    • 指令的清晰度和组织方式在使模型有效解释和执行任务方面起着关键作用
    • 诸如整合示例演示,包括思维链提示(Chain-of-Thought prompting)(2022)等技术,可以显著提高在需要复杂推理的任务上的性能
    • 此外,在微调阶段 确保任务的平衡分布至关重要 ,这可以避免因任务覆盖不均衡而导致的过拟合或模型性能下降
      • 像按比例任务采样或加权损失函数这样的技术,有助于解决这些问题,确保每个任务在微调过程中都能做出公平的贡献
    • 结论:通过精心构建和管理指令数据集,研究人员可以大大提高微调后的大语言模型的泛化能力,使其在广泛的任务和领域中表现出色(2023)

Prefix-Tuning

  • Prefix-Tuning(2021)是一种参数高效的微调方法,它在语言模型的每个 Transformer 层添加一系列可训练的前缀标记(连续向量),同时保持核心模型参数不变
  • 如图6(a)所示,这些前缀向量是特定于任务的,并且起着虚拟 token embedding 的作用
  • 为了优化前缀向量,使用了一种重参数化技巧,即学习一个小型多层感知器(Multi-Layer Perceptron, MLP)函数,将一个较小的矩阵映射到前缀参数,而不是直接优化前缀向量
    • 这种方法已被证明可以稳定训练过程
  • 前缀向量被优化后,映射函数会被丢弃,只保留导出的前缀向量来提高特定任务的性能
  • 通过在输入序列前添加学习到的连续提示,并利用分层提示,模型的行为被引导向特定任务的输出,而无需对整个模型进行微调
  • 由于只调整前缀参数,这是一种一种更高效的参数调整方法
  • 在此基础上,P-Tuning v2(2021)将分层提示向量整合到 Transformer 架构中 ,专门用于自然语言理解任务
    • 这种方法还利用多任务学习来跨任务优化共享提示,从而在不同的参数规模上提高模型性能(2021)
  • Prefix-Tuning 能够快速有效地使大语言模型适应特定任务,这使它成为需要灵活性和效率的应用中的一种有吸引力的策略

Prompt-Tuning

  • Prompt-Tuning(2021, 2020)是一种旨在通过优化输入层的可训练向量 ,而不修改模型内部参数 ,来有效调整大语言模型的方法
  • 如图6(b)所示,这项技术在离散提示方法(2020, 2021)的基础上,引入了软提示标记,这些标记可以采用无限制格式(2021)或前缀形式(2020)
  • 这些学习到的提示嵌入在模型处理之前与输入文本嵌入相结合,从而在保持预训练权重不变的情况下引导模型的输出
  • Prompt-Tuning 的一个值的提到的实现是 P-tuning(2021),它使用一种灵活的方法来组合上下文、提示和目标标记,适用于理解和生成任务
    • 这种方法通过双向长短期记忆(Long Short-Term Memory, LSTM)架构增强了软提示表示的学习
    • 相比之下,标准 Prompt-Tuning(2020)采用了更简单的设计,其中前缀提示被添加到输入之前,并且在训练过程中仅根据特定任务的监督更新提示嵌入
  • 研究表明,Prompt-Tuning 在许多任务上可以达到与全参数微调相媲美的性能,同时所需的可训练参数要少得多
    • 但它的成功与底层语言模型的能力密切相关,因为 Prompt-Tuning 只在输入层修改少量参数(2021)
  • 在这些进展的基础上,像 P-Tuning v2(2021)这样的新方法已经证明,Prompt-Tuning 策略可以有效地扩展到各种模型大小,处理以前认为需要完全微调的复杂任务
  • 这些发现确立了 Prompt-Tuning 作为传统微调的一种高效替代方法,在降低计算和内存成本的同时提供了可比的性能

Reinforcement Fine-Tuning

  • 强化微调(Reinforcement Fine-Tuning, ReFT)(2024)是一种先进的技术,它将强化学习(Reinforcement Learning, RL)与监督微调相结合,以增强模型解决复杂动态问题的能力
  • 强化微调与传统的监督微调不同
    • 传统监督微调通常为每个问题使用单一的思维链 annotations
    • 强化微调使模型能够探索多种有效的推理路径 ,从而提高其泛化能力和解决问题的技能
  • 强化微调过程从标准的监督微调阶段开始,在监督微调阶段,模型最初有标签数据(labeled data)上进行训练,通过监督 annotations 学习基本的任务解决能力
  • 在初始微调之后,模型使用强化学习算法(如 PPO(2017))进行进一步优化
  • 在强化阶段,模型为每个问题生成多个思维链 annotations,探索不同的潜在推理路径。通过将模型的预测答案与真实答案进行比较来评估这些生成的路径,正确输出给予奖励,错误输出则给予惩罚。这个迭代过程促使模型调整其策略,最终改进其推理策略
  • 如图7所示,强化微调过程分两个阶段执行
    • 上半部分代表监督微调阶段,在这个阶段,模型在训练数据上迭代,在几个训练周期内学习每个问题的正确思维链 annotations
    • 在图的下半部分,引入了强化微调阶段:
      • 从经过监督微调训练的模型开始,模型根据其当前策略生成替代的思维链 annotations \((e’)\),并将其预测答案 \((y’)\) 与真实答案 \((y)\) 进行比较
      • 正确答案给予正奖励,错误答案给予负奖励 ,从而推动模型提高性能
      • 这些奖励信号随后用于通过强化学习更新模型的策略,增强其生成准确多样的思维链 annotations 的能力
  • 最近的研究表明,强化微调明显优于传统的监督微调方法(2024)
    • 此外,在推理时集成多数投票和重排序等策略,可以进一步提高性能,使模型在训练后能够优化其输出
    • 值得注意的是,强化微调在不需要额外或增强训练数据的情况下实现了这些改进,仅从监督微调阶段使用的现有数据集中学习
    • 这突出了模型卓越的泛化能力,因为它能够更高效地从可用数据中学习

PoLMs for Alignment

  • LLM 的对齐是指引导模型输出符合人类期望和偏好,尤其在安全关键或面向用户的应用中
  • 本章将讨论实现对齐的三种主要范式:
    • RLHF(在4.1节中介绍):使用人类标记的数据作为奖励信号;
    • RLAIF(在4.2节中介绍):利用人工智能生成的反馈来解决可扩展性问题;
    • 直接偏好优化(在4.3节中介绍):直接从成对的人类偏好数据中学习,不需要显式的奖励模型
  • 每种范式在追求稳健对齐方面都有其独特的优势、挑战和权衡
  • 这些方法及相关方法的简要比较总结在表2中

RLHF(Reinforcement Learning with Human Feedback)

  • SFT 是引导大语言模型遵循人类指令的基础技术
  • 但在纯监督场景中,带 annotations 数据的多样性和质量可能参差不齐,而且监督模型捕捉更细微或适应性更强的人类偏好的能力往往有限
  • 为了应对这些不足,人们提出了基于 RL 的微调方法。在强化学习方法中,RLHF(2022)是最早且最具影响力的基于强化学习的后训练对齐方法之一
  • 如图8所示:RLHF 首先以偏好标签或奖励信号的形式聚合人类反馈,然后使用这些信息来训练奖励模型
    • 在这个奖励模型的指导下,策略会不断调整,以更好地匹配人类偏好
    • 与监督微调相比,RLHF 融入了持续的、基于偏好的更新,从而带来更强的对齐效果
    • 值得注意的是,像 GPT-4(2023)、Claude(2024)和 Gemini(2023)这样的现代大语言模型都受益于这些机制,在指令跟随、事实一致性和用户相关性方面都有改进
  • 下面,论文将讨论 RLHF 的主要组成部分,包括反馈机制、奖励建模和策略学习策略
Feedback Mechanisms of RLHF
  • 人类反馈是 RLHF 的核心,它向奖励模型告知用户偏好并指导策略更新
  • 本小节采用(2023)的分类法对常见的人类反馈形式进行分类
  • 表3从粒度、参与程度和明确性等维度展示了这些反馈类型
    • 每种反馈方式都对模型优化的不同方面有所贡献,并在可解释性、可扩展性和抗噪声性方面表现出不同的水平
  • 主要反馈(Primary Feedback) :这类反馈是 RLHF 中最直接影响奖励模型的反馈类型,例如:
    • 评论(Critique)(2020)侧重于人类对智能体行为的明确评估,通常通过二元或多标签 annotations 来减少噪声
    • 比较(Comparisons)(2011)允许评估者比较多个输出或轨迹;虽然更大的选择集可以提供更丰富的信号,但也可能导致因果混淆
    • 跨时间反馈(Inter-Temporal Feedback)(2019)通过在不同时间步提供判断来优化轨迹评估
    • 代理奖励(Proxy Rewards)(2021)整合了近似奖励函数,引导模型朝着用户定义的目标前进
    • 社会行为(Social Behavior)(2021)利用隐含线索(如面部表情)使智能体目标与用户情绪保持一致
    • 改进(Improvements)(2023)强调人类的实时干预,以逐步优化策略
    • 自然语言反馈(Natural Language Feedback)(2023)利用文本信息传达偏好和改进建议
  • 补充反馈(Supplementary Feedback) :除了主要反馈外,还有两类反馈进一步强化奖励建模过程
    • 紧急停止(e-stops)(2023)允许人类通过中断智能体的轨迹来干预其行为,而无需提出替代方案
      • 这种反馈的特点是隐含参与,并且专注于防止不良行为
    • 重要性标签(Importance labels)(2021)表明特定观察结果对实现目标的重要性,提供不直接改变行为的明确反馈
      • 这种反馈因上下文而异,作为补充输入,强化奖励模型的整体学习过程
  • 特定表示反馈(Representation-Specific Feedback) :某些反馈类型主要用于增强表示学习,而不是直接塑造奖励函数
    • 特征轨迹(Feature Traces)(2022)促使人类操作员展示特定特征的单调变化,从而实现特征集的动态扩展
    • 相似性查询(Similarity Queries)(2023)通过比较轨迹三元组,通过轨迹空间中的成对距离来指导表示学习
    • 通过利用这些特定表示的反馈形式,RLHF 可以更好地泛化到新任务和新环境
Reward Model of RLHF
  • 真实的奖励函数 \(r(x, y)\) 通常是未知的,因此有必要基于人类提供的偏好构建一个可学习的奖励模型 \(r_{\theta}(x, y)\)
    • 该模型预测候选输出 \(y\) 在给定输入 \(x\) 的情况下与人类期望的对齐程度
  • 为了获得 \(r_{\theta}(x, y)\) 的训练数据,人类评估者会根据输出的相对适用性对输出对进行比较或标记,并且该模型通常使用这些比较的交叉熵损失进行训练
  • 为了防止策略 \(\pi\) 与初始模型 \(\rho\) 偏离太远,在奖励函数中引入了一个由超参数 \(\beta\) 控制的惩罚项:
    $$r_{\theta}(x, y)=r(x, y)-\beta \log \frac{\pi(y | x)}{\rho(y | x)}$$
    • 其中 \(\pi(y | x)\) 是微调后的策略 \(\pi\) 在给定输入 \(x\) 时产生输出 \(y\) 的概率,而 \(\rho(y | x)\) 是原始模型 \(\rho\) 对应的概率
    • 这个项确保 \(\pi\) 在适应人类反馈的同时,仍然受到 \(\rho\) 所捕捉的先验知识的约束
  • 评估奖励函数 \(r_{\theta}(x, y)\) 至关重要,因为它直接影响学习效果和策略性能
    • 准确评估这个函数有助于确定适合的奖励结构,使模型输出与人类偏好保持一致
    • 但在安全敏感领域,由于在线交互、偏差和对真实奖励的需求等相关风险,标准的滚动方法(2017, 2019)和离线策略评估(2019, 2019)可能不可行
  • 为了应对这些挑战,通常采用两种主要方法:
    • 距离函数(Distance Functions) :最近的研究集中在奖励评估距离函数上,这些函数考虑了潜在的转换,如潜在塑造。例如
      • EPIC(2020)在各种转换下测量奖励函数的等价性
      • DARD(2022)优化规范化以确保评估基于可行的转换
      • 类 EPIC 距离(2022)通过允许规范化、标准化和度量函数的可变性来推广 EPIC 的方法
      • STARC(2023)保留了 EPIC 的理论特性,同时提供了额外的灵活性
    • 可视化和人工检查(Visual and Human Inspection) :其他方法依靠可解释性和精心设计的数据集来评估学习到的奖励函数的有效性
      • PRFI(2022)使用预处理步骤来简化奖励函数,同时保持等价性,从而提高其透明度
        8 同时,CONVEXDA 和 REWARDFUSION(2023)提出了旨在测试奖励模型对提示语义变化的响应一致性的数据集
      • 这些技术共同有助于更可靠地评估奖励函数,加强大语言模型与人类偏好的对齐
Policy Learning of RLHF
  • 如图9所示,RLHF 的策略学习包括在在线和离线环境中通过人类反馈优化策略
  • 在线学习(Online Learning) :在 Online RLHF 中,系统收集关于新生成的模型轨迹的实时人类偏好
    • 像 DPS(2020)这样的算法使用贝叶斯更新来管理竞争过程,而 PPS 和 PEPS(2020)整合了动态规划和多臂老虎机的思想来优化策略行为
    • 在 LPbRL(2022)中,特征嵌入捕捉不断变化的奖励结构,而 PbOP(2022)整合了最小二乘估计用于转换动态和偏好信号
    • 最近,PARL(2023)通过将反馈获取视为策略优化的一个组成部分,以提高数据收集效率为目标
  • 离线学习(Offline Learning) :在 Offline RLHF 中,以前收集的带有偏好标签的轨迹被用于学习或优化策略
    • 例如,(2023)研究了带有成对比较数据的策略学习的悲观最大似然估计,并建立了性能界限
    • 像 FREEHAND(2023)和 DCPPO(2023)这样的扩展推广到未知的偏好模型,探索离线数据覆盖范围和策略泛化之间的相互作用
    • 此外,(2024)解决了成对比较的玻尔兹曼模型中的过拟合问题,而 DCPPO(2023)进一步研究了动态离散选择模型以提高反馈效率
  • 在线学习和离线学习的融合(Blending Online and Offline Learning) :混合方法将离线预训练与在线偏好聚合相结合,充分利用预先收集的数据,同时仍然整合实时更新
    • PFERL(2022)采用两阶段方法来最小化人类查询,而 PERL(2020)探索用于主动探索的乐观最小二乘策略
    • 竞争强化学习(Dueling RL)(2023)及其扩展(如 PRPRL(2023)中的 REGIME)通过仔细划分数据获取和反馈收集来减少人类标记需求,从而优化样本效率、 annotations 成本和策略性能之间的权衡

RLAIF(Reinforcement Learning with AI Feedback)

  • 基于 AI 反馈的强化学习(Reinforcement Learning with AI Feedback, RLAIF)扩展了 RLHF 范式,它采用大语言模型生成反馈信号
  • 这种方法可以补充或替代人类反馈,在人类 annotations 稀缺、昂贵或不一致的任务中提供更具可扩展性、成本更低的偏好数据
RLAIF vs RLHF
  • RLHF 在大规模应用中面临的一个主要挑战是其对人类生成的偏好标签的依赖,这需要大量资源来收集、整理和标记数据
    • 标注数据的过程既耗时又昂贵,而且人类评估者可能会引入不一致性,从而使在所有模型输出上进行大规模、一致的标注变得复杂
    • 这些限制极大地限制了 RLHF 的可扩展性和效率
  • 为了应对这些挑战,(2022)提出了 RLAIF,它结合人类反馈和人工智能生成的反馈,通过强化学习来训练模型
    • 通过利用大语言模型作为反馈源,RLAIF 减少了对人类标注者的依赖,为传统的 RLHF 提供了一种可行的替代方案
    • 这种方法能够持续生成反馈,显著提高可扩展性,同时保留人类引导的模型优化的灵活性
  • 如图10所示,RLHF 和 RLAIF 的主要区别在于反馈源:
    • RLHF 依赖于人类生成的偏好,而 RLAIF 使用人工智能生成的反馈来指导策略更新
    • 实证研究(如(2023)的研究)表明:RLAIF 可以达到与 RLHF 相当甚至更优的性能 ,这是由人类评估者评估的
    • RLAIF 不仅超过了传统的监督微调基线,而且使用与策略模型规模相同的大语言模型偏好标注器来实现这一点 ,突显了该方法的效率
RLAIF Training Pipeline
  • RLAIF 的训练流程遵循几个关键阶段,在这些阶段中,人工智能生成的反馈被用于迭代优化模型的行为
  • 正如(2023)所详细描述的,该流程使大语言模型的输出能够以跨各种任务的可扩展方式与人类期望保持一致
  • 这些阶段如下:
    • 人工智能反馈收集(AI Feedback Collection) :在这个阶段,人工智能系统根据预定义的标准生成反馈,这些标准可能包括特定任务的指标、响应的正确性或模型输出的适当性
      • 与需要解释和手动标注的人类反馈不同,人工智能反馈可以在广泛的模型输出中一致地生成
      • 这种特性使人工智能反馈能够持续提供,显著扩大了反馈循环的规模
    • 奖励模型训练(Reward Model Training) :人工智能生成的反馈随后被用于训练或优化奖励模型
      • 该模型将输入-输出对映射到相应的奖励,使模型的输出与反馈所指示的期望结果保持一致
      • 虽然传统的 RLHF 依靠直接的人类反馈来评估输出,但 RLAIF 利用人工智能生成的标签,尽管这可能会引入一致性和偏差相关的问题,但在可扩展性和不依赖人力资源方面具有优势
    • 策略更新(Policy Update) :最后阶段包括基于前一步训练的奖励模型更新模型的策略
      • 采用强化学习算法来调整模型的参数,优化策略以在各种任务中最大化累积奖励
      • 策略更新过程是迭代的,奖励模型指导模型的输出朝着与预期目标更高程度的对齐方向发展
  • RLAIF 的主要优势在于:它能够在不需要持续人类干预的情况下扩展反馈循环
    • 通过用人工智能生成的反馈替代人类反馈,RLAIF 促进了大语言模型在多个任务中的持续改进,缓解了人类标注工作带来的瓶颈

Direct Preference Optimization

  • 如前所述,RLHF(2022)通常包括三个阶段:
    • 监督微调(2021, 2022)
    • 奖励建模
    • 强化学习(通常通过 PPO 实现)(2017)
  • 尽管 RLHF 是有效的,但它可能很复杂且容易不稳定,特别是在拟合奖励模型然后使用该模型微调大语言模型的阶段
    • 困难在于创建一个准确反映人类偏好的奖励模型,以及在微调语言模型以优化这个估计奖励的同时,使其与原始模型保持接近
  • 为了解决这些问题,直接偏好优化(Direct Preference Optimization, DPO)(2024)作为一种更稳定且计算效率更高的替代方案被引入
  • 直接偏好优化通过将奖励函数直接与最优策略联系起来,简化了奖励优化过程
  • 它将奖励最大化问题视为基于人类偏好数据的单阶段策略训练问题,从而避免了奖励模型拟合的复杂性以及对 Bradley-Terry model(1952)的依赖
Foundation of DPO
  • RLHF 包括训练奖励模型(Reward Model, RM)和通过强化学习微调语言模型
  • 直接偏好优化通过直接使用人类偏好数据训练语言模型,将奖励模型隐含地捕获在策略本身中,从而简化了这个过程
  • KL 正则化奖励最大化目标(KL-Regularized Reward Maximization Objective) :直接偏好优化始于成熟的KL正则化奖励最大化框架,如下所示的目标:
    $$\pi^{*}=\arg \max_{\pi} \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi(\cdot | x)}\left[r(x, y)-\beta K L\left(\pi(\cdot | x) | \pi_{r e f}(\cdot | x)\right)\right] \tag{14}$$
    • 其中 \(r(x, y)\) 表示奖励函数,\(\beta>0\) 是控制与参考策略 \(\pi_\text{ref}\) 接近程度的系数,而 \(KL(\cdot | \cdot)\) 表示 KL 散度(Kullback-Leibler divergence)
    • 这里,\(x \sim \mathcal{D}\) 表示从数据分布中抽取的输入,\(y \sim \pi(\cdot | x)\) 表示从策略中采样的输出
  • 最优策略的推导(Deriving the Optimal Policy) :在适当的假设下,式(14)的解以玻尔兹曼分布(Boltzmann distribution)的形式导出(2019, 2023, 2020):
    $$\pi^{*}(y | x)=\frac{1}{Z(x)} \pi_{r e f}(y | x) \exp \left(\frac{1}{\beta} r(x, y)\right) \tag{15}$$
    • 其中配分函数:
      $$Z(x)=\sum_{y} \pi_{r e f}(y | x) \exp \left(\frac{1}{\beta} r(x, y)\right)$$
      • 作为归一化项,确保 \(\pi^{*}\) 仍然是一个有效的概率分布(即其概率之和为1)
  • 奖励的重参数化(Reparameterizing the Reward) :对式(15)的两边取自然对数,我们可以将奖励 \(r(x, y)\) 与最优策略 \(\pi^{*}\) 联系起来。这产生:
    $$r^{*}(x, y)=\beta\left[\log \pi^{*}(y | x)-\log \pi_{r e f}(y | x)\right]+\beta \log Z(x) \tag{16}$$
    • 其中 \(\beta \log Z(x)\) 是一个不影响奖励成对比较的常数
    • 如果已知最优策略 \(\pi^{*}\),则真实奖励 \(r^{*}(x, y)\) 的值取决于这个常数
  • Bradley–Terry 偏好(Preferences) :在 Bradley-Terry model(1952)下,人类对两个输出 \(y_{1}\) 和 \(y_{2}\) 的偏好由它们的奖励值之差决定
    • 偏好 \(y_{1}\) 胜过 \(y_{2}\) 的概率由下式给出
      $$p^{*}\left(y_{1} \succ y_{2} | x\right)=\frac{\exp \left(r^{*}\left(x, y_{1}\right)\right)}{\exp \left(r^{*}\left(x, y_{1}\right)\right)+\exp \left(r^{*}\left(x, y_{2}\right)\right)} \tag{17}$$
    • 将式(17)代入式(18),论文得到最终的偏好模型:
      $$p^{*}\left(y_{1} \succ y_{2} | x\right)=\frac{1}{1+\exp \left(\beta\left[\log \frac{\pi^{*}\left(y_{2} | x\right)}{\pi_{r e f}\left(y_{2} | x\right)}-\log \frac{\pi^{*}\left(y_{1} | x\right)}{\pi_{r e f}\left(y_{1} | x\right)}\right]\right)}$$
    • 这个表达式将成对的人类偏好概率与最优策略 \(\pi^{*}\) 和参考策略 \(\pi_\text{ref}\) 的比率联系起来
Training Details of DPO
  • 直接偏好优化框架建立在两个核心模型之上:参考策略 \(\pi_\text{ref}\) 和目标策略 \(\pi_\text{tar}\)
  • 参考策略通常是一个经过预训练和监督微调的语言模型,在整个训练过程中保持固定
  • 相比之下,目标策略从 \(\pi_\text{ref}\) 初始化,并使用基于偏好的反馈进行迭代更新,从而更好地与人类判断保持一致
  • 图11描述了这个整体流程
  • 数据收集和准备 :直接偏好优化依赖于一个精心挑选的偏好数据集,该数据集是通过为每个提示 \(x\) 从 \(\pi_\text{ref}\) 中采样多个候选响应获得的
    • 然后,人类标注者根据连贯性、相关性和清晰度等标准对这些响应进行比较或排序
    • 由此产生的偏好标签作为优化 \(\pi_\text{tar}\) 的核心训练信号
  • 训练过程 :通过一系列基于梯度的更新来优化目标策略,旨在最小化损失 \(L_{DPO}\) ,具体来说:
    • 1)生成: \(\pi_\text{ref}\) 为每个提示 \(x\) 生成候选输出;
    • 2)标注:人类标注者比较生成的输出,确定它们的相对偏好;
    • 3)优化:利用这些成对的偏好,\(\pi_\text{tar}\) 被迭代更新,以更好地模仿人类偏好的输出
    • 在整个过程中,\(\pi_\text{ref}\) 保持不变,为衡量改进提供了一个稳定的基线
  • 实际考虑因素 :选择一个稳健的参考策略通常对有效初始化直接偏好优化至关重要
    • 监督微调通常会为 \(\pi_\text{ref}\) 产生一个性能良好的基线,确保后续基于偏好的更新可以专注于优化,而不是基本技能的获取
      • 理解:SFT 注入知识或技能,DPO 仅仅专注策略优化,而不是基本技能的学习
    • 此外,偏好数据必须足够多样化,以捕捉用户期望的变化,从而促进模型的适应性并防止在定义狭窄的任务上过拟合
Variants of DPO
  • 已经出现了多种直接偏好优化的变体,以解决特定的对齐挑战并优化文本生成的不同方面
  • 表2概述了这些方法,范围从 Token-level 生成优化到控制冗长性以及处理列表式或负面偏好
  • 用于优化生成的直接偏好优化(DPO for Optimizing Generation) :Token-level DPO 和 iterative DPO 策略有助于更细粒度或持续地与人类偏好保持一致
    • token-level DPO(2024)被重新表述为一个老虎机问题,采用由 \((S, A, f, r, \rho_{0})\) 定义的马尔可夫决策过程(Markov Decision Process, MDP)
      • 这种方法减轻了诸如不受欢迎的标记的过度 KL 散度等挑战
    • TDPO(2024)应用顺序前向 KL 散度而不是反向 KL 散度,同时改进了文本生成中的对齐和多样性保留
    • Iterative DPO(2024)采用多轮方法,通过重复的偏好评估(通常由模型本身执行)来持续优化输出
    • 成对厌恶优化(Pairwise Cringe Optimization, PCO)(2024)通过使用软边际来平衡探索和利用,将二元反馈扩展到成对设置
    • Step-wise DPO(2024)对偏好数据集进行分区,并应用迭代更新,将每一轮的更新策略作为下一轮的基线
  • 可控和灵活的直接偏好优化(Controllable and Flexible DPO) :一些直接偏好优化变体旨在管理冗长性并减少对固定参考策略的需求
    • R-DPO(2024)通过目标函数中的正则化项惩罚输出长度,解决过度冗长或冗余的响应
    • SimPO(2024)通过归一化响应长度并简化损失函数以处理期望和不期望的输出,消除了对参考策略的需求
    • RLOO(2024)利用 REINFORCE 算法而不训练价值模型,大大减少了计算开销(问题:RLOO 算是 DPO 变体?)
      • 它将整个响应视为单个动作,并从稀疏奖励中学习,与传统的基于 PPO 的方法相比,简化了实现
  • Listwise DPO :列表式直接偏好优化方法不是将偏好数据限制为成对比较,而是对输出集进行优化
    • LiPO(Listwise Preference Optimization, 列表式偏好优化)(2024)直接在候选响应的排序列表上应用学习排序技术,相对于重复的成对比较提高了效率
    • RRHF(2023)将偏好对齐整合到监督微调中,消除了对单独参考模型的需求
    • PRO(2024)将列表式偏好分解为更简单的二元任务,简化了监督微调期间的对齐
  • Negative DPO :某些任务需要从不受欢迎或有害的输出中学习:
    • NN(Negating Negatives, 否定负面)(2024)丢弃正面响应,并最大化与较不受欢迎的输出的差异
    • NPO(Negative Preference Optimization, 负面偏好优化)(2024)对负面偏好应用梯度上升,有效减少有害输出并减轻灾难性崩溃

PoLMs for Reasoning

  • 推理是使 LLM 能够处理涉及多步逻辑、复杂推理和复杂决策任务的核心支柱
  • 本章探讨两种增强模型推理能力的核心技术:
    • Self-Refine for Reasoning(5.1节),它指导模型自主检测并纠正自身推理步骤中的错误;
    • Reinforcement Learning for Reasoning(5.2节),它采用基于奖励的优化来提高模型 CoT 的一致性和深度。这些方法共同使模型能够更稳健地处理长期决策、逻辑证明、数学推理和其他具有挑战性的任务

Self-Refine for Reasoning

  • 在优化大语言模型以处理需要复杂逻辑推理和依赖上下文的决策任务时,推理仍然是一个核心挑战
  • 在这种情况下,Self-Refine 作为一种强大的机制出现,它能在文本生成过程中或生成后迭代地找出并纠正错误,从而显著提高推理深度和整体可靠性
  • 如图12所示, Self-Refine 方法可分为四类:
    • 内在 Self-Refine (Intrinsic Self-refine),它依赖模型内部的推理循环;
    • 外在 Self-Refine (External Self-refine),它整合外部反馈资源;
    • 微调内在 Self-Refine (Fine-tuned Intrinsic Self-refine),它基于自我生成的修正迭代更新模型的推理过程;
    • 微调外在 Self-Refine (Fine-tuned External Self-refine),它利用外部信号和微调以更具适应性、更长期的方式优化推理
  • 表4进一步说明了每类方法如何增强大语言模型在各种任务中的推理能力
Intrinsic Self-Refine
  • Intrinsic Self-Refine 方法专注于使模型自身能够在不借助外部工具的情况下检测并修正错误
    • RCI 提示(RCI Prompting)(2024)仅在识别到矛盾或错误时才触发修正,避免对微小的不确定性反应过度
    • CAI修订(CAI Revisions)(2022)纠正不良输出(如攻击性文本),同时教会模型自我调节其响应
    • Self-Refine(2024)利用从低质量提示到高保真指令的转变,优化中间逻辑以提高一致性
    • CoVe(2023)通过将多答案问题分解为子任务来处理这类问题,每个子任务都经过单独验证,以确保整个推理链的精确性和一致性
    • 弱到强泛化(Weak-to-Strong Generalization, W2SG)方法利用先进算法,使强大的学生模型能够从能力较弱的教师模型产生的含噪声演示中有效学习(2023)
      • 该框架在不同领域已有多项重要发展和应用
    • 最近的研究通过各种创新增强了弱到强泛化。例如
      • 集成学习技术已成功应用于提高弱到强泛化方法的稳健性和有效性(2024)
      • (2024)采用弱到强外推来增强大语言模型的对齐
External Self-Refine
  • External Self-Refine 方法涉及利用外部反馈源或计算工具来指导和纠正模型的推理
    • CRITIC(2024)系统地检查分步输出,提高复杂推理任务的可靠性
    • Reflexion(2024)和自我调试(Self-Debug)(2023)分别将生成的答案与参考解决方案或少样本示例进行比较,迭代优化逻辑
    • 像 FLARE(2023)和 Logic-LM(2023)这样的技术整合来自外部文档或符号求解器的参考,从而最大限度地减少逻辑失误
    • RARR(2022)和 SelfEvolve(2023)表明,验证中间状态(如编译器消息或相关知识源)是一种有效的方法,可及早修剪错误路径并引导模型找到正确解决方案
    • (2024)提出了基于人类反馈的迭代偏好学习,包括用于在线场景的直接偏好优化(Direct Preference Optimization, DPO)算法的迭代版本,以及用于离线场景的多步拒绝采样策略
    • PIT(2024)从人类偏好数据中间接学习改进目标
Fine-tuned Intrinsic Self-refine
  • 通过专门针对内部修订(internal revision)对基础模型进行微调,Fine-tuned Intrinsic Self-refine 方法系统地加强大语言模型的自我纠正循环
    • 自我批判(Self-Critique)(2022)旨在通过自我审查改进摘要
    • SelFee(2023)使用迭代反馈循环确保更高水平的逻辑一致性
    • Volcano(2024)通过在大语言模型架构中微调专用的校正模块来减少多模态幻觉
    • RL4F(2023)利用基于强化学习的批判循环,在需要深入推理的基准测试中平均提高 10% 的性能
    • REFINER(2024)同样专注于中间推理路径,而不改变模型原始的生成过程,这表明通过训练模型仔细重新检查其部分输出,可以实现持续的改进
    • 易到难泛化(easy-to-hard generalization)作为弱到强泛化的一种有前景的变体出现,其中模型首先在易于验证的示例上训练,然后再处理更复杂的任务(2024)
      • 这种方法的一个显著实现是在人类可验证的示例上训练强大的奖励模型,该模型随后指导在具有挑战性的任务上对更强大的模型进行监督(2024)
      • 此外,弱到强泛化的有效性不仅限于大语言模型,在计算机视觉任务中也有成功应用(2024)
Fine-tuned External Self-refine
  • Fine-tuned External Self-refine 方法下,在需要长期改进的场景中,模型的参数通过外部反馈机制进行更新。例如:
    • 自我编辑(Self-Edit)(2023)基于执行结果重新生成代码输出,从而实现正确性的迭代改进
    • Baldur(2023)通过添加或修改上下文来加强定理证明
    • CodeRL(2022)采用基于测试的批判来验证程序合成任务中的功能准确性
  • 总之,这些技术表明,将外部资源与有针对性的微调相结合,有助于在模型的整体推理性能方面实现可靠的、逐步的进步

Reinforcement Learning for Reasoning

  • 在5.1节中,论文探讨了 Self-Refine 方法,这是一种通过局部调整和优化来提高大语言模型推理能力的广泛使用的方法
  • 这种技术通常应用于单步任务或输出优化,如文本生成和问答,可快速提升推理效果;但对于需要多步逻辑的复杂、长期推理任务,它却难以胜任
  • OpenAI 的 o1 系列(2024)的发布凸显了 RL 作为一种强大的替代方案,它通过基于奖励的反馈优化长内部思维链,训练大语言模型进行高级推理
    • 这显著提高了在数学证明和战略规划等复杂任务中的性能
  • o1 的成功推动了对大规模强化学习的研究,像 QwQ-32B-Preview(2023)在数学和编程方面表现出色,DeepSeek-R1(2025)则与 o1 的能力相当
  • 本小节探讨强化学习在增强推理方面的作用,重点介绍领先的开源模型 DeepSeek-R1 和 DeepSeek-R1-Zero
Formulating Reasoning as an MDP
  • 大语言模型中的推理可以巧妙地建模为一个顺序决策过程,其中模型为响应输入查询 \(x\) 迭代构建一系列中间步骤 \(a_{1}, a_{2}, …, a_{T}\),以优化得出正确最终答案的可能性
  • 这种概念化将推理转变为适合强化学习的结构化框架,具体而言,是通过马尔可夫决策过程(Markov Decision Process, MDP)的视角,记为 \(M=(S, A, P, R, \gamma)\)
  • 马尔可夫决策过程包含状态、动作、转移、奖励和时间折扣的动态相互作用,为训练大语言模型处理复杂推理任务提供了坚实的数学基础
  • 通过将推理构建为一系列深思熟虑的选择,这种方法使模型能够系统地探索和优化其逻辑路径,这与游戏或机器人等领域的决策制定类似,但又适应了语言和概念推理的独特挑战
  • 最终目标是推导出一个最优策略 \(\pi^{*}(a_{t} | s_{t})\),该策略最大化预期累积奖励,表示为
    $$ J(\theta)=\mathbb{E}_{\pi_{\theta} }[\sum_{t = 1}^{T}\gamma^{t}R(s_{t}, a_{t})]$$
  • 并利用诸如 PPO(2017)或 A2C(Advantage Actor-Critic,2016)等强化学习技术,基于环境反馈迭代增强推理能力
  • 状态空间(State Space) :
    • 状态空间 \(s\) 构成了这个马尔可夫决策过程的基础,每个状态 \(s_{t} \in S\) 表示时间步 \(t\) 的当前推理轨迹,它是语言和结构元素的丰富组合,对推理过程至关重要
    • 具体而言,\(s_{t}\) 包括初始查询 \(x\) 、先前推理步骤序列 \(\{a_{1}, …, a_{t-1}\}\),以及编码逻辑依赖关系和中间结论(如部分解决方案或推断关系)的内部记忆表示
    • 随着推理的展开,这个状态会动态演变,通过整合通过生成步骤明确表达的路径和从上下文理解中提取的潜在知识,反映思维的进展
    • 例如,在数学证明中,\(s_{t}\) 可能包括问题陈述、先前推导的方程以及适用定理的记忆,使模型能够在各个步骤之间保持一致性
    • 这种多方面的状态表示确保大语言模型能够自适应地跟踪其推理上下文,这是处理需要持续逻辑连续性的任务(如多步问题解决或文本生成中的叙事连贯性)的先决条件
  • 动作空间(Action Space) :
    • 动作空间 \(A\) 定义了每个步骤可能的决策范围,其中动作 \(a_{t} \in A\) 对应于下一个推理步骤的选择,为推进推理过程提供了多功能工具包
    • 这些动作可能包括生成自然语言中的一个 Token 或短语来表达推理片段、应用预定义的逻辑或数学变换(如代数简化)、从知识库中选择相关定理或规则来扩展推理链,或者在得出结论性答案后终止过程
    • 动作空间的性质因任务而异:
      • 它可能是离散的(如在形式证明中从有限的逻辑规则集中选择)
      • 也可能是连续的(如在开放式推理场景中生成自由形式的文本)
      • 这反映了大语言模型的生成灵活性
    • 这种双重性使模型能够处理结构化领域(如符号逻辑)和非结构化领域(如常识推理),根据任务需求调整其策略,同时保持朝向解决方案的连贯轨迹
  • 转移函数(Transition Function) :
    • 由函数 \(P(s_{t + 1} | s_{t}, a_{t})\) 封装的转移动态控制状态如何随每个动作演变,描述了马尔可夫决策过程框架内推理轨迹的进展
    • 与传统强化学习环境中随机性来自外部变量(如环境噪声)不同,大语言模型中的推理转移主要是确定性的,由模型的自回归输出或结构化推理规则(如在证明中应用演绎步骤)驱动
    • 然而,不确定性来自模型固有的局限性(如不完善的知识、模糊的中间状态或文本生成中的概率采样) ,这引入了强化学习必须解决的可变性
      • 问题:如何理解这里的可变性?LLM 中动作即状态吧
    • 对于自回归大语言模型,转移遵循可预测的序列生成过程,但错误累积或解释分歧的可能性使得需要稳健的设计来确保可靠性
    • 这种确定性但不确定的动态强调了需要自适应策略,以在各种上下文中稳定推理,从精确的数学推导到微妙的叙事构建
  • 奖励函数(Reward Function) :
    • 奖励函数 \(R(s_{t}, a_{t})\) 作为马尔可夫决策过程的评估核心,为每个推理步骤的质量提供关键反馈,以指导模型的学习过程
    • 与具有明确奖励(如游戏中的分数)的传统强化学习任务不同,推理奖励必须精心设计以平衡稀疏性和密集性,反映任务的复杂性和目标
      • 稀疏奖励(如仅在得出正确最终答案时赋值)虽然简单,但在多步场景中可能会延迟学习;
      • 密集奖励(评估步骤的正确性、逻辑有效性或与人类偏好的一致性)则提供细致的指导,如5.2.2节所述
    • 这种灵活性使奖励函数能够适应各种推理需求,无论是奖励证明中有效推理规则的应用,还是叙事片段的连贯性,确保模型获得有意义的信号,以优化其在即时和扩展推理范围内的策略
  • 折扣因子(Discount Factor) \(\gamma\) :
    • \(\gamma \in[0,1]\) 是一个标量,它决定了即时奖励和未来奖励之间的权衡
    • 较高的 \(\gamma\) 鼓励多步推理优化,促进深度推理链而非短期启发式
    • 基于这种马尔可夫决策过程表述,目标是学习一个最优推理策略 \(\pi^{*}(a_{t} | s_{t})\),该策略最大化预期累积奖励:
      $$J(\theta)=\mathbb{E}_{\pi_{\theta} }\left[\sum_{t = 1}^{T}\gamma^{t}R\left(s_{t}, a_{t}\right)\right]$$
      • 该框架使强化学习技术(如 PPO(2017)或 A2C(2016))能够应用于通过基于推理环境的反馈迭代调整策略 \(\pi_{\theta}\),从而优化大语言模型的推理能力
Reward Design for Reasoning
  • 与具有明确奖励(如游戏分数)的传统强化学习任务不同,大语言模型中的推理需要结构化的奖励设计,以反映正确性、效率和信息量
  • 常见方法包括:
    • 二元正确性奖励,为正确的最终答案分配 \(r_{T}=1\),否则分配 \(r_{T}=0\),这种方法简单但由于反馈稀疏而引入高方差;
    • 分步准确性奖励,基于推理规则有效性或中间步骤一致性等指标提供增量反馈,以指导多步推理;
    • 自我一致性奖励,测量多个推理路径的稳定性,并为一致性高的情况分配更高奖励,以增强稳健性;
    • 基于偏好的奖励,源自 RLHF 或 RLAIF,其中在人类或人工智能反馈上训练的模型 \(r_{\phi}(s_{t}, a_{t})\) 评估推理质量,为复杂任务提供细致的指导
Large-Scale RL on Base Model
  • 大规模强化学习已成为一种变革性的后训练范式,用于增强大语言模型的推理能力,将重点从传统的监督微调转向动态的、自我进化的优化策略
  • 这种方法利用广泛的计算框架和基于迭代奖励的反馈直接优化基础模型,绕过了对预标注数据集的需求,并使模型能够自主发展复杂的推理技能
  • 通过整合大规模强化学习,大语言模型能够处理复杂的多步推理任务(如数学问题解决、逻辑演绎和战略规划),而传统的监督微调由于依赖静态的、人工整理的数据,在这些任务中往往表现不佳(2022)
  • DeepSeek-R1 模型就是这种范式的例证,它采用先进的强化学习技术实现了最先进的推理性能,同时优化了资源效率,如图13所示
  • 本小节阐述支撑 DeepSeek-R1 成功的关键方法,包括新颖的优化算法、自适应探索和轨迹管理,这些共同重新定义了强化学习驱动的大语言模型推理的潜力
  • 组相对策略优化(Group Relative Policy Optimization) :
    • DeepSeek-R1-Zero 模型利用 PPO 的一种复杂变体,称为组相对策略优化(Group Relative Policy Optimization, GRPO),以减轻大语言模型传统强化学习训练中固有的大量计算和资源需求
    • 与依赖大量评论家网络的标准 PPO 不同,组相对策略优化采用基于组的基线估计来简化优化过程,在保持策略更新稳健性的同时显著减少训练开销
    • 这种效率使大规模强化学习能够部署在资源受限的系统上,促进跨扩展轨迹的推理策略的迭代优化
    • 通过在可管理的计算范围内优化策略,组相对策略优化使 DeepSeek-R1-Zero 成为增强推理能力的可扩展解决方案,如图13所示,使其成为当代强化学习驱动的推理研究的基石
  • DeepSeek-R1-Zero :
    • DeepSeek-R1-Zero 体现了大规模强化学习在提升大语言模型推理方面的变革潜力,它不依赖传统的监督微调作为初始步骤,而是采用纯强化学习驱动的自我进化范式
    • 这种方法使模型能够通过基于奖励反馈迭代优化其内部思维链,自主发展复杂的推理技能,绕过了监督微调通常所需的预 标注数据集
    • 其结果是在复杂的多步推理任务(如数学问题解决和逻辑推导)中性能显著提升,这表明强化学习有能力从基础模型中解锁高级推理能力
    • 作为最强大的开源推理模型之一,DeepSeek-R1-Zero 的成功凸显了冷启动强化学习策略的可行性,它提供了一种资源高效的传统训练 Pipeline 替代方案,同时达到与最先进基准相当的性能
  • 分步奖励建模(Stepwise Reward Modeling) :
    • 为了在轨迹 \(\tau=(s_{1}, a_{1}, …, s_{T}, a_{T})\) 中指导推理,DeepSeek-R1 采用分步奖励模型 \(f_{\theta}\),该模型在每个时间步提供细致的反馈,定义为 \(r_{t}=f_{\theta}(s_{t}, a_{t} | D_\text{reasoning})\),其中 \(D_\text{reasoning}\) 包含带有步骤级正确性标签的人工标注思维链序列
      • 问题:DeepSeek-R1 没有使用分布奖励吧?不是使用的 GRPO 吗?
    • 这种密集的奖励结构与稀疏的序列末尾奖励形成对比,它提供关于各个推理步骤质量的即时、可操作的见解,使模型能够精确微调其策略
    • 通过利用专家精心整理的数据,奖励模型确保反馈与人类推理标准保持一致,促进扩展推理链的一致性和准确性,这是处理需要长期逻辑合成的任务的关键特征
  • 自适应探索(Adaptive Exploration) :
    • DeepSeek-R1 通过整合到其目标中的自适应探索机制增强策略优化:
      $$\begin{aligned}\mathcal{L}_\text{PPO+}=&\mathbb{E}_{\tau}\left[min \left(\frac{\pi_{\phi}(a | s)}{\pi_{old}(a | s)}A_{t}, clip\left(\frac{\pi_{\phi}(a | s)}{\pi_{old}(a | s)}, 1-\epsilon, 1+\epsilon\right)A_{t}\right)\right] \&+\lambda_{t} \mathcal{H}\left(\pi_{\phi}(\cdot | s)\right),\end{aligned}$$
      • 其中熵项 \(H\) 由自适应系数 \(\lambda_{t}=\alpha \cdot \exp (-\beta \cdot \operatorname{Var}(R(\tau_{1: t})))\) 调节,该系数根据轨迹上的奖励方差动态调整。这种方法平衡了探索和利用,鼓励模型在训练早期探索多样化的推理路径,同时在方差减小时收敛到最优策略,从而提高推理优化的稳健性和效率
  • 轨迹剪枝(Trajectory Pruning) :
    • 为了优化推理过程中的计算效率,DeepSeek-R1 实现了双注意力评论家 \(V_{\psi}(s_{t})=\text{LocalAttn}(s_{t})+\text{GlobalAttn}(s_{1: t})\),它通过结合局部步骤评估和全局轨迹上下文来评估每个状态的价值
    • 当 \(V_{\psi}(s_{t})<\gamma \cdot \max_{k \leq t} V_{\psi}(s_{k})\) 时进行剪枝,终止低价值推理路径,将资源集中在有前景的轨迹上
    • 这种机制减少了无效探索,加速了收敛,并确保模型优先考虑高质量推理序列,这有助于其在复杂推理任务中表现出色
RL for Reasoning with Cold Start
  • DeepSeek-R1-Zero 通过采用冷启动方法进一步推进了强化学习的应用,它避开了监督微调,完全依赖于从未训练的基础模型进行大规模强化学习
    • 这种自我进化策略通过迭代反馈优化推理,生成稳健的思维链序列,而不依赖预标注数据
  • 通过直接在推理任务上训练,DeepSeek-R1-Zero 展示了强化学习的多功能性,其性能与从监督微调整开始的模型(如其对应模型DeepSeek-R1)相当甚至更优
    • 这种方法不仅减少了对大量标记数据集的依赖,还展示了强化学习自主发展复杂推理能力的潜力,为未来大语言模型的发展提供了一种可扩展的范式
  • 总之,强化学习为增强推理提供了一个有前景的框架,有效的奖励设计、策略优化(如组相对策略优化)和探索策略仍然至关重要
  • 未来的研究可以探索结合模仿学习或自监督目标的混合方法,以进一步优化这些能力,巩固强化学习在推进大语言模型推理方面的作用

PoLMs for Efficiency

  • 基于前面章节讨论的后训练优化技术,后训练的效率专门针对 LLM 在初始预训练后的运行性能
    • 其主要目标是优化关键的部署指标(例如处理速度、内存使用和资源消耗),从而使大语言模型在实际应用中更具实用性
  • 实现后训练效率的方法主要分为三类:
    • 模型压缩(Model Compression,6.1节),通过剪枝和量化等技术来降低整体计算负担;
    • 参数高效微调(Parameter-Efficient Fine-Tuning,6.2节),仅更新模型的部分参数或采用专门的模块,从而最小化重新训练的成本并加速对新任务的适应;
    • 知识蒸馏(Knowledge Distillation,6.3节),将知识从较大的预训练模型转移到较小的模型,使较小的模型能够在减少资源需求的情况下实现可比的性能

Model Compression

  • 模型压缩包含一系列旨在减小大语言模型的规模和计算需求的技术,其中包括后训练量化、参数剪枝和低秩近似
Post-training Quantization
  • 大语言模型的一种关键压缩方法是量化,它将高精度数据类型 \(X^{H}\)(30位浮点数)转换为低精度格式 \(X^{L}\)(8位整数)(2021)。这种转换可表示为:
    $$\mathcal{X}^{L} = \text{Round}\left(\frac{\text{absmax}\left(\mathcal{X}^{L}\right)}{\text{absmax}\left(\mathcal{X}^{H}\right)} \mathcal{X}^{H}\right)=\text{Round}\left(\mathcal{K} \cdot \mathcal{X}^{H}\right)$$
    • 其中 \(\mathcal{K}\) 代表量化常数,\(\text{absmax}\) 指元素的绝对最大值
    • 函数 \(\text{Round}\) 将浮点数转换为整数
  • 大语言模型的量化包括后训练量化(post-training quantization,PTQ)和量化感知训练(quantization-aware training,QAT)
  • 后训练量化允许在预后训练调整模型的权重和激活值,使用一个小的校准数据集来优化计算效率和性能,如图14所示
  • 此外,表5展示了几种著名的大语言模型量化方法的性能指标
  • 仅权重量化(Weight-Only Quantization, WOQ) :仅权重量化专注于压缩模型权重以提高效率
    • GPTQ (2023) 使用最优脑量化(Optimal Brain Quantization, OBQ)进行逐层量化,将权重降低到 3 或 4 比特,以减少内存使用和处理时间
    • QuIP (2024) 引入了用于2比特量化的非相干处理,提供了更紧凑的表示,进一步提高了效率
    • AWQ (2024) 和 OWQ (2024) 通过对特别敏感的权重保持高精度来解决精度保留问题,从而最小化推理过程中可能的精度损失
    • SpQR (2023) 将稀疏量化与解码相结合,实现了高效的 token-by-token 推理,同时保持模型的响应能力
  • 权重-激活值联合量化(Weight-Activation Co-Quantization, WAQ) :权重-激活值联合量化将权重和激活值结合起来以提高效率
    • LLM.int8() (2022) 使用精确存储来处理激活值异常值,并量化为 8 比特,同时保持性能
    • SmoothQuant (2023) 实现了每通道缩放,将量化难度从激活值转移到权重,以实现无损结果
    • OS+ (2023) 通过通道移位和缩放减轻了异常值的影响,从而提高了效率
    • OmniQuant (2024) 将量化障碍从激活值转移到权重,并对极值的裁剪阈值进行微调
    • RPTQ (2023) 对相似通道进行分组,以确保量化参数的一致性(进一步提高了效率)
  • KV 缓存量化(KV-Cache Quantization, KVQ) :KV 缓存量化解决了大语言模型中的内存优化挑战,特别是随着输入 Token 数量的增加
    • KVQuant (2024) 引入了针对大上下文长度的高效推理的定制方法,在性能损失最小的情况下保持性能
    • KIVI (2024) 通过对键和值缓存应用不同的量化策略来优化内存节省,实现了 2 比特量化而无需微调
    • WKVQuant (2024) 进一步通过二维量化策略和跨块正则化对其进行了改进,提供了与权重-激活值量化相当的内存效率,且性能几乎相同
Parameter Pruning
  • 参数剪枝 (2022) 是一种通过最小化模型大小和复杂性来提高大语言模型效率的关键技术,同时又不牺牲准确性
  • 如图15所示,剪枝可分为非结构化剪枝和结构化剪枝
  • 非结构化剪枝(Unstructured Pruning) :非结构化剪枝通过消除不重要的权重来提高大语言模型的稀疏性
    • SparseGPT (2023) 方法通过单次剪枝实现了高达 60% 的稀疏性,同时保持最小的损失
    • Wanda (2023) 方法基于权重大小和激活值进行剪枝,无需重新训练
    • SAMSP (2024) 利用 Hessian 矩阵的敏感性进行稀疏性的动态调整,旨在最小化误差
    • DSnoT (2024) 通过采用迭代剪枝周期来提高性能
    • Flash-LLM (2023) 从全局内存中检索稀疏权重,并在片上缓冲区中将其密集重建,以促进高效计算
  • 结构化剪枝(Structured Pruning) :结构化剪枝则侧重于剪枝大语言模型中的整个参数组 ,以提高硬件效率并简化结构
    • LLM-runner (2023) 评估 LLaMA (2023) 的重要性,并使用 LoRA (2021) 在剪枝后恢复精度
    • FLAP (2024) 使用结构化指标在不进行微调的情况下优化压缩
    • SliceGPT (2024) 采用 PCA 进行剪枝,同时保持效率
    • Sheared LLaMA (2023) 通过基于正则化的剪枝来优化模型形状
    • LoRAPrune (2024) 通过基于 LoRA 重要性的迭代结构剪枝来提高效率
    • Deja Vu (2023) 通过预测关键注意力头和 MLP 参数,利用上下文稀疏性来减少延迟,同时保持准确性
  • 低秩近似(Low-Rank Approximation) :低秩近似通过用更小的矩阵 U 和 V 近似权重矩阵 W 来压缩大语言模型 ,从而实现 \(W \approx U V^{\top}\) 。这种方法不仅减少了参数数量 ,还提高了操作效率(enhances operational efficiency)
    • TensorGPT (2023) 采用 TTD(Tensor-Train Decomposition)来开发更高效的嵌入格式
    • LoSparse (2023) 将低秩近似与剪枝相结合,专门针对压缩相干神经元组件
    • FWSVD (2022) 实现了加权 SVD 方法
    • ASVD (2023) 提供了免训练的 SVD 替代方案
      • FWSVD 和 ASVD 两者都以后训练效率为目标
    • SVD-LLM (2024) 通过建立奇异值与压缩损失之间的直接关系进一步改进了压缩

Parameter-Efficient Fine-Tuning

  • 参数高效微调(PEFT)的过程包括冻结完整的大语言模型主干,同时只修改有限数量的新添加参数
  • 如图16所示,PEFT 方法分为四类: Additive PEFT、Selective PEFT、Reparameterized PEFT 和 Hybrid PEFT
Additive PEFT
  • Additive PEFT 将新的可训练模块整合到大语言模型中,而不改变原始参数,允许特定任务的微调,同时保留基础模型的知识,这对于微调是高效的
  • 适配器(Adapters) :适配器在 transformer 块中集成紧凑层,定义为:
    $$\text{Adapter}(x) = W_\text{up} \sigma\left(W_\text{down} x\right) + x$$
    • 其中,适配器层包括
      • 下投影矩阵 \(W_\text{down} \in \mathbb{R}^{r \times d}\)
      • 非线性激活函数 \(\sigma\)
      • 上投影矩阵 \(W_\text{up} \in \mathbb{R}^{d \times r}\)
    • 这里,\(d\) 是隐藏层维度,\(r\) 是瓶颈维度,在保持性能的同时降低复杂性
    • 基于这种结构:
      • Serial Adapter (2019) 在每个 transformer 块中引入了两个模块
      • AdapterFusion (2020) 通过将适配器放置在 Add&Norm 之后来提高效率
      • 并行适配器(Parallel Adapter, PA)(2021) 使适配器与子层并行运行
      • CoDA (2023) 通过使适配器与子层并行运行来进行优化
      • MerA (2023) 使用最优传输技术统一适配器的权重和激活值(这与 AdapterFusion 不同)
  • 软提示(Soft Prompt) :软提示通过向输入序列添加可调整向量而不是优化离散 Token 来提高模型性能 (2023)。这种方法形式化为:
    $$X^{(l)} = \left[s_{1}^{(l)}, …, s_{N_{S} }^{(l)}, x_{1}^{(l)}, …, x_{N_{X} }^{(l)}\right]$$
    • 其中:
      • \(s_{i}^{(l)}\) 表示软提示 Token
      • \(x_{i}^{(l)}\) 表示原始输入 Token
      • \(N_{S}\) 和 \(N_{X}\) 分别是软提示和原始输入 Token 的数量
    • Prefix Tuning (2021) 在 transformer 层之间引入可学习向量,通过重参数化来稳定,并通过 P-Tuning v2 (2021) 和 APT (2021) 进行改进
    • Prompt Tuning (2021) 专注于初始嵌入层,以低计算成本优化大型模型
    • Xprompt (2022) 和 IDPG (2022) 简化提示生成和插入
    • SPoT (2021) 和 PTP (2023) 之类的方法解决了稳定性和收敛速度问题
    • DePT (2023) 和 SMoP (2023) 通过优化的提示结构降低计算需求
  • 其他 Additive 方法(Other Additive Methods) :
    • 除了前面的技术外,诸如 \((IA)^3\) (2022) 和 SSF (2022) 之类的方法通过对模型参数进行最小但有效的调整来关注后训练效率
    • 自注意力和 FFN 操作在数学上定义为:
      $$SA(x) = \text{Softmax}\left(\frac{Q \cdot \left(l_{k} \odot K\right)^{T} }{\sqrt{d_{head} } }\right) \cdot \left(l_{v} \odot V\right) \\
      FFN_\text{transformer}(x) = W_\text{up} \cdot \left(l_{ff} \odot \sigma\left(W_\text{down} x\right)\right)\tag{26;27}$$
      • \(\odot\) 表示哈达玛积
      • 尺度向量 \(l_{k}\) 和 \(l_{v}\) 可以平滑地合并到 \(A_{Q}\) 和 \(A_{W}\) 的权重矩阵中
    • IPA (2023) 使诸如 GPT-4 之类的大语言模型与用户特定需求保持一致
      • IPA 不需要改变基础模型,因此在微调过程中保持效率
Selective PEFT
  • Selective PEFT 通过仅微调参数的一个子集来提高效率 ,如图16(b)所示
  • Selective PEFT 将二进制掩码 \(M = \{m_{1}, m_{2}, …, m_{n}\}\) 应用于参数 \(\theta = \{\theta_{1}, \theta_{2}, …, \theta_{n}\}\),其中每个 \(m_{i}\) 指示是否选择 \(\theta_{i}\) 进行微调
  • 更新的参数集表示为:
    $$\theta_{i}’ = \theta_{i} - \eta \cdot m_{i} \cdot \frac{\partial \mathcal{L} }{\partial \theta_{i} }$$
    • 其中,\(\eta\) 是学习率,\(\frac{\partial L}{\partial \theta_{i} }\) 是损失函数的梯度
    • 只有选定的参数(其中 \(m_{i} = 1\) )会被更新,从而降低计算成本,同时保持有效性
    • Diff pruning (2020),使用可微分的 \(L_{0}\)-范数来正则化可学习的二进制掩码
    • FishMask (2021),基于 fisher 信息选择参数以提高相关性
    • LT-SFT (2021) 将彩票假设(Lottery Ticket Hypothesis)应用于识别有影响力的参数
      • 补充彩票假设(Lottery Ticket Hypothesis):其核心观点是,随机初始化的密集神经网络中存在一个稀疏子网络(“中奖彩票”),当单独训练该子网络时,性能可匹配甚至超越原网络
    • SAM (2023) 采用二阶近似进行选择
    • Child-tuning (2021) 在子网络中动态选择参数
    • FAR (2022) 和 BitFit (2021) 专注于优化特定参数组
Reparameterized PEFT
  • Reparameterized PEFT 主要采用低秩参数化来提高效率,如图16(c)所示
  • LoRA(低秩适应)(2021) 引入两个可训练矩阵 \(W_\text{up} \in \mathbb{R}^{d \times r}\) 和 \(W_\text{down} \in \mathbb{R}^{r \times k}\),将输出修改为:
    $$h_{out} = W_{0} h_{in} + \alpha \left(W_\text{up} W_\text{down} h_{in}\right)$$
    • 其中,\(\alpha\) 是缩放因子
  • LoRA 允许有效地适应新任务,同时保留核心知识
  • 在 LoRA 的基础上,还有许多工作有进一步的改进:
    • Intrinsic SAID (2020) 最小化微调参数空间,进一步降低计算需求
    • 动态变体(包括 DyLoRA (2022) 和 AdaLoRA (2023)),根据特定任务需求动态调整秩
      • 其中,AdaLoRA 结合了基于 SVD 的剪枝以提高效率
    • SoRA (2023) 通过去除正交性约束来简化过程
    • Laplace-LoRA (2023) 应用贝叶斯校准进行微调
    • Compacter (2021) 和 VeRA (2023) 进一步降低参数复杂性
    • DoRA (2024) 优化方向分量的更新以提高效率和性能
    • HiRA (2025) 采用哈达玛积进行高阶更新以提高效率和性能
    • 为了处理多个任务和不断变化的领域:Terra (2024) 集成了时变矩阵,ToRA (2025) 利用 Tucker 分解进一步改进 LoRA 结构
    • (除了结构设计外)PiSSA (2025) 和 LoRA-GA (2025) 使用 SVD 和梯度对齐优化 LoRA 的初始化
    • LoRA+ (2024)、LoRA-Pro (2024) 和 CopRA (2024) 进一步完善梯度更新策略
    • ComLoRA (2025) 采用竞争学习来选择性能最佳的 LoRA 组件
Hybrid PEFT
  • Hybrid PEFT 方法通过整合或优化各种微调策略来提高后训练效率
  • 一种著名的技术 UniPELT (2021) 在 transformer 块中融合了 LoRA、前缀调优和适配器
    • 这种方法通过由前馈网络(FFN)管理的门控机制动态激活组件,这些前馈网络产生标量 \(G \in [0, 1]\),最终优化参数利用率
  • 另一种创新方法 MAM Adapter (2021) 通过在自注意力层中战略性地放置前缀调优,并在馈送前层中使用缩放的并行适配器来改进此技术
  • 基于 NAS 的方法(如 NOAH (2022) 和 AUTOPEFT (2024))通过识别为特定任务量身定制的最佳 PEFT 配置来提高后训练效率
    • 神经架构搜索(Neural Architecture Search,NAS)是一种自动设计神经网络架构的技术,旨在通过算法自动找到最优或接近最优的神经网络架构,以优化特定任务的性能
  • HeadMap (2025) 使用贪心方法识别在某些任务中起关键作用的一系列注意力头(即知识电路),并通过将这些注意力头的输出映射回大语言模型的残差流来有效地提高模型性能
  • LLM-Adapters (2023) 提供了一个框架,用于在大语言模型中集成各种 PEFT 技术,确保最有效的模块放置,以在不同模型规模上保持效率

Knowledge Distillation

  • 知识蒸馏(KD)是大语言模型后训练优化中的核心技术,能够将知识从大型预训练教师模型转移到紧凑的学生模型,以提高效率而不牺牲性能
  • 知识蒸馏最初是在模型压缩的背景下引入的,由于其能够将复杂知识提炼到资源高效的架构中,使其能够部署在受限环境(如边缘设备和嵌入式系统)中,因此受到了广泛关注
  • 通过利用教师模型的细微输出分布(比传统的硬标签更丰富),知识蒸馏使学生不仅能够复制类别预测,还能复制教师表示中包含的类间关系和细微模式
  • 知识蒸馏过程通常涉及优化一个复合损失函数,该函数平衡监督学习目标和特定于蒸馏的目标,显著降低计算和内存需求,同时保留泛化能力
  • 知识蒸馏的基本机制取决于最小化混合损失,该损失将传统分类损失与蒸馏项相结合。形式上,给定教师模型的软输出概率 \(p_{t}\) 和学生模型的预测 \(p_{s}\),以及真实标签 \(y\) 和学生输出 \(y_{s}\),知识蒸馏损失表示为:
    $$\mathcal{L}_{K D} = \alpha \mathcal{L}_{C E}\left(y, y_{s}\right) + (1 - \alpha) \mathcal{L}_{K L}\left(p_{t}, p_{s}\right)$$
    • \(L_{CE}\) 表示捕获与真实标签对齐的交叉熵损失
    • \(L_{KL}\) 表示测量教师和学生分布之间差异的 Kullback-Leibler 散度 (1951)
    • \(\alpha \in [0, 1]\) 是调节这些目标之间权衡的超参数
    • 软目标 \(p_t\) 通常通过温度参数 \(T\) 进行调整(即 \(p_{t} = \text{Softmax}(z_{t} / T)\)
      • 其中 \(z_{t}\) 是教师 logits),编码更丰富的概率信息,使学生能够模仿教师的决策细微差别,而不仅仅是标签准确性
  • 知识蒸馏广泛用于资源受限环境中的模型压缩和迁移学习,其中预训练教师指导特定任务的学生
  • 知识蒸馏的有效性取决于教师能力、学生架构和蒸馏损失设计等因素
  • 最近的进展将知识蒸馏扩展到输出蒸馏之外,使大语言模型在后训练优化中更高效和适应性更强
  • 根据对教师模型内部参数和中间表示的访问级别,知识蒸馏方法大致可分为黑盒知识蒸馏和白盒知识蒸馏
  • 如表6所示,知识蒸馏方法大致可分为两类:黑盒知识蒸馏和白盒知识蒸馏
  • 论文系统地总结了 LLM 中的各种知识蒸馏技术,以及它们相应的技能、教师模型和学生模型
Black-box KD
  • 黑盒知识蒸馏是指学生模型仅从教师的输出 logits 中学习,而无法访问其内部表示或架构细节
  • 黑盒知识蒸馏最初由 Hinton (2015) 提出,与经典的知识蒸馏范式一致,并且由于其灵活性而被广泛采用
  • 黑盒知识蒸馏的一个关键优势是它将教师模型视为一个不透明的函数 ,即使教师是具有受限访问权限的专有模型或预训练模型,也能实现知识转移
  • 在实践中:
    • 教师模型通常用于生成高质量输出:例如 ChatGPT 和 GPT-4 (2023) 等
    • 学生模型通常是较小的语言模型(smaller language models,SLM):包括 GPT-2 (2019)、T5 (2019)、Flan-T5 (2022) 和 CodeT5 (2021)
      • 这些较小的语言模型针对效率进行了优化,同时保持强大的泛化能力,使其适合部署在资源受限的环境中
  • 问题 :这里的定义是不是有问题,ChatGPT 也拿不到模型的 logits 吧,黑盒蒸馏 ChatGPT 是指蒸馏其最终文本输出而不是 logits?
  • 回答 :黑盒知识蒸馏(Black-Box Knowledge Distillation)的真实定义是指在知识蒸馏过程中,学生模型无法直接访问教师模型的内部结构、参数、中间层输出或预 softmax 层的 logits ,只能通过教师模型的外部可观察输出(例如,最终的预测结果、生成的文本、或者通过 API 返回的概率分布)来学习
White-box KD
  • 白盒知识蒸馏通过利用来自教师内部表示的额外 insight 扩展了传统的蒸馏范式
  • 当教师模型的架构已知且可访问时,这种方法是有益的,允许更丰富的监督形式
  • 白盒知识蒸馏与将教师视为不透明函数的黑盒知识蒸馏不同,白盒知识蒸馏允许学生模型不仅从教师的输出 logits 中学习,还可以从教师的中间激活、隐藏层,甚至注意力权重中学习 (2018)
DeepSeek-R1: Direct Distillation of Reasoning Patterns
  • 直接蒸馏(Direct Distillation) :DeepSeek-R1 通过将复杂的推理模式从大规模模型提炼到紧凑架构中,展示了知识蒸馏的变革潜力,显著增强了较小大语言模型的推理能力,而无需在这些模型上进行直接强化学习的计算负担
  • DeepSeek-R1 利用由大型教师模型生成的大约 800K 个样本的精选数据集,其中包括来自 DeepSeek-V3 的 200K 个非推理实例和由 DeepSeek-R1-Stage1 检查点生成的 600K 个推理实例
    • 这些样本构成了 SFT 的基础,并将其应用于开源基础模型(如 Qwen 和 LLaMA 小型变体),使学生模型能够继承通常只为更大模型保留的复杂推理能力
  • 如图17所示,DeepSeek-R1 中的直接蒸馏过程以结构化 Pipeline 展开
    • 最初,在广泛数据集上预训练的教师模型生成包含推理和非推理输出的多样化语料库,捕捉各种逻辑模式和事实知识
      • 非推理数据(约 200K 个样本)提供一般知识的基线,而推理数据(约 600K 个样本)包含通过教师的高级能力提炼的多步推理链
    • 然后,该数据集用于 SFT 阶段,其中学生模型被训练以使其输出分布与教师的输出分布保持一致,使用推理数据直接微调较小的模型以提炼紧凑的推理模型
      • 与直接应用于小型模型的传统强化学习(可能由于容量有限而产生次优推理)不同,DeepSeek-R1 的直接蒸馏通过转移预优化的推理行为规避了此类限制,以减少的资源需求实现卓越的性能
  • DeepSeek-R1 的知识蒸馏方法的一个显著特征是其强调在模型规模上保持推理完整性
    • 通过集成通过大规模强化学习提炼的 DeepSeek-R1-Stage1 的推理轨迹,学生模型不仅复制事实准确性,还模仿复杂的推理过程,例如数学问题解决或逻辑演绎所需的过程
    • 这种有针对性的转移与传统知识蒸馏形成对比,并强调了 DeepSeek-R1 在面向推理的蒸馏方面的创新
      • 注:传统知识蒸馏通常优先考虑分类任务
    • 该方法最大限度地减少了在学生上进行大量强化学习迭代的需求,利用教师的预计算推理输出来简化训练,从而提高效率和可扩展性
    • 这种方法将 DeepSeek-R1 定位为将高级推理提炼到紧凑大语言模型中的范例,为未来的后训练优化工作提供了蓝图

PoLMs for Integration and Adaptation

  • 集成和适配技术对于提升 LLM 在各种现实应用中的通用性和有效性至关重要
  • 这些方法能让大语言模型无缝处理异构数据类型,适应特定领域的需求,并利用多种架构的优势,从而应对复杂、多方面的挑战
  • 本章将阐述三种主要策略:
    • 多模态集成(第7.1节),使模型能够处理文本、图像和音频等多种数据模态;
    • 领域适配(第7.2节),针对特定行业或应用场景优化模型;
    • 模型融合(第7.3节),将不同模型的能力整合起来,优化整体性能
  • 总体而言,这些方法提高了大语言模型的适应性、效率和稳健性,拓宽了它们在各种任务和场景中的应用范围

Multi-Modal Integration

  • 基于前面章节中阐述的后训练优化策略,本节将探讨先进的方法,这些方法旨在增强大语言模型和大型多模态模型(Large Multi-modal Model, LMM),以便有效地处理多模态数据
  • 虽然监督微调能提高大语言模型在特定任务中的熟练度,但它在充分利用多模态能力方面存在局限性,这就需要更复杂的后训练方法
  • 这些技术通过将不同的数据类型集成到一个统一的框架中,使大型多模态模型能够处理复杂的跨模态任务,例如:
    • 从视觉输入生成网页代码 (2022)
    • 解读像表情包这样微妙的文化产物 (2022)
    • 在不依赖光学字符识别(optical character recognition,ORC)的情况下进行数学推理 (2023))
  • 通常,大型多模态模型由模态编码器、预训练的大语言模型骨干和模态连接器组成,如图18所示
    • 这种架构构成了后训练方法的基础,通过优化每个组件,促进强大的多模态集成和性能提升
Modal Connection
  • 模态连接方法对于将多模态数据整合到一个连贯的表征框架中至关重要,主要分为三种策略(如图19所示):
    • 基于投影的方法
    • 基于查询的方法
    • 基于融合的方法
  • 基于投影的模态连接(Projection-based Modal Connection) :基于投影的方法将各种模态的输入转换到统一的文本嵌入空间 ,使其特征与大语言模型的语言维度对齐 ,以实现无缝集成
    • LLaMA-Adapter (2023) 通过整合图像编码器将大语言模型扩展到多模态系统中,实现了基于图像的指令跟踪
    • LLaMA-Adapter V2 (2023) 通过将视觉标签嵌入到早期的大语言模型层中,改进了这一过程,促进了对视觉知识的更好吸收
    • FROMAGe (2023) 在冻结的大语言模型和视觉编码器框架内对输入和输出层进行微调,以实现跨模态交互
    • LLaVA-1.5 (2023) 则使用双线性多层感知器(MLP)来增强多模态处理的稳健性
    • Shikra (2023) 集成了空间坐标以增强自然语言对话
    • VILA (2024) 优化了视觉语言预训练以实现卓越的零样本学习能力
    • DetGPT (2023) 进一步推进了这一范式,将基于推理的目标检测与自然语言交互相结合,利用投影技术促进有效的多模态通信
    • SOLO (2024) 采用单一的 Transformer 架构进行统一的端到端视觉语言建模,它可以接受原始图像 patches(以像素为单位)和文本作为输入,而无需使用单独的预训练视觉编码器
    • MiniGPT-4 (2023) 通过单个投影层将冻结的视觉编码器与 Vicuna 对齐,通过两阶段训练过程实现了类似 GPT-4 的能力
    • Idefics (2023) 凭借自回归设计和多阶段预训练在高效推理方面表现出色
    • LaVIT (2024) 使用离散视觉标记器统一视觉和语言,实现无缝生成
    • DeepSeek-VL2 (2024) 通过动态平铺和多头潜在注意力增强了高分辨率图像理解
    • Qwen2.5-VL (2025) 通过重新设计的视觉 Transformer 在多模态任务中取得进展,在感知和视频理解方面表现出色
  • 基于查询的模态连接(Query-based Modal Connection) :基于查询的方法通过使用可学习的 query Token 从不同模态中提取结构化信息 ,弥合了文本和非文本数据之间的差距 ,从而增强了多模态集成
    • BLIP-2 (2023) 率先采用 query Transformer,有效地整合了文本和视觉输入
    • Video-LLaMA (2023) 通过组合视觉编码器将该技术扩展到视频理解领域
    • InstructBLIP (2023) 改进了查询机制,以确保精确遵循指令
    • X-LLM (2023) 通过专门的接口对齐多模态输入
    • mPLUG-Owl (2023) 和 Qwen-VL (2023) 优化了 Q-Former 架构以提高计算效率
    • LION (2024) 进一步证明了基于查询的方法在推进视觉知识集成方面的有效性,强调了它们在提升大型多模态模型在各种任务中的性能方面的实用性
    • Qwen-VL (2023) 是一系列基于 Qwen-7B 构建的大规模视觉语言模型,它结合了视觉接收器、位置感知适配器和三阶段训练 Pipeline,实现了多语言、细粒度的视觉语言理解
    • Lyrics (2023) 是一个细粒度的视觉语言预训练和 Instruction Tuning 框架,通过视觉精炼器(图像标记、目标检测和语义分割)和多尺度查询 Transformer(MQ-Former)集成语义感知的视觉对象,增强了大型视觉语言模型(large vision-language models,LVLM)的能力
  • 基于融合的模态连接(Fusion-based Modal Connection) :基于融合的技术通过将多模态特征直接嵌入到大语言模型架构中 ,加深了跨模态交互,在推理层面促进了更丰富的集成
    • Flamingo (2022) 使用交叉注意力层在 Token 预测期间融合视觉特征,实现动态多模态处理
    • OpenFlamingo (2023) 在其基础上进行扩展,允许冻结的大语言模型关注视觉编码器的输出,增强了灵活性
    • Otter (2023) 引入指令调优,以改进多模态指令遵循能力
    • CogVLM (2023) 在 Transformer 层内集成视觉专家模块,实现无缝的特征合成
    • Obelics (2024) 利用交错的图像文本训练数据,突出了基于融合的方法在实现一致的多模态性能方面的稳健性
    • InternVL (2023) 是一个大规模的视觉语言基础模型,它将视觉编码器扩展到 6B 参数,并使用语言中间件(QLLaMA)逐步将其与大语言模型对齐
    • Llama 3 (2024) 是 Meta 开发的一个新的多语言、工具使用基础模型系列,扩展到 405B 参数,具有 128K Token 的上下文窗口,通过改进数据质量、更大规模的训练和结构化的后训练策略进行了优化
Modal Encoder
  • 模态编码器将原始的多模态输入压缩成紧凑、语义丰富的表示形式,使其能够在各种任务和模态中高效处理
  • 这些组件对于将异构数据转换为与大语言模型骨干兼容的格式至关重要,支持从视觉推理到音频理解等各种应用
  • 表7全面总结了视觉、音频和其他模态中常用的编码器,详细介绍了它们的特点以及对多模态集成的贡献
  • 视觉编码器(Vision Encoder) :视觉编码器是多模态学习的基础,有助于大型多模态模型对视觉数据进行解释和生成
    • CLIP (2021) 通过对比学习建立了联合图像文本表示,增强了跨模态对齐
    • EVA (2023) 改进了视觉注意力机制以提高效率
    • ImageBind (2023) 创建了一个跨多种模态的统一嵌入空间,提升了零样本识别能力
    • SigLIP (2023) 引入了配对的sigmoid损失来优化图像文本预训练
    • DINOv2 (2023) 采用无监督学习从各种来源提取强大的视觉特征
    • LLaVA (2023) 采用自指令策略将图像转换为文本描述,使用先进的大语言模型生成新的数据集
    • Video-ChatGPT (2023) 借助大规模指令数据集支持对话式视频理解
    • BT-Adapter (2023) 通过高效的时间建模优化了视频理解
    • VideoChat (2023) 专注于时空推理,利用专门的数据集
    • CoDi-2 (2024) 和 Mipha (2024) 等模型在多模态处理中实现了效率提升
    • VL-Mamba (2024) 和Cobra (2024) 引入了状态空间模型以优化推理
    • SPHINX-Tiny (2024) 强调数据多样性和训练效率
  • 音频编码器(Audio Encoder) :音频编码器增强了大型多模态模型处理和解释听觉输入的能力,拓宽了它们的多模态范围
    • SpeechGPT (2023) 将大规模语音数据集与卷积和 Transformer 架构相结合 (2020),实现了强大的指令遵循能力
    • AudioPaLM (2023) 使用通用语音模型(USM)编码器 (2023) 结合文本和语音处理,在零样本语言翻译等任务中表现出色
    • WavCaps (2024) 采用 CNN14 (2020) 和 HTSAT (2022) 来缓解音频语言数据稀缺的问题,利用先进的大语言模型来优化数据集质量并提升学习效果,这突出了音频模态在多模态系统中的关键作用
  • 其他编码器(Other Encoder) :除了视觉和音频,用于其他模态(如 3D 理解和多模态融合)的编码器对于全面的大型多模态模型也至关重要
    • NEXT-GPT (2023) 促进了跨文本、图像、视频和音频的跨模态内容生成,通过最小的参数调整推进了类人人工智能能力
    • ImageBind-LLM (2023) 对齐视觉和语言嵌入,以改进跨模态的指令遵循
    • LL3DA (2024) 处理点云数据以进行 3D 推理和规划,引入了新颖的空间理解方法
    • X-LLM (2023) 对图像和视频输入使用 Q-Former (2023),对语音使用 C-Former (2023),将音频特征压缩为 Token-level 嵌入,以提高多模态学习效率

Domain Adaptation

  • 领域适配(Domain Adaptation, DA)是一种关键的后训练策略,用于优化大语言模型,使其在特定领域中表现出色,确保它们在目标应用中发挥实效
  • 基于迁移学习的原理 (2018; 2024),领域适配通过适配函数 \(F_\text{adapt}\) 对初始模型 \(M_\text{source}\) 进行转换,生成特定领域的模型 \(M_\text{target}\),如下所示:
  • 这个过程使 \(M_{target}\) 能够满足特定领域的独特需求和复杂性,从而优化其性能和相关性
  • 通过提高大语言模型在编程 (2023; 2022) 和数学推理 (2023) 等领域的熟练度,领域适配不仅提升了特定领域的能力,还提高了计算效率,减轻了通用模型在处理特定领域术语和推理范式时常常遇到的局限性
  • 此外,领域适配大大减少了从头开始训练特定领域模型通常所需的大量标记数据集和计算资源 (2024),使其成为后训练方法的基石
Knowledge Editing
  • 知识编辑是一种复杂的后训练方法,旨在修改大语言模型以满足特定领域的要求 ,同时不损害其基本能力
  • 这种技术有助于进行有针对性的参数调整,在整合新的或更新的领域知识时,保留模型原有的性能
  • 通过快速适应不断变化的知识环境,知识编辑成为后训练流程中不可或缺的一部分
  • 表8概述了主要的方法(例如,包括外部知识利用、集成和内在编辑)
  • 知识编辑的形式化定义(Formal Definition of Knowledge Editing) :
    • 考虑一个由 \(\theta\) 参数化的原始大语言模型,它在数据集 \(\mathcal{D}_\text{old}\) 上进行了预训练
    • 设 \(\mathcal{D}_\text{new}\) 表示包含新的或更新信息 \(\Delta K\) 的数据集。知识编辑的目标是通过应用调整 \(\Delta \theta\) 来导出修订后的参数集 \(\theta’\),从而有效地吸收 \(\Delta K\),同时最小化对 \(\mathcal{D}_\text{old}\) 的性能下降。形式上,这被构建为一个约束优化问题,其中更新后的参数定义为:
      $$\theta’=\theta+\Delta \theta, \text{ where } \mathcal{L}\left(\theta’ ; \mathcal{D}_{new }\right) \to min$$
      • \(c\) 代表一个损失函数(例如交叉熵),用于评估模型在 \(\mathcal{D}_\text{new}\) 上的质量
    • 为了保护模型在原始数据集上的性能,施加了一个约束(确保新参数 \(\theta’\) 对旧数据 \(\mathcal{D}_\text{old}\) 的拟合能力不要降低太多):
      $$\mathcal{L}\left(\theta’ ; \mathcal{D}_{old }\right) \leq \mathcal{L}\left(\theta ; \mathcal{D}_{old }\right)+\epsilon$$
      • 其中 \(\epsilon\) 是一个小的正常数,用于限制模型在 \(\mathcal{D}_\text{old}\) 上的性能损失
      • 这个公式确保 \(\theta’\) 在整合 \(\Delta K\) 的同时,保留模型的先验知识库
      • 在实际操作中,\(\Delta \theta\) 可能被限制在特定的架构组件(例如注意力层(Attn)或前馈网络(FFN)),以减少计算开销,并通过避免全面重新训练来保留核心功能
  • 知识识别 :知识编辑的初始阶段侧重于检测新信息并将其整合到模型中
    • PokeMQA (2023) 使用可编程范围检测器和知识提示来剖析查询,有效地检索相关事实
    • SERAC (2022) 将反事实模型与分类器相结合,以确定新的知识来源的适用性,提供了一种微创方法,在无需进行广泛结构修改的情况下保留了基础模型的完整性
    • 相关工作 (2024,[406]) 分析了大语言模型知识更新产生混乱涟漪效应的原因:
      • 实际的编辑通常源于新出现的事件,这些事件包含新事实与过去事实之间的逻辑联系
      • 基于这一观察,EvEdit (2024, [407]) 提出了一种基于事件的知识编辑方法,以确定知识锚点和知识更新边界
  • 知识关联 :在识别之后,此阶段将新获取的信息与模型现有的知识框架相关联
    • Transformer-Patcher (2023) 调整 Transformer 架构以整合更新的事实
    • CaliNET (2022) 重新校准参数以与事实内容对齐
    • 诸如 Eva-KELLM (2023)、MELO (2024) 和 REMEDI (2023) 等方法为精确更新优化特定行为
    • GRACE (2024) 在知识插入后提高预测准确性,确保与先前表示的无缝集成
  • 内在知识编辑 :最后阶段将关联的事实嵌入到模型的内部结构中,确保全面吸收
    • 虽然传统的微调可能消耗大量资源,但先进的技术减轻了这一负担
    • Constrained Fine-tuning (2020) 和元学习 (2021) 最大限度地减少知识损失和过拟合风险
    • Editable Training (2020) 和 KnowledgeEditor (2021) 能够快速调整参数,同时将性能影响降至最低
    • SLAG (2023)、MEND (2021) 和 MALMEN (2024) 解决编辑冲突并支持大规模更新,在整合新的领域见解的同时保持基本能力
    • LLM Surgery (2024) 通过应用反向梯度去除过时数据、使用梯度下降整合新事实以及使用 KL 散度项保留现有知识,统一了遗忘和编辑,实现了显著的计算效率
    • KNE (2024) 引入了知识神经元集成方法,精确定位并仅更新与新插入事实密切相关的神经元,在保留无关知识的同时实现更准确的编辑
    • OVERTONE (2025) 通过引入 Token-level 平滑技术来解决知识编辑中的异构 Token 过拟合问题,该技术自适应地优化训练目标,从而保留预训练知识并提高模型对新插入事实的推理能力
  • 这些有针对性的技术确保模型在整合新获取的信息时保留其基本能力
Retrieval-Augmented Generation
  • 检索增强生成(Retrieval-Augmented Generation, RAG)将传统的信息检索与现代大语言模型相结合,以提高生成输出的相关性和事实准确性 (2020; 2023; 2024)
  • 通过从外部来源动态检索相关信息并将其嵌入到生成过程中,检索增强生成解决了大语言模型在特定领域知识方面的不足,并减少了生成幻觉内容的倾向
  • 这种方法在需要精确、最新信息的领域特别有效,例如问答系统 (2020)、科学研究 (2023) 和医疗保健 (2024),能够处理复杂查询和知识密集型任务
  • 此外,检索增强生成减少了对话系统中误导性响应的普遍性,提高了基于知识的自然语言生成的保真度 (2024; 2023)
  • 本节重点关注基于训练的检索增强生成方法 (2024),认识到无训练检索增强生成方法 (2020; 2023; 2024) 可能由于缺乏特定任务优化而损害知识利用效率
  • 三种主要的训练策略:
    • 独立训练
    • 顺序训练
    • 联合训练
  • 提高了模型的适应性和集成能力,如图20所示
  • 独立训练(Independent Training) :该策略将检索器和生成器作为不同的模块进行训练,能够灵活地采用针对任务需求定制的稀疏或密集检索器
    • DPR (2020) 利用双BERT网络分别对查询和段落进行编码,应用对比学习优化检索,而无需与生成器交互
    • 相关工作 (2024) 提出了 Reward-RAG,它利用奖励模型根据基于GPT的反馈仅微调检索器,而不改变生成器
  • 顺序训练(Sequential Training) :顺序训练通过一次优化一个模块来提高效率,促进检索器和生成器之间的协同作用
    • 它包括检索器优先方法 (2023; 2023; 2023; 2023; 2023),如 RETRO (2022),该方法先预训练基于 BERT 的检索器,然后训练编码器-解码器以无缝整合检索到的内容,从而提高性能
    • LLM 优先方法 (2023; 2023; 2023),如 RA-DIT (2023),先微调语言模型以有效利用检索到的知识,然后优化检索器以实现更好的对齐和连贯性 (2023; 2023)
  • 联合训练(Joint Training) :联合训练在端到端框架中同步优化检索器和生成器
    • RAG (2020) 最小化负对数似然以共同训练两个组件
    • REALM (2020) 通过最大内积搜索(Maximum Inner Product Search, MIPS)(2015) 提高检索精度
  • 这些方法适应特定任务的需求,最大限度地利用外部知识的优势,并最大限度地减少生成错误

Model Merging

  • 模型融合已成为提高大语言模型在训练和推理阶段性能和效率的重要后训练策略 (2024; 2024)
  • 模型融合将专门的模型整合到一个统一的架构中,避免了大规模重新训练的需求,并解决了大型模型尺寸和计算需求带来的挑战
  • 模型融合将单任务模型整合为一个能够执行多任务的整体(这与在合并的数据集上训练不同),为多任务学习提供了一种资源高效的范式
  • 通过简化训练流程并促进开发在各种应用中具有强大泛化能力的通用模型,该技术优化了大语言模型在不同场景中的部署
  • 给定一组候选模型 \(M = \{M_{1}, M_{2}, …, M_{n}\}\),目标是设计一个融合函数 \(F_\text{merge}\),生成一个统一的模型 \(M’\),可能以基础模型 \(M_{1}\) 为锚点,如下所示:
Model Merging at Hierarchical Levels
  • 模型融合技术系统地分为三个层级(如图21所示):
    • 权重级(weight-level merging)
    • 输出级(output-level merging)
    • 模型级融合(model-level merging)
  • 权重级模型融合(Weight-Level Model Merging) :权重级融合直接操作参数空间 ,使其特别适用于具有相似架构或在相关任务上训练的模型
    • 形式上,给定参数集 \(\theta_{1}, \theta_{2}, …, \theta_{n} \in \mathbb{R}^{d}\),线性融合方案将这些参数集聚合为一个统一的集合 \(\theta’\),表示为:
      $$\theta’=\alpha_{1} \theta_{1}+\alpha_{2} \theta_{2}+…+\alpha_{n} \theta_{n}, \\
      \text{ subject to }\quad \alpha_{k} \geq 0, \sum_{k=1}^{n} \alpha_{k}=1$$
    • Model Soup (2022; 2020) 是一个权重级模型融合例子
      • Model Soup 通过线性组合在不同任务上微调的模型的权重,生成一个单一、高效的模型
    • Task Arithmetic(TA)(2022) 通过参数的算术运算扩展了这种灵活性,提高了性能适应性
    • TIES-merging (2024) 确保参数一致性(为了减轻对齐问题)
    • DARE (2024) 通过概率性地调整参数增量来最小化干扰,优化融合过程的连贯性和效率
  • 输出级模型融合(Output-Level Model Merging) :当模型在架构或初始化方面存在差异 ,使得权重级方法不可行时,输出级融合变得有利
    • 输出级模型融合方法聚合输出分布而不是内部参数,表示为:
      $$ y’=\alpha y_{1}+(1-\alpha) y_{2}, \alpha \in[0,1] $$
      • 其中 \(y_{1}\) 和 \(y_{2}\) 分别表示模型 \(M_{1}\) 和 \(M_{2}\) 的概率分布
      • 与集成策略类似,这种方法将模型预测合成为一个统一的输出
    • LLMBlender (2023) 通过生成独立输出并通过排序和生成过程将其融合来实现这一点
    • FuseLLM (2024) 将组合的输出概率蒸馏到单个网络中,以实现分布保真度
    • FuseChat (2024) 通过将知识从多个大语言模型转移到一个整合的目标中,架起了权重级和输出级融合之间的桥梁,增强了跨模型协同作用
  • 模型级模型融合(Model-Level Model Merging) :模型级融合通过路由机制整合子模型或层 ,通常在混合专家(Mixture of Experts, MoE)框架内 ,表示为:
    $$ M’=\text{Merge}\left(M_{1}, M_{2}\right) $$
    • 其中 Merge 表示硬路由或软路由函数
    • Switch Transformer (2022) 采用离散门控来选择性地激活专家层,减少计算负载,尽管由于刚性路由可能会有潜在的性能权衡
    • SoftMoE (2023) 和 SMEAR (2023) 利用连续门控促进专家之间更平滑的过渡,增强组件集成和模型凝聚力
Pre-Merging Methods
  • Pre-Merging Methods 通过优化独立模型的权重空间、架构一致性和参数对齐,为模型融合建立兼容性基础,从而最大限度地减少后续融合阶段的冲突和干扰
  • 这些技术提高了融合过程的有效性,确保得到的统一模型保留其组成部分的优势,同时减轻潜在的性能下降
  • 线性化微调(Linearization Fine-tuning) :
    • 这种方法在预训练模型的切空间内优化模型,避开原始的非线性参数空间,以实现权重解耦,减少融合过程中的干扰
    • 诸如适配器(例如 TAFT (2023))或注意力层 (2024) 的部分线性化技术将权重更新对齐到不相交的输入区域,在融合模型中保留独立功能 (2023)
    • 通过将更新约束在一个线性化框架内,这种方法促进了不同模型之间的无缝集成
  • 架构转换(Architecture Transformation) :
    • 该策略将具有不同架构的异构模型转换为适合直接参数融合的同构形式
    • 方法包括知识蒸馏,如 FuseChat (2024) 所示,以及身份层插入,如 CLAFusion (2021)
    • GAN Cocktail (2021) 初始化目标模型以吸收来自不同架构的输出,实现跨越结构差异的统一融合过程
  • 权重对齐(Weight Alignment) :这种方法通过排列将模型对齐到共享的权重域,利用线性模式连接(Linear Mode Connectivity, LMC)特性来提高兼容性
    • 技术包括最优传输(OTFusion (2019))、启发式匹配(Git re-basin (2022))和基于学习的对齐(DeepAlign (2021))
    • REPAIR (2022) 减轻了缺乏归一化层的模型中的对齐失败,确保在融合前参数能够稳健收敛
During-Merging Methods
  • During-Merging Methods 专注于动态优化参数融合策略,以解决任务冲突、减轻干扰,并提高所得融合模型的性能和泛化能力
  • 这些方法实时处理整合不同模型的挑战,增强统一架构的适应性和稳健性
  • 基本融合(Basic Merging) :
    • 这种方法利用简单的参数平均或任务向量算术,将任务向量 \(\tau_{t}\) 定义为第 \(t\) 个任务的微调参数 \(\Theta^{(t)}\) 与初始预训练参数 \(\Theta^{(0)}\) 之间的偏差:
      $$\tau_{t}=\Theta^{(t)}-\Theta^{(0)}$$
    • 并通过公式 \(\Theta^{(\text{merge} )}=\Theta^{(0)}+\lambda \sum_{t=1}^{T} \tau_{t}\) 促进多任务学习 (2022)
    • 这种方法计算效率高且概念简洁,但经常遇到由于未减轻的参数相互作用导致的任务干扰,限制了其在需要复杂任务协调的场景中的实用性
  • 加权融合(Weighted Merging) :
    • 该策略根据各个模型的重要性动态分配融合系数,定制贡献以优化融合结果
    • MetaGPT (2024) 通过归一化每个任务向量的平方 L2 范数来计算最优权重:
      $$\lambda_{t}^{*}=\frac{\left| \tau_{t}\right| ^{2} }{\sum_{k=1}^{T}\left| \tau_{k}\right| ^{2} }$$
      • 从而为参数变化更大的任务分配更大的影响,如更高的 \(\left|\tau_{t}\right|^{2}\) 所示
    • SLERP (2024) 采用球面插值确保参数的平滑过渡,保留模型连续性
    • 分层 AdaMerging (2024) 通过在每层粒度上优化系数来改进此过程,提高融合架构内的任务特定精度
  • 子空间融合(Subspace Merging) :
    • 这种方法将模型参数投影到稀疏子空间中 ,以最大限度地减少干扰,同时保持计算效率,解决参数贡献的重叠问题
    • TIESMerging (2024) 保留按幅度排列的前 20% 参数,解决符号冲突以保持连贯性
    • DARE (2024) 缩放稀疏权重以减少冗余
    • Concrete (2023) 利用双层优化来构建自适应掩码,确保模型组件的精细集成,减少跨任务干扰
  • 基于路由的融合(Routing-based Merging) :
    • 该技术根据输入特定属性动态融合模型,实现上下文响应式集成过程
    • SMEAR (2023) 计算依赖于样本的专家权重以优先考虑相关特征
    • Weight-Ensembling MoE (2024) 采用输入驱动的线性层路由进行选择性激活
    • Twin-Merging (2024) 融合任务共享和任务私有知识,培养灵活的融合框架,适应不同的输入需求并增强多任务稳健性
  • 融合后校准(Post-calibration) :
    • 这种技术通过将统一模型的隐藏表示与独立组件的隐藏表示对齐来纠正融合后的表示偏差,减轻性能下降
    • Representation Surgery (2024) 就是一个例子,它通过改善表示一致性来增强融合模型的稳健性和准确性

Datasets

  • 后训练技术经过精心设计,旨在提高 LLM 对特定领域或任务的适应性,而数据集是这一优化过程的基石
  • 对以往研究的深入考察 (2024; 2024) 强调,数据的质量、多样性和相关性对模型效能有着深远影响,往往决定了后训练工作的成败
  • 为了阐明数据集在这一背景下的关键作用,论文对后训练阶段所使用的数据集进行全面回顾和深入分析,并根据其收集方法将其分为三大类
    • 人工标注数据
    • 蒸馏数据
    • 合成数据
  • 这些类别反映了数据整理的不同策略,模型要么采用单一方法,要么采用融合多种类型的混合方法,以在可扩展性、成本和性能之间取得平衡
  • 表9详细概述了这些数据集类型,包括它们的来源、规模、语言、任务和后训练阶段(如 SFT 和 RLHF ),论文将在后续章节中探讨它们在提升大语言模型能力方面的贡献和面临的挑战

Human-Labeled Datasets

  • 人工标注数据集以其极高的准确性和语境保真度著称,这些特性源于标注者对任务复杂性的细致理解,以及他们做出精确、符合语境调整的能力

  • 这些数据集是优化 Instruction Tuning 的基石,通过提供高质量、专业整理的训练信号,显著提升大语言模型在各类任务中的性能

  • 在这一类别中,Flan (2021)、P3(Public Pool of Prompts)(2021)、Sup-Natinst(Super-Natural Instructions)(2022) 和 Dolly-15K (2023) 等著名示例成为大语言模型后训练中广泛采用的资源,每一种都通过人类专业知识为模型能力的优化做出了独特贡献

  • 用于监督微调的人工标注数据 :在监督微调阶段,人工标注数据集发挥着不可或缺的作用,Flan、Sup-Natinst 和 Dolly-15K 的贡献就体现了这一点,它们提供精心设计的提示-响应对和特定任务指令,以提高大语言模型在各种自然语言处理基准测试中的效能

    • Flan :
      • Flan 数据集 (2021) 是一项基础性资源,最初包含 62 个广为人知的自然语言处理基准测试,如 HellaSwag (2019)、MRPC (2005) 和 ANLI (2019),通过 1800K 个示例促进强大的多任务学习
      • 最近,FlanV2 (2023) 作为一个高级迭代版本出现,它整合了 Flan (2021)、P3 (2021)、Sup-Natinst (2022) 以及大量其他数据集,形成一个连贯、全面的语料库,从而增强了其在各种语言和任务领域的监督微调效用
    • Sup-Natinst :
      • 超级自然指令(Super-Natural Instructions,Sup-Natinst)(2022) 提供了涵盖 55 种语言的 76 种任务类型,是多语言大语言模型后训练的多功能资源
      • 每个任务都与一个指令精心配对,该指令包括清晰的任务定义(概述从输入文本到期望输出的映射)和一组示例,这些示例既展示正确响应也展示错误响应,为引导模型实现精确的任务执行和增强跨语言适应性提供了坚实框架
    • Dolly-15k :
      • 由 Databricks 员工开发的 Dolly-15K (2023) 是一个精心整理的语料库,包含 15,000 个高质量的人工生成提示-响应对,专门设计用于大语言模型的 Instruction Tuning
      • 它涵盖广泛的主题和场景,包括头脑风暴、内容生成、信息提取、开放式问答和摘要,反映了丰富多样的任务类型,使模型能够灵活适应各种指令语境,并提高语境相关性
  • 上述语料库充分体现了人工标注数据集在监督微调中的效力,即广泛覆盖各种任务和场景

  • 除上述语料库外:

    • OpenAssistant (2023) 提供了一个庞大的多语言对话语料库,该语料库源自全球众包工作,可免费用于推进研究工作
    • OpenOrca (2023) 通过数百万个 GPT-3.5 和 GPT-4 完成内容扩展了 FlanV2 (2023),成为一个动态扩展的微调与任务对齐资源
    • 尽管这些数据集对模型泛化能力有显著贡献,但确保标注质量和多样性的一致性仍然是一项挑战,因此需要严格的质量控制以最大限度地发挥它们的作用
  • 用于 RLHF 的人工标注数据 :对于 RLHF,P3、其多语言扩展版本 xP3 (2022) 和 SHP (2021) 等人标注数据集提供了必要的人工标注评估,这些评估完善了大语言模型与用户偏好的对齐,为奖励建模提供了细致的反馈机制

    • P3 :
      • P3 数据集 (2021) 是一个精心整理的 Instruction Tuning 资源
      • 它从 Hugging Face Hub 聚合了 23000K 个多任务提示
      • 每个提示都配有手工编写的指令,涵盖各种自然语言处理任务,从而为 RLHF 提供丰富基础,以提高大语言模型在各种应用中的适应性和精确性
    • xP3 :
      • xP3(Crosslingual Public Pool of Prompts)(2022) 将 P3 扩展到多语言框架,包含 46 种语言和 16 种自然语言处理任务的提示和监督数据,旨在支持 BLOOMZ 和 mT0 等模型的多任务提示微调
      • 其内容整合了英文 P3 数据集、四个新的英文任务(如翻译、程序合成)以及 30 个多语言自然语言处理数据集,为跨语言 RLHF 优化提供全面资源
    • SHP :
      • SHP (2021) 包含 349,000 个人类偏好标注,这些标注针对 18 个学科领域的问题和指令的响应,评估响应的有用性,用于训练 RLHF 奖励模型和评估自然语言生成(NLG)质量
      • 与 HH-RLHF 等混合数据集不同,它的独特之处在于完全依赖人类创作的数据
  • 这些数据集通过提供多样化的人工标注评估,完善了 RLHF,使模型更好地与用户偏好对齐

  • OpenAI Summarization (2021) 和 Webgpt (2021) 提供基于比较的结构化反馈和李克特量表评分,有助于使模型输出更符合人类期望

  • HH-RLHF (2022) 通过包含对有用性和无害性的评估进一步强化了这一框架,为旨在确保安全和符合伦理的响应的模型奠定了坚实基础

  • StackExchange (2023) 贡献了特定领域的用户生成内容,丰富了训练数据,尤其有利于需要技术领域专业知识的模型

  • 但这些数据集面临着可扩展性、人工标注可能存在的偏差以及超出特定领域的适用性有限等挑战

  • 因此,尽管它们很有价值,但可能需要补充更广泛的数据集,以实现模型在各种现实世界任务中的全面对齐

Distilled Dataset

  • 蒸馏数据源于将庞大的原始数据集精炼为紧凑、优化的子集的复杂过程,这些子集保留了大语言模型训练所需的关键信息,在保持性能的同时提高了训练效率并降低了计算需求
  • 这种方法产生的数据集在效能上常常媲美甚至超越未精炼的数据集,加速模型收敛并减少资源消耗,尤其在 RLHF 阶段
  • ShareGPT (2023) 和 HC3(Human-ChatGPT Comparison Corpus)(2023) 是关键示例,它们通过提炼现实世界交互和比较见解,成为大语言模型微调的广泛采用的资源,提供可操作的训练信号
  • ShareGPT
    • ShareGPT (2023) 是一个动态数据收集平台,通过其 API 聚合了大约 90,000 个对话,这些对话来自用户与 ChatGPT 或 GPT-4 的真实交互
    • 它包含真实的人类指令和查询以及相应的人工智能响应,将自然对话模式提炼为集中资源,使 RLHF 能够完善大语言模型的对话流畅性和语境响应能力,具有高度的相关性和质量
  • HC3 :
    • HC3 数据集 (2023) 专门设计用于对比 ChatGPT 生成的响应与人类编写的答案,包含 161,000 个问答对,涉及开放式话题、金融、医学、法律和心理学等领域
    • 这个经过提炼的语料库便于对响应特征和质量进行比较分析,使研究人员能够在 RLHF 期间提高大语言模型输出的真实性和特定领域准确性,同时突出人类与人工智能生成内容之间的差异

Synthetic Datasets

  • 合成数据是大语言模型后训练的监督微调阶段的变革性资产,它通过人工智能模型生成,为人工标注数据集提供了具有成本效益、可扩展且保护隐私的替代方案
  • 通过自动创建指令-响应对和对话,合成数据能够构建庞大的训练语料库,提高模型的适应性
    • Self-Instruct-52K (2022)、Vicuna (2023) 和 Baize (2023) 是广泛用于增强大语言模型指令遵循和对话生成能力的主要示例
  • 基于 Self-Instruct 方法的数据集(Datasets Based on the Self-Instruct Method) :
    • 采用 Self-Instruct Method 的合成数据集从一小组手工编写的种子示例开始,利用大语言模型生成大量指令遵循数据,提高模型对各种指令的响应能力,Self-Instruct-52K、Alpaca 和 Magpie 系列就是这种方法的体现,它们通过可扩展自动化推进 Instruction Tuning
    • Self-Instruct-52K :
      • Self-Instruct-52K (2022) 为指令遵循模型建立了基准,它使用各种提示模板从手工编写的种子中生成 52,000 个示例,引导大语言模型更精确、一致地解释和执行特定任务指令
    • Alpaca :
      • Alpaca (2023) 和 Alpaca-GPT4 (2023) 分别使用 GPT-3 和 GPT-4 将初始的 175 个种子对扩展为 52,000 个高质量指令-响应对,提高了指令遵循能力;
      • InstInWild (2023) 为多语言语境调整了这种方法,生成英文和中文数据集,增强跨语言适应性
    • Magpie 数据集(Magpie Datasets) :Magpie 数据集 (2024) 利用对齐的大语言模型从预定义模板生成指令-响应对,产生了专门的系列,如:
      • 强调思维链推理的 Magpie Reasoning V2
      • 针对流行模型的 Magpie Llama-3 和 Qwen-2 系列
      • 适用于 Gemma 架构的 Magpie Gemma-2
      • 包含偏好优化信号的 Magpie-Air-DPO 等变体
    • 通过这些数据集共同增强了对话和推理任务的监督微调与 Instruction Tuning
    • 除此之外,下面的数据集显著扩大了指令生成的规模
      • Unnatural Instructions (2022):240K examples
      • Evol-Instruct (2023):通过迭代复杂度增强得到 70K-143K refined entries
      • Belle (2023):来自 ChatGPT 的 500K-1100K 中文对话)
      • 然而,质量保证、复杂度校准和偏差缓解方面的挑战仍然存在,需要持续改进以确保在复杂应用中的可靠性
  • 基于 Self-Chat 方法的数据集(Datasets Based on Self-Chat Methods) :
    • Self-Chat 数据集采用模型在内部或与同伴模拟多轮对话的技术,提高对话生成能力并弥补现有语料库的不足,Baize、UltraChat 和 OpenHermes 通过自动化交互策略体现了这种方法
    • Baize :
      • Baize (2023) 利用 ChatGPT 的 Self-Chat 技术生成 653,000 个多轮对话,整合来自 Quora、Stack Overflow 和 Alpaca 的种子数据以提高指令遵循质量,从而完善大语言模型的对话连贯性和任务遵循能力,用于监督微调
    • UltraChat :
      • UltraChat (2023) 利用多个 ChatGPT API 生成超过 12M 个高质量对话记录,涵盖各种主题,克服了多轮数据集普遍存在的质量低下和标注不准确等问题,为对话增强提供了强大的监督微调资源
    • Openhermes :
      • 由 Teknium 开发的 OpenHermes 包括 OpenHermes-1 (2023)(243K entries)及其扩展版本 OpenHermes-2.5 (2023)(1M entries),提供高质量的监督微调数据集,具有更大的体量和多样性,涵盖广泛的主题和任务类型,以提高对话和指令遵循能力
    • 这些 Self-Chat 数据集使模型能够通过自交互生成多轮对话,如 Baize 利用具有各种种子的 ChatGPT 以及 UltraChat 利用广泛的 API 驱动对话,显著提高了对话质量并填补了训练数据可用性的关键空白
  • 基于真实用户交互的数据集(Datasets Based on Real User Interactions) :
    • 源自真实用户交互的数据集利用与大语言模型的真实对话交换,捕捉多样化和真实的输入,以提高模型处理现实世界场景的能力,Vicuna、WildChat 和 GenQA 是这种方法的主要示例
    • Vicuna :
      • Vicuna (2023) 在从 ShareGPT 的公共 API 共享的大约 70,000 个用户对话上进行微调,通过将 HTML 转换为 markdown、过滤低质量样本以及分割冗长对话以适应模型语境长度来处理这些对话,确保高质量的监督微调数据用于真实交互建模
    • WildChat :
      • WildChat (2024) 包含 1M 个真实世界的 User-ChatGPT 交互,涵盖多种语言和提示类型,具有模糊请求和语码转换等独特交流方式,既作为监督微调资源,又作为分析用户行为的工具
    • GenQA :
      • GenQA (2024) 提供超过 10M 个经过清理和过滤的指令样本的庞大监督微调数据集,这些样本完全由大语言模型生成,无需人工输入或复杂流程,通过快速生成合成数据来弥补覆盖空白,补充现有语料库
    • 与人工标注数据集相比,合成数据在成本、可扩展性和隐私方面具有优势,但在深度和真实性方面可能存在不足,存在偏差传播和过度简化的风险
    • 依赖人工智能生成内容可能会延续模型固有的错误,这凸显了整合合成数据和人工生成数据以提高大语言模型在各种语境中的稳健性和适用性的必要性

Applications

  • 尽管预训练赋予了 LLM 强大的基础能力,但在专业领域部署时,它们常常面临一些持续存在的局限性,比如上下文长度受限、容易产生幻觉、推理能力欠佳以及存在固有偏见等
  • 这些缺陷在现实应用中尤为关键,因为精准性、可靠性和伦理一致性至关重要。这引发了一些核心问题:
    • (1)如何系统性地提升大语言模型的性能以满足特定领域的需求?
    • (2)有哪些策略能有效缓解实际应用中存在的固有障碍?
  • 后训练作为一项关键解决方案,通过优化大语言模型对特定领域术语和推理模式的识别能力,同时保留其广泛的综合能力,从而增强了它们的适应性
  • 本章将阐述后训练大语言模型在专业、技术和交互领域的变革性应用,详细说明定制化的后训练方法如何应对这些挑战,并提升模型在不同场景中的实用性

Professional Domains

  • 法律助手(Legal Assistant) :法律领域是利用后训练赋予大语言模型专业知识的典型场景,能让它们应对法学领域的复杂知识体系,并解决法学中固有的多方面挑战
    • 大量研究 (2023; 2023; 2023) 探讨了大语言模型在法律领域的应用,涵盖法律问答 (2023; 2023)、判决预测 (2021; 2022)、文档摘要 (2023; 2024) 以及更广泛的任务,如检索增强和司法推理 (2024; 2024; 2024)
    • 经过后训练的法律助手,如 LawGPT (2024) 和 Lawyer-LLaMA (2023),已展现出卓越的能力,不仅能在各种法律事务中提供可靠指导,还能在专业资格考试中取得成功,这充分证明了它们具备先进的解释和分析能力
    • LexiLaw (2023) 和 SAUL (2024) 等模型支持多语言,包括英语和中文,进一步扩大了其应用范围
    • 这些进步的核心在于对精心整理的法律语料库进行后训练 ,例如 ChatLaw (2023),它将大量法律文本整合到对话数据集中 ,使模型能够优化自身的推理能力和术语识别能力
  • 医疗健康(Healthcare and Medical) :后训练显著提升了大语言模型在医疗健康领域各类应用中的性能,这些模型利用特定领域的数据,精准满足临床和学术需求
    • 在临床环境中,大语言模型助力完成药物发现 (2022)、药物协同预测 (2024)、催化剂设计 (2023)、诊断支持、医疗记录生成和患者交互等任务;
    • 在学术领域,通过定制化的后训练,大语言模型在医疗报告合成 (2023) 和问答 (2024) 等方面表现出色。例如
      • ChatMed (2023) 基于 500K 条医疗咨询记录进行优化,展现出更高的诊断和咨询准确性;
      • PULSE (2023) 则使用涵盖中文医疗和通用领域的 4000K 条指令进行微调,展现出卓越的多任务处理能力
    • 这些模型通过后训练获得的适应性,将复杂的医学知识融入其中,其性能优于通用模型,这凸显了定制化数据集在实现实际应用价值方面的不可或缺性
    • 这些进步不仅提高了特定任务的成果,还为将大语言模型整合到医疗工作流程铺平了道路,在这些流程中,精准性和语境相关性至关重要,充分体现了后训练对实际医疗应用的变革性影响
  • 金融经济(Finance and Economics) :在金融和经济领域,大语言模型在情感分析 (2024)、信息提取 (2023) 和问答 (2023) 等任务中展现出巨大潜力,而后训练通过特定领域的优化进一步提升了它们的效能
    • FinGPT (2023) 和 DISC-FinLLM (2023) 等专业模型在经过金融语料库的后训练后,在那些需要深入理解市场动态和专业术语的任务中表现比基础模型更出色
    • XuanYuan (2023) 利用大量金融数据集和先进的后训练技术,提高了经济建模和预测的准确性,其性能超过了未经过微调的基准模型
    • 这些发展表明,后训练在使大语言模型适应金融应用的复杂需求方面发挥着关键作用,因为在金融领域,精准解读定量数据和定性见解至关重要,这确保了模型能够提供可靠、符合行业标准和预期的特定领域输出
  • 移动 Agent(Mobile Agents) :大型多模态模型(LMM)的发展推动了一个新兴的研究领域,即基于大型多模态模型的图形用户界面(graphical user interface,GUI)Agent 研究 (2024)
    • 该领域旨在开发能够在各种图形用户界面环境中执行任务的人工智能助手,包括网页界面(Web Interfaces) (2023; 2024; 2024; 2024; 2024)、个人计算平(personal computing platforms) (2023; 2024; 2024; 2024; 2024) 和移动设备(Mobile Devices) (2024; 2024; 2024; 2024; 2024)
    • 在移动领域, (2024) 通过工具整合和额外的探索阶段 (2024; 2024) 提升了单个 Agent 的感知和推理能力
    • 一些研究采用多 Agent 系统进行决策和反思 (2024; 2024),展现出巨大潜力,从而提高了任务效能
    • 值得注意的是,MobileAgent-E (2025) 在 Agent 之间引入了层次结构,促进了强大的长期规划,并提高了低级别动作的精度
    • 这些进展凸显了多模态后训练策略在培养适应性强、高效的移动环境 Agent 方面的变革性作用

Technical and Logical Reasoning

  • Mathematical Reasoning :大语言模型在数学推理方面展现出巨大潜力,涵盖代数运算、微积分和统计分析等领域,而后训练在缩小计算能力与人类水平能力之间的差距方面起着关键作用
    • GPT-4 (2023) 在标准化数学评估中取得高分,这得益于其多样化的预训练语料库,而后训练进一步优化了这一能力
    • DeepSeekMath (2024) 利用专门的数学数据集和 SFT、组相对策略优化(GRPO)(2024) 等技术,提高了推理精度,能够运用结构化的思维链(CoT)解决复杂问题
    • OpenAI 的 o1 (2024) 通过 RL 在这一领域取得进展,不断优化推理策略,在多步骤推导和证明中实现更优异的性能
    • 通过后训练进行的持续优化不仅提高了准确性,还使大语言模型的输出更符合严谨的数学逻辑,使它们成为教育和研究领域的宝贵工具,因为在这些领域中,高级推理至关重要
  • 代码生成(Code Generation) :后训练彻底改变了代码生成领域,赋予大语言模型在自动编码、调试和文档编制方面的卓越能力,从而改变了软件开发流程
    • Codex (2021) 在庞大且多样化的代码库上进行训练,是 GitHub Copilot 的基础,能够提供实时编码辅助,且准确性极高
    • Code Llama (2023) 这样的专业模型通过在特定编程数据集上进行后训练,进一步优化了这一能力,能为不同语言和框架的开发者提供帮助
    • OpenAI 的 o1 (2024) 将其数学推理能力扩展到代码生成领域,生成高质量、符合语境的代码片段,其质量可与人类输出相媲美
    • 当前的研究重点包括增强个性化、加深语境理解以及嵌入伦理保障措施,以降低代码滥用等风险,确保大语言模型在技术领域最大限度地提高生产力,同时遵循负责任的开发原则

Understanding and Interaction

  • 推荐系统(Recommendation System) :大语言模型已成为推荐系统领域的变革性力量,它们通过分析用户交互、产品描述和评论,以前所未有的精细度提供个性化建议 (2023; 2023; 2024)
    • 后训练增强了它们整合情感分析的能力,使其能够细致理解内容和情感内涵,GPT-4 (2023) 等模型以及 LLaRA (2024) 和 AgentRec (2024) 等专门系统就体现了这一点
    • 亚马逊和淘宝等电子商务巨头利用这些能力处理评论情感、搜索查询和购买历史,优化客户偏好模型,并高度精准地预测用户兴趣 (2023)
    • 除了对物品进行排名外,经过后训练的大语言模型还能参与对话式推荐、规划和内容生成,通过提供动态、符合语境的交互来提升用户体验,这些交互能适应不断变化的偏好,这充分证明了后训练在将数据分析与实际应用价值相结合方面的作用
  • 语音对话(Speech Conversation) :经过后训练的大语言模型重新定义了语音处理,将识别、合成和翻译的自然度和准确性提升到前所未有的水平 (2024)
    • 这些模型能处理文本转语音 (2023)、文本转音频生成 (2023) 和语音识别 (2018) 等任务,为亚马逊 Alexa、苹果 Siri 和阿里巴巴天猫精灵等广泛使用的工具提供支持
    • Whisper (2023) 在高保真转录方面表现出色
    • GPT-4o (2024) 引入了实时语音交互,无缝整合多模态输入
    • 未来的发展方向包括多语言翻译和个性化语音合成,后训练将优化大语言模型,以打破语言障碍,并根据用户个人资料定制响应,在全球范围内增强人机交互的可访问性和参与度
  • 视频理解(Video Understanding) :将大语言模型扩展到视频理解领域是一项重要的前沿进展,后训练使 Video-LLaMA (2023) 等模型能够执行字幕生成、摘要和内容分析等任务,简化了多媒体创作和理解过程
    • Sora (2024) 进一步革新了这一领域,它能根据文本提示生成复杂视频,通过降低技术壁垒和促进创新叙事,使内容创作大众化
    • 这些进展利用后训练使大语言模型适应视觉-时间数据,提高了它们在从教育到娱乐等各种应用中的解释深度和实用性
    • 但它们也带来了计算可扩展性、隐私保护和伦理治理等方面的挑战,特别是在生成内容的滥用方面
    • 随着后训练方法的不断发展,解决这些问题对于确保在视频相关应用中实现可持续、负责任的部署至关重要,在推动创新的同时兼顾社会考量

Open Problems and Future Directions

  • 在本节中,论文批判性地评估了 LLM 后训练方法中尚未解决的挑战和未来的发展方向,并结合 OpenAI 的 o1 (2024) 和 DeepSeek-R1 (2025) 的发布所带来的变革性进展进行分析
  • 这些模型利用大规模 RL 重新定义了推理基准,然而,它们的出现也凸显了迫切需要解决后训练技术中存在的固有局限性
  • 以下小节将阐述六个关键的开放问题,每个问题都强调了其对该领域发展的关键重要性以及解决这些问题的迫切性,同时还提出了推动未来研究并确保大语言模型在各种应用中负责任发展的可行策略

Reasoning Enhancement Beyond Large-Scale RL

  • o1 和 DeepSeek-R1 的推出标志着大语言模型推理能力的范式转变,它们利用广泛的强化学习框架(如 RLHF 和 GRPO)在数学证明和逻辑推导等多步骤问题解决中实现了前所未有的准确性。但对二元奖励信号和大量人类反馈的依赖暴露出一个关键局限性:它们在科学假设生成或动态环境中的战略决策等复杂、开放式任务中难以有效泛化
  • 随着对大语言模型在现实世界场景中模拟人类推理的需求日益增长,这一差距变得愈发紧迫,而其重要性在于释放大语言模型作为自主智能代理的潜力,使其超越当前的基准测试
  • 当前的强化学习方法在奖励稀疏性方面存在不足 ,且难以适应任务复杂性 ,因此需要创新框架
  • 可行的解决方案包括开发多目标强化学习系统 ,这些系统整合自监督一致性检查(例如,验证推理步骤之间的逻辑连贯性)和特定领域的先验知识,如数学公理或科学原理,以在无需详尽人工标注的情况下指导推理 (2024; 2025)
  • 这些进展可能减少对昂贵反馈循环的依赖,提高可扩展性,并使大语言模型能够应对未知的推理领域,DeepSeek-R1 的冷启动强化学习创新就证明了这一前景的可行性

Scalability of Post-Training for Next-Generation LLMs

  • 随着大语言模型的规模和复杂性不断增加(下一代模型的参数密集型架构就是例证),后训练的可扩展性成为一项艰巨且紧迫的挑战
  • 像 DeepSeek-R1 的冷启动方法等基于强化学习的方法需要大量计算基础设施,这限制了资金充足的机构的使用(restricts accessibility to well-funded entities),并引发了重大的可持续性问题,特别是在多模态应用(如视频分析)和实时系统(如对话代理)中
    • 问题:是不是笔误,是限制了资金不充足的机构使用吧?
  • 这个问题至关重要,因为它可能扩大资源丰富和资源有限的研究社区之间的差距,阻碍大语言模型开发的公平进展
  • 虽然参数高效微调(PEFT)(2021) 减轻了一些开销,但其性能在大规模数据集上常常下降,这凸显了对可扩展替代方案的需求
  • 可行的未来方向 (2024; 2024; 2024) 包括设计轻量级强化学习算法(可能为降低内存占用而调整 GRPO)、联邦后训练框架(在去中心化网络中分配计算负载)以及先进的蒸馏技术(在最小化资源需求的同时保留推理和适应能力)
  • 如果这些解决方案得以实现,可能会使后训练民主化,符合该领域对可持续和包容性创新的迫切需求

Ethical Alignment and Bias Mitigation in RL-Driven Models

  • 正如 o1 的谨慎对齐策略所展示的,通过强化学习进行后训练会放大伦理风险,因为它可能强化训练数据(如 HH-RLHF (2022) 或合成语料库)中嵌入的偏差
  • 在医疗诊断和司法决策等敏感领域部署大语言模型时,这一挑战尤为紧迫
  • 伦理对齐的动态可变性(在一种文化背景中公平的内容在另一种文化背景中可能构成偏差)为实现普遍值得信赖的大语言模型带来了重大障碍,这一问题对于确保人工智能系统的公平性和安全性至关重要
  • 当前的方法可能过度审查(损害实用性,如抑制创造性输出)或校正不足(延续有害偏差,如种族或性别差异)
  • 解决这一问题需要开发公平感知强化学习目标,整合多利益相关者偏好模型(如聚合多样化的人类判断)和对抗性去偏技术,以在训练过程中消除数据集偏差
  • 这些方法的可行性 (2024) 得到了可解释性工具和多目标优化方面最新进展的支持,能够在伦理稳健性和实际功能之间取得平衡,o1 在现实世界部署中面临的挑战也凸显了这一必要性

Seamless Multi-Modal Integration for Holistic Reasoning

  • 向多模态大语言模型的发展趋势(o1 的推理增强和 GPT-4o (2024) 的合成能力预示了这一趋势)凸显了对后训练方法的迫切需求,这些方法需要无缝整合文本、图像、音频和其他数据类型,以实现整体推理
    • 这一能力对于实时视频分析、增强现实和跨模态科学探究等应用至关重要
  • 由于数据异质性和全面多模态训练语料库的稀缺性,当前方法难以实现强大的跨模态对齐,限制了大语言模型连贯推理各种输入的能力
  • 这一挑战的重要性在于其有潜力释放变革性应用,但其解决离不开可扩展框架
  • DeepSeek-R1 的冷启动强化学习提供了一个有前景的起点,表明统一的模态编码器(如能够将异构数据编码到共享潜在空间的编码器)和动态强化学习策略(能够自适应地权衡模态贡献)可能弥合这一差距
  • 未来的研究应优先创建多模态基准和合成数据集(基于 Magpie (2024) 等工作)以推动进展,鉴于多模态预训练和强化学习优化方面的最新进展,这一努力是可行的

Context-Adaptive Trustworthiness Frameworks(可信度框架)

  • 人们日益认识到,后训练大语言模型的可信度是一个动态的、依赖于上下文的属性,而非静态品质,o1 在教育等敏感领域的谨慎输出与在创造性任务中的自由响应就体现了这一点
  • 这种可变性(安全要求,如在教育环境中避免错误信息,可能与实用性需求,如在写作中培养创造力相冲突)带来了一项紧迫挑战,因为它对用户信任和大语言模型在各种现实场景中的适用性至关重要
  • 当前的后训练方法往往过度优先考虑安全性,导致实用性权衡(降低实际价值),或无法适应特定上下文需求(损害可靠性)
  • 解决这一问题需要上下文敏感的强化学习模型 ,这些模型动态调整安全-效用权衡,利用实时用户反馈和可解释的安全指标(如生成输出的透明度分数)确保适应性
  • 这一方法的可行性 (2024) 得到了自适应学习系统和实时监控方面进展的支持,为平衡可信度和功能性提供了途径,随着 o1 等大语言模型扩展到高风险应用,这一需求变得愈发迫切

Accessibility and Democratization of Post-Training Innovations

  • 先进后训练方法的计算密集性(以 DeepSeek-R1 的强化学习驱动方法为代表)将其应用限制在资源丰富的实体中,这对可访问性构成了紧迫障碍,扼杀了小型研究社区和行业部门的创新(即这一问题对于在人工智能领域促进公平进展至关重要)
  • 这种排他性不仅限制了贡献的多样性,还阻碍了该领域协作应对全球挑战的能力
  • 实现这些创新的民主化需要开发高效、开源的工具和框架,在不牺牲质量的情况下降低入门门槛,比如:
    • 对强化学习的参数高效微调(PEFT)(2021) 适应性调整
    • 共享后训练模型的协作平台(如 Hugging Face hubs)
    • 类似于 Magpie (2024) 的简化合成数据生成 Pipeline
  • 未来的努力应专注于优化这些解决方案以实现广泛采用,确保后训练的变革潜力(以 o1 和 DeepSeek-R1 为代表)超越精英机构,丰富更广泛的人工智能生态系统

Creative Intelligence & System 2 Thinking

  • 将创造性智能整合到 System 2 推理中是大语言模型发展的一个新兴前沿,相关研究强调了这一点 (2025)
    • 注:System 2 Thinking 即 “系统二思维”,是一种源于心理学的概念,由诺贝尔奖得主丹尼尔・卡尼曼(Daniel Kahneman)在其著作《思考,快与慢》中提出。它代表着人类认知中缓慢、深思熟虑、善于分析的部分,与快速、直觉的系统一思维相对应
  • 虽然 OpenAI 的 o1 和 DeepSeek 的 R1 等推理大语言模型在刻意的、逐步的逻辑分析(模拟 System 2 思维)方面表现出色,但它们在创造性智能(包括生成新颖想法、综合不同概念以及灵活适应非结构化问题)方面的能力仍未得到充分探索
  • 这一差距至关重要,因为创造性智能是诸如艺术创作、科学发现和战略创新等领域人类水平问题解决的基础,在这些领域,僵化的逻辑框架 alone 是不够的
  • 应对这一挑战的紧迫性在于有潜力将大语言模型从分析工具提升为自主创造性 Agent,这是向人工通用智能(AGI)迈出的变革性一步。下面,论文基于本综述的见解,概述这一开放问题并提出未来方向

AGI——The-Second-Half

注:本文包含 AI 辅助创作

  • 参考链接:
    • 原始博客链接:The Second Half, 20250410, 姚顺雨

The Second Half 博客整体总结

  • TLDR:We’re at AI’s halftime.(我们正处于人工智能的中间休息时间)
  • 几十年来,人工智能的发展主要集中在开发新的训练方法和模型上
    • 这种方法行之有效:从击败国际象棋和围棋世界冠军,到在 SAT 和律师资格考试中超越大多数人类,再到赢得 IMO(国际数学奥林匹克)和 IOI(国际信息学奥林匹克)金牌
    • 这些里程碑背后(如 DeepBlue、AlphaGo、GPT-4 以及o系列模型),是 AI 方法的根本性创新:
      • 搜索算法、深度强化学习(deep RL)、规模扩展(scaling)和推理能力,一切都在持续进步
  • 那么,现在究竟发生了什么变化?
  • 用三个词概括:RL finally works.(强化学习终于奏效了)
    • 更准确地说:强化学习终于具备泛化能力了
  • 经历了多次重大迂回和一系列里程碑式的突破后,我们终于找到了一种通用“配方”,能够利用语言和推理解决广泛多样的强化学习任务
    • 就在一年前,如果你告诉大多数 AI 研究人员,存在一种单一的方法可以同时应对软件工程、创意写作、IMO 级别的数学题、鼠标键盘操作以及长篇问答,他们可能会嘲笑你是在幻想
    • 毕竟,每一项任务都极其困难,许多研究者甚至要用整个博士生涯只专注于其中某一个狭窄领域
  • 但这一切真的发生了
  • 那么接下来会发生什么?
    • AI的下半场(从现在开始),将重心从“解决问题”转向“定义问题”
    • 在这个新时代,Evaluation比训练更重要
    • 我们不再仅仅问:“我们能否训练一个模型来解决X?”而是要问:“我们应该训练 AI 去做什么?又该如何衡量真正的进展?” 要在这个下半场取得成功,我们需要及时转变思维方式和技能结构(或许更接近于一名产品经理的角色)

附录:我的个人见解和思考

  • 其实我认为 AGI 还在上半场,特别是强化学习的发展还在上半场,多模态也还在上半场
  • 作者认为强化学习的范式已经确定了,但是给的观点太大,细节上还有许多不同的落地方向
  • 早在 23 年,我就认为真正的 AGI 很可能是在世界模型上进行反馈和交互得到的,随着世界模型的进化,智能体会越来越好
    • 与作者评估的思路相似,但是我认为强化学习的算法仍然是重要的,如何让模型能记住之前与环境交互发生过什么(奖励,环境变化),算法可能还需要继续优化
  • 从接触强化学习起,我基本上就确定 RL 是未来 AGI 的发展方向,但如今的大模型上 RL 用的还不够高明
    • 比如简单的 SFT 就可以把数学分数刷的很高,不一定是 RL 带来的,RL 应该是与真实环境交互做决策
  • 我认为 AGI 的核心:
    • 让智能体在真实环境中成长,真的去感受,去交流,去沟通,记住这些遇到过的知识,最终实现 AGI

上半场(The first half)

  • 要理解上半场,不妨看看它的“赢家”:你认为迄今为止最具影响力的 AI 论文有哪些?
  • 作者在斯坦福CS224N课程中尝试过一个测验,答案并不令人意外:Transformer、AlexNet、GPT-3 等等
    • 这些论文有什么共同点?它们都提出了某种根本性的突破,以训练出更好的模型
    • 而且,它们通过在某些基准测试中表现出显著提升,成功发表了论文
  • 但还有一个潜在的共性:这些“赢家”几乎都是训练方法或模型架构 ,而不是基准测试或任务本身
    • 即便是堪称最有影响力的基准之一 ImageNet,其引用量也不到 AlexNet 的三分之一
    • 这种“方法 vs 基准”的对比在其他地方更加悬殊
      • 例如,Transformer 论文本身的引用超过16万次,WMT’14 翻译任务(Transformer 的主要基准)对应的研讨会报告仅有约 1,300 次引用
  • 这说明了上半场的游戏规则 :重点在于构建新模型和新方法 ,评估与基准只是次要的(尽管必要,才能让论文体系运转起来)
  • 为什么如此?一个重要原因是,在 AI 发展的上半场,方法比任务更难、也更激动人心
    • 从零开始创造一种新算法或模型架构(比如反向传播算法、卷积神经网络(AlexNet),或是用于GPT-3的Transformer),需要非凡的洞察力和工程能力
    • 相比之下,为 AI 定义任务往往显得简单得多:我们只需选取人类已有的任务(如翻译、图像识别或下棋),将其转化为可量化的基准测试即可(这并不需要太多创新或工程投入)
  • 此外,方法通常比单个任务更具通用性和广泛适用性,因此价值更高
    • 例如,Transformer 架构最终推动了计算机视觉(CV)、自然语言处理(NLP)、 RL 等多个领域的进步,远远超出了它最初验证的那个数据集(WMT’14翻译)
    • 一个优秀的新方法可以“攀登”多个不同的基准,因为它足够简洁且通用,影响力远不止于单一任务
  • 这套游戏机制运行了几十年,催生了改变世界的想法与突破,并体现在各个领域基准性能的不断提升上
    • 为何这套机制会改变?因为这些思想和突破的累积已经带来了质的飞跃:我们终于找到了一套行之有效的“配方”来解决各类任务

这个“配方”是什么?(The recipe)

  • 它的组成部分并不令人意外:大规模语言预训练、数据与算力的规模化、以及 “推理与行动(reasoning and acting)”的 idea
    • 这些听起来像是你在旧金山每天都能听到的流行术语(buzzwords),但为何称之为“配方”?
  • 我们可以通过强化学习(Reinforcement Learning, RL) 的视角来理解这一点
    • RL 常被认为是 AI 的“终极目标”:理论上它能保证赢下游戏,经验上我们也很难想象任何超级智能系统(如AlphaGo)不依赖 RL 就能实现
  • 在 RL 中,有三个关键要素:算法(algorithm)、环境(environment)和先验知识(priors)
    • 长期以来,RL 研究者主要关注的是算法(如 REINFORCE、DQN、TD-learning、actor-critic、PPO、TRPO 等),这是智能体如何学习的核心智力部分
    • 而将环境和先验视为固定或最小化的因素。例如,Sutton 和 Barto 的经典教材几乎全部聚焦于算法,对环境或先验几乎只字未提
  • 然而,在深度强化学习时代,人们逐渐意识到环境在实践中至关重要 :一个算法的表现往往高度依赖于它所设计和测试的具体环境
    • 如果你忽视环境,就可能构建出一个在玩具环境中“最优”但在真实场景中完全失效的算法
    • 那么,为什么不先明确我们真正想解决的环境,再寻找最适合它的算法呢?
  • 这正是 OpenAI 最初的计划
    • 他们创建了Gym,一个标准的RL环境平台,涵盖各种游戏;
    • 接着推出了 World of Bits 和 Universe 项目,试图将互联网或整个计算机变成一个游戏环境
    • 听起来是个好计划,不是吗?一旦我们将所有数字世界转化为可交互环境,再用聪明的 RL 算法去攻克它们,我们就拥有了数字世界的通用人工智能(AGI)
  • 这个计划很好,但并未完全奏效
    • OpenAI 沿着这条路径取得了巨大进展,用 RL 解决了 Dota、机械手控制等问题
    • 但他们从未真正接近解决“电脑使用(computer use)”或“网页导航(web navigation)”这类任务,而且在一个领域有效的RL代理无法迁移到另一个领域
    • Something is missing(缺了点什么?)
  • 直到 GPT-2 或 GPT-3 出现,人们才意识到缺失的关键是先验知识(priors)
    • 你需要强大的语言预训练,将常识和语言知识内化到模型中,然后在此基础上微调,使其成为 Web 代理(WebGPT)或聊天代理(ChatGPT),并由此改变世界
    • 结果证明,RL 中最重要的一环可能根本不是 RL 算法或环境 ,而是先验知识 ,而这些先验知识的获取方式完全可以与 RL 无关
  • 语言预训练为“聊天”创造了良好的先验,但对“控制电脑”或“玩视频游戏”却效果不佳
    • 为什么?因为这些领域远离互联网文本的分布,如果直接在这些领域进行 SFT 或 RL ,泛化能力很差
  • 我在 2019 年就注意到了这个问题,当时 GPT-2 刚发布,我尝试在其基础上做 SFT/RL 来解决文字冒险游戏(训练了 CALM)
    • CALM 是世界上首个基于预训练语言模型构建的代理
    • 但即便经过数百万步的 RL 训练,代理也只能勉强攻克一款游戏,且无法迁移到新游戏
      • 问题:RL 能做数百万步?即使模型很小也有点难吧?
    • 虽然这对 RL 研究者来说并不奇怪(这正是 RL 的典型特征),但我感到困惑:人类却能轻松零样本地玩新游戏并表现良好
    • 于是,我迎来了人生中第一次顿悟时刻(first eureka moment in my life):
      • 顿悟:我们之所以能泛化,是因为我们不仅能选择“走到柜子2”或“用钥匙1打开箱子3”或“用剑杀死地牢怪兽”,我们还能选择思考 :“地牢很危险,我需要武器。没有明显武器,也许得在锁着的箱子或柜子里找。柜子2里有箱子3,先去那里打开看看”
  • 思考,或者说推理,是一种奇特的“动作” ,它不直接影响外部世界,但其思维空间是开放且组合爆炸的:
    • 你可以思考一个词、一句话、一段话,甚至一万句随机英文单词,但周围的世界不会立即改变
    • 在经典RL理论中,这简直是灾难,会让决策变得不可能
    • 想象你要从两个盒子中选一个,其中一个有 100 万美元,另一个为空,你的期望收益是 50 万美元
      • 现在我再加无数个空盒子,你的期望收益就趋近于零
      • 问题:这个例子有点没太懂作者想表达的什么
    • 但如果我们把“推理”加入任何 RL 环境的动作空间中,我们就能利用语言预训练带来的先验知识实现泛化,并根据不同决策灵活分配测试时的计算资源
    • 这是一种非常神奇的现象,我在这里可能无法完全说清楚,也许需要另写一篇博客详细阐述
    • 欢迎阅读 ReAct 论文了解“推理作为代理行为”的原始故事,以及我当时的心路历程
    • 目前我的直观解释是:即使我加了无数空盒子,但你一生中见过各种游戏中的类似情况,选择这些“空盒子”的思考过程,反而让你在未来更有可能选中那个装钱的盒子
    • 抽象地说:语言通过推理在代理中实现泛化(language generalizes through reasoning in agents)
  • 一旦我们拥有了正确的 RL 先验(语言预训练)和 RL 环境(将语言推理作为动作之一),结果发现RL 算法本身反而可能是最不重要的部分
    • 于是我们看到了o系列、R1、Deep Research、电脑使用代理……以及更多即将到来的成果
    • 多么讽刺的转折!几十年来,RL 研究者极度重视算法,几乎无人关注环境,更没人关心先验
    • 几乎所有 RL 实验都从零开始,但我们花了数十年的弯路才意识到,也许我们的优先级本该彻底颠倒
      • 问题:不对吧,在 RL 中一直都有先模仿学习再进行 RL 训练的先例,比如 AlphaGo 就先学习的专家决策
  • 正如史蒂夫·乔布斯所说:“你无法向前连接点滴;你只能向后连接”(You can’t connect the dots looking forward; you can only connect them looking backward.)

    “你无法在展望未来时串联起生命的点滴,只有在回顾过去时才能看清它们之间的联系”


下半场(The second half)

  • 这套“配方”正在彻底改变游戏规则。回顾一下上半场的游戏:
    • 1)我们开发新颖的训练方法或模型,以提升基准表现;
    • 2)我们创建更难的基准,继续循环
  • 但现在这个游戏正在被打破,原因如下:
    • 这套“配方”已经基本标准化,并实现了工业化流水线式的基准刷分,不再需要太多新想法。你的某个特定任务上的创新方法可能带来5%的提升,而下一代o系列模型无需专门优化就能提升30%
    • 即便我们创造出更难的基准,这套配方也会越来越快地将其攻克,我的同事Jason Wei制作了一张漂亮的图表,清晰地展示了这一趋势
    • 图2
  • 那么,在下半场我们还能做什么?
  • 我认为我们必须从根本上重新思考Evaluation
    • 这意味着不仅要创建新且更难的基准,更要从根本上质疑现有的评估框架,建立全新的评估体系,迫使我们发明超越当前“配方”的新方法
    • 这很难,因为人类具有惯性,很少质疑基本假设,你往往把它们当作理所当然,而不意识到它们只是假设,而非自然法则
  • 举个例子说明这种“惯性”:假设你在 2021 年发明了历史上最成功的评估之一,基于人类考试的评测
    • 这在当时是个大胆创举,但三年后它已趋于饱和
    • 你会怎么做?大概率是设计更难的考试
    • 或者,假设你解决了简单的编程任务,下一步呢?很可能是寻找更难的编程题,直到达到 IOI 金牌水平
  • 这种惯性是自然的,但问题在于:AI 已经击败了国际象棋和围棋冠军,在 SAT 和律师考试中超越大多数人,并在 IMO 和 IOI 中获得金牌
    • 但世界似乎并没有因此发生太大变化(至少从经济和 GDP 来看是如此)
  • 作者把这称为 “效用问题”(utility problem) ,并认为这是当前 AI 面临的最重要问题
  • 也许我们很快就能解决这个问题,也许不会:但无论哪种情况,其根源可能出人意料地简单:我们的评估设置与真实世界存在诸多根本差异 ,举两个例子(原本机器学习或 RL 中大家比较确定的,但是现在需要改变的例子):
    • 评估“应该”自动化运行(Evaluation “should” run automatically) :
      • 通常代理接收任务输入,自主完成,然后获得奖励
      • 但在现实中,代理必须在整个任务过程中与人类持续互动:你不会给客服发一条超长消息,等十分钟,然后指望对方一次性完美解决所有问题
      • 通过质疑这一设定,新的基准应运而生,例如引入真实人类参与(如 Chatbot Arena)或用户模拟(如 tau-bench)的闭环评估
    • 评估“应该”独立同分布(i.i.d.)(Evaluation “should” run i.i.d.) :
      • 如果你有一个包含 500 个任务的测试集,通常每个任务独立运行,取平均得分作为总体指标
      • 但在现实中,任务是顺序执行的
      • 一位谷歌软件工程师随着对代码库越来越熟悉,解决后续问题的能力会不断提升;而一个 AI 代理在同一代码库中解决多个问题时,却无法积累这种熟悉度
      • 我们显然需要长期记忆机制(已有相关研究(AGENT WORKFLOW MEMORY 和 Contextual Experience Replay for Continual Learning of Language Agents)),但学术界缺乏合适的基准来证明其必要性,甚至缺乏勇气去挑战机器学习的基础假设:i.i.d.
  • 这些假设“一直如此”,在AI上半场是合理的,因为当智能水平较低时,提升智能通常能提升实用性
    • 但现在,这套通用“配方”在这些假设下已被证明必然有效
  • 因此,下半场的新游戏规则是:
    • 1)我们开发面向真实世界效用的新型评估体系或任务;
    • 2)我们用现有“配方”解决它们,或在此基础上加入创新组件;继续循环
  • 这个游戏很难,因为它陌生,但它令人兴奋
    • 上半场的玩家在解决电子游戏和考试,而下半场的玩家则有机会通过将智能转化为实际产品,打造出价值数十亿甚至上万亿美元的公司
    • 上半场充满了渐进式的方法和模型,而下半场则会筛选出真正具有颠覆性意义的研究:通用“配方”会轻易碾压你的渐进式创新,除非你创造出能打破该“配方”的新假设
    • 那时,你才能真正做出改变游戏规则的研究
  • Welcome to the second half!

其他说明

  • 博客是基于作者在斯坦福 CS224N 和哥伦比亚大学的演讲内容撰写的
  • 作者使用 OpenAI 的 Deep Research 功能读取了作者的幻灯片并生成了初稿

NLP——EcomGPT-CT

注:本文包含 AI 辅助创作

  • 参考链接:
    • 原始论文:EcomGPT-CT: Continual Pre-training of E-commerce Large Language Models with Semi-structured Data, arXiv 202312, THU, Alibaba

Paper Summary

  • 整体内容总结:
    • 本论文对 LLM 的领域特定 CPT 进行了广泛研究,重点关注电子商务领域
    • 本文实验表明,通过结合通用语料和领域特定语料进行有针对性的 CPT,可以有效地将 LLM 适配到特定领域
    • CPT 在不牺牲模型在广泛 NLP 应用中能力的前提下,提升了模型在电子商务任务上的性能
    • 论文设计的数据混合策略被证明在增强模型从不同数据源吸收和整合知识的能力方面是有效的,从而在领域特定任务上实现了性能提升
  • 背景:
    • LLM 在大量语料上预训练后,已在各种 NLP 任务中展现出卓越性能,但将这些模型应用于特定领域仍面临重大挑战
    • 例如缺乏领域知识、利用领域知识的能力有限,以及对领域特定数据格式的适应性不足
  • 本文方案介绍:
    • 考虑到从头训练 LLM 的极高成本和特定领域标注数据的稀缺性,本研究以电商领域为例,专注于 LLM 的领域特定持续预训练(domain-specific continual pre-training)
    • 论文探索了使用未标注的通用语料和电商语料对 LLM 进行持续预训练(CPT)的影响
    • 论文设计了一种混合不同数据源的策略,以更好地利用电商半结构化数据
    • 论文构建了多个任务来评估 LLM 在电商领域的少样本上下文学习(ICL)能力及其在指令微调后的零样本性能
  • 实验结果表明,电商 LLM 的 CPT 以及论文设计的数据混合策略均具有显著效果

Introduction and Discussion

  • LLM 通过预训练数十亿文本标记,能够掌握广泛的世界知识和人类语言规则(2023)。因此,LLM 在各类 NLP 任务中表现优异(2020; 2022; 2023b)
  • 然而,现有的 LLM 并不完美,将其应用于特定领域仍存在重大挑战:
    • (1)LLM 缺乏必要的领域特定知识,或难以利用相关知识解决实际任务(2023a;2023)
    • (2)LLM 难以适应特定领域的独特文本格式或数据分布,因此无法满足领域应用的需求(2023a;2023b)
  • 考虑到:
    • 训练 LLM 需要大量硬件资源和长时间训练,从头预训练一个领域特定的 LLM 在实际中并不可行
    • 特定领域的标注数据通常稀缺且成本高昂,而未标注数据则更为丰富且易于获取
  • 因此:本研究以电商领域为例,探索通过 CPT 使 LLM 适应特定领域的方法
  • 已有充分证据表明,特定领域的 CPT 能够显著提升掩码语言模型(MLM,例如 BERT(2019)、RoBERTa(2019))在相应领域下游任务中的表现(2020; 2020;2022;)
  • 在 LLM 时代,受限于数据和计算资源:
    • 大多数领域适应研究通过指令微调或提示工程实现(2023;)
    • 仅有少数研究尝试通过 CPT 将领域知识注入模型(2023a; 2023),且缺乏从实际应用角度对 LLM 领域特定 CPT 的深入分析
  • 论文工作内容如下:
    • 基于 BLOOM(2022)等一系列多语言自回归模型,构建了电商领域的 EcomGPT-CT 模型
    • 探索了在难以获取完整原始预训练数据的情况下,使用通用和电商未标注语料对 LLM 进行 CPT 的影响
      • 论文关注模型在解决实际电商任务中的表现,并分析训练过程中的性能变化
    • 提出了一种混合不同数据源的策略,以有效利用电商领域丰富的半结构化数据,从而提升预训练数据的规模和多样性

Related Work

Large Language Models

  • 近年来,LLM 领域发展迅速,当前主流的 LLM 主要基于 Transformer 模块,并在海量文本数据上预训练
  • 自 GPT-2(2019)和 T5(2020)证明各种 NLP 任务可以统一为文本生成范式后,主流 LLM 均采用仅解码器的自回归架构
  • 近期,遵循 scaling law(2020),不同参数规模的 LLM 被构建并发布,包括 GPT-3(2020)、Chinchilla(2022)、BLOOM(2022)、PaLM(2022)、Llama(2023)、Baichuan(2023a)
  • 受LLM卓越性能的激励,研究者致力于构建领域适应的 LLM 以解决特定领域任务,比如:
    • 生物医学领域的 Med-PaLM(2023)和 ChatDoctor(2023)
    • 数学领域的 Minerva(2022)
    • 金融领域的 BloombergGPT(2023)和 FinGPT(2023b)
    • 以及法律领域的 ChatLaw(2023)

Continual Pre-training

  • CPT 是指:在通用预训练和下游任务微调两个阶段之间增加的额外预训练阶段
    • CPT 采用与通用预训练相同的训练目标 ,但通常使用特定领域或任务的未标注语料 ,旨在实现领域适应或任务适应
  • 对于 BERT(2019)和 RoBERTa(2019)等掩码语言模型预训练模型,领域自适应或任务自适应的 CPT 能够引导模型与相应领域或任务的数据分布对齐,从而有效提升模型在相关下游任务中的表现(2020;2022)
  • 对于当前主流的自回归 LLM ,关于 CPT 过程的研究(2023)或 CPT 在构建领域特定 LLM 中的应用(2023a)仍然有限
    • 目前缺乏对** CPT 如何影响 LLM 解决领域特定任务效果的详细分析,也缺乏关于如何提升 LLM CPT 效果策略**的研究

Domain-specific Continual Pre-training

Training Task

  • CPT (Continual Pre-training)无缝连接了通用预训练(General Pre-training)和SFT阶段,从而提升模型在特定领域或任务中的性能,如图 1 所示
  • CPT 采用与通用预训练相同的目标函数,但专注于特定领域或任务的未标注语料
  • 论文中,论文使用仅包含解码器的 Transformer 模型(Decoder-only Transformer Models),这是当前主流LLM 的架构。预训练的目标是下一词预测任务(Next Token Prediction)或自回归语言建模(Auto-regressive Language Modeling):
    $$
    \max_{\theta}\sum_{i=1}^{N}\log P(y_{i}|y_{ < i};\theta),
    $$
    • 其中,\(\theta\) 是模型参数,\(y\) 是训练文本序列

Dataset Construction

  • 论文通过 CPT 提升 LLM 在电子商务(E-commerce)领域的性能
  • 论文整理了大量的电子商务数据,用于向 LLM 注入领域特定知识,并帮助模型适应电子商务领域独特的文本格式
  • 为了保留 LLM 的世界知识和泛化能力,论文还将通用文本数据纳入训练数据集中
  • 电子商务语料(E-commerce Corpora) :论文从亚马逊(Amazon)和淘宝(Taobao)收集了大量产品的标题、属性、描述和评论
    • 此外,还利用了淘宝“逛逛”频道的文章 ,这些文章介绍了产品特性、分享了用户体验并展示了品牌故事
  • 通用语料(General Corpora) :为了构建通用语料,论文从 WuDaoCorpora (2021) 和 RefinedWeb (2023) 中采样文本
    • 这两个数据集分别包含从网页中收集的 72B 中文 Characters 和 600B 英文 Tokens
  • 数据预处理(Data Pre-processing) :为了确保预训练数据的质量,论文实现了一个全面的流水线
    • 包含数据重构、过滤和去重过程
    • 对于半结构化产品数据,论文首先按产品 ID 将标题、属性、描述和评论分组
  • 表1 展示了处理后的电子商务和通用数据集的统计信息,论文观察到,收集的数据集中不同数据源的 Token 数量存在显著差异
    • 经过过滤和处理的电子商务数据包含约 20B Tokens,不到通用领域网页数据 Token 数量的 5%
    • 在通用数据中,中文数据的数量远少于英文数据
  • 考虑到领域特定 CPT 的目标是提升模型在解决领域特定任务时的性能,同时不损害其泛化能力,因此在训练样本中保持通用数据和领域特定数据的 Token 数量平衡至关重要
    • 但由于硬件限制,论文无法对不同类型数据的比例进行详细实验
    • 经过初步探索,论文将通用数据与领域特定数据的 Token 数量比例设定为 2:1 ,并将通用数据中的中英文数据比例设定为 1:1

Dataset Mixing Strategy

  • 通常,用于LLM 预训练的数据来自网页上的长文本,例如 CommonCrawl 和 Wikipedia
  • 但在某些特定领域(包括电子商务领域),大量文本数据以半结构化格式存储在表格或数据库中
    • 这些半结构化文本数据在形式上与常规文本数据存在显著差异
  • 尽管如此,作者相信将这些数据适当地纳入 CPT 中,可以进一步提升LLM 的领域特定性能
  • 为了有效地将这些丰富的半结构化数据转化为模型训练所需的文本序列,论文设计了一种跨不同数据源的数据集混合策略。论文的数据混合策略包含以下步骤:
    • 1)节点构造 :从不同数据源收集半结构化数据,每个数据源代表一组节点,每个节点对应一个数据条目(即一行或一个对象)
    • 2)边构造 :在跨两个数据源相关联的节点之间建立边,构建表示数据关系的异构图(Heterogeneous Graph)
      • 在论文的实验中,所有数据均与电子商务产品相关,因此论文使用产品 ID 作为唯一标识符,连接与同一产品相关的所有节点
    • 3)簇选择并移除 :基于预定义的簇大小范围,迭代地从图中选择连通的簇,并遵循尽可能覆盖更多数据源的规则
      • 选择簇后,从图中移除所有对应节点以避免冗余
    • 4)簇内节点拼接 :在每个选定的簇内随机排列所有节点,提取每个节点中的可用文本,并将它们拼接成一个训练样本
  • 图2 展示了一个示例:
    • 作者认为,这种数据混合策略建立了来自不同数据源文本之间的联系
    • 与从每个数据源独立采样文本的策略相比,论文的策略增强了单个样本中文本的多样性,从而更有效地训练 LLM
  • 问题:论文的数据混合策略有经过实验验证吗?
    • 后面实验部分有实验,证明了这种做法是有效的

Training Setup

  • 作者选择 BLOOM(2022)作为 EcomGPT-CT 的骨干模型(backbone),原因如下:
    • (1) BLOOM 是一个支持中英文的多语言预训练模型;
    • (2) BLOOM 未经过任何Post-training,这确保了在 CPT 后评估我们基准测试性能变化的可靠性
  • 作者分别在参数规模为 3B 和 7.1B 的 BLOOM 模型上进行了实验
  • 受限于硬件配额,论文的每项实验均在 2-4 块 NVIDIA Tesla A100 80GB GPU 上完成,这为计算资源有限的应用场景提供了有价值的参考(有趣的表达)
  • 论文采用了 Huggingface 的 Transformers(2019)和 DeepSpeed(2020)框架
    • Transformers 提供了模型实现和基础的训练流程
    • DeepSpeed 则通过 ZeRO 优化器(2020)对训练状态(如模型参数、梯度和优化器状态)进行分片,从而优化 GPU 内存消耗
    • 论文使用了 ZeRO stage 2 并启用了 offload 功能,这意味着优化器状态和梯度会被分片,且训练状态可以在主机和设备之间交换
  • 训练过程采用 bfloat16 混合精度(2019)进行,以提高训练效率并避免数值下溢或溢出问题
  • 实验中使用的超参数如表2 所示(部分超参数是基于 BLOOM 原始预训练设置而确定的)
  • 超参数分析:小模型使用更大的学习率

Experiments

Evaluation Benchmarks

  • 为了从解决实际问题的角度评估基础 LLM 在电子商务领域的性能,论文基于 EcomInstruct(2023a)构建了两个基准,如表3 所示:
    • (1) EcomICL :论文选择了 9 项任务,涵盖文本分类(text classification, CLS)、文本生成(text generation, GEN)和信息抽取(information extraction, IE)等多种类型
      • 每个数据实例被处理为标准格式,并提供多个相同格式的示例作为演示,以评估 LLM 的少样本上下文学习(Few-shot ICL)性能
    • (2) EcomSFT :论文使用 EcomInstruct 的训练数据对基础 LLM 进行 SFT(然后进一步评估)
      • 选择了 8 项任务进行评估,包括 4 项训练集内任务和 4 项训练集外任务,旨在评估 SFT 后模型的指令遵循性能
  • 为了评估基础 LLM 在 CPT 后是否仍能解决通用自然语言处理(NLP)任务,论文分别从中文和英文 NLP 基准中选择了 3 项任务
    • 以 Few-shot ICL(GeneralICL)的形式进行评估
    • 对于每项任务,论文在实验中随机选取最多 1000 个数据实例
  • 对于自回归 LLM ,每项任务都被视为文本生成任务。因此,我们可以使用文本生成的自动评估指标来评估模型在不同任务上的性能
    • 根据先前的工作(2022;2022),论文使用 ROUGE-L(2004)作为评估指标
    • 对于分类任务,论文报告准确率指标;
    • 对于两项 IE 任务,论文还使用了精确率、召回率和 F1 值指标

补充:论文相关的评估指标汇总

  • 表3 列出了所有评估指标
  • AVE :属性-值提取(Attribute-Value Extraction,AVE) :从商品信息中提取属性和对应的值,如商品“颜色:红色”
  • NED :命名实体检测(Named Entity Detection,NED) :识别文本中的特定实体,如品牌名、商品名等
  • ENT :实体类型分类(Entity Typing,ENT) :对文本中的实体进行分类,如“苹果”是水果还是品牌
  • PDC :产品分类(Product Classification,PDC) :将商品归类到预定义的类别中,如“手机”属于“电子产品”
  • TAM :标题-属性匹配(Title-Attribute Matching,TAM) :判断商品标题是否与其属性描述一致
  • TIG :标题生成(Title Generation,TIG) :根据商品信息生成简洁且吸引人的标题(问题:如何评估简洁和吸引人?)
  • DEG :描述生成(Description Generation,DEG) :基于商品属性生成详细的描述文本
  • DES :描述摘要(Description Summarization,DES) :将商品的长描述压缩成简短的摘要
  • STG :短标题生成(Short Title Generation,STG) :生成更简短的标题(问题:用于移动端展示?)
  • NER :命名实体识别(Named Entity Recognition,NER) :识别并分类文本中的命名实体,如人名、地名等
    • 注:NER = NED + 实体分类,部分文献中也会混用两者,但实际上强调 NED 时,是不用对实体进行分类的
    • 输入句子 :"马云在杭州创立了阿里巴巴。"
    • NED输出 :[马云] 在 [杭州] 创立了 [阿里巴巴]
    • NER输出 :[马云]PER 在 [杭州]LOC 创立了 [阿里巴巴]ORG
  • ITD :意图理解(Intent Understanding,ITD) :分析用户查询的意图,如“购买”或“咨询”
  • ADM :地址匹配(Address Matching,ADM) :验证或匹配用户输入的地址信息
  • AGNews :主题分类(Topic Classification) :将新闻文本分类到预定义的主题类别
  • SQUAD v2 :阅读理解(Machine Reading Comprehension,MRC) :阅读理解任务,根据文章回答问题
  • SNLI :自然语言推理(Natural Language Inference) :判断两个句子之间的逻辑关系(蕴含、矛盾或中立)
  • TNews :主题分类(Topic Classification) :中文新闻文本的主题分类任务
  • CMRC2018 :阅读理解(Machine Reading Comprehension,MRC) :中文阅读理解任务,根据文章回答问题
  • OCNLI :自然语言推理(Natural Language Inference) :中文自然语言推理任务,判断句子间的关系

Results on Domain-specific Tasks

  • 表4 展示了 BLOOM-3B 和 BLOOM-3B-7B 模型在不同 CPT 设置下对多种电子商务 Few-shot ICL(EcomICL)任务的评估结果
  • Few-shot ICL 评估直接反映了 LLM 在无需额外微调的情况下解决领域特定任务的能力。实验结果表明:
    • (1) 从训练数据的角度来看:
      • 使用电子商务数据进行 CPT 有效提升了 3B 和 7B 模型在部分电子商务任务上的 ICL 性能
      • 仅使用通用数据训练模型会导致几乎所有任务的性能显著下降
      • 混合领域特定数据和通用数据进行训练能带来更一致的性能提升
      • 这些结果说明:在 CPT 中同时纳入领域特定语料和通用语料是必要的
        • 因为领域特定数据有助于模型适应领域特定知识和数据格式 ,而通用数据则帮助模型避免遗忘世界知识并保持泛化能力
    • (2) 从数据混合的角度来看:
      • 论文设计的将不同来源数据整合到同一上下文中的策略(表4 中不带 Separate 的行),在大多数任务上实现了更大的性能提升或更小的性能下降,优于从不同数据源独立采样的结果(表4 中带 Separate 的行)
      • 在属性-值抽取(Attribute-Value Extraction, AVE)和标题生成(Title Generation, TIG)任务中观察到显著改进
      • 这表明论文的数据混合策略在建立不同数据源之间的关联以及将电子商务数据中的领域特定知识注入模型方面是有效的
    • (3) 领域特定 CPT 对模型性能的影响因任务类型而异
      • 对于 高度依赖领域知识 或 数据格式与通用文本差异较大 的任务, CPT 显著提升了模型在这些任务上的性能
        • 高度依赖领域知识的任务:例如产品分类(Product Classification, PDC)和标题生成(Title Generation, TIG)
        • 数据格式与通用文本差异较大的任务:例如描述摘要(Description Summary, DES)和短标题生成(Short Title Generation, STG)
      • 对于需要一定领域知识但形式与通用 NLP 任务差异较小的任务,领域特定 CPT 仅带来边际性能提升
        • 需要一定领域知识但形式与通用 NLP 任务差异较小的任务:例如属性-值抽取(Attribute-Value Extraction, AVE)和命名实体检测(Named Entity Detection,NED)
      • 对于缺乏领域特异性 或本身难以通过 Few-shot ICL 解决的任务, CPT 未能带来有效收益
        • 缺乏领域特异性的任务:例如实体分类(Entity Typing,ENT)
        • 本身难以通过 Few-shot ICL 解决的任务:例如标题-属性匹配(Title-Attribute Matching,TAM)
CPT 对 SFT 的影响如何?
  • 论文还对采用不同配置训练的模型进行了 SFT(注:SFT 时使用相同的 EcomInstruct 训练数据集)
    • 随后,论文评估了 SFT 后模型在各项任务上的性能
    • 指令微调后的模型可以更方便地用于解决实际场景中的 NLP 问题
    • 因此,相关基准上的实验结果间接反映了 CPT 对 LLM 领域特定性能的影响
  • 表5 展示了进行了 SFT的相关实验结果,从中论文观察到以下现象:
    • (1) 使用领域特定数据进行 CPT 有效提升了模型在大多数基准上的性能 ,而将通用预训练数据与领域特定数据结合进一步增强了模型性能(与 Few-shot ICL 评估结果类似)
      • 在 CPT 过程中,论文设计的数据混合策略 ,在提升模型 SFT 后的性能方面比从不同来源独立采样领域特定数据更有效
    • (2) CPT 对 SFT 后领域性能的影响因任务类型而异
      • 与 EcomICL 的发现类似, CPT 为需要领域知识 或 涉及特定数据格式的任务带来了显著增益,而对其他任务的增益较小
        • 例如标题生成(Title Generation, TIG)、产品分类(Product Classification, PDC)、意图检测(Intent Detection, ITD)
    • (3) CPT 对训练集内(held-in)和训练集外(held-out)任务均表现出整体性能提升,其中训练集外任务的提升更为明显
      • 这一结果符合直觉,因为 SFT 直接训练了模型解决某些特定任务的能力,从而减轻了 CPT 的影响
      • 在此过程中,训练集内(held-in)任务的相关数据被包含在训练集中,使得这些任务更容易受到 SFT 的影响

Results on General Tasks

  • 除了领域特定基准外,论文还评估了 LLM 在几项中英文通用 NLP 任务上的 Few-shot ICL 性能
  • 表6 提供了关于 CPT 对 LLM 通用能力影响的 insight
  • 实验结果表明:
    • 从解决实际问题的角度来看,使用通用数据和领域特定数据混合 CPT 模型对模型解决主题分类(Topic Classification)、机器阅读理解(Machine Reading Comprehension)、自然语言推理(Natural Language Inference)等经典 NLP 任务的 Few-shot ICL 能力影响较小
      • AGNews :主题分类(Topic Classification)
      • SQUAD v2 :阅读理解(Machine Reading Comprehension,MRC)
      • SNLI :自然语言推理(Natural Language Inference)
      • TNews :主题分类(Topic Classification)
      • CMRC2018 :阅读理解(Machine Reading Comprehension,MRC)
      • OCNLI :自然语言推理(Natural Language Inference)
    • 然而,由于论文的领域特定数据主要是中文,仅使用领域特定数据进行 CPT 会导致模型在中文基准上的性能下降
      • 这验证了在领域特定预训练中纳入通用数据以保持模型通用 NLP 能力的重要性
    • 需要注意的是,在本实验中,论文并未评估模型的复杂推理或知识保留能力,因此无法得出领域特定预训练是否会损害模型这些能力的结论

Performance Variation during Training

  • 论文还评估了 CPT 过程中多个模型检查点在领域特定和通用 ICL 基准上的性能,以分析 LLM 在训练过程中的性能变化。图 3(a) 和 3(b) 展示了部分代表性任务上各模型检查点的性能
  • 从 EcomICL 中四项任务的性能变化中观察到三种不同的趋势:
    • (1) 在某些任务(例如产品分类(PDC))中,模型的性能稳步提升
    • (2) 在另一些任务(例如描述生成(DEG))中,模型性能保持相对稳定
    • (3) 在某些任务(例如属性-值抽取(AVE)和描述摘要(DES))中,模型的性能最初提升,但在达到转折点后不再显著变化
  • 对于 GeneralICL 中的四项典型任务
    • 可以明显看出模型的性能在训练过程中波动
    • 然而,在观察到的时间范围内,指标并未显著偏离 CPT 前的初始值
    • 这一结果进一步强调,选择合适的数据进行 CPT 可以有效保持模型的通用 NLP 能力

NLP——EfficientCPT(FinPythia)

注:本文包含 AI 辅助创作

  • 参考链接:
    • 原始论文:(FinPythia)Efficient Continual Pre-training for Building Domain Specific Large Language Models, ACL 2024, Amazon

Paper Summary


Conclusion

  • 在论文中,论文证明了领域自适应持续预训练(Continual Pre-training, CPT)在开发领域特定 LLM 中的有效性
    • CPT 可以用于在现有开放领域 LLM 的基础上开发领域专用 LLM
    • 领域自适应持续预训练提高了 LLM 在金融任务上的性能,并以更低的成本使 LLM 能够获取领域知识
  • 论文提出了高效的领域自适应持续预训练方法 ETS-DACP 和 ETA-DACP,以增强持续预训练
    • 通过在训练数据筛选过程中更具选择性,论文的方法改进了持续预训练,仅使用普通持续预训练 10% 的数据(成本)就取得了更好的结果
  • 基于熵的任务无关数据选择策略与任务感知策略表现相当
    • 这一发现可用于在缺乏任务数据时进行持续预训练的数据选择
    • 论文还观察到在开放领域标准任务上的性能没有下降,表明领域持续预训练不会损害开放领域能力
  • 论文的研究将领域持续预训练作为从头构建领域特定 LLM 的有力替代方案
    • 通过更智能的数据选择,我们可以以较低成本超越普通持续预训练
    • 与普遍认为“更多数据更好”的观点相反,论文的结果表明数据质量同样重要
    • 尽管领域持续预训练在小语言模型文献中已有广泛研究,但考虑到 LLM 的规模和成本,论文提供了独特的见解
  • 论文介绍了通过金融领域自适应持续预训练开发的 FinPythia-6.9B
    • 持续预训练的 FinPythia 在金融任务上相较于原始基础模型展现了持续的性能提升
  • 论文进一步探索了简单但高效的数据选择策略用于持续预训练
  • 论文的数据选择策略仅使用 10% 的语料库规模和成本,即可超越普通持续预训练的性能 ,且不会降低开放领域标准任务(standard tasks)的表现
  • 本研究为构建领域专用 LLM 提供了一种经济高效(cost-effectively)的替代方案

Introduction and Discussion

  • LLM 展现出对自然语言的深刻理解,并在多种任务上提升了性能
  • 开放的网页数据有助于创建具备广泛能力的通用 LLM,但通用 LLM 并非“专家”
    • 例如,虽然 LLM 可以撰写优秀的新闻文章,但在撰写专业的法律文件时可能力不从心
  • 为创建领域专用的 LLM,需要基于领域数据进行训练。构建领域专用 LLM 的方法分为两类:
    • 从头训练领域专用 LLM
    • 基于现有 LLM 使用领域数据进行持续预训练
  • 大多数研究者采用第一种方法,例如医学领域的 Med-PaLM 系列模型(2022,2023)和金融领域的 BloombergGPT(2023b)
  • 尽管领域自适应持续预训练是一种更经济的替代方案,但相关研究较少
    • PMC-LLaMA(2023a)是通过对 LLaMA(2023)进行医学论文持续预训练得到的医学 LLM
  • 持续预训练还可用于在动态环境中更新 LLM 的最新知识
  • 本研究探讨以下问题:
    • 1)领域自适应持续预训练是否有助于构建领域专用 LLM?
    • 2)能否采用数据选择策略实现更高效的领域自适应持续预训练?
    • 3)领域自适应持续预训练是否会损害 LLM 的开放领域能力?
  • 论文以金融领域为背景,通过基于 Pythia(2023)构建的持续预训练模型 FinPythia 来回答这些问题
    • 针对第一个问题(回答肯定),论文报告了在规模仅为 Pythia 训练数据 8% 的领域数据上进行持续预训练后,金融基准测试(2023a)的性能提升。定性分析中,论文观察到 FinPythia 掌握了最新的金融领域知识
    • 针对第二个问题(回答肯定),论文提出了两种简单的数据选择技术:
      • 任务感知(task-aware)的 Efficient Task-Similar Domain-Adaptive Continual Pre-training(ETS-DACP)
      • 任务感知的 Efficient Task-Agnostic Domain-Adaptive Continual Pretraining(ETA-DACP)
      • 这些方法仅使用 10% 的选定领域数据(即 Pythia 训练语料库的 0.8%),即可超越普通领域自适应持续预训练的性能
        • 论文使用三种指标进行数据选择:相似性、困惑度和token 类型熵(token type entropy)
        • 相似性需要任务数据作为种子数据;
        • 困惑度和 token 类型熵 两种指标是任务无关的度量
    • 针对第三个问题(回答肯定),论文在四个开放领域标准任务上进行了基准测试,发现持续预训练的 LLM 在适应领域的同时保留了其通用能力
  • 本研究的主要贡献如下:
    • 论文整理了一个包含 240 亿(24B)token 的大规模金融语料库 ,数据来源于金融数据集
    • 实验证明,通过持续预训练构建领域专用 LLM 是一种经济高效的替代方案,扩展了小型语言模型(LM)的研究发现(2020;2023b)
    • 论文提出了两种高效领域自适应持续预训练方法 ,通过数据选择策略以更低的成本超越普通持续预训练的基线性能

Methodology

  • 本节介绍用于持续预训练的金融语料库整理、背景概念以及论文提出的任务感知领域自适应持续预训练方法

Financial Corpus Curation

  • 在评估数据来源时,论文考虑了三个维度:公开可用性、许可协议和规模
  • 金融语料库的数据来源包括金融新闻 CommonCrawl 和 SEC 文件
  • 金融新闻 CommonCrawl 是通过从公开的 CommonCrawl 数据中筛选金融新闻得到的
  • 论文遵循 Pythia (2023)的去重流程(de-duplication procedure),移除重复的训练数据
  • 结合这两个来源,论文创建了一个包含 239 亿 token(165 亿单词)的数据集,详细内容见附录 G

Background

  • 领域自适应持续预训练(Domain-adaptive Continual Pre-training,DACP)
    • 传统方法 :领域专用 LLM 通常通过从头训练并使用大量领域数据构建
      • 这种方法有两个缺点:成本高昂且需要大量领域数据,这在数据较少的领域(如金融)中难以实现
    • DACP :在通用 LLM 的基础上 ,使用大规模领域特定未标注数据进行持续预训练
    • DACP 已证明能够使 LM 更好地适应领域内分布(2020;2022),并使 LLM 能够获取新知识(2022b),而无需从头训练
  • 任务自适应持续预训练(Task-Adaptive Continual Pre-training,TACP)
    • 任务自适应持续预训练(TACP)指通过持续预训练提升特定任务的性能
    • TACP 已在小型 LM(如 BERT)中进行了研究,通过使用任务的标注和未标注数据预训练 LM(2020;2019),显示出对任务性能的提升
    • TACP 使用预训练损失目标(如掩码语言建模(MLM)损失)来适应下游任务 ,而无需使用任务标签
    • 尽管任务数据通常有限 ,但 TACP 对小型 LM(如 BERT)具有显著效果
    • 论文在四个金融评估任务上对 TACP 进行了基准测试,通过使用任务的未标注数据持续预训练 LLM(不涉及任何任务标签)
  • 理解:
    • TACP 更侧重任务,一般来说数据量更小,数据必须是任务相关的
    • DACP 更侧重领域,一般来说数据量更大,数据可以是与任务无关的
    • 两者都是无标签的数据,且 DACP 中的数据 包含了 TACP 的数据

Towards an Efficient Domain-adaptive Continual Pre-training

  • TACP 的主要局限在于其仅使用未标注任务数据训练 ,导致模型过于任务特定化
  • DACP 虽然使用更大的语料库,但成本高昂
  • 为平衡这些局限,论文提出了两种方法:
    • Efficient Task-Similar Domain-Adaptive Continual Pre-training(ETS-DACP) :通过强调任务重要性来构建面向一组任务的 LLM
    • Efficient Task-Agnostic Domain-Adaptive Continual Pretraining(ETA-DACP) :从领域语料库中选择信息量最高的样本
    • ETA-DACP 更通用,不面向专门的任务

Efficient Task-Similar Domain-Adaptive Continual Pre-training(ETS-DACP)

  • ETS-DACP 通过选择与任务数据更接近的部分领域数据(图1 中的蓝色区域)来构建最优集合 \(\mathcal{D}^*\)
  • 微调 LLM 需要大量指令,而创建这些指令成本高昂
  • ETS-DACP 直接利用有限的未标注任务数据,从更大的预训练领域语料库中采样相似样本
  • 先前研究表明,在与目标领域/任务高度对齐的 token 上进行无监督训练可以提升性能(2020;2019)
  • 论文假设在未标注任务数据上持续预训练 LLM 可以通过使模型适应任务分布来提升目标任务的性能
  • 论文使用任务数据和领域语料库样本 Embedding 之间的相似性进行数据选择
    • 通过计算文档 Embedding 与任务数据 Embedding 之间的余弦相似性(使用 Spacy 模型(2017)),量化文档级任务相似性
    • 这种方法能够经济高效地衡量任务特定信息与金融语料库的对齐程度,从而实现更有针对性的预训练

Efficient Task-Agnostic Domain-Adaptive Continual Pretraining(ETA-DACP)

  • 在缺乏任务数据的情况下,论文进一步探索了任务无关的数据选择方法
  • 该方法还克服了 ETS-DACP 的局限,即避免模型过于任务特定化
  • 作者认为从预训练领域数据中选择子集时,新颖性和多样性是两个重要维度
  • 新颖性 :指 LLM 之前未见的信息
    • 论文基于 LLM 记录的困惑度来衡量文档的新颖性
    • 困惑度较高的文档在原始训练语料库中代表性较低,因此更可能包含模型的新知识,这些样本也被视为更难学习(2009),因此在持续预训练中具有较高价值
    • 降低困惑度计算成本 :直接使用 LLM 计算困惑度成本较高,因为推理需要约 25% 的训练算力
      • 为降低成本,论文使用 Pythia-70m 作为替代模型计算文档困惑度
    • 初步实验显示,Pythia-1B 和 Pythia-70m 的困惑度相关性高达 0.97,证明小模型可以作为可靠的替代品 ,实现高效的采样
  • 多样性 :捕获领域语料库中 token 类型分布的多样性
    • 多样性已被证明是语言模型课程学习中的有效特征(2016;2017)
    • 论文使用词性(part-of-speech,POS)标注获取 token 类型
    • 由于熵是衡量多样性的最佳指标之一(2009),论文使用 POS 标签的熵(2016)作为多样性度量
      • 注意:是词性(POS)标签的熵,不是 Token 的熵

Data Sampling Strategy

  • 论文提出了 ETS-DACP 和 ETA-DACP,通过主动选择相关样本来优化持续预训练的数据。数据选择有两种方式:
    • 硬采样 :根据指标百分位数对领域语料库中的样本进行排序,选择前 \(k\) 个样本以满足预训练的预算 token 数量
    • 软采样 :在此情况下,论文根据距离指标为样本分配软权重(以概率采样)
      • 以相似性指标为例,假设一个样本的相似性得分为 0.9,将其归一化后作为选择该样本的概率
      • 这种方法允许持续预训练看到图1 中蓝色区域之外的非任务样本,增加预训练数据的多样性
  • 论文使用以下三个维度选择样本:
    • 与任务数据的相似性(ETS-DACP)
    • 困惑度作为新颖性的代理(ETA-DACP-ppl)
    • token 类型熵度量的多样性(ETA-DACP-ent)
  • 为将指标值转换为采样概率 ,论文提出了一种基于分位数范围的方法
    • 首先计算每个指标的 0-100 分位数,然后将每个文档的概率设为其所在分位数
    • 这种方法有效地归一化了论文的指标,并允许聚合不同类型的指标
  • 表1 总结了论文提出的所有方法以及传统领域适应 LLM 的方法及其需求
  • ETS-DACP-com 是另一种版本的 ETS-DACP,通过将相似性、困惑度 和 熵 的平均值用于排名

Experimental Setup

Evaluation tasks

  • 金融领域任务(Finance Domain Task) :为了评估领域自适应持续预训练的效果,论文在金融任务上对模型进行了测试
    • 论文采用 FLARE 框架 (2023a) 来评估模型性能
    • FLARE 扩展了lm-evaluation-harness 的评估框架,加入了多种金融任务
    • 论文遵循其指令提示、数据划分和指标计算方法,以便进行对比
    • 论文选用了以下 4 个任务(2023b; 2023a):
      • 金融短语库(Financial Phrase Bank, FPB) :FPB 是一项针对金融新闻的情感分类任务 (2014),情感标签反映投资者对新闻的看法(正面/中性/负面)
      • FiQA 情感分析(FiQA SA) :基于金融新闻和标题的细粒度情感分类任务 (2018)
      • 头条分类(Headline) :判断金融实体相关的头条是否包含特定信息的二分类任务 (Sinha and Khandait, 2020)。每条新闻关联 9 个标签,例如“是否涉及价格”“价格上涨”“价格下跌”“价格稳定”“历史价格”和“资产”等
      • 命名实体识别(NER) :基于美国证券交易委员会(SEC)报告中信用风险评估部分的金融命名实体抽取任务,标注类别包括人名(PER)、地点(LOC)、组织(ORG)和其他(MISC)
  • 通用领域任务 :为了评估领域训练对非领域能力的影响,论文在以下通用任务上进行了测试
    • ARC (2018):衡量模型在首次任务演示后预测输出网格的能力
    • MMLU (2020):测试模型在 57 项任务上的知识水平,包括基础数学、历史和法律等
    • TruthfulQA (2021):评估模型在 38 个类别的 817 个问题上的问答能力
    • HellaSwag (2019):测试模型根据事件描述生成相关后续句子的常识能力

Baselines

Training Setup and Infrastructure

  • 论文选择了 Pythia (2023) 中的 1B 和 6.9B 参数模型作为基准预训练 LLM
    • 注:Pythia 提供了从 70M 到 12B 参数不等的多种模型规模
  • 持续预训练的配置 Derived from Pythia 的训练设置 (2023)
    • 为 FinPythia-6.9B 设置学习率为 \(1.2 \times 10^{-5}\)
    • 为 FinPythia-1B 设置学习率为 \(3 \times 10^{-5}\)(这是原始训练计划中的最小学习率)
      • 理解:小模型的学习率大一些,理论上更容易找到最优解,所以学习率可以大一些
    • 论文使用较小的学习率以缓解灾难性遗忘问题,并在训练过程中保持恒定
    • 论文采用 bf16 精度而非 Pythia 使用的 fp16,并将原始批量大小减半至 512
  • 持续预训练任务在单台 AWS P4d.24xlarge 实例上运行
  • 由于模型规模适中,论文仅通过 DeepSpeed ZeRO Stage 2 (2020) 启用数据并行,并开启激活检查点功能
  • 在 24B token 上,FinPythia-6.9B 完成预训练需要 18 天,而 FinPythia-1B 需要 3 天

Results and Analysis

Domain-adaptive Continual Pre-training,DACP

  • 为了评估金融领域任务的表现,论文将 FinPythia 与 Pythia 以及其他类似规模的开源模型进行了对比,包括 OPT-7B (2022)、BLOOM-7B (2022) 和 GPT-J-6B (Wang and Komatsuzaki, 2021)
  • 虽然论文报告了开源模型的结果,但主要结论来自 Pythia 和 FinPythia 之间的对比,因为它们的差异反映了领域自适应持续预训练的效果
  • 所有模型均在 5-shot 设置下进行评估,每个测试实例的示例均从任务的训练数据集中随机采样(遵循 FLARE (2023a) 的基准设置)
  • 结果如表2 所示
    • FinPythia-6.9B 和 FinPythia-1B 在除 FiQA SA 任务外的所有金融任务上均优于其对应的 Pythia 模型
      • 问题: FiQA SA 任务也是金融领域的(情感分析)任务,持续预训练后怎么效果还降低了?
    • DACP 将 1B 模型的平均任务性能提升了 2.8%,6.9B 模型提升了 8.3%
      • 这些结果直接证明了 DACP 对提升领域任务性能的有效性
    • 此外,Pythia-6.9B 的表现优于 OPT-7B、BLOOM-7B 和 GPT-J-6B
    • 与 BloombergGPT 的对比请参见 附录A

Efficient Domain-adaptive Continual Pre-training

  • FLARE 使用 5-shot 上下文性能评估整个训练数据,即每个测试样本在评估时会看到不同的训练样本
    • 这使得模型之间的比较更加困难,因为每个测试样本在推理过程中会看到完全不同的训练示例
    • 在现实场景中,标注数据有限,没有大量的训练数据
    • 由于训练数据集中随机选择的高方差性,作者观察到较大的标准差
  • 为了克服这种随机性并确保模型之间的公平比较,论文为每个任务从训练数据集中预留了 50 个标注样本池 ,称为“shot pool”(示例池)
    • 对于剩余的训练样本,论文移除其标签并将其用作无标签任务数据 ,用于基于任务数据的数据选择策略
    • 这种配置的采用是因为论文无法直接获取无标签任务数据
    • 通过这种设置,论文还模拟了标注数据稀缺的约束条件
    • 尽管这种方法生成了无标签任务数据,但其规模仍然较小,仅包含来自四个任务的 24万 个 token
  • 论文使用每种 Efficient DACP 方法选择了 10% 的语料库子集(注:详情见表1)
  • TACP 和 Efficient DACP 方法均运行一个 epoch,并使用与 DACP 相同的预训练配置以确保公平比较
  • 由于计算预算限制,论文使用 Pythia-1B 运行这些实验
  • 每个任务的结果通过 10 次随机种子的运行均值报告(10次随机种子,666!)
  • 评估结果如 表3 所示
    • TACP 相比原始 Pythia-1B 显示出显著的性能提升
    • 在 DACP、TACP 和 Efficient DACP 所有方法中,ETS-DACP 表现最佳 ,平均任务性能最高
      • 注:相同数量 token 下,DACP 结果比 Efficient DACP 差
    • 结果说明:无标签任务数据上进行任务自适应和领域持续预训练 LLM 的有效性
      • 这与小语言模型中的结果一致 (2020)
  • 我们可以观察到以下几点:
    • ETS-DACP(使用 10% 数据)优于 DACP(使用 100% 数据);
    • ETS-DACP 在所有三种对比方法中表现最佳 ,与结合三种度量的 ETS-DACP-com 相当;
    • ETA-DACP-ent 未使用任何任务数据(仅使用 10% 语料库训练)表现接近第二 ,明显优于普通 DACP;
    • 硬采样的 Efficient DACP 方法优于软采样方法
    • 补充观察:按照 PPL 采样的数据效果甚至低于原始 Pythia-1B ,应该是这些数据会导致模型分布偏移到模型未知的区域
  • 这些结果清楚地表明:并非所有数据对持续预训练都同等重要;
    • Efficient DACP 方法使用的所有数据(10%)都是 DACP 数据的子集
    • 由于 DACP(100%)的性能低于 ETS-DACP 或 ETA-DACP-ent,加入不相关数据和低熵数据会损害性能
      • 注:硬采样和软采样结果之间的差异进一步支持了这一观察
    • 不同任务间表现不完全相同,但可以确定的是加入不相关数据和低熵数据会损害性能(PPL 采样的数据效果不好)
    • 核心结论:领域持续预训练的数据应精心筛选
  • 需要注意的是,10% 的领域数据(2.39B token)仅占基础 Pythia 训练数据(3000 亿 token)的不到 1%
    • 结论:在持续预训练的数据筛选过程中选择性更强,可以以较低成本显著提升领域性能
    • 这些结果证明了在领域和任务(子领域)上进行持续预训练的有效性
  • 一个自然的问题是:LLM 是否会因为专注于狭窄领域而丧失其通用性? 即LLM 是否会因成为专家而牺牲通用性?
    • 论文通过测量持续预训练的 LLM 变体在 Pythia 评估的非领域任务上的性能来回答这个问题
    • 表4 展示了四个非金融标准任务的表现,论文没有观察到这四个非领域任务的性能有显著变化
      • 理解:实际上还是有微弱降低的,且 ppl 采样方式可提升通用任务的效果
      • 注:结合整体来看,ETS-DACP-com 效果是最好的,通用任务和领域任务效果均不错

Ablation on Percentage of Pre-training Data Selected

  • 论文在图2 中展示了预训练数据比例的消融实验
  • 论文发现:
    • ETS-DACP 和 ETA-DACP-ent 方法在 5% 的预训练数据时平均 F1 分数接近 59%,并在使用 10% 的预训练数据后开始下降
      • 这表明,添加信息量较少的样本会降低性能 ,因为 LLM 会学习不那么有用的示例,从而调整其分布
    • 对于 DACP,论文观察到性能持续提升
    • 困惑度选择的数据(ETA-DACP-perplexity)在 1% 时表现出高于 DACP 的性能,之后显著下降,在 5% 时达到最低性能,随后恢复
      • 通过进一步调查 1%-5% 预训练数据区域中基于困惑度选择的样本,论文发现其中包含大量缺乏自然语言文本的长表格
      • 这种分布变化可能是基于困惑度的数据选择性能下降的原因
  • 数据选择指标的比较(Comparison of Data Selection Metrics)
    • 从表1 和图2 的结果中可以看出
      • 基于任务相似性的选择效果最佳 :训练数据与任务数据的相似性对(预)训练最有益
      • 熵是第二优但有效的任务无关领域预训练数据选择技术
    • 最高熵样本基于命名实体分布选择,这些样本会包含更多领域特定实体(如名称),而低熵样本的实体类型较少
      • 论文的假设是,这些样本让 LLM 接触到更多领域知识,而低熵样本的信息量较少
    • 困惑度表现出一个有趣的现象:初始 1% 的高困惑度样本有益,但之后无益
      • 高困惑度样本对模型来说更新颖,但新颖性可能来自分布外或低质量样本
      • 在困惑度前 1% 的样本中,论文观察到高质量的金融文章,而在 1% 到 5% 的范围内,论文发现了包含长表格的样本,这些样本可能对基础模型的训练来说是噪声
    • 困惑度更易受数据噪声的影响 ,而熵度量则避免了这些噪声样本
  • 由于大多数大型数据集可能包含噪声样本 ,基于困惑度的数据选择不是一个好方法
  • 困惑度与其他两种度量(相似性 0.21,熵 0.14)之间的相关性较低 ,其他两种度量避免了选择噪声样本
  • 鉴于论文通常希望领域 LLM 在未见任务上表现良好,将预训练适应于任务无关框架更为合适
  • 核心结论:基于论文的实验,熵度量在任务无关性和下游任务性能上均表现优异

Related Work

  • 领域特定大语言模型(Domain-specific LLMs) :
    • 尽管大多数发布的 LLM 是通用模型,领域特定的 LLM 已成为有价值的对应物
      • MedPaLM 在医学语料库上训练,在医学基准测试中取得了最先进的结果 (2022, 2023)
      • Bloomberg 则从头开始在金融语料库上开发了金融 LLM (2023b)
    • 持续预训练提供了一种替代从头开始构建领域特定 LLM 的方法
      • Wu 等 (2023a) 通过在医学论文上持续预训练 LLaMA (2023) 构建了医学 LLM
  • 语言模型的持续预训练(Continual Pre-training of LMs)
    • 在无标签数据上持续预训练 LM 已被证明对任务性能有益 (2020; 2020)
      • Aharoni and Goldberg (2020) 指出,在相似领域上持续预训练有助于任务性能
      • 最接近论文工作的是 Data Selection for Language Models via Importance Resampling, NeurIPS 2023, Stanford
        • 他们基于与目标任务数据分布的相关性,通过重要性采样方案选择数据
    • 以上这些工作仅使用任务数据,论文还提出了一种任务无关的方法 ETA-DACP,因为任务相似性并不总是可行
    • 其他方法如 DAS (2023) 不预先选择数据,而是在训练过程中动态进行重要性采样,这使得其成本是普通预训练的 3 倍
      • 此外,DAS 使用两个模型副本之间的对比学习,增加了内存需求
    • 与所有这些在小语言模型(如 BERT/RoBERTa)上进行实验的方法不同,据论文所知,论文是第一个探索 LLM 持续预训练数据选择的工作
  • 数据选择(Data Selection)
    • 持续预训练的数据选择在选择最有价值的训练样本中起着关键作用
    • 各种独立于特定领域或任务的语言特征已被证明对数据选择和学习课程有益 (2017; 2016)
    • 在 LLM 的背景下,对于如何筛选预训练数据,尤其是持续预训练数据的理解仍然有限
    • 据论文所知,论文是第一个在 LLM 持续预训练背景下尝试数据选择的工作

Limitations

  • 巨大的计算需求(Huge Computational Requirements) :论文使用 AWS 上的 p4d.24xlarge 实例运行实验,成本非常高(每天 800-1000 美元)
    • 因此,运行这些实验非常昂贵,很少有研究人员有资源进行此类实验
    • 然而,由于论文的方法正是通过降低预训练成本来解决这一问题,作者相信论文的工作将有助于 LLM 的民主化,尽管成本仍然较高
  • 领域泛化(Domain Generalization) :论文的结果和实验完全基于金融领域
    • 这些结果可能无法推广到其他领域
    • 由于预训练实验的高昂成本,论文无法将其扩展到其他领域
  • 模型泛化(Model Generalization) :论文的数据选择方法已在 Pythia-1B 模型上测试,但可能无法推广到更大规模的模型
    • 在 7B 等更大模型上展示论文讨论的四种数据选择策略变体的计算成本过高
    • 然而,表2 中显示在 7B 模型上持续预训练的效果(+8.27%)远高于 1B 模型(+2.82%),这一结果令人鼓舞
  • 与从头训练领域 LLM 的对比(Comparison with training a Domain LLM from scratch) :
    • 尽管论文提出了一种比从头训练领域 LLM 更便宜的替代方案,但目前尚不清楚这两种策略中哪一种更适合创建领域 LLM:从头训练领域 LLM 还是持续预训练

附录A BloombergGPT 性能基准测试(Benchmark BloombergGPT’s Performance)

  • 注:BloombergGPT 是一个用于金融的大型语言模型,是彭博社(Bloomberg)和约翰霍普金斯大学联合开发的
  • 由于 BloombergGPT 使用内部数据分割进行评估,且报告指标的计算细节可能不一致,因此无法直接将其结果与论文的结果进行比较
  • 为了充分评估持续预训练的效果,论文基于 FLARE 框架对 BloombergGPT 进行基准测试
    • 具体包括评估 OPT-66B 和 GPT-NeoX-20B 在 FLARE 中的性能,并与Wu等人(2023b)报告的结果进行对比
    • 这种严格的基准测试确保了评估的公平性和全面性,为论文的持续预训练方法与从头训练的金融 LLM 的效果比较提供了有价值的见解
  • 表5展示了对比结果
    • GPT-NeoX 在两种评估框架下的平均任务性能相似,但在单个任务上的表现存在差异
      • 例如,FLARE 评估的 FiQA SA 任务的 F1 分数比 BloombergGPT 的评估结果高出 46%,而 Headline 和 NER 任务的 F1 分数则较低
    • OPT-66B 在 FLARE 上的所有4个任务结果均低于 BloombergGPT 的评估结果,平均任务性能低了20%
      • 这些结果表明,BloombergGPT 的评估结果相较于 FLARE 可能存在高估。除非 BloombergGPT 在 FLARE 上进行基准测试或其评估配置公开,否则这一比较仍无法定论

附录B Intuition behind Domain Task Performance and Data Selection

  • 本节论文将问题形式化,并从数学角度解释为何基于相似性的方法效果最佳
  • 问题形式化 :给定一个未标注的领域预训练语料库 \(\mathcal{U}\)(图1中的绿色区域),接下来分为两种场景:是否存在未标注的任务语料库
    • 第一种场景是存在任务语料库(单个或多个任务)\(\mathcal{T}\)(图1中的红色区域)
    • 通常,任务语料库是领域语料库的子集,即 \(\mathcal{T} \subset \mathcal{U}\),且 \(|\mathcal{U}| \gg |\mathcal{T}|\)
    • 数据选择的目标是从 \(\mathcal{U}\) 中选择一个子集 \(\mathcal{D}\),以最有助于预训练 LLM 模型
    • 论文假设所选领域语料库子集远大于任务语料库,即 \(|\mathcal{D}| \gg |\mathcal{T}|\)
    • 数据选择问题可以形式化为选择最优子集 \(\mathcal{D}^* \subset \mathcal{U}\):
      $$
      \mathcal{D}^* = \mathop{argmin}_{\mathcal{D} \subset \mathcal{U} } \mathbb{E}_{x \in \mathcal{T} }[\mathcal{L}_t(y|f(\theta^*;x))]
      $$
      • \(f(\theta;\cdot)\) 是参数为 \(\theta\) 的 LLM
      • \(y\) 是任务输出,\(x\) 是目标任务数据 \(\mathcal{T}\) 的输入
      • \(\mathcal{L}_t\) 是目标任务损失或指标
      • \(\theta^*\) 通过预训练任务计算:
        $$
        \theta^* = \operatorname*{argmin}_{\theta} \mathbb{E}_{x_u \in \mathcal{D} }[\mathcal{L}_{\text{pre-train} }(f(\theta;x_u))]
        $$
        • \(\mathcal{L}_{\text{pre-train} }\) 是预训练损失
        • \(x_u\) 是 \(\mathcal{D}\) 中的未标注样本
  • 论文的领域自适应持续预训练可以从无监督领域自适应(2016)的角度理解
    • 源数据是大型无监督领域语料库,目标数据是目标任务数据
    • 通过预训练,论文无法直接控制与任务训练数据的对齐;论文的思路是通过在预训练中与领域对齐,使LLM与任务对齐
    • 这一直觉得到了LLM预训练在开放领域任务上提升性能的证据支持
  • 论文使用(2016;2010)的泛化界,因为论文的问题与无监督领域自适应类似
    • 给定假设空间为 \(\mathcal{H}_p\),其中 \(f \in \mathcal{H}_p\);
    • 在源数据 \(\mathcal{D}\) 和任务数据 \(\mathcal{T}\) 上的泛化误差分别为 \(\epsilon_{\mathcal{D} }\) 和 \(\epsilon_{\mathcal{T} }\)
    • 泛化界可以表示为:
      $$
      \epsilon_{\mathcal{T} }(f) \leq \epsilon_{\mathcal{D} }(f) + \frac{1}{2} d_{\mathcal{H}_p \Delta \mathcal{H}_p}(\mathcal{D}, \mathcal{T}) + \mathcal{C}
      $$
      • 其中,\(d_{\mathcal{H}_p \Delta \mathcal{H}_p}\) 是 \(\mathcal{D}\) 和 \(\mathcal{T}\) 之间的分布差异距离,由(Ganin等,2016)界定:
        $$
        d_{\mathcal{H}_p \Delta \mathcal{H}_p}(\mathcal{D}, \mathcal{T}) \leq 2 \sup_{\alpha(h) \in \mathcal{H}_d} [\alpha(h) - 1]
        $$
        • \(\alpha(h)\) 是最优领域分类器
        • \(\mathcal{H}_d\) 是领域分类器的假设空间
  • Zhao等(2017)证明,当领域分类器具有随机预测(达到最高熵状态)时,差异距离 \(d_{\mathcal{H}_p \Delta \mathcal{H}_p}(\mathcal{D}, \mathcal{T})\) 最小
  • 作者认为,当两个领域样本的表示最相似时,领域分类器无法区分两个数据集的分布,从而实现这一状态。
  • 基于这一直觉,我们可以使用与任务数据集 \(\mathcal{T}\) 表示最相似的样本选择策略
  • 论文使用 Embedding 相似性作为数据集相似性的代理,因为在大型语料库中获取最优表示具有挑战性且不切实际

附录C Qualitative Evaluation

  • 表6 展示了 Pythia-6.9B 和 FinPythia-6.9B 生成的定性示例
  • 通过观察发现,FinPythia-6.9B 在回答金融相关问题时能够生成更相关且详细的响应
    • 例如,在第一个示例中,Pythia 对金融领域术语“SPAC”一无所知并开始产生幻觉,而 FinPythia 给出了 SPAC 的正确定义
    • 其他三个示例也表现出相同的趋势
  • 这些结果表明,持续预训练帮助 FinPythia-6.9B 获得了 Pythia 所缺乏的领域知识

附录D Train and Test Loss of Continual Pre-training Methods

  • 为了监控预训练过程,论文从金融语料库中随机抽取 0.1% 作为金融测试数据集,并在 Pile 测试数据集上评估模型
    • 理解:相当于 金融数据集 + Pile 数据集(开放领域)同时做测试
    • 注:Pile 数据集是一个用于大语言模型训练的多样性大规模文本语料库,由 22 个不同的高质量子集构成,包括现有的和新构建的,许多来自学术或专业来源。这些子集包括 Common Crawl、Wikipedia、OpenWebText、ArXiv、PubMed 等(Pile 数据集总计规模大小有825GB 英文文本)
  • 图3 展示了 FinPythia-6.9B 的损失轨迹(图中的训练损失通过 50 个优化步骤的移动平均平滑处理)
    • 论文观察到,在持续预训练的早期阶段,金融测试(Fin test)损失急剧下降,随后逐渐趋于饱和,这与从头训练的损失轨迹类似(2023b;)
    • 损失日志表明,领域自适应持续预训练成功地将 Pythia 适配到金融领域,同时 Pile 测试(Pile test)损失仅有轻微增加
  • 图5 展示了论文的高效 DACP 方法在金融领域损失(Fin Test)和开放领域损失(Pile Loss)上的表现
    • ETS-DACP-com(硬采样)的 Fin Test 损失最低
      • 因为它结合了任务知识以及金融语料库中高熵/高困惑度的样本(这种选择差异如 图4 所示)
    • 软采样方法的所有 Fin Test 损失相似
      • 因为论文对整个金融语料库空间进行采样,使模型能够看到语料库的完整空间(图1中的绿点),类似于图4(b)
    • 硬采样的 ETS-DACP 上 Fin Test 损失和 Pile Test 损失较高
      • 因为它局限于任务分布(图4(a)中的蓝色区域),而任务无关方法则覆盖了更广泛的金融语料库分布(图4(b))
    • ETA-DACP-ent 和 ETA-DACP-ppl 的损失曲线相似
      • 因为它们都从整个金融语料库中采样
    • ETS-DACP-com 的损失高于这两者但低于 ETS-DACP
      • 因为它是三种采样技术的混合
  • ETS-DACP 在开放领域 Pile Loss 上的损失最高
    • 然而,论文并未观察到 ETS-DACP 在开放领域任务上的性能显著下降(注:其实是降低了的,-2.85% 不算太低了吧)
  • ETA-DACP-ent 和 ETA-DACP-ppl 的损失高度相关(各个测试集上表现都差不多),而 ETA-DACP-ppl 在论文的任务上表现始终明显较差
    • 这说明:实际任务性能与损失曲线之间相关性较低(损失函数不能作为衡量实际任务性能的唯一指标),使用未标注数据的验证/测试损失作为任务性能的代理(proxy)并不理想(至少在该领域中如此)
      • 这与(Liu等,2023)关于任务性能与预训练损失低相关性的观察一致

附录E 困惑度、相似性与多样性(Perplexity, Similarity, and Diversity)

  • 本节论文深入分析金融语料库中困惑度、相似性和多样性的分布。论文发现,这三个指标均呈现高度偏态分布。具体而言,如图7顶部所示,相似性指标呈现双峰模式,可能是由于金融语料库中存在两个不同的数据源
  • 图6 展示了三个指标的 Spearman 秩相关性
    • 三个指标的相关性较低,表明通过这三个指标排序选择的数据子集重叠度不高
    • 这启发论文创建 ETS-DACP-com 方法,将三个指标结合起来以平衡不同维度
  • 图8 展示了硬采样下各高效 DACP 方法所选子集的三个指标分位数分布

附录F ETS-DACP-com vs ETS-DACP

  • ETS-DACP-com 有效平衡了领域特定 LLM 和任务特定 LLM 的构建
    • 为证明其有效性,论文使用相似性、知识新颖性和多样性的平均分位数作为采样权重,通过加权采样选择 10% 和 20% 的金融语料库(无放回)构建训练数据
  • 图8 展示了金融语料库各子集的平均样本分位数
  • 作者认为,对三个指标的分位数取简单平均可以在三个维度之间实现良好平衡——每个子集的三个维度平均分位数处于相近范围
  • 相比之下,ETS-DACP 的子集表现出更高的困惑度和较低或中等的熵,表明未标注任务数据包含新知识但多样性较低
  • 对于 ETA-DACP-ppl 和 ETA-DACP-ent,样本在其他两个维度上分布均匀

附录G Financial Dataset Curation

  • 常见的金融语料库包括SEC文件(2018)、电话会议记录(2019)、分析师报告、金融推文(2022)、金融新闻(2018)等
  • 论文使用来自Financial News CommonCrawl和SEC文件的金融新闻和文件构建金融领域语料库,具体步骤如下:
  • Financial News CommonCrawl [13.2B词,83.5%]
    • 论文通过预处理 AWS S3 上公开的 2016年 至 2022年 News CommonCrawl 数据转储,构建英文金融新闻数据集
    • 为从大量新闻数据中识别金融新闻文章,论文采用两种过滤机制:域名过滤和 URL 关键词过滤
    • 首先,论文建立了一个全面的金融新闻网站域名组合,例如 CNBC,保留这些来源的新闻文章,它们构成了金融语料库的主要部分
    • 其次,为从一般新闻媒体中捕获金融文章,论文观察到许多媒体为商业、经济或金融新闻设置了专门板块或子域名(例如Fox Business)。论文采用基于关键词的方法有效识别这些金融文章
    • 过滤过程确保选择适合金融领域持续预训练的语料库
  • SEC文件 [3.3B words,16.5%] :
    • 美国上市公司需定期提交财务报表
    • 美国证券交易委员会(SEC)通过电子数据收集、分析和检索(Electronic Data Gathering, Analysis, and Retrieval,EDGAR)系统公开这些文件
    • 论文纳入了 1993年 至 2022年 的 10K 文件,并使用 Loukas等人(2021)的包进行解析和预处理
    • 此外,论文删除了少于 20 words 的报告部分以提升语料库质量
  • 用于过滤金融新闻的域名列表(List of Domains used to Filter Financial News) :
    • 论文使用以下关键词识别子域名和 URL:economy、market、finance、money、wealth、invest、business、industry

NLP——Megatron源码阅读笔记

  • 参考链接:
    • 各种并行的通信量:图解大模型训练之:张量模型并行(TP),Megatron-LM - 猛猿的文章 - 知乎
    • 模型分组及方式理解:Megatron-LM训练的大模型如何分组? - wx1997的文章 - 知乎
      • DP,TP,PP:TP > DP > PP,优先在机器内进行TP,其次是DP,最后是PP,因为通信量上是TP最多,DP其次,PP最后
    • 图解大模型系列之:Megatron源码解读1,分布式环境初始化 - 猛猿的文章 - 知乎
    • 图解大模型训练之:Megatron源码解读2,模型并行 - 猛猿的文章 - 知乎
    • 图解大模型训练系列之:Megatron源码解读3,分布式混合精度训练 - 猛猿的文章 - 知乎
    • Megatron-LM 中使用 DeepSpeed 加速:(DeepSpeed 官方文档)在 Megatron-LM 中加入 DeepSpeed
    • 专家并行论文:GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding, 2020, Google
    • [张量/序列并行]📚图解 DeepSpeed-Ulysses & Megatron-LM TP/SP - DefTruth的文章 - 知乎:写的非常详细
    • [转]Megatron-LM源码系列(八): Context Parallel并行 - 李睿的文章 - 知乎:作者还有一些博客内容可供参考
      • Megatron-LM源码系列(一):模型并行初始化
      • Megatron-LM源码系列(二):Tensor模型并行和Sequence模型并行训练
      • Megatron-LM源码系列(三):详解Pipeline模型并行训练实现
      • Megatron-LM源码系列(四):重计算(recompute)
      • Megatron-LM源码系列(五): FP16使用
      • Megatron-LM源码系列(六):Distributed-Optimizer分布式优化器实现Part1
      • Megatron-LM源码系列(七):Distributed-Optimizer分布式优化器实现Part2
      • Megatron-LM源码系列(八): Context Parallel并行
    • Megatron 新版 MoE 源码阅读 - Fizzmy的文章 - 知乎
    • 知乎专栏:跟着执行流程阅读源码系列:
      • 跟代码执行流程,读Megatron源码(一)从目录结构开始 - AIer的文章 - 知乎
      • 跟代码执行流程,读Megatron源码(二)训练入口pretrain_gpt.py - AIer的文章 - 知乎
      • 跟代码执行流程,读Megatron源码(三)megatron训练脚本training.py之pretrain() - AIer的文章 - 知乎
      • 跟代码执行流程,读Megatron源码(四)megatron训练脚本initialize.py之initialize_megatron()分布式环境初始化 - AIer的文章 - 知乎

整体说明

  • 本文的代码以 Megatron-LM 20250904 的版本 e000263e21ac89571123303c4043ec9ea7261513 为主,还有部分更早的版本的代码(之前写的,没有修改)

Megatron 数据处理

  • 数据预处理负责将 .jsonl 的文本数据 tokenize 并处理成 Megatron 可以直接读取的数据格式(.bin 和 .idx 类型的文件),减少训练时的数据处理时间

  • 数据处理的使用方式详情参考:github.com/NVIDIA/Megatron-LM

    • 准备 .jsonl 文件,文件格式如下:

      1
      2
      {"text": "Your training text here..."}
      {"text": "Another training sample..."}
    • 数据预处理:

      1
      2
      3
      4
      5
      6
      7
      python tools/preprocess_data.py \
      --input data.jsonl \
      --output-prefix processed_data \
      --tokenizer-type HuggingFaceTokenizer \
      --tokenizer-model /path/to/tokenizer.model \
      --workers 8 \
      --append-eod
      • output-prefix:输出文件的前缀
      • append-eod:是否添加 EOD Token?
      • 注意:还可以根据需要设置 split_sentences 参数,对文档进行拆分成 sentence 再做 tokenize
  • process_data.py 的核心处理逻辑如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    # split sentences in partition files
    if args.split_sentences and not split_sentences_present:
    processes = []
    for name in in_ss_out_names:
    p = multiprocessing.Process(target=partition.split_sentences, # TODO(ZJH): 构造完成数据 sentence 分隔的进程
    args=((name['partition'], name['sentence_split']),)) # TODO(ZJH): 参数是输入文件名和分隔结果的输出文件名
    p.start() # TODO(ZJH): 启动进程
    processes.append(p)

    for p in processes:
    p.join()

    if args.partitions == 1:
    return


    # encode partition files in parallel
    processes = []
    input_key = 'sentence_split' if args.split_sentences else 'partition' # TODO(ZJH): 根据是否走 sentence_split 来选择输入文件
    for name in in_ss_out_names:
    p = multiprocessing.Process(target=partition.process_json_file, # TODO(ZJH): 构造完成数据 encode 的进程
    args=((name[input_key], name['output_prefix']),)) # TODO(ZJH): 参数是输入文件名(上一步处理后的)和分隔结果的输出文件名
    p.start() # TODO(ZJH): 启动进程
    processes.append(p)

    for p in processes:
    p.join()

    if args.partitions == 1:
    return

Megatron-LM 训练过程梳理

  • 总入口(以 GPTModel 为例):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    pretrain(
    train_valid_test_datasets_provider,
    partial(model_provider, gpt_builder), # TODO(ZJH): model_provider 调用 gpt_builder 构造模型
    ModelType.encoder_or_decoder,
    forward_step,
    args_defaults={'tokenizer_type': 'GPT2BPETokenizer'},
    extra_args_provider=add_modelopt_args if has_nvidia_modelopt else None,
    store=store,
    )

pretrain 函数是总入口,包含的核心参数如下

pretrain 参数一:train_valid_test_datasets_provider,负责管理数据
  • 输出返回迭代器,这个迭代器每个 Batch 将包含一个 micro-batch 数据
pretrain 参数二:partial(model_provider, gpt_builder),对应 model_provider 参数,负责构造并,返回模型对象
  • 返回对象的 __init__ 函数负责实现 模型结构定义

  • 返回的模型对象会实现一个 forward 函数

  • 该函数依次调用 _preprocess(),decoder() 和 _postprocess() 实现整体逻辑

    • _preprocess 负责处理输入层,包含位置编码等信息,返回 decoder 的输入
    • decoder 负责模型主要前向流程
    • _postprocess 负责处理输出层,包括 MTP 处理、 损失函数定义等,返回 损失函数值(lm_loss, 交叉熵损失)
      • 若需要执行 MTP 过程,执行 MTP 过程,同时若打开训练,则 MTP loss 在这里被计算(
        • 使用 mtp_num_layers 来表示 MTP 的深度,每深一层都会多预测一个 Token,每层对应交叉熵损失,然后乘以 loss_mask
        • 处理后的 MTP 损失使用 MTPLossAutoScaler(是 torch.autograd.Function 的子类,是 PyTorch 自定义算子的实现 ) 实现前向和反向传播
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          39
          40
          41
          42
          43
          44
          45
          46
          47
          48
          49
          50
          51
          52
          53
          54
          55
          56
          57
          58
          59
          60
          61
          62
          63
          64
          65
          66
          67
          68
          # TODO(ZJH): 将 MTP 的每个 Token(t+2...t+k)的 loss 都添加到(通过特殊的自定义算子)主网络的计算依赖上,从而保证对主网络求梯度时,MTP 相关的梯度也能回传
          if self.mtp_process:
          mtp_labels = labels.clone()
          hidden_states_list = torch.chunk(hidden_states, 1 + self.config.mtp_num_layers, dim=0) # TODO(ZJH): 将多个 hidden_state 拆开
          hidden_states = hidden_states_list[0] # TODO(ZJH): 主函数的输出
          if loss_mask is None:
          # if loss_mask is not provided, use all ones as loss_mask
          loss_mask = torch.ones_like(mtp_labels)
          for mtp_layer_number in range(self.config.mtp_num_layers): # TODO(ZJH): 每一层都计算 loss,每一层代表一个更深的未来 Token 预测目标
          # output
          mtp_logits, _ = self.output_layer( # TODO(ZJH): 每个 hidden_states 都要走 output_layer 得到 logits 后再计算损失
          hidden_states_list[mtp_layer_number + 1], # TODO(ZJH): hidden_states_list[0] 是主网络的 hidden_state
          weight=output_weight,
          runtime_gather_output=runtime_gather_output,
          )
          # Calc loss for the current Multi-Token Prediction (MTP) layers.
          mtp_labels, _ = roll_tensor(mtp_labels, shifts=-1, dims=-1, cp_group=self.cp_group) # TODO(ZJH): MTP 目标逐步后移
          loss_mask, num_tokens = roll_tensor(
          loss_mask, shifts=-1, dims=-1, cp_group=self.cp_group
          )
          mtp_loss = self.compute_language_model_loss(mtp_labels, mtp_logits)
          mtp_loss = loss_mask * mtp_loss
          if self.training:
          # TODO(shifangx): remove the use of parallel_state here
          # after moving loss logging to loss_func in pretrain_gpt.py
          MTPLossLoggingHelper.save_loss_to_tracker( # TODO(ZJH): for logging
          torch.sum(mtp_loss) / num_tokens,
          mtp_layer_number,
          self.config.mtp_num_layers,
          avg_group=parallel_state.get_data_parallel_group(
          with_context_parallel=True
          ),
          )
          mtp_loss_scale = self.config.mtp_loss_scaling_factor / self.config.mtp_num_layers # TODO(ZJH): 根据参数和层数计算 scale,除以 mtp_num_layers 得到平均值,保证总的 MTP loss 量级(影响)不变
          if self.config.calculate_per_token_loss: # TODO(ZJH): 判断损失是否按照 Token 做平均
          # TODO(ZJH): MTPLossAutoScaler 是特殊的自定义算子,不改变第一个参数的值(输入即输出),求导时直接返回 第二个参数(loss)*scale 作为梯度
          hidden_states = MTPLossAutoScaler.apply( # TODO(ZJH): 经过这个自定义算子后,不会改变 hidden_states 的值(注意 hidden_states 始终是主网络的隐藏层),但对 hidden_states 计算梯度会直接返回 mtp_loss_scale * mtp_loss
          hidden_states, mtp_loss_scale * mtp_loss
          ) # TODO(ZJH): hidden_states 经过所有层后,最终得到的是所有 MTP 层 Token 的梯度(多个深度的 Token 一起)
          else:
          hidden_states = MTPLossAutoScaler.apply(
          hidden_states, mtp_loss_scale * mtp_loss / num_tokens
          )
          sequence_parallel_override = False
          if in_inference_mode and inference_context.materialize_only_last_token_logits:
          if inference_context.is_static_batching():
          hidden_states = hidden_states[-1:, :, :]
          else:
          if self.output_layer.sequence_parallel:
          # Perform the sequence parallel gather here instead of after the output layer
          # because we need to slice the last token logits from the full view of the
          # packed logits across all requests.
          # TODO(ksanthanam): Make the equivalent change in the `MambaModel` code after
          # merging in !3722.
          hidden_states = gather_from_sequence_parallel_region(
          hidden_states, group=self.model_comm_pgs.tp
          )
          self.output_layer.sequence_parallel = False
          sequence_parallel_override = True
          # Reshape [B, 1, H] to [1, B, H] -> extract each sample’s true last‐token hidden
          # state ([B, H]) -> unsqueeze back to [1, B, H]
          # (so that the output layer, which expects S×B×H, receives only the final token)
          hidden_states = inference_context.last_token_logits(
          hidden_states.squeeze(1).unsqueeze(0)
          ).unsqueeze(1)
          logits, _ = self.output_layer( # TODO(ZJH):主网络的 logits 计算
          hidden_states, weight=output_weight, runtime_gather_output=runtime_gather_output
          )
  • model_provider 函数(也是 pretrain 的入参)会返回一个模型 model

    • 这个返回的模型实现了 forward 函数,model.forward 函数整体返回值是一个 loss 值(主网络的 loss,但计算图上带着 MTP 所有深度上的 loss),该值是由 _postprocess 返回的值
pretrain 参数三:forward_step,输入参数包括模型,负责调用模型执行前向过程,并返回 loss 指针等
  • 返回的 loss 函数指针可以被调用,从而计算 loss

pretrain 的工作包括环境初始化,执行训练过程等

第一步:initialize_megatron(),初始化分布式环境,包括 TP,PP,DP 等的子进程组等
第二步:setup_model_and_optimizer(),定义模型架构,切割模型,完成 optimizer 初始化
第三步:build_train_valid_test_data_iterators(), 获取数据 iterator
第四步:train(),训练入口
  • 训练的入参包括上面得到的各种结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def train(
    forward_step_func,
    model,
    optimizer,
    opt_param_scheduler,
    train_data_iterator,
    valid_data_iterator,
    process_non_loss_data_func,
    config,
    checkpointing_context,
    non_loss_data_func,
    ):
  • train_step():训练过程包含一个主要的 while 循环,每次走一个 train_step()

    1
    2
    def train_step(forward_step_func, data_iterator, model, optimizer, opt_param_scheduler, config, forward_backward_func): # TODO(ZJH): 单步训练入口
    """Single training step."""
    • train_step 第一步:forward_backward_func(),完成一次前向和后向过程,是训练的核心函数,也最难

      • 实际上调用的函数 forward_backward_func 经过层层函数传递 train_step() <- train() <- megatron/core/pipeline_parallel/schedules.py,最终可追述到 schedules.py 文件的 get_forward_backward_func() 函数

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        def get_forward_backward_func():
        pipeline_model_parallel_size = parallel_state.get_pipeline_model_parallel_world_size()
        if pipeline_model_parallel_size > 1: # TODO(ZJH): 若打开 PP
        if parallel_state.get_virtual_pipeline_model_parallel_world_size() is not None:
        forward_backward_func = forward_backward_pipelining_with_interleaving # TODO(ZJH): 若打开 interleaving pipeline 调度
        else:
        forward_backward_func = forward_backward_pipelining_without_interleaving # TODO(ZJH): 若关闭 interleaving pipeline 调度
        else:
        forward_backward_func = forward_backward_no_pipelining # TODO(ZJH): 没有 PP 的情况
        return forward_backward_func
      • 若打开 PP

        • 开启 interleaving pipeline:forward_backward_pipelining_with_interleaving
          • 负责实现对应的 1F1B 调度策略,函数内部像 forward_backward_no_pipelining 函数一样,会调用 forward_step 和 backward_step 两步完成前向后向过程和梯度的积累
        • 未开启 interleaving pipeline:forward_backward_pipelining_without_interleaving
          • 在 forward_backward_pipelining_with_interleaving 的基础上,增加了 interleaving 调度策略(实现则更为复杂),进一步优化气泡
        • 其他特殊的 Pipeline 并行调度策略,如 zero_bubble 的调度,实现都在这里新建函数就可以
      • 若为 没有打开 PP 的情况:调用同文件(schedules.py)下的 forward_backward_no_pipelining() 函数,下面是该函数的介绍:

        • 前向过程+后向过程函数为(config.overlap_moe_expert_parallel_comm 为 True):combined_1f1b_schedule_for_no_pipelining

          • 注:config.overlap_moe_expert_parallel_comm 为 True 表示 框架会尝试将专家并行所需的通信操作(如数据传输)与模型的计算操作(如其他层的前向 / 反向计算)重叠进行,而不是等通信完成后再执行计算

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            if config.overlap_moe_expert_parallel_comm and not forward_only: # TODO(ZJH): 如果打开 overlap MoE 的专家并行通信(将专家并行(expert parallelism)中的通信操作与计算操作重叠执行),且包含 backward
            # TODO(ZJH): 当 config.overlap_moe_expert_parallel_comm 设为 True 时,框架会尝试将专家并行所需的通信操作(如数据传输)与模型的计算操作(如其他层的前向 / 反向计算)重叠进行,而不是等通信完成后再执行计算
            forward_data_store, total_num_tokens = combined_1f1b_schedule_for_no_pipelining( # TODO(ZJH): 1次前向+1次后向过程
            forward_step_func,
            data_iterator,
            model,
            num_microbatches,
            input_tensor,
            output_tensor_grad,
            forward_data_store,
            config,
            collect_non_loss_data,
            first_val_step,
            forward_only,
            no_sync_func,
            total_num_tokens,
            partial(check_first_val_step, first_val_step, forward_only),
            )
            else:
            # forward_step 和 backward_step 交替执行
          • 分开执行的函数分别为:forward_step 和 backward_step (这里会调用 for 循环完成多个 microbatches, forward_step 和 backward_step 在循环南北部)

            • 前置说明:microbatches - 1 个 microbatches 先调用,然后最后一个负责处理梯度同步等
              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              19
              20
              21
              22
              23
              24
              25
              26
              27
              28
              29
              30
              31
              32
              33
              34
              35
              36
              37
              38
              39
              40
              41
              42
              43
              44
              45
              46
              47
              48
              49
                  with no_sync_func(): # TODO(ZJH): 如果 no_sync_func 上下文管理器 是一个实际的同步禁用逻辑(比如禁用某些 IO 同步、锁机制等),则代码块会在 “不执行同步” 的环境中运行
              for i in range(num_microbatches - 1): # TODO(ZJH): 每个设备负责多个 microbatches,注意这里少一个
              output_tensor, num_tokens = forward_step( # TODO(ZJH): 前向过程,注意,这里是单个 microbatch 走一次
              forward_step_func,
              data_iterator,
              model,
              num_microbatches,
              input_tensor,
              forward_data_store,
              config,
              grad_finalize_pgs.cp.size(),
              collect_non_loss_data,
              is_first_microbatch=check_first_val_step(first_val_step, forward_only, i == 0),
              current_microbatch=i,
              )
              total_num_tokens += num_tokens # TODO(ZJH): 累加 Token 数
              if not forward_only:
              backward_step( # TODO(ZJH): 后向过程,梯度直接累加(forward 中已经对 loss/num_microbatches)
              input_tensor, output_tensor, output_tensor_grad, model_type, config
              )
              # Run computation for last microbatch out of context handler (want to
              # synchronize gradients).
              output_tensor, num_tokens = forward_step( # TODO(ZJH): 最后一个梯度单独处理,这个梯度的计算要在 context handler 之外,核心原因是确保最后一次梯度计算完成后能触发必要的同步操作,从而保证梯度的正确性和一致性
              forward_step_func,
              data_iterator,
              model,
              num_microbatches,
              input_tensor,
              forward_data_store,
              config,
              grad_finalize_pgs.cp.size(),
              collect_non_loss_data,
              is_first_microbatch=check_first_val_step(
              first_val_step, forward_only, num_microbatches == 1
              ),
              current_microbatch=num_microbatches - 1,
              )
              total_num_tokens += num_tokens # TODO(ZJH): 累加 Token 数
              if not forward_only:
              backward_step(input_tensor, output_tensor, output_tensor_grad, model_type, config)
              # TODO(ZJH): 梯度聚合
              if config.finalize_model_grads_func is not None and not forward_only:
              # Finalize model grads (perform full grad all-reduce / reduce-scatter for
              # data parallelism and layernorm all-reduce for sequence parallelism).
              config.finalize_model_grads_func( # TODO(ZJH): 梯度聚合操作 all_reduce + reduce-scatter ?
              [model],
              total_num_tokens if config.calculate_per_token_loss else None,
              grad_finalize_pgs=grad_finalize_pgs,
              )
          • forward_step() 执行过程:

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            forward_step 核心代码如下:

            with context_manager:
            if checkpoint_activations_microbatch is None:
            output_tensor, loss_func = forward_step_func(data_iterator, model)
            else:
            output_tensor, loss_func = forward_step_func(
            data_iterator, model, checkpoint_activations_microbatch
            )
            output_tensor, num_tokens = forward_step_calc_loss(
            model,
            output_tensor,
            loss_func,
            config,
            vp_stage,
            collect_non_loss_data,
            num_microbatches,
            forward_data_store,
            cp_group_size,
            is_last_stage,
            )
            • 其中,forward_step_calc_loss 核心代码如下:
              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              19
              if is_last_stage: # TODO(ZJH): 只有最后一个 stage 包含 loss,其他 stage 都不需要计算
              if not collect_non_loss_data:
              outputs = loss_func(output_tensor) # TODO(ZJH): 获取损失值,详情见 pretrain_gpt.py 的 loss_func 的返回值(中间使用 forward_step 作为 partial 封装)
              if len(outputs) == 3:
              output_tensor, num_tokens, loss_reduced = outputs
              # TODO(ZJH): 当 calculate_per_token_loss=True 时,损失计算会保留每个 token 的损失值(即按 token 粒度计算损失),通常用于需要获取单 token 损失的场景(如后续可能的梯度裁剪、损失分析等)
              if not config.calculate_per_token_loss: # TODO(ZJH): 当 calculate_per_token_loss=False 时,损失会被归一化(通常除以总 token 数和微批次数量),得到一个全局平均损失,这是训练中更常见的做法(避免损失值因批次大小不同而波动)
              output_tensor /= num_tokens # TODO(ZJH): 视情况看是否需要做 Token 粒度的归一化
              output_tensor /= num_microbatches # TODO(ZJH): 这里是单个 Batch,但除以 num_microbatches,是为了后续 backward 时梯度可以直接累加
              else:
              # preserve legacy loss averaging behavior (ie, over the number of microbatches)
              assert len(outputs) == 2
              output_tensor, loss_reduced = outputs
              output_tensor *= cp_group_size
              output_tensor /= num_microbatches
              forward_data_store.append(loss_reduced)
              else:
              data = loss_func(output_tensor, non_loss_data=True)
              forward_data_store.append(data)
          • backward_step() 执行过程:

            • 后向过程,可选择自定义的 backward 或 PyTorch 标准的官方实现,梯度直接累加(forward 中已经对 loss/num_microbatches)
              1
              2
              3
              4
              5
              if output_tensor[0].requires_grad:
              if config.deallocate_pipeline_outputs:
              custom_backward(output_tensor[0], output_tensor_grad[0]) # TODO(ZJH): 使用自定义的 backward
              else:
              torch.autograd.backward(output_tensor[0], grad_tensors=output_tensor_grad[0]) # TODO(ZJH): 直接使用 backward
    • train_step 第二步:optimizer.step()

      • 用梯度完成一次完整的参数更新
    • train_step 第三步:继续处理 loss 并上报

      • 注:调用完 optimizer 后,还要继续处理 loss 的原因是梯度更新不需要汇总 DP 的 loss,只有上报时需要聚合 所有 DP 的数据

附录:Megatron MTP 损失绑定函数的测试

  • MTP 损失绑定到 main_hidden_states 的方式是通过一个不修改值,但绑定梯度的自定义算子 MTPLossAutoScaler 实现:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    # megatron/core/transformer/multi_token_prediction.py
    class MTPLossAutoScaler(torch.autograd.Function): # TODO(ZJH): 相当于在实现自定义的 PyTorch 算子
    """An AutoScaler that triggers the backward pass and scales the grad for mtp loss."""

    main_loss_backward_scale: torch.Tensor = torch.tensor(1.0)

    @staticmethod
    def forward(ctx, output: torch.Tensor, mtp_loss: torch.Tensor): # TODO(ZJH): 前向过程,存储 loss,返回输入的原始值,不做任何计算
    """Preserve the mtp by storing it in the context to avoid garbage collection.

    Args:
    output (torch.Tensor): The output tensor.
    mtp_loss (torch.Tensor): The mtp loss tensor.

    Returns:
    torch.Tensor: The output tensor.
    """
    ctx.save_for_backward(mtp_loss)
    return output

    @staticmethod
    def backward(ctx, grad_output: torch.Tensor): # TODO(ZJH): 后向过程,获取前向过程存储的 loss,乘以 main_loss_backward_scale 并返回
    """Compute and scale the gradient for mtp loss..

    Args:
    grad_output (torch.Tensor): The gradient of the output.

    Returns:
    Tuple[torch.Tensor, torch.Tensor]: The gradient of the output, scaled mtp loss
    gradient.
    """
    (mtp_loss,) = ctx.saved_tensors
    mtp_loss_backward_scale = MTPLossAutoScaler.main_loss_backward_scale
    scaled_mtp_loss_grad = torch.ones_like(mtp_loss) * mtp_loss_backward_scale
    return grad_output, scaled_mtp_loss_grad
  • MTPLossAutoScaler 算子测试代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    import torch

    # 待测试类(直接复用原代码)
    class MTPLossAutoScaler(torch.autograd.Function):
    main_loss_backward_scale: torch.Tensor = torch.tensor(1.0)

    @staticmethod
    def forward(ctx, output: torch.Tensor, mtp_loss: torch.Tensor):
    ctx.save_for_backward(mtp_loss)
    return output

    @staticmethod
    def backward(ctx, grad_output: torch.Tensor):
    (mtp_loss,) = ctx.saved_tensors
    scaled_mtp_loss_grad = torch.ones_like(mtp_loss) * MTPLossAutoScaler.main_loss_backward_scale
    return grad_output, scaled_mtp_loss_grad

    def test_all_scenarios():
    # 初始化模型可训练参数(所有场景共用)
    x = torch.tensor([2.0], requires_grad=True)
    y = torch.tensor([3.0], requires_grad=True)

    # 定义测试场景配置(场景名、mtp_loss构造、scale系数)
    scenarios = [
    # 场景1:mtp_loss不依赖参数 + scale=1.0
    ("不依赖参数 + scale=1.0", lambda: torch.tensor([5.0], requires_grad=True), 1.0),
    # 场景2:mtp_loss不依赖参数 + scale=0.3
    ("不依赖参数 + scale=0.3", lambda: torch.tensor([5.0], requires_grad=True), 0.3),
    # 场景3:mtp_loss依赖参数(x+y) + scale=1.0
    ("依赖参数3*(x+y) + scale=1.0", lambda: 3*(x + y), 1.0),
    # 场景4:mtp_loss依赖参数(x+y) + scale=0.6
    ("依赖参数3*(x+y) + scale=0.6", lambda: 3*(x + y), 0.6),
    ]

    for scenario_name, mtp_loss_fn, scale in scenarios:
    # 重置梯度和scale系数
    x.grad = None
    y.grad = None
    MTPLossAutoScaler.main_loss_backward_scale = torch.tensor(scale)

    # 1. 计算模型输出和mtp_loss
    output = x * y # 模型输出(固定逻辑:x*y,梯度易验证)
    mtp_loss = mtp_loss_fn()

    # 关键修复:为mtp_loss保留梯度(无论是否为叶子张量)
    mtp_loss.retain_grad() # mtp_loss 依赖模型参数时(mtp_loss 非叶子张量),mtp_loss.grad 不存在,使用 retain_grad() 强制保留其梯度,方便后续查看

    # 2. 使用AutoScaler处理
    scaled_output = MTPLossAutoScaler.apply(output, mtp_loss)

    # 3. 构造总损失并反向传播
    total_loss = scaled_output.sum()
    total_loss.backward()

    # 4. 打印结果(保留1位小数,简洁清晰)
    print(f"=== {scenario_name} ===")
    # 确保grad存在(避免None报错)
    mtp_grad = mtp_loss.grad.item() # 注意:若不使用 mtp_loss.retain_grad(),则 mtp_loss 依赖模型参数时(mtp_loss 非叶子张量),mtp_loss.grad 不存在
    print(f"mtp_loss梯度: {mtp_grad:.1f}") # 验证scale是否生效
    print(f"参数x梯度: {x.grad.item():.1f}") # 验证是否受mtp_loss依赖关系影响
    print(f"参数y梯度: {y.grad.item():.1f}\n") # 验证是否受mtp_loss依赖关系影响

    if __name__ == "__main__":
    test_all_scenarios()

    # === 不依赖参数 + scale=1.0 ===
    # mtp_loss梯度: 1.0
    # 参数x梯度: 3.0
    # 参数y梯度: 2.0
    #
    # === 不依赖参数 + scale=0.3 ===
    # mtp_loss梯度: 0.3
    # 参数x梯度: 3.0
    # 参数y梯度: 2.0
    #
    # === 依赖参数3*(x+y) + scale=1.0 ===
    # mtp_loss梯度: 1.0
    # 参数x梯度: 6.0
    # 参数y梯度: 5.0
    #
    # === 依赖参数3*(x+y) + scale=0.6 ===
    # mtp_loss梯度: 0.6
    # 参数x梯度: 4.8
    # 参数y梯度: 3.8

NLP——技术报告解读-Qwen3

注:本文包含 AI 辅助创作

  • 参考链接:
    • 原始论文:Qwen3 Technical Report, Qwen, 20250514
    • Qwen3技术报告解读-包包算法笔记
    • Qwen3技术报告解读-刘聪NLP
    • Github 链接:github.com/QwenLM/Qwen3
      • github.com/QwenLM/Qwen3/tree/main/examples/llama-factory 文件夹下有 Qwen3 在 Llama-factory 框架下微调的方法

Paper Summary

  • 整体说明:
    • Qwen3 包含一系列 LLM,包括 Dense 和 MoE 模型,参数规模从 0.6B 到 235B 不等(这个模型 Size 的丰富度,可以称为地表最强开源模型了)
    • Qwen3 的一项关键创新是将思考模式(thinking mode,用于复杂的多步推理)和非思考模式(non-thinking mode,用于快速的上下文驱动响应)集成到一个统一框架中
    • Qwen3 引入了思考预算(thinking budget)机制,允许用户在推理过程中自适应地分配计算资源,从而根据任务复杂度平衡延迟和性能
    • 该模型基于包含 36 万亿 token 的大规模数据集进行预训练,能够理解和生成 119 种语言和方言的文本
    • Qwen3 在预训练和训练后模型的标准基准测试中均表现出色,涵盖代码生成、数学、推理和 Agent 相关任务
  • 利用旗舰模型的知识(蒸馏小模型),论文显著减少了构建小规模模型所需的计算资源,同时确保其具备高度竞争力
  • Qwen3 在多样化基准测试中取得了最先进的结果,包括代码生成、数学推理、智能体任务等,与更大的 MoE 模型和专有模型相比具有竞争力
  • 与上一代 Qwen2.5 相比,Qwen3 将多语言支持从 29 种扩展到 119 种语言和方言

Introduction and Discussion

  • 追求人工通用智能(Artificial General Intelligence, AGI)或人工超级智能(Artificial Super Intelligence, ASI)长期以来一直是人类的目标
  • 近年来,大型基础模型(如 GPT-4o (2024)、Claude 3.7 (2025)、Gemini 2.5 (2025)、DeepSeek-V3 (2024)、Llama-4 (2025) 和 Qwen2.5 (2024))的进展表明,论文朝着这一目标取得了显著进步
    • 这些模型在涵盖多样化领域和任务的数万亿 token 的大规模数据集上训练,有效地将人类知识和能力蒸馏到其参数中
    • 此外,通过强化学习优化的推理模型的最新发展凸显了基础模型在提升推理时扩展性和实现更高智能水平方面的潜力,例如 o3 (2025) 和 DeepSeek-R1 (2025)
  • 尽管大多数最先进的模型仍为专有模型,但开源社区的快速增长已大幅缩小了开源模型与闭源模型之间的性能差距
  • 越来越多的顶级模型(如 Meta-AI (2025)、DeepSeek-V3 (2024)、Qwen2.5 (2024))已作为开源发布,推动了人工智能领域更广泛的研究和创新
  • 在这项工作中,论文介绍了基础模型家族 Qwen 的最新系列 Qwen3
    • Qwen3 是一组开源 LLM ,在广泛的任务和领域中实现了最先进的性能
    • 论文发布了 Dense 和 MoE 模型,参数数量从 0.6B 到 235B 不等,以满足不同下游应用的需求
    • 旗舰模型 Qwen3-235B-A22B 是一个 MoE 模型,总参数为 235B,每个 token 激活的参数为 22B
      • 这种设计确保了高性能和高效的推理
  • Qwen3 引入了多项关键技术进步以增强其功能和可用性
    • 首先,它将两种不同的操作模式(思考模式和非思考模式)集成到单一模型中
      • 这使得用户无需在不同模型之间切换(例如从 Qwen2.5 切换到 QwQ (2024))即可切换模式
      • 这种灵活性确保开发者和用户可以高效地根据特定任务调整模型行为
    • 此外,Qwen3 引入了思考预算,使用户能够精细控制模型在执行任务时应用的推理努力水平
      • 这一能力对于优化计算资源和性能至关重要,能够根据实际应用中的复杂度调整模型的思考行为
    • 此外,Qwen3 在涵盖 119 种语言和方言的 36 万亿 token 上进行了预训练,有效增强了其多语言能力
      • 这种广泛的语言支持扩大了其在全球用例和国际应用中的部署潜力
    • 这些进步共同使 Qwen3 成为最先进的开源大语言模型家族,能够有效解决跨领域和跨语言的复杂任务
  • Qwen3 的预训练过程使用了约 36 万亿 token 的大规模数据集,经过精心筛选以确保语言和领域的多样性
    • 为了高效扩展训练数据,论文采用了多模态方法:Qwen2.5-VL (2025) 被微调以从大量 PDF 文档中提取文本
    • 论文还使用领域特定模型生成合成数据:Qwen2.5-Math (2024) 用于数学内容,Qwen2.5-Coder (2024) 用于代码相关数据
  • 预训练过程采用三阶段策略:
    • 1)通用阶段(S1) :所有 Qwen3 模型在 4,096 token 的序列长度上训练超过 30 万亿 token
      • 在此阶段,模型在语言能力和通用世界知识上完成了全面预训练,训练数据涵盖 119 种语言和方言
    • 2)推理阶段(S2) :为了进一步提升推理能力,论文优化了本阶段的预训练语料库,增加了 STEM、编码、推理和合成数据的比例
      • 模型在 4,096 token 的序列长度上进一步训练约 5 万亿高质量 token
      • 在此阶段,论文还加速了学习率衰减
    • 3)长上下文阶段(S3) :在最后的预训练阶段,论文收集高质量的长上下文语料以扩展 Qwen3 模型的上下文长度
      • 所有模型在 32,768 token 的序列长度上训练了数千亿 token
      • 长上下文语料库包含 75% 长度在 16,384 到 32,768 token 之间的文本,以及 25% 长度在 4,096 到 16,384 token 之间的文本
  • 为了更好地将基础模型与人类偏好和下游应用对齐,论文采用了多阶段后训练方法,同时赋能思考(推理)和非思考模式
    • 在前两个阶段,论文通过长 CoT 冷启动微调和专注于数学与编码任务的强化学习 ,开发了强大的推理能力
    • 在最后两个阶段,论文将带有和不带有推理路径的数据合并为一个统一数据集进行进一步微调 ,使模型能够有效处理两种类型的输入,随后应用通用领域的强化学习以提升在广泛下游任务中的性能
    • 对于小模型,论文使用强到弱蒸馏(strong-to-weak distillation),利用从大模型的 Off-policy 和 On-policy 知识迁移来增强其能力
      • 从高级教师模型的蒸馏在性能和训练效率上显著优于强化学习

Architecture

  • Qwen3 系列包括 6 个 Dense 模型(Qwen3-0.6B、Qwen3-1.7B、Qwen3-4B、Qwen3-8B、Qwen3-14B 和 Qwen3-32B)和 2 个 MoE 模型(Qwen3-30B-A3B 和 Qwen3-235B-A22B)
    • 旗舰模型 Qwen3-235B-A22B 总参数为 235B,激活参数为 22B
  • 下面论文详细阐述 Qwen3 模型的架构
    • Qwen3 Dense 模型的架构与 Qwen2.5 (2024) 类似,包括使用如下组件:
      • 分组查询注意力(Grouped Query Attention, GQA)(2023)
      • SwiGLU (2017)
      • 旋转位置嵌入(Rotary Positional Embeddings, RoPE)(2024)
      • RMSNorm (2023) 的预归一化(pre-normalization)
    • Qwen3 移除了 Qwen2 (2024) 中使用的 QKV 偏置(QKV-bias),并在注意力机制中引入了 QK 归一化(QK-Norm)(2023) 以确保 Qwen3 的训练稳定性
  • 模型架构的关键信息如表 1 所示
  • Qwen3 MoE 模型与 Qwen3 Dense 模型共享相同的基础架构,模型架构的关键信息如表 2 所示
    • 论文遵循 Qwen2.5-MoE (2024) 并实现了细粒度专家分割(fine-grained expert segmentation)(2024)
    • Qwen3 MoE 模型共有 128 个专家,每个 token 激活 8 个专家
    • 与 Qwen2.5-MoE 不同,Qwen3-MoE 设计排除了共享专家
    • 此外,论文采用全局批量负载均衡损失(global-batch load balancing loss)(2025) 以鼓励专家专业化
    • 这些架构和训练创新在下游任务中显著提升了模型性能
  • Qwen3 模型使用 Qwen 的分词器 (2023),它实现了 BBPE(Byte-level Byte-Pair Encoding)(2020; 2020; 2016),词汇量为 151,669

Pre-training

  • 在本节中,论文将介绍预训练数据的构建方法、预训练的具体细节,并展示基础模型在标准基准测试上的实验结果

Pre-training Data

  • 与 Qwen2.5(2024)相比,论文显著扩大了预训练数据的规模和多样性
    • 论文收集了 36 万亿 token 的数据,覆盖 119 种语言和方言
      • 这些数据包含多个领域的高质量内容,例如代码、STEM(科学、技术、工程和数学)、推理任务、书籍、多语言文本以及合成数据
  • 进一步扩展预训练数据,论文做了如下扩展:
    • 首先,论文使用 Qwen2.5-VL 模型(2025)对大量 PDF 类文档进行文本识别,随后通过 Qwen2.5 模型(2024)对识别文本进行优化,从而获得额外的高质量文本 token,总量达到数万亿
    • 此外,论文还利用 Qwen2.5(2024)、Qwen2.5-Math(2024)和 Qwen2.5-Coder(2024)模型合成了数万亿不同格式的文本 token,涵盖教材、问答、指令和代码片段等,覆盖数十个领域
    • 最后,论文通过引入更多语言数据进一步扩展了预训练语料库。与 Qwen2.5 相比,支持的语言数量从 29 种大幅增加到 119 种,显著提升了模型的跨语言能力
  • 论文开发了一套多语言数据标注系统,用于提升训练数据的质量和多样性
    • 该系统已应用于大规模预训练数据集,对超过 30 万亿 token 进行了多维度标注,包括教育价值、领域和安全性等
    • 这些细粒度的标注支持更高效的数据过滤和组合
    • 与以往研究(2023;2023;2024)在数据源或领域级别优化数据混合比例不同,论文的方法通过在小规模代理模型上进行细粒度数据标签的消融实验,实现了实例级别的数据混合优化

Pre-training Stages

  • Qwen3 模型的预训练分为三个阶段:
    • 1)通用阶段(General Stage,S1) :在第一阶段,所有 Qwen3 模型在超过 30 万亿 token 上以 4,096 token 的序列长度进行训练
      • 此阶段模型已完全掌握语言能力和通用世界知识,训练数据覆盖 119 种语言和方言
    • 2)推理阶段(Reasoning Stage,S2) :为了进一步提升推理能力,论文优化了本阶段的预训练语料库,增加了 STEM、代码、推理和合成数据的比例
      • 模型以 4,096 token 的序列长度进一步预训练约 5 万亿高质量 token,并在此阶段加速学习率衰减
    • 3)长上下文阶段(Long Context Stage,S3) :在最后的预训练阶段,论文收集高质量的长上下文语料库,将 Qwen3 模型的上下文长度扩展到 32,768 token
      • 长上下文语料库中,75% 的文本长度介于 16,384 到 32,768 token 之间,25% 介于 4,096 到 16,384 token 之间
      • 遵循 Qwen2.5(2024)的方法,论文使用 ABF 技术(2023)将 RoPE 的基础频率从 10,000 增加到 1,000,000,同时引入 YARN(2023)和双块注意力(Dual Chunk Attention, DCA)(2024),在推理时实现序列长度容量的四倍提升
  • 与 Qwen2.5(2024)类似,论文基于上述三个阶段开发了超参数(如学习率 Scheduler 和 Batch Size)的扩展规律
    • 通过大量实验,论文系统研究了模型架构、训练数据、训练阶段与最优训练超参数之间的关系,最终为每个 Dense 或 MoE 模型预测了最优学习率和 Batch Size 策略

Pre-training Evaluation

  • 论文对 Qwen3 系列的基础语言模型进行了全面评估,重点关注其在通用知识、推理、数学、科学知识、代码和多语言能力方面的表现。评估数据集包括 15 个基准测试:
    • 通用任务(General Tasks) :MMLU(2021a)(5-shot)、MMLU-Pro(2024)(5-shot,CoT)、MMLU-redux(2024)(5-shot)、BBH(2023)(3-shot,CoT)、SuperGPQA(2025)(5-shot,CoT)
    • 数学与 STEM 任务(Math & STEM Tasks) :GPQA(2023)(5-shot,CoT)、GSM8K(2021)(4-shot,CoT)、MATH(2021b)(4-shot,CoT)
    • 代码任务(Coding Tasks) :EvalPlus(2023a)(0-shot)(HumanEval(2021)、MBPP(2021)、Humaneval+、MBPP+ 的平均值)、MultiPL-E(2023)(0-shot)(Python、C++、Java、PHP、TypeScript、C#、Bash、JavaScript)、MBPP-3shot(2021)、CRUX-O of CRUXEval(2024)(1-shot)
    • 多语言任务(Multilingual Tasks) :MGSM(2023)(8-shot,CoT)、MMMLU(OpenAI,2024)(5-shot)、INCLUDE(2024)(5-shot)
  • 在基础模型的基线对比中,论文将 Qwen3 系列基础模型与 Qwen2.5 基础模型(2024)以及其他领先的开源基础模型进行了比较,包括 DeepSeek-V3 Base(2024a)、Gemma-3(2025)、Llama-3(2024)和 Llama-4(Meta-AI,2025)系列基础模型
    • 所有模型均使用相同的评估流程和广泛采用的评估设置,以确保公平比较
Summary of Evaluation Results
  • 基于整体评估结果,论文总结了 Qwen3 基础模型的关键结论:
    • (1) 与之前开源的 SOTA Dense 和 MoE 基础模型(如 DeepSeek-V3 Base、Llama-4-Maverick Base 和 Qwen2.5-72B-Base)相比,Qwen3-235B-A22B-Base 在大多数任务中表现更优,且参数量显著更少
    • (2) 对于 Qwen3 MoE 基础模型,实验结果表明:
      • (a) 使用相同的预训练数据,Qwen3 MoE 基础模型仅需 1/5 的激活参数即可达到与 Dense 模型相当的性能;
      • (b) 由于架构改进、训练 token 规模扩大和更先进的训练策略,Qwen3 MoE 基础模型的性能优于 Qwen2.5 MoE 基础模型,且激活参数和总参数量更少;
      • (c) 即使仅使用 Qwen2.5 Dense 基础模型 1/10 的激活参数,Qwen3 MoE 基础模型也能达到相当的性能,显著降低了推理和训练成本
    • (3) Qwen3 Dense 基础模型的整体性能与更高参数规模的 Qwen2.5 基础模型相当
      • 例如,Qwen3-1.7B/4B/8B/14B/32B-Base 分别与 Qwen2.5-3B/7B/14B/32B/72B-Base 性能相当,尤其在 STEM、代码和推理基准测试中,Qwen3 Dense 基础模型的性能甚至超越了更高参数规模的 Qwen2.5 基础模型
  • 注:【此处省略一些评估细节】

Post-training

  • 图 1 展示了 Qwen3 系列模型的后训练流程,该流程围绕两个核心目标设计:
    • (1) 思维控制(Thinking Control) :通过整合“非思维模式(non-thinking mode)”和“思维模式(thinking mode)”,使用户能够灵活选择模型是否进行推理,并通过指定思维过程的 token 预算来控制思考深度
    • (2) 强到弱蒸馏(Strong-to-Weak Distillation) :旨在简化和优化轻量级模型的后训练过程
      • 通过利用大规模模型的知识,显著降低构建小规模模型所需的计算成本和开发工作量

Long-CoT Cold Start

  • 论文首先构建了一个涵盖数学、代码、逻辑推理和 STEM 问题的综合数据集,每个问题均配有已验证的参考答案或基于代码的测试用例
  • 该数据集用于长链思维(long Chain-of-Thought, long-CoT)训练的冷启动阶段
  • 数据集构建包含两阶段过滤流程:查询过滤(query filtering)和响应过滤(query filtering)
  • 查询过滤阶段:论文使用 Qwen2.5-72B-Instruct 识别并移除难以验证的查询(例如包含多个子问题或要求生成通用文本的查询),同时排除 Qwen2.5-72B-Instruct 无需 CoT 推理即可正确回答的查询,以确保仅包含需要深度推理的复杂问题
    • 此外,论文使用 Qwen2.5-72B-Instruct 标注每个查询的领域,以保持数据集的领域平衡
  • 响应过滤阶段:保留验证集后,论文使用 QwQ-32B 为每个剩余查询生成 \(N\) 个候选响应
    • 若 QwQ-32B 无法生成正确解决方案,则由人工标注者评估响应准确性
    • 对于通过 Pass@\(N\) 的查询,进一步应用严格过滤标准,移除以下类型的响应:
      • (1) 最终答案错误;
      • (2) 包含大量重复内容;
      • (3) 明显猜测而无充分推理;
      • (4) 思维内容与总结不一致;
      • (5) 语言混合不当或风格突变;
      • (6) 疑似与验证集内容过度相似
  • 随后,使用精炼后的数据集子集进行推理模式的初始冷启动训练
    • 此阶段的目标是为模型奠定基础推理模式 ,而非过度强调即时推理性能,从而确保模型潜力不受限制,为后续强化学习(Reinforcement Learning, RL)阶段提供更大改进空间
    • 为实现这一目标,建议在此准备阶段尽量减少训练样本数量和训练步数

Reasoning RL

  • 推理强化学习阶段使用的 query-verifier 对需满足以下四个标准:
    • (1) 未在冷启动阶段使用;
    • (2) 冷启动模型可学习;
    • (3) 尽可能具有挑战性;
    • (4) 覆盖广泛的子领域
  • 论文最终收集了 3995 对 query-verifier ,并采用 GRPO(2024)更新模型参数
    • 实验表明,使用大的 Batch Size 和(每个查询)高 rollout 次数,结合 Off-policy 训练以提高样本效率,对训练过程有益
    • 此外,通过控制模型的熵(entropy)使其稳步增加或保持稳定 ,可以有效平衡探索与利用(exploration and exploitation),这对维持训练稳定性至关重要
      • 注:这里作者说模型的熵是稳步增加的,但大部分论文中给出的训练都是看到熵在下降的,作者应该是否做了一些特定的设计来提升模型在这方面的能力?
    • 结果表明,在单次 RL 训练过程中,无需手动干预超参数,即可实现训练奖励和验证性能的持续提升
      • 例如,Qwen3-235B-A22B 模型的 AIME’24 分数在 170 个 RL 训练步中从 70.1 提升至 85.1

Thinking Mode Fusion

  • 思维模式融合阶段的目标是将“非思维(non-thinking)”能力整合到已具备“思维(thinking)”能力的模型中
  • 这种方法使开发者能够管理和控制推理行为,同时降低部署独立模型以处理思维和非思维任务的成本和复杂性
  • 为实现这一目标,论文对推理强化学习模型进行持续 SFT ,并设计聊天模板以融合两种模式
  • 论文发现能够熟练处理两种模式的模型在不同思维预算下均表现稳定
Construction of SFT data
  • SFT 数据集结合了“thinking”和“non-thinking”数据
  • 为确保 Stage 2 模型的性能不受额外 SFT 影响 :
    • “thinking”数据通过使用 Stage 2 模型对 Stage 1 查询进行拒绝采样(rejection sampling)生成;
    • “non-thinking”数据则精心策划,涵盖编码、数学、指令遵循、多语言任务、创意写作、问答和角色扮演等多样化任务
    • 理解:因为 Stage 2 模型已经是训练好的了,为了增加思维链融合功能,额外的 SFT 是可能会导致模型出现问题的,这里使用 Stage 2 和 Stage 1 模型相关的数据来训练,从而保证 Stage 2 和 Stage 1 模型的原始能力?
  • 此外,论文采用自动生成的检查表评估“non-thinking”数据的响应质量,并特别增加低资源(low-resource)任务上的性能,作者特地增加了翻译任务的比例
Chat Template Design
  • 为更好整合两种模式并支持用户动态切换思维过程,论文设计了 Qwen3 的聊天模板(如表 9 所示)
    • 对于思维模式和非思维模式的样本,论文分别在用户查询或系统消息中引入 /think 和 /no_think 标志,使模型能够根据用户输入选择相应的思维模式
    • 对于非思维模式样本 ,论文在助手响应中保留空的思维块(thinking block)
      • 这一设计确保模型内部格式一致性,并允许开发者通过在聊天模板中拼接空的思维块来阻止模型进行思维行为
    • 默认情况下,模型以思维模式运行,因此论文添加了一些用户查询中不包含 /think 标志的思维模式训练样本
    • 对于更复杂的多轮对话,论文在用户查询中随机插入多个 /think 和 /no_think 标志,模型响应则遵循最后遇到的标志
Thinking Budget
  • 思维模式融合的额外优势在于,一旦模型学会以非思维和思维模式响应,它自然能够处理中间情况(即基于不完整思维生成响应)
  • 这一能力为实施模型思维过程的预算控制奠定了基础
    • 具体而言,当模型的思维长度达到用户定义的阈值时,论文手动停止思维过程,并插入停止思维指令:“Considering the limited time by the user, I have to give the solution based on the thinking directly now.\n</think>.\n\n”
    • 插入该指令后,模型基于已积累的推理生成最终响应
    • 值得注意的是,此能力并非通过显式训练获得,而是思维模式融合的自然结果

General RL

  • 通用强化学习阶段旨在广泛增强模型在多样化场景中的能力和稳定性
  • 为此,论文建立了一个覆盖 20 多项任务 的复杂奖励系统 ,每项任务均配备定制化评分标准,重点关注以下核心能力:
    • 指令遵循(Instruction Following) :确保模型准确解释并遵循用户指令,包括内容、格式、长度和结构化输出等要求,生成符合用户期望的响应
    • 格式遵循(Format Following) :除显式指令外,模型需遵循特定格式约定
      • 例如,通过 /think 和 /no_think 标志切换思维模式,并在最终输出中使用指定 token(如 <think> 和 </think>)分隔思维和响应部分
    • 偏好对齐(Preference Alignment) :针对开放式查询,偏好对齐侧重于提升模型的帮助性、参与度和风格,最终提供更自然和令人满意的用户体验
    • 智能体能力(Agent Ability) :训练模型通过指定接口正确调用工具
      • 在 RL rollout 过程中,模型可执行完整的多轮交互周期 ,并接收真实环境执行反馈 ,从而提升其在长视野决策任务中的性能和稳定性
    • 专项场景能力(Abilities for Specialized Scenarios) :在更专业的场景中,论文设计特定任务
      • 例如,在检索增强生成(Retrieval-Augmented Generation, RAG)任务中,引入奖励信号引导模型生成准确且上下文合适的响应 ,从而最小化幻觉风险
  • 为上述任务提供反馈时,论文采用三种不同类型的奖励:
    • (1)基于规则的奖励(Rule-based Reward) :广泛用于推理强化学习阶段,也适用于指令遵循(2024)和格式遵循等通用任务
      • 设计良好的基于规则的奖励可高精度评估模型输出的正确性,避免奖励破解(reward hacking)问题
    • (2)带参考答案的模型奖励(Model-based Reward with Reference Answer) :为每个查询提供参考答案,并提示 Qwen2.5-72B-Instruct 基于参考答案对模型响应评分
      • 该方法无需严格格式化即可灵活处理多样化任务,避免纯规则奖励可能导致的假阴性
    • (3)无参考答案的模型奖励(Model-based Reward without Reference Answer) :利用人类偏好数据训练奖励模型 ,为模型响应分配标量分数
      • 该方法不依赖参考答案,可处理更广泛查询,同时有效提升模型的参与度和帮助性

Strong-to-Weak Distillation

  • 强到弱蒸馏流程专为优化轻量级模型设计,涵盖 5 个 Dense 模型(Qwen3-0.6B、1.7B、4B、8B 和 14B)和 1 个 MoE 模型(Qwen3-30B-A3B)
    • 该方法在提升模型性能的同时,有效赋予其强大的模式切换能力
  • 蒸馏过程分为两个主要阶段:
    • (1) Off-policy 蒸馏(Off-policy Distillation) :在此初始阶段,论文结合教师模型在 /think 和 /no_think 模式下的输出进行响应蒸馏 ,帮助轻量级学生模型发展基础推理能力和思维模式切换能力,为后续 On-policy 训练阶段奠定基础
    • (2) On-policy 蒸馏(On-policy Distillation) :在此阶段,学生模型生成 On-policy 序列进行微调
      • 使用学生模型采样提示后,学生模型以 /think 或 /no_think 模式生成响应,并通过对齐其 logits 与教师模型(Qwen3-32B 或 Qwen3-235B-A22B)以最小化 KL 散度(Kullback-Leibler divergence)进行微调

Post-training Evaluation

  • 为全面评估指令调优模型的质量,论文采用自动化基准测试思维和非思维模式下的模型性能。这些基准分为以下几类:
    • 通用任务(General Tasks) :使用 MMLU-Redux(2024)、GPQA-Diamond(2023)、C-Eval(2023)和 LiveBench(2024-11-25)(2024)等基准
      • 对于 GPQA-Diamond,每个查询采样 10 次并报告平均准确率
    • 对齐任务(Alignment Tasks) :评估模型与人类偏好的对齐程度
      • 针对指令遵循性能,报告 IFEval(2023)的严格提示准确率;
      • 针对通用主题的人类偏好对齐,使用 Arena-Hard(2024)和 AlignBench v1.1(2023);
      • 针对写作任务,依赖 Creative Writing V3(2024)和 WritingBench(2025)评估模型的熟练度和创造力
    • 数学与文本推理(Math & Text Reasoning) :评估数学和逻辑推理能力,采用高阶数学基准 MATH-500(2023)、AIME’24 和 AIME’25(2025),以及文本推理任务 ZebraLogic(2025)和 AutoLogi(2025)
      • 对于 AIME 问题,每年试题包含 Part I 和 Part II,共 30 题,每题采样 64 次并以平均准确率作为最终分数
    • 智能体与编码(Agent & Coding) :测试模型在编码和智能体任务中的熟练度,使用 BFCL v3(2024)、LiveCodeBench(v5, 2024.10-2025.02)(2024)和 Codeforces Ratings from CodeElo(2025)
      • 对于 BFCL,所有 Qwen3 模型均采用 FC 格式评估,并使用 yarn 将模型部署至 64k 上下文长度以进行多轮评估
        • 部分基线来自 BFCL 排行榜,取 FC 和 Prompt 格式中的较高分;未在排行榜中报告的模型则评估 Prompt 格式
      • 对于 LiveCodeBench,非思维模式使用官方推荐提示,思维模式则调整提示模板以允许模型更自由地思考(移除限制 You will not return anything except for the program)
      • 为评估模型与竞技编程专家的性能差距,使用 CodeForces 计算 Elo 评分,每个问题最多生成八次独立推理尝试
    • 多语言任务(Multilingual Tasks) :评估四种任务:指令遵循、知识、数学和逻辑推理
      • 指令遵循使用 Multi-IF(2024)(覆盖 8 种关键语言);
      • 知识评估包含两类:区域知识通过 INCLUDE(2024)(覆盖 44 种语言)评估,通用知识通过 MMMLU(2024)(覆盖 14 种语言,排除未优化的约鲁巴语);
      • 数学任务采用 MT-AIME2024(2025)(涵盖 55 种语言)和 PolyMath(2025)(涵盖 18 种语言);
      • 逻辑推理使用 MlogiQA(覆盖 10 种语言,源自 2024)
  • 所有 Qwen3 模型采样超参数设置如下:
    • 在思维模式下的采样超参数设置为 temperature\(=0.6\)、top-p\(=0.95\)、top-k\(=20\);
      • 对于 Creative Writing v3 和 WritingBench,应用 presence penalty\(=1.5\) 以鼓励生成更多样化内容
      • 补充:presence penalty 会对已经生成过的词汇的概率值进行削弱
        • 值越大,削弱越厉害,生成的文本更加多样化;
        • 值越小,更容易生成重复的词,但文本会更加连贯
    • 非思维模式的采样超参数为 temperature\(=0.7\)、top-p \(=0.8\)、top-k \(=20\)、presence penalty\(=1.5\)
    • 两种模式的最大输出长度均设为 32,768 token,AIME’24 和 AIME’25 除外(扩展至 38,912 token 以提供充足思维空间)
      Summary of Evaluation Results
  • 从评估结果中,我们总结出最终确定的Qwen3模型的几个关键结论如下:
    • (1)我们的旗舰模型 Qwen3-235B-A22B 在思考模式和非思考模式下均展现出开源模型中的顶尖整体性能,超越了 DeepSeek-R1 和 DeepSeek-V3 等强基线模型
      • Qwen3-235B-A22B 与闭源领先模型(如 OpenAI-o1、Gemini2.5-Pro 和 GPT-4o)相比也具有高度竞争力,彰显了其深厚的推理能力和全面的通用能力
    • (2)我们的旗舰 Dense 模型 Qwen3-32B 在大多数基准测试中优于我们此前最强的推理模型 QwQ-32B,且性能与闭源的OpenAI-o3-mini 相当,表明其推理能力令人瞩目
      • Qwen3-32B 在非思考模式下的表现也极为出色,超越了我们此前的旗舰非推理 Dense 模型 Qwen2.5-72B-Instruct。
    • (3)我们的轻量级模型(包括 Qwen3-30B-A3B、Qwen3-14B 及其他较小的 Dense 模型)与参数规模相近或更大的开源模型相比,性能始终更优,证明了我们“Strong-to-Weak Distillation”方法的成功。
  • 注:【此处省略一些评估细节】

Discussion

The Effectiveness of Thinking Budget

  • 为验证 Qwen3 可通过增加思维预算提升智能水平,论文在数学、编码和 STEM 领域的四个基准上调整分配的思维预算
  • 如图 2 所示,Qwen3 展现出与分配思维预算相关的可扩展且平滑的性能提升
    • Thinking Budget 越大,效果越好
  • 此外,若进一步将输出长度扩展至 32K 以上,模型性能有望在未来继续提升,论文将此探索留作未来工作

The Effectiveness and Efficiency of On-Policy Distillation

  • 论文通过比较蒸馏与直接强化学习在相同 Off-policy 蒸馏 8B 检查点后的性能和计算成本(以 GPU 小时计),评估 On-policy 蒸馏的有效性和效率
  • 注:为简化,以下仅关注数学和代码相关查询
  • 表 21 的结果表明,蒸馏在仅需约 1/10 GPU 小时的情况下,性能显著优于强化学习
    • 从教师 logits 蒸馏使学生模型能够扩展其探索空间并增强推理潜力,表现为蒸馏后 AIME’24 和 AIME’25 基准的 pass@64 分数较初始检查点有所提升;
    • 强化学习未带来 pass@64 分数的任何改进。
    • 这些观察凸显了利用更强教师模型指导学生模型学习的优势

The Effects of Thinking Mode Fusion and General RL

  • 为评估后训练中思维模式融合和通用强化学习的有效性,论文对 Qwen-32B 模型的各个阶段进行评估
  • 除前述数据集外,引入多个内部基准以监控其他能力:
    • CounterFactQA :包含反事实问题,模型需识别问题非事实并避免生成幻觉答案
    • LengthCtrl :包含带长度要求的创意写作任务,最终分数基于生成内容长度与目标长度的差异
    • ThinkFollow :包含随机插入 /think 和 /no_think 标志的多轮对话,测试模型能否根据用户查询正确切换思维模式
    • ToolUse :评估模型在单轮、多轮和多步工具调用过程中的稳定性,分数包括工具调用过程中的意图识别准确率、格式准确率和参数准确率
  • 结果如表 22 所示,可得出以下结论:
    • (1) Stage 3 将非思维模式整合至已通过前两阶段训练具备思维能力的模型中
      • ThinkFollow 基准分数 88.7 表明模型已具备初步模式切换能力,但仍偶有错误
      • Stage 3 还提升了模型在思维模式下的通用和指令遵循能力,CounterFactQA 提升 10.9 分,LengthCtrl 提升 8.0 分
    • (2) Stage 4 进一步强化模型在思维和非思维模式下的通用、指令遵循和智能体能力
      • ThinkFollow 分数提升至 98.9,确保准确模式切换
    • (3) 对于知识、STEM、数学和编码任务 ,思维模式融合和通用强化学习未带来显著提升
      • 相反,对于 AIME’24 和 LiveCodeBench 等挑战性任务,思维模式性能在这两个训练阶段后实际下降
      • 论文推测这种退化是由于模型在更广泛通用任务上训练,可能影响其处理复杂问题的专项能力
      • 在 Qwen3 开发中,论文选择接受这种性能权衡以增强模型的整体通用性

Future Work

  • 在不久的将来,论文的研究将聚焦于以下几个关键方向:
    • (1) 预训练扩展(Scale up pretraining) :论文将继续扩展预训练规模,使用质量更高、内容更多样的数据
    • (2) 架构优化(Improving model architecture) :改进模型架构和训练方法,以实现高效压缩、超长上下文支持等目标
    • (3) 强化学习(Reinforcement Learning, RL) :增加计算资源投入,重点关注基于环境反馈的智能体强化学习系统,以构建能够处理需要推理时间扩展的复杂任务的智能体

Appendix

A.1 Additional Evaluation Results

A.1.1 Long-Context Ability
  • 为评估长上下文处理能力,论文在 RULER 基准测试 (2024) 中报告了结果(表 23)
  • 为实现长度外推(length extrapolation),论文使用 YARN (2023) 并设置缩放因子 \( \text{scaling_factor} = 4 \)
  • 在思考模式下,论文将思考预算(thinking budget)设为 8192 token,以减少对超长输入的冗余推理
  • 结果显示:
    • (1) 在非思考模式下,Qwen3 在长上下文处理任务中优于同规模的 Qwen2.5 模型
    • (2) 在思考模式下,模型性能略有下降
      • 论文推测思考内容对这些检索任务(无需依赖推理)帮助有限 ,甚至可能干扰检索过程
      • 未来版本将重点提升思考模式下的长上下文能力

A.1.2 Multilingual Ability

  • 表 24-35 展示了 Qwen3 系列模型在西班牙语、法语、葡萄牙语、意大利语、阿拉伯语、日语、韩语、印尼语、俄语、越南语、德语和泰语等多种语言中的详细基准得分
    • 这些结果表明,Qwen3 系列模型在所有评估基准中均表现优异,展现了强大的多语言能力
  • 为更广泛评估 Qwen3 的多语言表现,论文使用 Belebele (2023) 基准测试,覆盖 80 种优化语言(表 36 按语系列出)
  • 表 37 展示了 Qwen3 与其他基线模型在 Belebele 基准上的性能对比
  • 结果显示,Qwen3 在同等规模下与 Gemma 模型表现相当,同时显著优于 Qwen2.5

附录:Qwen3-MoE 源码

  • 参考博客:图解 Qwen3 MoE 模型源码
    • 包含一些流程图和源码,比较清晰

NLP——技术报告解读-DeepSeek-V3

注:本文包含 AI 辅助创作

  • 参考链接:
    • 原始论文:DeepSeek-V3 Technical Report, arXiv 202412 & 202502, DeepSeek-AI
    • GitHub:github.com/deepseek-ai/DeepSeek-V3

Paper Summary

  • 核心内容总结:
    • DeepSeek-V3 是一个大型 MoE 语言模型(671B-A37B),在 14.8T Token 上进行了训练
    • 除了 DeepSeek-V2 中的 MLA 和 DeepSeekMoE 架构外,还开创性地采用了无辅助损失(auxiliary-loss-free)的负载平衡策略,并设置了 Multi-token 预测(Multi-token prediction)训练目标以获得更强的性能
    • 性能:截止到发布,DeepSeek-V3 是最强的开源模型,并且实现了与领先的闭源模型(如 GPT-4o 和 Claude-3.5-Sonnet)相媲美的性能
    • 最大特点:
      • 性能强大且保持了经济的训练成本,其完整训练(包括预训练、上下文长度扩展和后训练)仅需 2.788M H800 GPU 小时
      • 训练过程非常稳定,在整个训练过程中,论文没有遇到任何不可恢复的损失尖峰或执行任何回滚
  • DeepSeek-V3 采用了:
    • 多头潜在注意力(Multi-head Latent Attention, MLA),from DeepSeek-V2
    • DeepSeekMoE 架构, from DeepSeek-V2
    • DeepSeek-V3 开创了一种无辅助损失的(auxiliary-loss-free)负载均衡策略,并设定了 Multi-token 预测训练目标以获得更强的性能
  • 论文在 14.8T 个多样化和高质量的 Token 上对 DeepSeek-V3 进行了预训练(随后进行了 SFT 和 RL)

Introduction and Discussion

  • LLMs 经历了快速的迭代和演进 (Anthropic, 2024; Google, 2024; OpenAI, 2024a),逐步缩小了通往通用人工智能(Artificial General Intelligence, AGI)的差距(以上都是闭源模型)
  • 开源模型,包括 DeepSeek 系列 (DeepSeek-AI, 2024a, 2024b, 2024c; 2024)、LLaMA 系列 (Al@Meta, 2024a,2023b)、Qwen 系列 (Qwen, 2023, 2024a, 2024b) 和 Mistral 系列 (2023; Mistral, 2024),也取得了显著进展,努力缩小与闭源模型的差距
  • 为了进一步推动开源模型能力的边界,论文扩大了模型规模并推出了 DeepSeek-V3,这是一个大型 MoE 模型,拥有 671B 参数,其中每个 Token 激活 37B 参数
  • 以前瞻性的视角,论文始终致力于实现强大的模型性能和经济高效的成本
    • 在架构方面,DeepSeek-V3 仍然采用 MLA (DeepSeek-AI, 2024c) 以实现高效推理,并采用 DeepSeekMoE (2024) 以实现经济高效的训练
    • 这两种架构已在 DeepSeek-V2 (DeepSeek-AI, 2024c) 中得到验证,证明了它们在保持强大模型性能的同时实现高效训练和推理的能力
    • 除了基本架构之外,论文还实施了两种额外的策略以进一步增强模型能力
      • 1)DeepSeek-V3 开创了一种无辅助损失的负载均衡策略 (2024a),旨在最小化因鼓励负载均衡而对模型性能产生的不利影响
      • 2)DeepSeek-V3 采用了 Multi-token 预测训练目标,论文观察到这可以提升在评估基准上的整体性能
  • 为了实现高效训练,论文支持 FP8 混合精度训练并对训练框架进行了全面的优化
    • 低精度训练已成为一种有前景的高效训练解决方案 (2022; 2019; 2017; 2023b),其发展与硬件能力的进步密切相关 (2024; 2022; 2023a)
    • 论文引入了一个 FP8 混合精度训练框架,并首次在超大规模模型上验证了其有效性
    • 通过对 FP8 计算和存储的支持,论文实现了加速训练和降低 GPU 内存使用
  • 至于训练框架,论文设计了 DualPipe 算法以实现高效的流水线并行(Pipeline Parallelism, PP),该算法具有更少的流水线气泡,并通过计算-通信重叠(Overlap)隐藏了训练过程中的大部分通信
    • 这种重叠确保了随着模型的进一步扩展,只要论文保持恒定的计算-通信比,论文仍然可以在节点间使用细粒度专家(fine-grained experts),同时实现接近零的全交换(all-to-all)通信开销
    • 论文还开发了高效的跨节点全交换通信内核,以充分利用 InfiniBand (IB) 和 NVLink 带宽
    • 论文精心优化了内存占用,使得在不使用昂贵的张量并行(Tensor Parallelism, TP)的情况下训练 DeepSeek-V3 成为可能
  • 结合这些努力,论文实现了高训练效率
  • 在预训练期间,论文在 14.8T 高质量和多样化的 Token 上训练 DeepSeek-V3
    • 预训练过程非常稳定,在整个训练过程中,论文没有遇到任何不可恢复的损失尖峰或不得不回滚的情况
  • 接下来,论文对 DeepSeek-V3 进行了两阶段的上下文长度扩展
    • 在第一阶段,最大上下文长度扩展到 32K
    • 在第二阶段,进一步扩展到 128K
  • 此后,论文进行了Post-training,包括对 DeepSeek-V3 基础模型进行 SFT 和 RL ,以使其与人类偏好对齐并进一步释放其潜力
    • 在后训练阶段,论文从 DeepSeek-R1 系列模型中蒸馏推理能力,同时仔细维护模型准确性和生成长度之间的平衡
  • 论文在全面的基准测试套件上评估了 DeepSeek-V3
    • 综合评估显示 DeepSeek-V3-Base 已成为当前最强的开源基础模型,尤其是在代码和数学领域
    • 其聊天版本也在一系列标准和开放式基准测试中优于其他开源模型,并实现了与领先闭源模型(包括 GPT-4o 和 Claude-3.5-Sonnet)相媲美的性能
  • 最后,论文再次强调 DeepSeek-V3 的经济训练成本,总结在表 1 中,这是通过论文对算法、框架和硬件的优化协同设计实现的
    • 在预训练阶段,在每万亿 Token 上训练 DeepSeek-V3 仅需 180K H800 GPU 小时,即在论文拥有 2048 个 H800 GPU 的集群上需要 3.7 天
    • 因此,论文的预训练阶段在不到两个月内完成,成本为 2664K GPU 小时
    • 加上上下文长度扩展的 119K GPU 小时和后训练的 5K GPU 小时,DeepSeek-V3 的完整训练仅花费 2.788M GPU 小时
    • 假设 H800 GPU 的租赁价格为每小时 2 美元,论文的总训练成本仅为 557.6 万美元
    • 请注意,上述成本仅包括 DeepSeek-V3 的官方训练,不包括先前在架构、算法或数据上的研究和消融实验相关的成本
  • 论文的主要贡献包括:
    • 架构:创新的负载均衡策略和训练目标 (Architecture: Innovative Load Balancing Strategy and Training Objective)
      • 在 DeepSeek-V2 的高效架构基础上,论文开创了一种无辅助损失的负载均衡策略 (auxiliary-loss-free strategy for load balancing),该策略最小化了因鼓励负载均衡而产生的性能下降
      • 论文研究了 Multi-token 预测 (Multi-token Prediction, MTP) 目标,并证明其有益于模型性能。它也可用于推测解码 (speculative decoding) 以加速推理
    • 预训练:追求极致的训练效率 (Pre-Training: Towards Ultimate Training Efficiency)
      • 论文设计了一个 FP8 混合精度训练框架 (FP8 mixed precision training framework),并首次在超大规模模型上验证了 FP8 训练的可行性和有效性
      • 通过算法、框架和硬件的协同设计 (co-design),论文克服了跨节点 MoE 训练中的通信瓶颈,实现了近乎完全的计算-通信重叠 (computation-communication overlap)
        • 这显著提高了论文的训练效率并降低了训练成本,使论文能够在没有额外开销的情况下进一步扩大模型规模
      • 仅以 2.664M H800 GPU 小时的经济成本,论文完成了 DeepSeek-V3 在 14.8T Token 上的预训练,产生了当前最强的开源基础模型
        • 预训练之后的后续训练阶段仅需 0.1M GPU 小时
    • 后训练:来自 DeepSeek-R1 的知识蒸馏 (Post-Training: Knowledge Distillation from DeepSeek-R1)
      • 论文引入了一种创新方法,将推理能力从长思维链 (long Chain-of-Thought, long CoT) 模型,特别是从 DeepSeek R1 系列模型之一,蒸馏到标准大语言模型中,尤其是 DeepSeek-V3
      • 论文的流程巧妙地将 R1 的验证和反思模式融入 DeepSeek-V3,并显著提高了其推理性能
      • 同时,论文也保持了对 DeepSeek-V3 输出风格和长度的控制
    • 核心评估结果总结 (Summary of Core Evaluation Results)
      • 知识 (Knowledge) :
        • (1) 在教育类基准测试如 MMLU、MMLU-Pro 和 GPQA 上,DeepSeek-V3 优于所有其他开源模型,在 MMLU 上达到 88.5,在 MMLU-Pro 上达到 75.9,在 GPQA 上达到 59.1
          • 其性能与领先的闭源模型如 GPT-4o 和 Claude-Sonnet-3.5 相当,缩小了开源模型与闭源模型在该领域的差距
        • (2) 在事实性基准测试方面,DeepSeek-V3 在 SimpleQA 和 Chinese SimpleQA 上均表现出优于其他开源模型的性能
          • 虽然它在英语事实知识 (SimpleQA) 上落后于 GPT-4o 和 Claude-Sonnet-3.5,但在中文事实知识 (Chinese SimpleQA) 上超越了这些模型,突显了其中文事实知识的优势
      • 代码、数学和推理 (Code, Math, and Reasoning) :
        • (1) DeepSeek-V3 在所有非长思维链的开源和闭源模型中,在数学相关基准测试上达到了最先进的性能。值得注意的是,它在特定基准测试上(如 MATH-500)甚至超过了 o1-preview,展示了其强大的数学推理能力
        • (2) 在代码相关任务上,DeepSeek-V3 成为代码竞赛基准测试(如 LiveCodeBench)中表现最佳的模型,巩固了其在该领域的领先地位
          • 对于工程相关任务,虽然 DeepSeek-V3 的表现略低于 Claude-Sonnet-3.5,但它仍然以显著优势领先所有其他模型,展示了其在各种技术基准测试上的竞争力
  • 剩余部分组织如下:
    • 详细阐述论文的 DeepSeek-V3 模型架构(第 2 节)
    • 介绍论文的基础设施,包括论文的计算集群、训练框架、对 FP8 训练的支持、推理部署策略以及论文对未来硬件设计的建议(第 3 节)
    • 描述论文的预训练过程,包括训练数据的构建、超参数设置、长上下文扩展技术、相关评估以及一些讨论(第 4 节)
    • 讨论论文在后训练方面的工作,包括 SFT 、 RL 、相应的评估和讨论(第 5 节)
    • 总结讨论 DeepSeek-V3 现有的局限性,并提出未来研究的潜在方向(第 6 节)

Architecture

  • 论文首先介绍 DeepSeek-V3 的基本架构,其特点是采用 MLA (DeepSeek-AI) 实现高效推理,以及采用 DeepSeekMoE (2024) 实现经济高效的训练
  • 然后,论文介绍一种 MTP 训练目标,论文观察到该目标能够提升模型在评估基准上的整体性能
  • 对于其他未明确提及的细节,DeepSeek-V3 遵循 DeepSeek-V2 (DeepSeek-AI) 的设置

Basic Architecture

  • DeepSeek-V3 的基本架构仍然在 Transformer (2017) 框架内
  • 为了高效推理和经济高效的训练,DeepSeek-V3 同样采用了 MLA 和 DeepSeekMoE,这两者已在 DeepSeek-V2 中得到充分验证
  • 与 DeepSeek-V2 相比,一个例外是:
    • 论文额外为 DeepSeekMoE 引入了一种 无辅助损失负载均衡 (auxiliary-loss-free load balancing) 策略 (Wang 等人),以减轻因努力确保负载均衡而导致的模型性能下降
    • 图 2 展示了 DeepSeek-V3 的基本架构,论文将在本节简要回顾 MLA 和 DeepSeekMoE 的细节
Multi-Head Latent Attention
  • 对于注意力机制,DeepSeek-V3 采用 MLA 架构
  • 令 \(d\) 表示嵌入维度,\(n_{h}\) 表示注意力头数,\(d_{h}\) 表示每个头的维度,\(\mathbf{h}_{t}\in\mathbb{R}^{d}\) 表示给定注意力层中第 \(t\) 个 Token 的注意力输入
  • MLA 的核心是对注意力 Key 和 Value 进行低秩联合压缩,以减少推理期间的 Key-Value 缓存 (Key-Value, KV cache):
    $$
    \begin{align}
    \boxed{\mathbf{c}_{t}^{KV} } &= \mathbf{W}^{DKY}\mathbf{h}_{t},\\
    \left[\mathbf{k}_{t,1}^{C};\mathbf{k}_{t,2}^{C};…;\mathbf{k}_{t,n_{h} }^{C}\right] = \mathbf{k}_{t}^{C} &=\mathbf{W}^{UK}\mathbf{c}_{t}^{KV},\\
    \boxed{\mathbf{k}_{t}^{R}} &= \text{RoPE}(\mathbf{W}^{KR}\mathbf{h}_{t}),\\
    \mathbf{k}_{t,i} &= \left[\mathbf{k}_{t,i}^{C};\mathbf{k}_{t}^{R}\right],\\
    [\mathbf{v}_{t,1}^{C};\mathbf{v}_{t,2}^{C};…;\mathbf{v}_{t,n_{h} }^{C}] = \mathbf{v}_{t}^{C} &=\mathbf{W}^{UV}\mathbf{c}_{t}^{KV}
    \end{align}
    $$
    • 其中 \(\mathbf{c}_{t}^{KV}\in\mathbb{R}^{d_{c} }\) 是 Key 和 Value 的压缩潜在向量;
    • \(d_{c}(\ll d_{h}n_{h})\) 表示 KV 压缩维度;
    • \(W^{DKY}\in\mathbb{R}^{d_{c}\times d}\) 表示下投影矩阵;
    • \(W^{UK},W^{UV}\in\mathbb{R}^{d_{h}n_{h}\times d_{c} }\) 分别是 Key 和 Value 的上投影矩阵;
    • \(W^{KR}\in\mathbb{R}^{d_{h}^{R}\times d}\) 是用于生成携带 旋转位置嵌入 (Rotary Positional Embedding, RoPE) (2024) 的解耦 Key 的矩阵;
    • RoPE(\(\cdot\)) 表示应用 RoPE 矩阵的操作;
    • [\(\cdot\);\(\cdot\)] 表示拼接
  • 对于 MLA,在生成过程中只需要缓存蓝色框内的向量(即 \(\mathbf{c}_{t}^{KV}\) 和 \(\mathbf{k}_{t}^{R}\)),这能在保持性能与标准 多头注意力 (Multi-Head Attention, MHA) (2017) 相当的同时,显著减少 KV 缓存
  • 对于注意力 Query ,论文也执行低秩压缩,这可以减少训练期间的激活内存:
    $$
    \begin{align}
    \mathbf{c}_{t}^{Q}&=W^{DQ}\mathbf{h}_{t},\\
    \left[\mathbf{q}_{t,1}^{C};\mathbf{q}_{t,2}^{C};…;\mathbf{q}_{t,n_{h} }^{C}\right]=\mathbf{q}_{t}^{C}&=W^{UQ}\mathbf{c}_{t}^{Q},\\
    \left[\mathbf{q}_{t,1}^{R};\mathbf{q}_{t,2}^{R};…;\mathbf{q}_{t,n_{h} }^{R}\right]=\mathbf{q}_{t}^{R}&=\text{RoPE}(W^{QR}\mathbf{c}_{t}^{Q}),\\
    \mathbf{q}_{t,i}&=\left[\mathbf{q}_{t,i}^{C};\mathbf{q}_{t,i}^{R}\right],
    \end{align}
    $$
    • 其中 \(\mathbf{c}_{t}^{Q}\in\mathbb{R}^{d_{c}^{\prime} }\) 是 Query 的压缩潜在向量;
    • \(d_{c}^{\prime}(\ll d_{h}n_{h})\) 表示 Query 压缩维度;
    • \(W^{DQ}\in\mathbb{R}^{d_{c}^{\prime}\times d}\),\(W^{UQ}\in\mathbb{R}^{d_{h}n_{h}\times d_{c}^{\prime} }\) 分别是 Query 的下投影和上投影矩阵;
    • \(W^{QR}\in\mathbb{R}^{d_{h}^{R}n_{h}\times d_{c}^{\prime} }\) 是用于生成携带 RoPE 的解耦 Query 的矩阵
  • 最终,注意力 Query (\(\mathbf{q}_{t,i}\))、 Key (\(\mathbf{k}_{j,i}\)) 和值 (\(\mathbf{v}_{j,i}^{C}\)) 被组合以产生最终的注意力输出 \(\mathbf{u}_{t}\):
    $$
    \begin{align}
    \mathbf{o}_{t,i}&=\sum_{j=1}^{t}\text{Softmax}_{j}(\frac{\mathbf{q}_{t,i}^{T}\mathbf{k}_{j,i} }{\sqrt{d_{h}+d_{h}^{R} } })\mathbf{v}_{j,i}^{C},\\
    \mathbf{u}_{t}&=W^{O}\left[\mathbf{o}_{t,1};\mathbf{o}_{t,2};…;\mathbf{o}_{t,n_{h} }\right],
    \end{align}
    $$
    • 其中 \(W^{O}\in\mathbb{R}^{d\times d_{h}n_{h} }\) 表示输出投影矩阵
DeepSeekMoE with Auxiliary-Loss-Free Load Balancing
Basic Architecture of DeepSeekMoE
  • 对于 前馈网络 (Feed-Forward Networks, FFNs),DeepSeek-V3 采用 DeepSeekMoE 架构 (2024)
  • 与传统的 MoE 架构(如 CShard (2021))相比,DeepSeekMoE 使用更细粒度的专家,并将一些专家隔离为共享专家
  • 令 \(\mathbf{u}_{t}\) 表示第 \(t\) 个 Token 的 FFN 输入,论文计算 FFN 输出 \(\mathbf{h}_{t}^{\prime}\) 如下:
    $$
    \begin{align}
    \mathbf{h}_{t}^{\prime} &=\mathbf{u}_{t}+\sum_{i=1}^{N_{s} }\text{FFN }_{i}^{(s)}\left(\mathbf{u}_{t}\right)+\sum_{i=1}^{N_{r} }g_{i,t}\text{ FFN}_{i}^{(r)}\left(\mathbf{u}_{t}\right),\\
    g_{i,t} &= \frac{g_{i,t}^{\prime} }{\sum_{j=1}^{N_{r} }g_{j,t}^{\prime} },\\
    g_{i,t}^{\prime} &= \begin{cases}s_{i,t},&s_{i,t}\in\text{Topk}(\{s_{j,t}|1\leqslant j\leqslant N_{r}\},K_{r}),\\ 0,&\text{otherwise},\end{cases} \\
    s_{i,t} &= \text{Sigmoid}\left(\mathbf{u}_{t}^{T}\mathbf{e}_{t}\right),
    \end{align}
    $$
    • FFN\({}_{i}^{(s)}(\cdot)\) 表示第 \(i\) 个共享专家;
      • \(N_{s}\) 表示共享专家数量
    • FFN\({}_{i}^{(r)}(\cdot)\) 表示第 \(i\) 个路由专家;
      • 和 \(N_{r}\) 表示路由专家数量
    • \(K_{r}\) 表示激活的路由专家数量;
    • \(g_{i,t}\) 是第 \(i\) 个专家的门控值;
    • \(s_{i,t}\) 是 Token 到专家的亲和度;
    • \(\mathbf{e}_{t}\) 是第 \(i\) 个路由专家的质心向量;
    • Topk\((\cdot,K)\) 表示包含为第 \(t\) 个 Token 和所有路由专家计算的亲和度分数中 \(K\) 个最高分的集合
  • 与 DeepSeek-V2 略有不同,DeepSeek-V3 使用 sigmoid 函数计算亲和度分数,并在所有选定的亲和度分数之间应用归一化以产生门控值
Auxiliary-Loss-Free Load Balancing
  • 对于 MoE 模型,不平衡的专家负载将导致 路由崩溃 (routing collapse) (2017),并在使用专家并行的情况下降低计算效率
    • 传统的解决方案通常依赖 辅助损失 (auxiliary loss) (2021;) 来避免负载不平衡,但过大的辅助损失会损害模型性能 (Wang 等人)
  • 为了在负载均衡和模型性能之间取得更好的权衡,论文开创了一种 无辅助损失负载均衡 (auxiliary-loss-free load balancing) 策略 (Wang 等人) 来确保负载均衡
    • 论文为每个专家引入一个偏置项 \(b_{i}\),并将其加到相应的亲和度分数 \(s_{i,t}\) 上以确定 top-K 路由:
      $$g^{\prime}_{i,t}=\begin{cases}s_{i,t},&s_{i,t}+b_{i}\in\text{Topk}((s_{j,t}+b_{j}|1\leqslant j\leqslant N_{r}),K_{r}),\\ 0,&\text{otherwise}.\end{cases}$$
    • 特别说明:偏置项仅用于路由
    • 将与 FFN 输出相乘的门控值仍然来自原始亲和度分数 \(s_{i,t}\)
  • 在训练期间,论文持续监控每个训练步骤的整个批次的专家负载
    • 在每个步骤结束时,如果某个专家对应的负载过重,论文将其偏置项减少 \(y\),如果其对应的专家负载不足,则将其偏置项增加 \(y\),其中 \(y\) 是一个称为 偏置更新速度 (bias update speed) 的超参数
    • 通过这种动态调整,DeepSeek-V3 在训练期间保持均衡的专家负载,并且比那些仅通过纯辅助损失来鼓励负载均衡的模型实现了更好的性能
Complementary Sequence-Wise Auxiliary Loss
  • 尽管 DeepSeek-V3 主要依赖无辅助损失策略进行负载均衡,但为了防止任何单个序列内出现极端不平衡,论文也采用了互补的序列级均衡损失:
    $$
    \begin{align}
    \mathcal{L}_{\text{Bal} }&=\alpha\sum_{i=1}^{N_{r} }f_{i}P_{i},\\
    f_{i}&=\frac{N_{r} }{K_{r}T}\sum_{t=1}^{T}\mathbb{I}\left(s_{i,t}\in\text{Topk}(\{s_{j,t}|1\leqslant j\leqslant N_{r}\},K_{r})\right),\\
    s^{\prime}_{i,t}&=\frac{s_{i,t} }{\sum_{j=1}^{N_{r} }s_{j,t} },\\
    P_{i}&=\frac{1}{T}\sum_{t=1}^{T}s^{\prime}_{i,t},
    \end{align}
    $$
    • 平衡因子 \(\alpha\) 是一个超参数,对于 DeepSeek-V3 将被赋予一个极小的值;
    • \(\mathbb{I}(\cdot)\) 表示指示函数;
    • \(T\) 表示序列中的 Token 数
    • 序列级均衡损失鼓励每个序列上的专家负载保持均衡
    • 理解:
      • 每次计算最小化 损失 \(\mathcal{L}_{\text{Bal} }\) 时,都可以看做是一个求解约束优化问题的过程
      • 约束优化问题为:
        $$
        \begin{align}
        \min_{P_i} \quad &\sum_{i=1}^{N_{r} }f_{i}P_{i} \\
        \text{s.t.} &\sum_i P_i = 1
        \end{align}
        $$
        • 求解约束优化问题时,系数 \(f_{i}\) 可以看做是固定值(是每个序列的统计值,不同序列该值不同)
        • 变量是 \(P_{i}\) ,需要满足一定约束
          $$ \sum_i P_i=1 $$
          • 该约束可以通过定义推导得到:
            $$ \sum_j P_i = \sum_i \frac{1}{T}\sum_{t=1}^{T}s^{\prime}_{i,t} = \sum_i \frac{1}{T}\sum_{t=1}^{T} \frac{s_{i,t} }{\sum_{j=1}^{N_{r} }s_{j,t} } = \frac{1}{T}\sum_{t=1}^{T} \sum_i \frac{s_{i,t} }{\sum_{j=1}^{N_{r} }s_{j,t} } = \frac{1}{T}\sum_{t=1}^{T} 1 = \frac{1}{T}T = 1$$
        • 直观上看,最小化 \(\sum_{j=1}^{D+1}f_iP_i\) 的解就是让概率 \(P_i\) 随着 \(f_i\) 变化, \(f_i\) 越小,则 \(P_i\) 应该越大
          • 这样才能才能满足最小化 \(\sum_{j=1}^{D+1}f_iP_i\)
        • 从梯度上看
          $$ \frac{\partial \mathcal{L}_{\text{ LB} }}{\partial P_i} = \alpha f_i $$
          • 对于 \(f_i\) 越大的组,其概率 \(P_i\) 下降的越多
          • 进一步理解:\(P_i\) 下降是通过调整模型 router 参数实现的,这会导致参数更新后下一轮中真实统计值 \(f_i\) 下降,最终会收敛到一个大家的真实分配统计值 \(f_i\) 都差不多相同的地方(这也就实现了所谓的均衡)
Node-Limited Routing
  • 与 DeepSeek-V2 使用的设备受限路由类似,DeepSeek-V3 也使用一种受限路由机制来限制训练期间的通信成本
    • 注:该方法在 DeepSeek-V2 中被称为 Device-Limited Routing
      • 对于 DeepSeek-V2,除了对被路由专家进行简单的 top-K 选择外,还额外确保每个 Token 的目标专家最多分布在 \(M\) 个设备上
      • 具体来说,对于每个 Token
        • 首先筛选出 \(M\) 个设备,这些设备中包含亲和度得分(affinity scores)最高的专家;
        • 随后,在这 \(M\) 个设备的专家中执行 top-K 选择
      • 在实际实验中作者发现,当 \(M \ge 3\) 时,这种设备受限路由能够实现良好的性能,其效果与无限制的 top-K 路由基本持平
  • 简而言之,论文确保每个 Token 最多被发送到 \(M\) 个节点 ,这些节点是根据分布在该节点上的专家的最高 \(\frac{K}{M}\) 个亲和度分数之和来选择的
    • 理解(为什么是选择依据是每个节点最高 \(\frac{K}{M}\) 个亲和度之和?):对于每个 Token,需要分发到共 \(K\) 个专家,在限定只能发送到 \(M\) 个节点的情况下,则每个节点平均需要负责这个 Token 的 \(\frac{K}{M}\) 个专家,所以根据每个节点的最高 \(\frac{K}{M}\) 个亲和度之和来选择最终的 \(M\) 个节点
  • 在此约束下,论文的 MoE 训练框架几乎可以实现完全的计算-通信重叠
    • 理解:因为限定了每个 Token 需要分发的节点数量,这种情况下可以大幅减少通信开销,避免一个 Token 被发送到太多的节点而造成通信开销太大的情况
No Token-Dropping
  • 由于有效的负载均衡策略,DeepSeek-V3 在整个训练过程中保持良好的负载均衡,DeepSeek-V3 在训练期间不丢弃任何 Token
  • 论文还实现了特定的部署策略以确保推理时的负载均衡,因此 DeepSeek-V3 在推理期间也不丢弃 Token

Multi-token Prediction

  • 受 Gloeckle 等人 (2024) 的启发,论文研究并为 DeepSeek-V3 设定了 MTP 目标,该目标将每个位置的预测范围扩展到多个未来 Token
    • 1)MTP 目标使训练信号更加密集,并可能提高数据效率
    • 2)MTP 可能使模型能够预规划其表示,以更好地预测未来 Token
  • 图 3 展示了论文的 MTP 实现
    • 与 Gloeckle 等人 (2024) 使用独立的输出头并行预测 \(D\) 个额外 Token 不同,论文顺序预测额外 Token ,并在每个预测深度保持完整的因果链
  • 注:上图是训练的流程,按照 Teacher Forcing 方式训练的,所以 MTP 头的输入是真实的 Token,在推理时,会使用主网络的输出作为第二个 Token 的输入,以此类推,详情见后文
MTP Modules
  • 具体来说,论文的 MTP 实现使用 \(D\) 个顺序模块来预测 \(D\) 个额外 Token
    • 注:从图3可以看出,并行头只在模型的最后一层(主模型的 Head 层前)上增加,而不是在 Transformer 网络前面的层增加
    • 注:加入的内容是单层的 Transformer 再加一个 Head
  • 第 \(k\) 个 MTP 模块包含一个共享嵌入层 \(\text{Emb}(\cdot)\)、一个共享输出头 \(\text{OutHead}(\cdot)\)、一个 Transformer 块 \(\text{TRM}_{k}(\cdot)\) 和一个投影矩阵 \(M_{k}\in\mathbb{R}^{d\times 2d}\)
  • 对于第 \(i\) 个输入 Token \(t_{i}\),在第 \(k\) 个预测深度(注:这里的预测深度是指往后预测的 Token 数,不是 Transformer 网络层深度)
    • 论文首先将第 \(i\) 个 Token 在第 \((k-1)\) 个深度的表示 \(\mathbf{h}_{i}^{k-1}\in\mathbb{R}^{d}\) 与第 \((i+k)\) 个 Token 的嵌入通过线性投影相结合:
      $$\mathbf{h}_{i}^{ \prime{k} }=M_{k}[\textrm{RMSNorm}(\mathbf{h}_{i}^{ {k}-1});\textrm{RMSNorm}(\textrm{Emb}(t_{i+k}))],$$
    • 其中 \([.;.]\) 表示拼接
    • 特别地,当 \(k=1\) 时,\(\mathbf{h}_{i}^{ {k}-1}\) 指的是主模型给出的表示
    • 特别注意:对于每个 MTP 模块,其嵌入层与主模型共享
    • 组合后的 \(\mathbf{h}_{i}^{ {k} }\) 作为第 \(k\) 个深度的 Transformer 块的输入,以产生当前深度的输出表示 \(\mathbf{h}_{i}^{ {k} }\):
      $$\mathbf{h}_{1:T-k}^{ {k} }=\textrm{TRM}_{k}(\mathbf{h}_{1:T-k}^{ \prime{k} }),$$
    • 其中 \(T\) 表示输入序列长度,\({}_{ {i:j} }\) 表示切片操作(包括左右边界)
    • 最后,以 \(\mathbf{h}_{i}^{ {k} }\) 作为输入,共享输出头将计算第 \(k\) 个额外预测 Token 的概率分布 \(p_{ {i+1+k} }^{ {k} }\in\mathbb{R}^{V}\),其中 \(V\) 是词汇表大小:
      $$p_{ {i+k+1} }^{ {k} }=\textrm{OutHead}(\mathbf{h}_{i}^{ {k} }).$$
  • 输出头 \(\textrm{OutHead}(\cdot)\) 将表示线性映射为 logits,随后应用 \(\textrm{Softmax}(\cdot)\) 函数来计算第 \(k\) 个额外 Token 的预测概率
    • 同样,对于每个 MTP 模块,其输出头与主模型共享
    • 论文保持预测因果链的原则与 EAGLE (Li 等人) 类似,但 EAGLE 主要目标是 推测解码 (speculative decoding) (2023; 2023),而论文利用 MTP 来改进训练
MTP Training Objective
  • 对于每个预测深度,论文计算一个交叉熵损失 \(\mathcal{L}_{\textrm{MTP} }^{ {k} }\):
    $$\mathcal{L}_{\textrm{MTP} }^{ {k} }=\textrm{CrossEntropy}(p_{2+ k:T+1}^{ {k} },t_{2+k:T+1})=\frac{1}{T}\sum_{i=2+k}^{T+1}\log p_ {i}^{ {k} }[t_{i}],$$
    • 其中 \(T\) 表示输入序列长度,\(t_{i}\) 表示第 \(i\) 个位置的真实 Token
    • \(p_{i}^{ {k} }[t_{i}]\) 表示由第 \(k\) 个 MTP 模块给出的 \(t_{i}\) 的相应预测概率
  • 最后,论文计算所有深度上 MTP 损失的平均值,并将其乘以权重因子 \(\lambda\) 以获得总体 MTP 损失 \(\mathcal{L}_{\textrm{MTP} }\),该损失作为 DeepSeek-V3 的额外训练目标:
    $$\mathcal{L}_{\textrm{MTP} }=\frac{\lambda}{D}\sum_{k=1}^{D}\mathcal{L}_{\textrm{ MTP} }^{ {k} }.$$
MTP in Inference
  • 论文的 MTP 策略主要旨在提高主模型的性能 ,因此在推理期间,我们可以直接丢弃 MTP 模块,主模型可以独立且正常地运行
  • 也可以将这些 MTP 模块重新用于推测解码,以进一步改善生成延迟
  • 理解:实际上,后续的其他工作来看,还是提高主模型本身的性能用的多
  • 额外补充:关于 MTP 推理的其他讲解
    • 参考链接:deepseek技术解读(2)-MTP(Multi-token Prediction)的前世今生 - 姜富春的文章 - 知乎
    • 基本思想:
      • 预测阶段(Predict) :通过 K 个头一次生成 K 个 Token 的预测
      • 验证阶段(Verify) :将 K 个 Token 组装成 K 个 <input,label> 对,并行地利用输入 Main Model 作为评估验证,如果输出 label 与 Main Model 一致,则接受该 token
      • 接受阶段(Accept) :最终接受满足 Main Model 的最大长度 tokens 作为输出
    • 但是,从上述 图3 来看,多头预估时,预测 \(t^{\prime}_3\) 的输入包括了 \(t_1\) 的 Transformer 最后一层表征和 \(t_2\) 的 Embedding(即 Teacher Forcing 的形式),所以推理时是无法直接使用的,流程同上述方法一样,但应该使用下图的形式:
  • 特别说明:虽然主头的预测和后面头的预测是串行的,但是实际上,后面的头进需要走一个 Transformer 层,速度是很快的,和动辄几十层的主网络比起来(比如 DeepSeek-V3 是 61 层),算是很快的了(几乎可以认为是并行了)

Infrastructures

Compute Clusters

  • DeepSeek-V3 在一个配备有 2048 个 NVIDIA H800 GPU 的集群上进行训练
  • H800 集群中的每个节点包含 8 个通过节点内的 NVLink 和 NVSwitch 连接的 GPU
  • 在不同节点之间,利用 InfiniBand (IB) 互连来促进通信

Training Framework

  • DeepSeek-V3 的训练由 HAI-LLM 框架支持,这是一个由论文的工程师从头开始精心打造的、高效且轻量级的训练框架
  • DeepSeek-V3 应用了 16 路流水线并行 (Pipeline Parallelism, PP) (2023b)、跨越 8 个节点的 64 路专家并行 (Expert Parallelism, EP) (2021) 和 ZeRO-1 数据并行 (Data Parallelism, DP) (2020)
  • 为了促进 DeepSeek-V3 的高效训练,论文实施了细致的工程优化
    • 首先,论文设计了 DualPipe 算法用于高效的流水线并行
      • 与现有的 PP 方法相比,DualPipe 具有更少的流水线气泡
      • 更重要的是,它在前向和后向过程中重叠了计算和通信阶段,从而解决了跨节点专家并行引入的沉重通信开销的挑战
    • 其次,论文开发了高效的跨节点 All-to-All 通信内核,以充分利用 IB 和 NVLink 的带宽,并节省专用于通信的流式多处理器 (Streaming Multiprocessors, SMs)
    • 最后,论文精心优化了训练期间的内存占用,从而使得论文能够在训练 DeepSeek-V3 时不使用昂贵的张量并行 (Tensor Parallelism, TP)
DualPipe and Computation-Communication Overlap
  • 对于 DeepSeek-V3,跨节点专家并行引入的通信开销导致了大约 1:1 的低效计算-通信比
  • 为了应对这一挑战,论文设计了一种名为 DualPipe 的创新流水线并行算法,该算法不仅通过有效重叠前向和后向计算-通信阶段来加速模型训练,而且还减少了流水线气泡
  • DualPipe 的关键思想是在一对独立的前向和后向块 (chunk) 内重叠计算和通信
    • 论文将每个块划分为四个组件:注意力 (attention)、 All-to-All 分发 (all-to-all dispatch)、MLP 和 All-to-All 合并 (all-to-all combine)
    • 特别地,对于一个后向块,注意力和 MLP 都进一步分为两部分:对输入的梯度 (backward for input) 和对权重的梯度 (backward for weights),类似于 ZeroBubble (2023a) 中的做法
    • 此外,论文还有一个 PP 通信组件
  • 如图 4 所示,对于一对前向和后向块,论文重新排列了这些组件,并手动调整了专用于通信与计算的 GPU SMs 的比例
    • 在这种重叠策略中,我们可以确保 All-to-All 通信和 PP 通信在执行过程中都能被完全隐藏
    • 颜色上看:
      • 绿色(B)表示 backward for input
      • 蓝色(W)表示 backward for weight
      • 橙色(F)表示 forward
    • 通信上看:
      • 绿色(B)表示 backward 的通信
      • 橙色(F)表示 forward 的通信
      • 紫色(PP)表示 PP 的通信
  • 鉴于高效的重叠策略,完整的 DualPipe 调度如图 5 所示
    • 它采用了双向流水线调度,同时从流水线的两端输入微批次 (micro-batches),并且大部分通信可以完全重叠
    • 这种重叠也确保了,随着模型的进一步扩展,只要论文保持恒定的计算-通信比,论文仍然可以在跨节点使用细粒度专家,同时实现接近零的 All-to-All 通信开销
  • 即使在通信负担较轻的更一般情况下,DualPipe 仍然展现出效率优势
    • 在表 2 中,论文总结了不同 PP 方法的流水线气泡和内存使用情况
    • 如表所示,与 ZB1P (2023b) 和 1F1B (2018) 相比,DualPipe 显著减少了流水线气泡,同时仅将峰值激活内存增加了 \(\frac{1}{PP}\) 倍
    • 尽管 DualPipe 需要保留两份模型参数 ,但这并不会显著增加内存消耗 ,因为论文在训练期间使用了较大的 EP 规模
    • 与 Chimera (2021) 相比,DualPipe 仅要求流水线阶段和微批次能被 2 整除,而不要求微批次能被流水线阶段整除
    • 此外,对于 DualPipe,气泡和激活内存都不会随着微批次数量的增加而增加
Efficient Implementation of Cross-Node All-to-All Communication
  • 为了确保 DualPipe 具有足够的计算性能,论文定制了高效的跨节点 All-to-All 通信内核(包括分发和合并),以节省专用于通信的 SMs 数量
    • 这些内核的实现与论文的 MoE 门控算法和集群的网络拓扑结构协同设计
  • 具体来说,在论文的集群中,跨节点 GPU 通过 IB 完全互连,节点内通信通过 NVLink 处理
    • NVLink 提供 160 GB/s 的带宽,大约是 IB (50 GB/s) 的 3.2 倍
    • 为了有效利用 IB 和 NVLink 的不同带宽,论文将每个 Token 限制为最多分发到 4 个节点,从而减少 IB 流量
    • 对于每个 Token ,当做出路由决策时,它将首先通过 IB 传输到其目标节点上具有相同节点内索引的 GPU
    • 一旦到达目标节点,论文将尽力确保它通过 NVLink 瞬时转发到承载其目标专家的特定 GPU,而不会被后续到达的 Token 阻塞
    • 通过这种方式,通过 IB 和 NVLink 的通信完全重叠,每个 Token 可以高效地平均在每个节点选择 3.2 个专家,而不会产生 NVLink 的额外开销
    • 这意味着,尽管 DeepSeek-V3 在实践中仅选择 8 个路由专家,但它可以将此数量最多扩展到 13 个专家(4 个节点 × 3.2 个专家/节点),同时保持相同的通信成本
    • 总体而言,在这种通信策略下,仅需 20 个 SMs 就足以充分利用 IB 和 NVLink 的带宽
  • 详细来说,论文采用了 warp 专业化技术 (2014),并将 20 个 SMs 划分为 10 个通信通道,在分发过程中下面的操作由各自的 warp 处理
    • (1) IB 发送
    • (2) IB 到 NVLink 转发
    • (3) NVLink 接收
  • 分配给每个通信任务的 warp 数量根据所有 SMs 上的实际工作负载动态调整,类似地,在合并过程中下面的步骤也有由动态调整的 warp 处理
    • (1) NVLink 发送
    • (2) NVLink 到 IB 转发和累加
    • (3) IB 接收和累加
  • 此外,分发和合并内核都与计算流重叠,因此论文也考虑了它们对其他 SM 计算内核的影响
    • 具体来说,论文采用了定制的 PTX (Parallel Thread Execution) 指令并自动调整通信块大小,这显著减少了 L2 缓存的使用以及对其他 SMs 的干扰
Extremely Memory Saving with Minimal Overhead
  • 为了减少训练期间的内存占用,论文采用了以下技术
  • RMSNorm 和 MLA 上投影的重计算 (Recomputation of RMSNorm and MLA Up-Projection)
    • 论文在反向传播期间重新计算所有 RMSNorm 操作和 MLA 上投影,从而无需持久存储它们的输出激活
    • 以微小的开销为代价,该策略显著减少了存储激活所需的内存
  • CPU 中的指数移动平均 (Exponential Moving Average in CPU)
    • 在训练期间,论文保留模型参数的指数移动平均 (EMA) 用于在学习率衰减后早期估计模型性能
      • EMA 参数存储在 CPU 内存中,并在每个训练步骤后异步更新
    • 这种方法使论文能够维护 EMA 参数,而不会产生额外的内存或时间开销
  • Multi-token 预测的共享嵌入和输出头 (Shared Embedding and Output Head for Multi-token Prediction)。通过 DualPipe 策略,论文将模型的最浅层(包括嵌入层)和最深层(包括输出头)部署在同一个 PP 排名 (rank) 上。这种安排使得 MTP 模块和主模型之间能够物理共享共享嵌入和输出头的参数和梯度。这种物理共享机制进一步提高了论文的内存效率

FP8 Training

  • 受低精度训练最新进展 (2022; 2023b) 的启发,论文提出了一个利用 FP8 数据格式的细粒度混合精度框架来训练 DeepSeek-V3
  • 虽然低精度训练前景广阔,但它通常受到激活、权重和梯度中异常值 (outliers) 存在的限制 (2024; 2024)
    • 尽管在推理量化方面取得了显著进展 (2022; 2023),但相对较少的研究证明了低精度技术在大规模语言模型预训练中的成功应用 (2024)
  • 为了应对这一挑战并有效扩展 FP8 格式的动态范围,论文引入了一种细粒度的量化策略:
    • 使用 \(1\times N_{c}\) 元素的 tile-wise 分组 (tile-wise grouping) 或 \(N_{c}\times N_{c}\) 元素的块级分组 (block-wise grouping)
      • 注:tile-wise 说明量化维度是按照块做的,不是整个张量统一量化(tile 粒度比张量粒度更细)
    • 相关的反量化开销在论文提高了精度的累加过程下得到了很大程度的缓解,这是实现精确 FP8 通用矩阵乘法 (General Matrix Multiplication, GEMM) 的关键方面
    • 为了进一步减少 MoE 训练中的内存和通信开销,论文以 FP8 格式缓存和分发激活,同时以 BF16 格式存储低精度的优化器状态
    • 论文在两个与 DeepSeek-V2-Lite 和 DeepSeek-V2 规模相似的模型上验证了所提出的 FP8 混合精度框架,训练了大约 1T 个 Token(更多细节见附录 B.1)
  • 与 BF16 基线相比,论文的 FP8 训练模型的相对损失误差始终低于 0.25%,这一水平完全在训练随机性的可接受范围内
Mixed Precision Framework
  • 基于低精度训练中广泛采用的技术 (2019; 2017),论文提出了一个用于 FP8 训练的混合精度框架
  • 在此框架中,大多数计算密集型操作以 FP8 精度进行,而一些关键操作则策略性地保持其原始数据格式,以平衡训练效率和数值稳定性
  • 整体框架如图 6 所示
    • 首先,为了加速模型训练,大多数核心计算内核,即 GEMM 操作,都以 FP8 精度实现
    • 这些 GEMM 操作接受 FP8 张量作为输入,并产生 BF16 或 FP32 的输出。如图 6 所示,与线性算子 (Linear operator) 相关的所有三个 GEMM,即 Fprop(前向传播)、Dgrad(激活反向传播)和 Wgrad(权重反向传播),都在 FP8 中执行
    • 该设计理论上比原始的 BF16 方法提高一倍的计算速度
    • 此外,FP8 的 Wgrad GEMM 允许激活以 FP8 格式存储,用于反向传播。这显著减少了内存消耗
  • 尽管 FP8 格式具有效率优势,但某些算子由于其对低精度计算的敏感性,仍然需要更高的精度
    • 此外,一些低成本算子也可以使用更高的精度,而对整体训练成本的开销可以忽略不计
    • 因此,经过仔细研究,论文为以下组件保留了原始精度(例如 BF16 或 FP32):嵌入模块、输出头、MoE 门控模块、归一化算子和注意力算子
    • 这些有针对性的高精度保留确保了 DeepSeek-V3 的训练动态稳定性
    • 为了进一步保证数值稳定性,论文以更高的精度存储主权重 (master weights)、权重梯度和优化器状态
    • 虽然这些高精度组件会产生一些内存开销,但它们的影响可以通过在论文的分布式训练系统中跨多个 DP 排名进行高效分片来最小化
Improved Precision from Quantization and Multiplication
  • 基于论文的混合精度 FP8 框架,论文引入了若干策略来增强低精度训练的准确性,重点关注量化方法和乘法过程
Fine-Grained Quantization
  • 在低精度训练框架中,由于 FP8 格式的有限动态范围(受限于其减少的指数位),溢出和下溢是常见的挑战
    • 作为标准实践,通过将输入张量的最大绝对值缩放到 FP8 格式的最大可表示值来将输入分布对齐到 FP8 格式的可表示范围 (2017)
  • 这种方法使得低精度训练对激活异常值高度敏感,这会严重降低量化精度
  • 为了解决这个问题,论文提出了一种细粒度量化方法,在更细粒度的级别上应用缩放
  • 如图 7 (a) 所示
    • (1) 对于激活,论文在 1x128 的 tile 基础上(即每个 Token 每 128 个通道)对元素进行分组和缩放;
    • (2) 对于权重,论文在 128x128 的块基础上(即每 128 个输入通道每 128 个输出通道)对元素进行分组和缩放
  • 这种方法通过根据更小的元素组调整缩放比例,确保量化过程能更好地适应异常值
  • 在附录 B.2 中,论文进一步讨论了当论文以与权重量化相同的方式对激活进行块级分组和缩放时出现的训练不稳定性
  • 论文方法中的一个关键修改是引入了沿 GEMM 操作内部维度 (inner dimension) 的每组缩放因子 (per-group scaling factors)
    • 此功能在标准的 FP8 GEMM 中并不直接支持
    • 但结合论文精确的 FP32 累加策略,它可以被高效实现
  • 值得注意的是,论文的细粒度量化策略与微缩放格式 (microscaling formats) 的思想高度一致 (2023a),而 NVIDIA 下一代 GPU(Blackwell 系列)的 Tensor Cores 已宣布支持具有更小量化粒度的微缩放格式 (2022b)
    • 作者希望论文的设计能为未来的工作提供参考,以跟上最新的 GPU 架构
Increasing Accumulation Precision
  • 低精度 GEMM 操作经常遭受下溢问题,其精度在很大程度上依赖于高精度累加,这通常以 FP32 精度执行 (2019; 2017)
    • 但论文观察到在 NVIDIA H800 GPU 上,FP8 GEMM 的累加精度仅限于保留大约 14 位,这显著低于 FP32 的累加精度
    • 当内部维度 K 很大时,这个问题会更加明显 (2023),这在大规模模型训练中增加批大小和模型宽度时是典型情况
    • 以两个随机矩阵的 GEMM 操作为例,其中 \(\textit{K}=4096\),在论文的初步测试中,Tensor Cores 中有限的累加精度导致最大相对误差接近 \(2%\)
  • 尽管存在这些问题,有限的累加精度仍然是一些 FP8 框架中的默认选项 (2022c),严重限制了训练精度
  • 为了解决这个问题,论文采用了提升到 CUDA Cores 以获得更高精度的策略 (2023)
    • 该过程如图 7 (b) 所示
    • 在 Tensor Cores 上执行 MMA(矩阵乘积累加)期间,中间结果使用有限的位宽进行累加
    • 一旦达到 \(N_c\) 个元素的间隔,这些部分结果将被复制到 CUDA Cores 上的 FP32 寄存器中,在那里执行全精度的 FP32 累加
    • 如前所述,论文的细粒度量化沿内部维度 K 应用每组缩放因子
    • 这些缩放因子可以作为反量化过程在 CUDA Cores 上高效地相乘,而只需最小的额外计算成本
  • 值得注意的是,这种修改降低了单个 warpgroup 的 WGMMA (Warpgroup-level Matrix Multiply-Accumulate) 指令发出率
    • 但在 H800 架构上,通常可以同时维持两个 WGMMA:当一个 warpgroup 执行提升操作时,另一个能够执行 MMA 操作
    • 这种设计使得两个操作能够重叠,保持了 Tensor Cores 的高利用率
    • 根据论文的实验,设置 \(N_c\) = 128 个元素,相当于 4 个 WGMMAs,是能够显著提高精度而不引入大量开销的最小累加间隔
Mantissa over Exponents(尾数优先于指数)
  • 与先前工作采用的混合 FP8 格式 (2022c; 2023b;) 相比,后者在 Fprop 中使用 E4M3(4 位指数和 3 位尾数),在 Dgrad 和 Wgrad 中使用 E5M2(5 位指数和 2 位尾数),论文在所有张量上采用 E4M3 格式以获得更高的精度
  • 论文将此方法的可行性归功于论文的细粒度量化策略,即 tile 和块级缩放
  • 通过在更小的元素组上操作,论文的方法有效地在这些分组元素之间共享指数位,从而减轻了有限动态范围的影响
Online Quantization
  • 张量级量化框架 (2022c; 2023b) 中采用了延迟量化 (delayed quantization),它维护先前迭代的最大绝对值历史记录以推断当前值
  • 为了确保准确的缩放因子并简化框架,论文为每个 1x128 激活 tile 或 128x128 权重块在线计算最大绝对值
  • 基于此,论文推导出缩放因子,然后将激活或权重在线量化为 FP8 格式
Low-Precision Storage and Communication
  • 结合论文的 FP8 训练框架,论文通过将缓存的激活和优化器状态压缩成更低精度的格式,进一步减少了内存消耗和通信开销
  • 低精度优化器状态 (Low-Precision Optimizer States)
    • 论文采用 BF16 数据格式而不是 FP32 来跟踪 AdamW (2017) 优化器中的一阶矩和二阶矩,而不会引起可观察到的性能下降
    • 然而,主权重(由优化器存储)和梯度(用于批大小累加)仍然保留在 FP32 中,以确保整个训练过程中的数值稳定性
  • 低精度激活 (Low-Precision Activation)
    • 如图 6 所示,Wgrad 操作以 FP8 精度执行
    • 为了减少内存消耗,一个自然的选择是以 FP8 格式缓存激活,用于线性算子的反向传播。然而,论文对几个算子进行了特殊考虑,以实现低成本的高精度训练:
      • (1) 注意力算子后的线性算子的输入
        • 这些激活也用于注意力算子的反向传播,这使得它对精度敏感
        • 论文为这些激活专门采用了一种定制的 E5M6 数据格式
        • 此外,这些激活在反向传播中将从 1x128 量化 tile 转换为 128x1 tile
        • 为了避免引入额外的量化误差,所有的缩放因子都是 2 的整数幂舍入缩放
      • (2) MoE 中 SwiGLU 算子的输入
        • 为了进一步降低内存成本,论文缓存 SwiGLU 算子的输入,并在反向传播中重新计算其输出
        • 这些激活也使用论文的细粒度量化方法以 FP8 格式存储,在内存效率和计算精度之间取得了平衡
  • 低精度通信 (Low-Precision Communication)
    • 通信带宽是 MoE 模型训练的关键瓶颈
    • 为了缓解这一挑战,论文在 MoE 上投影之前将激活量化为 FP8,然后应用分发组件,这与 MoE 上投影中的 FP8 Fprop 兼容
      • 与注意力算子后的线性算子的输入类似,此激活的缩放因子是 2 的整数幂
      • 类似的策略应用于 MoE 下投影之前的激活梯度
    • 对于前向和后向的合并组件,论文将它们保留在 BF16 中,以在训练管道的关键部分保持训练精度

Inference and Deployment

  • 论文将 DeepSeek-V3 部署在 H800 集群上,其中每个节点内的 GPU 使用 NVLink 互连,集群中的所有 GPU 通过 IB 完全互连
  • 为了同时确保在线服务的服务水平目标 (Service-Level Objective, SLO) 和高吞吐量,论文采用了以下将预填充 (prefilling) 和解码 (decoding) 阶段分离的部署策略
Prefilling
  • 预填充阶段的最小部署单元由 4 个节点(32 个 GPU)组成
  • 注意力部分采用 4 路张量并行 (Tensor Parallelism, TP4) 结合序列并行 (Sequence Parallelism, SP),以及 8 路数据并行 (Data Parallelism, DP8)
  • 其较小的 TP 规模(4)限制了 TP 通信的开销
  • 对于 MoE 部分,论文使用 32 路专家并行 (Expert Parallelism, EP32),这确保了每个专家处理足够大的批大小,从而提高了计算效率
  • 对于 MoE All-to-All 通信,论文使用与训练相同的方法:
    • 首先通过 IB 跨节点传输 Token ,然后通过 NVLink 在节点内 GPU 之间转发
    • 特别地,论文对浅层的稠密 MLP 使用 1 路张量并行以节省 TP 通信
  • 为了实现 MoE 部分中不同专家之间的负载平衡,论文需要确保每个 GPU 处理大致相同数量的 Token
  • 为此,论文引入了冗余专家 (redundant experts) 的部署策略,该策略复制高负载专家并冗余部署它们
    • 高负载专家是基于在线部署期间收集的统计信息检测出来的,并定期调整(例如,每 10 分钟)
    • 在确定了冗余专家集合后,论文根据观察到的负载,仔细地在节点内的 GPU 之间重新安排专家,力求在不增加跨节点 All-to-All 通信开销的情况下,尽可能平衡 GPU 间的负载
    • 对于 DeepSeek-V3 的部署,论文为预填充阶段设置了 32 个冗余专家
    • 对于每个 GPU,除了它原本承载的 8 个专家外,它还将承载一个额外的冗余专家
  • 在预填充阶段,为了提高吞吐量并隐藏 All-to-All 和 TP 通信的开销,论文同时处理两个计算工作量相似的微批次,将一个微批次的注意力和 MoE 与另一个微批次的分发和合并重叠起来
  • 最后,作者正在探索一种专家的动态冗余 (dynamic redundancy) 策略,其中每个 GPU 承载更多专家(例如,16 个专家),但在每次推理步骤中只激活 9 个
    • 在每层的 All-to-All 操作开始之前,论文实时计算全局最优的路由方案
    • 鉴于预填充阶段涉及大量计算,计算此路由方案的开销几乎可以忽略不计
Decoding
  • 在解码期间,论文将共享专家视为路由专家
    • 从这个角度来看,每个 Token 将在路由期间选择 9 个专家,其中共享专家被视为一个总是被选中的高负载专家
  • 解码阶段的最小部署单元由 40 个节点(320 个 GPU)组成
    • 注意力部分采用 TP4 结合 SP,以及 DP80,而 MoE 部分使用 EP320
    • 对于 MoE 部分,每个 GPU 仅承载一个专家,其中 64 个 GPU 负责承载冗余专家和共享专家
  • 分发和合并部分的 All-to-All 通信通过 IB 上的直接点对点传输进行,以实现低延迟
    • 论文还利用 IBSDA (2022a) 技术进一步最小化延迟并提高通信效率
  • 与预填充类似,论文基于在线服务的统计专家负载,以一定的间隔定期确定冗余专家集合
    • 但论文不需要重新安排专家,因为每个 GPU 只承载一个专家
  • 论文也在探索用于解码的动态冗余策略。然而,这需要更仔细地优化计算全局最优路由方案的算法以及与分发内核的融合以减少开销
  • 为了提高吞吐量并隐藏 All-to-All 通信的开销,论文也在探索在解码阶段同时处理两个计算工作量相似的微批次
    • 与预填充不同,注意力在解码阶段消耗的时间比例更大
    • 因此,论文将一个微批次的注意力与另一个微批次的(分发+MoE+合并)重叠起来
    • 在解码阶段,每个专家的批大小相对较小(通常在 256 个 Token 以内),瓶颈是内存访问而非计算
    • 由于 MoE 部分只需要加载一个专家的参数,内存访问开销很小,因此使用较少的 SMs 不会显著影响整体性能
    • 因此,为了避免影响注意力部分的计算速度,我们可以只分配一小部分 SMs 给(分发+MoE+合并)

Suggestions on Hardware Design

  • 基于论文 All-to-All 通信和 FP8 训练方案的实现,论文向 AI 硬件供应商提出以下芯片设计建议
Communication Hardware
  • 在 DeepSeek-V3 中,论文实现了计算和通信之间的重叠 ,以在计算期间隐藏通信延迟
    • 与串行计算和通信相比,这显著降低了对通信带宽的依赖
  • 但当前的通信实现依赖于昂贵的 SMs(例如,论文分配了 H800 GPU 中可用的 132 个 SMs 中的 20 个用于此目的),这将限制计算吞吐量
    • 而且使用 SMs 进行通信会导致显著的效率低下,因为 Tensor Cores 完全未被充分利用
  • 目前,SMs 主要为 All-to-All 通信执行以下任务:
    • 在 IB (InfiniBand) 和 NVLink 域之间转发数据 ,同时聚合来自单个 GPU、目的地为同一节点内多个 GPU 的 IB 流量
    • 在 RDMA 缓冲区(已注册的 GPU 内存区域)和输入/输出缓冲区之间传输数据
    • 执行归约操作以进行 All-to-All 合并
    • 在跨 IB 和 NVLink 域的分块数据传输到多个专家期间,管理细粒度的内存布局
  • 论文期望未来的供应商能够开发出将这些通信任务从宝贵的计算单元 SM 上卸载的硬件,作为 GPU 协处理器或类似 NVIDIA SHARP (2016) 的网络协处理器
    • 此外,为了降低应用程序编程的复杂性,作者希望这种硬件能从计算单元的角度统一 IB(横向扩展)和 NVLink(纵向扩展)网络
    • 通过这种统一的接口,计算单元可以基于简单的原语提交通信请求,轻松地在整个 IB-NVLink 统一域中完成诸如读、写、多播和归约等操作
Compute Hardware
  • Tensor Cores 中更高的 FP8 GEMM 累加精度 (Higher FP8 GEMM Accumulation Precision in Tensor Cores)
    • 在 NVIDIA Hopper 架构当前的 Tensor Core 实现中,FP8 GEMM 受到有限累加精度的困扰
    • 在基于最大指数通过右移对齐 32 个尾数乘积后,Tensor Core 仅使用每个尾数乘积的最高 14 位进行加法,并截断超出此范围的位(加法结果累加到寄存器中也采用 14 位精度)
    • 论文的实现通过将 128 次 FP8×FP8 乘法的加法结果累加到 CUDA core 中具有 FP32 精度的寄存器中,部分缓解了这一限制
    • 尽管这有助于实现成功的 FP8 训练,但这仅仅是由于 Hopper 架构在 FP8 GEMM 累加精度方面的硬件缺陷而做出的妥协
    • 未来的芯片需要采用更高的精度
  • 支持 tile 和块级量化 (Support for Tile- and Block-Wise Quantization)
    • 当前的 GPU 仅支持每张量 (per-tensor) 量化,缺乏对论文 tile 和块级量化等细粒度量化的原生支持
    • 在当前实现中,当达到 \(N_{C}\) 间隔时,部分结果将从 Tensor Cores 复制到 CUDA cores,乘以缩放因子,并添加到 CUDA cores 上的 FP32 寄存器中
    • 尽管结合论文精确的 FP32 累加策略,反量化开销得到了显著缓解,但 Tensor Cores 和 CUDA cores 之间频繁的数据移动仍然限制了计算效率
    • 论文建议未来的芯片通过使 Tensor Cores 能够接收缩放因子并实现具有组缩放的 MMA 来支持细粒度量化
    • 通过这种方式,整个部分和累加和反量化可以直接在 Tensor Cores 内部完成,直到产生最终结果,从而避免频繁的数据移动
  • 支持在线量化 (Support for Online Quantization)
    • 尽管论文的研究证明了在线量化的有效性,但当前的实现难以有效支持它
    • 在现有流程中,论文需要从 HBM(高带宽内存)中读取 128 个 BF16 激活值(先前计算的输出)进行量化,然后量化后的 FP8 值写回 HBM,只是为了再次读取用于 MMA
    • 为了解决这种低效率问题,论文建议未来的芯片将 FP8 转换和 TMA(Tensor Memory Accelerator)访问融合到单个融合操作中,这样量化可以在激活从全局内存传输到共享内存的过程中完成,避免频繁的内存读写
    • 论文还建议支持 warp 级的转换指令以加速,这进一步促进了层归一化和 FP8 转换的更好融合
      • 或者,可以采用近内存计算方法,将计算逻辑放置在 HBM 附近
    • 在这种情况下,BF16 元素在从 HBM 读入 GPU 时可以直接转换为 FP8,将片外内存访问减少大约 50%
  • 支持转置 GEMM 操作 (Support for Transposed GEMM Operations)
    • 当前的架构使得将矩阵转置与 GEMM 操作融合变得很麻烦
    • 在论文的工作流程中,前向传播期间的激活被量化为 1x128 的 FP8 tile 并存储
    • 在后向传播期间,矩阵需要被读出、反量化、转置、重新量化为 128x1 tile ,并存储在 HBM 中
    • 为了减少内存操作,论文建议未来的芯片能够在 MMA 操作之前直接从共享内存中对矩阵进行转置读取,以支持训练和推理中所需的那些精度
    • 结合 FP8 格式转换和 TMA 访问的融合,这一增强将显著简化量化工作流程

Pre-Training

Data Construction

  • 与 DeepSeek-V2 相比,论文通过提高数学和编程样本的比例来优化预训练语料库,同时将多语言覆盖范围扩展到英语和中文之外
  • 论文的数据处理流程经过改进,在保持语料库多样性的同时最大限度地减少了冗余
  • 受 (2024) 的启发,论文实施了文档打包方法(Document Packing Method)以保证数据完整性,但在训练期间并未引入跨样本注意力掩码
  • 最终,DeepSeek-V3 的训练语料库包含 14.8T 个高质量且多样化的 Token(使用论文的分词器)
  • 在 DeepSeekCoder-V2 (2024) 的训练过程中,论文观察到 Fill-in-Middle (FIM) 策略在使模型能够根据上下文线索准确预测中间文本的同时,并不会损害其下一个 Token 预测能力
    • 与 DeepSeekCoder-V2 保持一致,论文也在 DeepSeek-V3 的预训练中纳入了 FIM 策略
    • 具体来说,论文采用 Prefix-Suffix-Middle (PSM, Prefix, Suffix, Middle) 框架来结构化数据,如下所示:
      $$ \text{<|fim_begin|>} f_{\text{pre} } \text{<|fim_hole|>} f_{\text{suff} } \text{<|fim_end|>} f_{\text{middle} } \text{<|eos_token|>} $$
    • 该结构在文档级别应用,作为预打包过程的一部分
    • FIM 策略的应用率为 0.1,与 PSM 框架保持一致
    • 注:Fill-in-Middle(FIM,中间填充)是大语言模型的一种训练目标,核心是让模型根据上下文的 “前缀” 和 “后缀” 信息,预测并补全中间缺失的内容;这种设计旨在增强模型对文本全局逻辑的理解能力,尤其适用于需要双向参考上下文的场景
  • DeepSeek-V3 的分词器采用字节级 BPE (1999),并扩展了 128K Token 的词汇表
    • 论文对分词器的预分词器和训练数据进行了修改,以优化多语言压缩效率
    • 与 DeepSeek-V2 相比,新的预分词器引入了结合标点符号和换行符的 Token
      • 然而,当模型处理没有终止换行符的多行提示(特别是少样本评估提示)时,这种技巧可能会引入 Token 边界偏差 (2023)
      • 为了解决这个问题,论文在训练期间随机拆分一定比例的此类组合 Token ,使模型接触到更广泛的特例,从而减轻这种偏差

Hyper-Parameters

  • 模型超参数 (Model Hyper-Parameters)
    • 论文将 Transformer 层数设置为 61,隐藏维度设置为 7168
    • 所有可学习参数均使用标准差为 0.006 进行随机初始化
    • 在 MLA 中,论文将注意力头数 \(n_{h}\) 设置为 128,每个头的维度 \(d_{h}\) 设置为 128
    • KV 压缩维度 \(d_{c}\) 设置为 512, Query 压缩维度 \(d^{\prime}_{c}\) 设置为 1536
    • 对于解耦的 Query 和 Key ,论文将每个头的维度 \(d^{R}_{h}\) 设置为 64
    • 论文将除前三层之外的所有 FFN 替换为 MoE 层
    • 每个 MoE 层包含 1 个共享专家和 256 个路由专家,其中每个专家的中间隐藏维度为 2048
    • 在路由专家中,每个 Token 将激活 8 个专家,并且确保每个 Token 最多被发送到 4 个节点
    • 多 Token 预测深度 \(D\) 设置为 1 ,即除了精确的下一个 Token 外,每个 Token 还会预测一个额外的 Token
    • 与 DeepSeek-V2 一样,DeepSeek-V3 也在压缩潜在向量之后采用了额外的 RMSNorm 层,并在宽度瓶颈处乘以额外的缩放因子
    • 总结:在此配置下,DeepSeek-V3 总共包含 671B 参数,其中每个 Token 激活 37B 参数
  • 训练超参数 (Training Hyper-Parameters)
    • 采用 AdamW 优化器 (2017),超参数设置为 \(\beta_{1}=0.9\),\(\beta_{2}=0.95\),权重衰减 = 0.1
    • 在预训练期间,论文将最大序列长度设置为 4K,并在 14.8T Token 上对 DeepSeek-V3 进行预训练
    • 学习率调度方面
      • 首先,在前 2K 步期间将其从 \(0\) 线性增加到 \(2.2\times 10^{-4}\)
      • 然后,论文保持 \(2.2\times 10^{-4}\) 的恒定学习率,直到模型消耗完 10T 训练 Token
      • 随后,论文在 4.3T Token 内,按照余弦衰减曲线将学习率逐渐衰减到 \(2.2\times 10^{-5}\)
      • 在最后 500B Token 的训练期间,论文在前 333B Token 中保持 \(2.2\times 10^{-5}\) 的恒定学习率,并在剩余的 167B Token 中切换到另一个恒定学习率 \(7.3\times 10^{-6}\)
    • 梯度裁剪范数设置为 1.0
    • 论文采用批量大小调度策略(batch size scheduling strategy)
      • 在前 469B Token 的训练中,批量大小从 3072 逐渐增加到 15360,然后在剩余训练中保持 15360
    • 论文利用流水线并行将模型的不同层部署在不同的 GPU 上,对于每一层,路由专家将均匀部署在属于 8 个节点的 64 个 GPU 上
      • 问题:这里如何理解?
    • 至于节点限制路由 ,每个 Token 最多被发送到 4 个节点(即 \(M=4\))
    • 对于无辅助损失的负载平衡,论文在前 14.3T Token 中将偏置更新速度 \(\gamma\) 设置为 0.001,在剩余的 500B Token 中设置为 0.0
    • 对于平衡损失,论文将 \(\alpha\) 设置为 0.0001,仅用于避免任何单个序列内的极端不平衡
    • MTP 损失权重 \(\lambda\) 在前 10T Token 中设置为 0.3,在剩余的 4.8T Token 中设置为 0.1

Long Context Extension

  • 论文采用与 DeepSeek-V2 (2024) 类似的方法来使 DeepSeek-V3 具备长上下文能力
  • 在预训练阶段之后,论文应用 YaRN (2023) 进行上下文扩展,并执行两个额外的训练阶段,每个阶段包含 1000 步,以逐步将上下文窗口从 4K 扩展到 32K,然后再扩展到 128K
  • YaRN 配置与 DeepSeek-V2 中使用的配置一致,仅应用于解耦的共享 Key \(\mathbf{k}_{t}^{R}\)
  • 两个阶段的超参数保持相同
    • 尺度 \(s=40\),\(\alpha=1\),\(\beta=32\),缩放因子 \(\sqrt{t}=0.1\ln s+1\)
    • 在第一阶段,序列长度设置为 32K,批量大小为 1920
    • 在第二阶段,序列长度增加到 128K,批量大小减少到 480
  • 两个阶段的学习率均设置为 \(7.3\times 10^{-6}\),与预训练阶段的最终学习率相匹配
  • 通过这种两阶段的扩展训练,DeepSeek-V3 能够处理长达 128K 的输入,同时保持强大的性能
  • 图 8 显示,经过监督微调后,DeepSeek-V3 在 “Needle In A Haystack” (NIAH) 测试中取得了显著性能,在上下文窗口长度高达 128K 的范围内表现出一致的鲁棒性

Evaluations

Evaluation Benchmarks
  • DeepSeek-V3 的基础模型是在英语和中文占多数的多语言语料库上进行预训练的,因此论文在一系列主要以英语和中文为主的基准测试上评估其性能,同时也包括一个多语言基准测试
  • 论文的评估基于集成在论文 HAI-LLM 框架中的内部评估框架
  • 所考虑的基准测试分类并列出如下,其中带下划线的基准测试为中文,带双下划线的基准测试为多语言:
    • 多学科多项选择题 (Multi-subject multiple-choice) 数据集包括 MMLU (2020)、MMLU-Redux (2024)、MMLU-Pro (2024)、MMMLU (2024)、C-Eval (2023) 和 CMMLU (2023)
    • 语言理解和推理 (Language understanding and reasoning) 数据集包括 HellaSwag (2019)、PIQA (2020)、ARC (2018) 和 BigBench Hard (BBH) (2022)
    • 闭卷问答 (Closed-book question answering) 数据集包括 TriviaQA (2017) 和 NaturalQuestions (2019)
    • 阅读理解 (Reading comprehension) 数据集包括 RACE (2017)、DROP (2019)、C3 (2019) 和 CMRC (2019)
    • 指代消解 (Reference disambiguation) 数据集包括 CLUEWSC (2020) 和 WinoGrande (2019)
    • 语言建模 (Language modeling) 数据集包括 Pile (2020)
    • 中文理解与文化 (Chinese understanding and culture) 数据集包括 CCPM (2021)
    • 数学 (Math) 数据集包括 GSM8K (2021)、MATH (2021)、MGSM (2023) 和 CMath (2023)
    • 代码 (Code) 数据集包括 HumanEval (2021)、LiveCodeBench-Base (0801-1101) (2024)、MBPP (2021) 和 CRUXEval (2024)
    • 标准化考试 (Standardized exams) 包括 AGIEval (2023)。注意,AGIEval 包含英语和中文子集
  • 遵循论文之前的工作 (2024, 2024)
    • 对包括 HellaSwag、PIQA、WinoGrande、RACE-Middle、RACE-High、MMLU、MMLU-Redux、MMLU-Pro、MMMLU、ARC-Easy、ARC-Challenge、C-Eval、CMMLU、C3 和 CCPM 在内的数据集采用基于困惑度的评估;
    • 对 TriviaQA、NaturalQuestions、DROP、MATH、GSM8K、MGSM、HumanEval、MBPP、LiveCodeBench-Base、CRUXEval、BBH、AGIEval、CLUEWSC、CMRC 和 CMath 采用基于生成的评估
    • 此外,论文对 Pile-test 执行基于语言建模的评估,并使用 Bits-Per-Byte (BPB) 作为度量标准,以保证使用不同分词器的模型之间的公平比较
      • 理解:Pile-test 是大语言模型评估中常用的标准测试集,源于更庞大的通用文本数据集 The Pile
        • The Pile 由 EleutherAI 构建的大规模开源文本数据集,总规模约 800GB,涵盖 22 个不同来源的文本类型(如学术论文、网页文本、书籍、新闻、代码等),旨在为模型提供多样化、高质量的训练与评估数据,避免单一数据分布导致的 “过拟合评估”
        • Pile-test 是 The Pile 的测试子集,与训练集(Pile-train)严格划分,用于客观衡量模型在通用语言理解与生成任务上的泛化能力,由于其覆盖场景广,模型在 Pile-test 上的表现能更真实反映 “通用能力”,而非仅适配某类特定数据
      • 问题:这里 BPB 是什么含义?
      • 回答:Bits-Per-Byte(字节每比特,简称 BPB)是一种用于消除 “分词器差异” 影响、实现不同模型公平比较的度量标准,其核心是 “归一化模型的预测成本
        • 比如,计算模型的困惑度时,如果按照 Token 计算,可能是不公平的,不同模型的 Token 数量不一样,但是如果按照 BPB 计算,则能保证与 Tokenizer 无关
Evaluation Results
  • 在表 3 中,论文将 DeepSeek-V3 的基础模型与最先进的开源基础模型进行了比较,包括 DeepSeek-V2-Base (2024)(论文之前的发布)、Qwen2.5 72B Base (2024) 和 LLaMA-3.1 405B Base (2024)
  • 论文在内部评估框架下评估所有这些模型,并确保它们共享相同的评估设置
  • 请注意,由于过去几个月论文评估框架的变化,DeepSeek-V2-Base 的性能与论文之前报告的结果略有不同
  • 总体而言,DeepSeek-V3-Base 全面超越了 DeepSeek-V2-Base 和 Qwen2.5 72B Base,并在大多数基准测试中超过了 LLaMA-3.1 405B Base,基本上成为最强的开源模型
  • 从更详细的角度看,论文将 DeepSeek-V3-Base 与其他开源基础模型进行了单独比较
    • (1) 与 DeepSeek-V2-Base 相比,由于论文模型架构的改进、模型规模和训练 Token 的扩大以及数据质量的提高,DeepSeek-V3-Base 如预期般取得了显著更好的性能
    • (2) 与最先进的中文开源模型 Qwen2.5 72B Base 相比,DeepSeek-V3-Base 仅以一半的激活参数量,也在英语、多语言、代码和数学基准测试上展现出了显著优势,尤其是在中文基准测试上,除了中文多学科多项选择题任务 CMMLU 外,DeepSeek-V3-Base 也显示出比 Qwen2.5 72B 更好的性能
    • (3) 与最大的开源模型 LLaMA-3.1 405B Base(其激活参数量是 DeepSeek-V3-Base 的 11 倍)相比,DeepSeek-V3-Base 在多语言、代码和数学基准测试上也表现出更优的性能
    • 对于英语和中文语言基准测试,DeepSeek-V3-Base 显示出竞争性或更好的性能,尤其在 BBH、MMLU 系列、DROP、C-Eval、CMMLU 和 CCPM 上表现突出
  • 得益于论文高效的架构和全面的工程优化,DeepSeek-V3 实现了极高的训练效率
    • 在论文的训练框架和基础设施下,训练 DeepSeek-V3 每万亿 Token 仅需 180K H800 GPU 小时,这比训练 72B 或 405B 的稠密模型要便宜得多

Discussion

Ablation Studies for Multi-token Prediction
  • 在表 4 中,论文展示了 MTP 策略的消融结果
  • 具体来说,论文在两个不同规模的基线模型上验证了 MTP 策略
    • 在小规模上,论文在 1.33T Token 上训练了一个包含 15.7B 总参数的基线 MoE 模型
    • 在大规模上,论文在 540B Token 上训练了一个包含 228.7B 总参数的基线 MoE 模型
  • 在此基础上,保持训练数据和其他架构不变,论文为它们附加了一个深度为 1 的 MTP 模块,并训练了两个采用 MTP 策略的模型进行比较
  • 注意,在推理期间,论文直接丢弃 MTP 模块,因此比较模型的推理成本完全相同
  • 从表中我们可以观察到,MTP 策略在大多数评估基准上持续提升了模型性能
Ablation Studies for the Auxiliary-Loss-Free Balancing Strategy
  • 在表 5 中,论文展示了无辅助损失平衡策略的消融结果
  • 论文在两个不同规模的基线模型上验证了该策略
    • 在小规模上,论文在 1.33T Token 上训练了一个包含 15.7B 总参数的基线 MoE 模型
    • 在大规模上,论文在 578B Token 上训练了一个包含 228.7B 总参数的基线 MoE 模型
  • 这两个基线模型都纯粹使用辅助损失来鼓励负载平衡,并使用 sigmoid 门控函数和 top-K 亲和度归一化
    • 它们控制辅助损失强度的超参数分别与 DeepSeek-V2-Lite 和 DeepSeek-V2 相同
  • 在这两个基线模型的基础上,保持训练数据和其他架构不变,论文移除了所有辅助损失,并引入了无辅助损失平衡策略进行比较
  • 从表中我们可以观察到,与纯辅助损失方法相比,无辅助损失策略在大多数评估基准上持续实现了更好的模型性能
Batch-Wise Load Balance VS. Sequence-Wise Load Balance
  • 无辅助损失平衡与序列级辅助损失之间的关键区别在于它们的平衡范围:批次级与序列级
    • 与序列级辅助损失相比,批次级平衡施加了更灵活的约束,因为它不强制每个序列在域内平衡
    • 这种灵活性允许专家更好地专精于不同领域
  • 为了验证这一点,论文记录并分析了基于辅助损失的 16B 基线模型和无辅助损失的 16B 模型在 Pile 测试集上不同领域的专家负载
  • 如图 9 所示,论文观察到无辅助损失模型如预期那样表现出更大的专家专精模式(注:也就是说有辅助损失的模型得到的专家负载均衡结果更加平均)
  • 为了进一步研究这种灵活性与模型性能优势之间的相关性,论文额外设计并验证了一种批次级辅助损失,该损失鼓励每个训练批次而不是每个序列上的负载平衡
  • 实验结果表明,当达到相似水平的批次级负载平衡时,批次级辅助损失也可以实现与无辅助损失方法相似的模型性能
  • 具体来说,在论文使用 1B MoE 模型的实验中,验证损失分别为:2.258(使用序列级辅助损失)、2.253(使用无辅助损失方法)和 2.253(使用批次级辅助损失)
  • 论文在 3B MoE 模型上也观察到了类似的结果:使用序列级辅助损失的模型验证损失为 2.085,而使用无辅助损失方法或批次级辅助损失的模型验证损失均为 2.080
  • 此外,尽管批次级负载平衡方法显示出持续的性能优势,但它们在效率方面也面临两个潜在的挑战:
    • (1) 某些序列内或小批次内的负载不平衡
    • (2) 推理期间由领域偏移引起的负载不平衡
  • 第一个挑战通过论文使用大规模专家并行和数据并行的训练框架自然得到解决,这保证了每个微批次的规模足够大
  • 对于第二个挑战,论文也设计并实现了一个具有冗余专家部署的高效推理框架,如第 3.4 节所述,以克服它

Post-Training

Supervised Fine-Tuning

  • 论文精心策划了论文的指令微调数据集,包含了涵盖多个领域的 150 万条实例,每个领域都采用了针对其特定需求而定制的不同数据创建方法
  • 推理数据 (Reasoning Data)
    • 对于推理相关的数据集,包括那些专注于数学、代码竞赛问题和逻辑谜题的,论文通过利用内部的 DeepSeek-R1 模型来生成数据
      • 问题:DeepSeek-R1 的一些流程依赖着 DeepSeek-V3 添加一些 CoT 数据吧,两者之间目前从论文看起来是互相依赖的关系
    • 具体来说,虽然 R1 生成的数据表现出很高的准确性,但它存在一些问题,如过度思考、格式不佳和长度过长
    • 论文的目标是在 R1 生成的高精度推理数据和常规格式的清晰简洁的推理数据之间取得平衡
    • 为了建立论文的方法,论文首先为特定领域(例如代码、数学或通用推理)开发一个专家模型,该模型使用结合了 SFT 和 RL 的训练流程
      • 这个专家模型作为最终模型的数据生成器
    • 训练过程涉及为每个实例生成两种不同类型的 SFT 样本:
      • 第一种将问题与其原始回答配对,格式为 <问题, 原始回答>;
      • 第二种则结合了系统提示、问题以及 R1 的回答,格式为 <系统提示, 问题, R1 回答>
    • 系统提示经过精心设计,包含指导模型产生富含反思和验证机制的回答的指令
      • 在 RL 阶段,模型利用高温采样来生成融合了 R1 生成数据和原始数据模式的回答,即使在没有显式系统提示的情况下也是如此。经过数百个 RL 步骤后,中间的 RL 模型学会了融入 R1 的模式,从而战略性地提升了整体性能
    • 在完成 RL 训练阶段后,论文实施拒绝采样来为最终模型筛选高质量的 SFT 数据,其中专家模型被用作数据源
      • 这种方法确保了最终训练数据保留了 DeepSeek-R1 的优势,同时产生的回答简洁有效
  • 非推理数据 (Non-Reasoning Data)
    • 对于非推理数据,例如创意写作、角色扮演和简单问答,论文使用 DeepSeek-V2.5 来生成回答,并聘请人工标注员来验证数据的准确性和正确性
  • SFT 设置 (SFT Settings)
    • 使用 SFT 数据集对 DeepSeek-V3-Base 进行了两个 epoch 的微调
    • 使用了余弦衰减学习率调度
    • 学习率从 \(5 \times 10^{-6}\) 开始,逐渐降低到 \(1 \times 10^{-6}\)
    • 在训练期间,每个单独的序列由多个样本打包而成
      • 论文采用了样本掩码策略来确保这些样本保持隔离且相互不可见

Reinforcement Learning

Reward Model
  • 论文在 RL 过程中使用了基于规则的奖励模型 (Reward Model, RM) 和基于模型的 RM
  • 基于规则的 RM (Rule-Based RM)
    • 对于可以使用特定规则验证的问题,论文采用基于规则的奖励系统来确定反馈
      • 例如,某些数学问题具有确定性的结果,论文要求模型以指定的格式(例如,在一个框内)提供最终答案,从而允许论文应用规则来验证正确性
      • 类似地,对于 LeetCode 问题,我们可以利用编译器根据测试用例生成反馈
    • 通过在可能的情况下利用基于规则的验证,论文确保了更高水平的可靠性,因为这种方法能够抵抗操纵或利用(manipulation or exploitation)
  • 基于模型的 RM (Model-Based RM)
    • 对于具有自由形式标准答案的问题,论文依赖奖励模型来确定回答是否符合预期的标准答案
    • 相反,对于没有明确标准答案的问题,例如涉及创意写作的问题,奖励模型的任务是基于问题和相应的回答作为输入来提供反馈
    • 该奖励模型是从 DeepSeek-V3 SFT 检查点训练而来的
    • 为了增强其可靠性,论文构建了不仅提供最终奖励,还包含导致该奖励的思维链 (Chain-of-Thought) 的偏好数据
    • 这种方法有助于减轻特定任务中 Reward Hacking 的风险
GRPO (Group Relative Policy Optimization)
  • 与 DeepSeek-V2 (2024c) 类似,论文采用组相对策略优化 (Group Relative Policy Optimization, GRPO) (2024),它摒弃了通常与策略模型大小相同的评论家模型 (Critic Model),而是从组分数中估计基线
  • 具体来说,对于每个问题 \(q\),GRPO 从旧策略模型 \(\pi_{\theta_{old} }\) 中采样一组输出 \(\{o_{1}, o_{2}, \cdots, o_{G}\}\),然后通过最大化以下目标来优化策略模型 \(\pi_{\theta}\):
    $$
    \mathcal{J}_{GRPO}(\theta) = \mathbb{E} \left[ q \sim P(Q), \{o_{i}\}_{i=1}^{G} \sim \pi_{\theta_{old} }(O|q) \right] \frac{1}{G} \sum_{i=1}^{G} \left( \min \left( \frac{\pi_{\theta}(o_{i}|q)}{\pi_{\theta_{old} }(o_{i}|q)} A_{i}, \text{clip} \left( \frac{\pi_{\theta}(o_{i}|q)}{\pi_{\theta_{old} }(o_{i}|q)}, 1-\epsilon, 1+\epsilon \right) A_{i} \right) - \beta \mathbb{D}_{KL} \left( \pi_{\theta} || \pi_{ref} \right) \right), \\
    \mathbb{D}_{KL} \left( \pi_{\theta} || \pi_{ref} \right) = \frac{\pi_{ref}(o_{i}|q)}{\pi_{\theta}(o_{i}|q)} - \log \frac{\pi_{ref}(o_{i}|q)}{\pi_{\theta}(o_{i}|q)} - 1,
    $$
    • 其中 \(\epsilon\) 和 \(\beta\) 是超参数;\(\pi_{ref}\) 是参考模型;\(A_{i}\) 是优势 (Advantage),由每个组内输出对应的奖励 \(\{r_{1}, r_{2}, \ldots, r_{G}\}\) 推导得出:
      $$
      A_{i} = \frac{r_{i} - \text{mean}(\{r_{1}, r_{2}, \cdots, r_{G}\})}{\text{std}(\{r_{1}, r_{2}, \cdots, r_{G}\})}.
      $$
  • 论文在 RL 过程中融入了来自不同领域的提示,例如编码、数学、写作、角色扮演和问答
    • 这种方法不仅使模型更符合人类偏好,还提高了在基准测试上的性能,特别是在可用 SFT 数据有限的情况下

Evaluations

Evaluation Settings
  • 评估基准 (Evaluation Benchmarks)
    • 除了用于基础模型测试的基准之外,论文还在 IFEval (2023)、FRAMES (2024)、LongBench v2 (2024)、GPQA (2023)、SimpleQA (OpenAI, 2024c)、C-SimpleQA (2024)、SWE-Bench Verified (OpenAI, 2024d)、Aider、LiveCodeBench (2024)(2024年8月至11月的问题)、Codeforces、中国高中数学奥林匹克 (Chinese National High School Mathematics Olympiad, CNMO 2024) 和美国数学邀请赛 2024 (American Invitational Mathematics Examination 2024, AIME 2024) (MAA, 2024) 上进一步评估了指令模型
  • 对比基线 (Compared Baselines)
    • 论文对论文的聊天模型与几个强大的基线进行了全面评估,包括 DeepSeek-V2-0506、DeepSeek-V2.5-0905、Qwen2.5 72B Instruct、LLaMA-3.1 405B Instruct、Claude-Sonnet-3.5-1022 和 GPT-4o-0513。对于 DeepSeek-V2 模型系列,论文选择了最具代表性的变体进行比较
    • 对于闭源模型,通过它们各自的 API 进行评估
  • 详细评估配置 (Detailed Evaluation Configurations)
    • 对于包括 MMLU、DROP、GPQA 和 SimpleQA 在内的标准基准,论文采用了来自 simple-evals 框架的评估提示
      • 注:simple-evals 是一个轻量级的大语言模型评估框架,主要用于快速验证模型在特定任务上的基础能力,其Evaluation Prompts设计遵循简洁、直接的任务导向原则,通常针对具体任务类型构建标准化提示模板
    • 对于 MMLU-Redux,论文在零样本设置下使用了 Zero-Eval 提示格式 (Lin, 2024)
    • 对于其他数据集,论文遵循其原始的评估协议,使用数据集创建者提供的默认提示
    • 对于代码和数学基准,HumanEval-Mul 数据集总共包含了 8 种主流编程语言(Python、Java、C++、C#、JavaScript、TypeScript、PHP 和 Bash)
      • 使用 CoT 和非 CoT 方法来评估模型在 LiveCodeBench 上的性能,其数据收集自 2024 年 8 月至 11 月
      • Codeforces 数据集使用参赛者百分比来衡量
      • SWE-Bench verified 使用无代理框架 (Agentless Framework) (2024) 进行评估
      • 论文使用 “diff” 格式来评估与 Aider 相关的基准
    • 对于数学评估,AIME 和 CNMO 2024 在温度为 0.7 的情况下进行评估,结果取 16 次运行的平均值,而 MATH-500 则使用贪婪解码
    • 论文允许所有模型为每个基准输出最多 8192 个 Token
Standard Evaluation
  • 表 6 展示了评估结果,表明 DeepSeek-V3 是性能最好的开源模型
  • 此外,它与前沿的闭源模型(如 GPT-4o 和 Claude-3.5-Sonnet)相比也具有竞争力
  • 英文基准 (English Benchmarks)
    • MMLU 是一个广泛认可的基准,旨在评估大语言模型在不同知识领域和任务上的表现
      • DeepSeek-V3 展示了具有竞争力的性能,与顶级模型如 LLaMA-3.1-405B、GPT-4o 和 Claude-Sonnet 3.5 不相上下,同时显著优于 Qwen2.5 72B
      • DeepSeek-V3 在 MMLU-Pro(一个更具挑战性的教育知识基准)上表现出色,紧随 Claude-Sonnet 3.5 之后
      • 在 MMLU-Redux(一个带有修正标签的 MMLU 改进版本)上,DeepSeek-V3 超越了其同行
    • 在 GPQA-Diamond(一个博士级评估测试平台)上,DeepSeek-V3 取得了显著成果,仅次于 Claude 3.5 Sonnet,并以显著优势优于所有其他竞争对手
    • 在长上下文理解基准测试中,如 DROP、LongBench v2 和 FRAMES,DeepSeek-V3 继续展示其作为顶级模型的地位
      • DeepSeek-V3 在 DROP 的 3-shot 设置中取得了令人印象深刻的 91.6 F1 分数,超过了该类别中的所有其他模型
      • 在 FRAMES(一个需要在 100k Token 上下文中进行问答的基准测试)上,DeepSeek-V3 紧随 GPT-4o,同时以显著优势优于所有其他模型
        • 这证明了 DeepSeek-V3 在处理极长上下文任务方面的强大能力
      • DeepSeek-V3 的长上下文能力进一步通过其在 LongBench v2(一个在 DeepSeek V3 发布前几周才发布的数据集)上的最佳表现得到了验证
      • 在事实性知识基准 SimpleQA 上,DeepSeek-V3 落后于 GPT-4o 和 Claude-Sonnet,这主要归因于其设计重点和资源分配
      • DeepSeek-V3 分配了更多的训练 Token 来学习中文知识,导致在 C-SimpleQA 上表现卓越
      • 在指令遵循基准测试中,DeepSeek-V3 显著优于其前身 DeepSeek-V2 系列,突显了其理解和遵守用户定义格式约束能力的提升
  • 代码和数学基准 (Code and Math Benchmarks)
    • 编码对于大语言模型来说是一项具有挑战性且实用的任务,涵盖了以工程为重点的任务(如 SWE-Bench-Verified 和 Aider)以及算法任务(如 HumanEval 和 LiveCodeBench)
    • 在工程任务中,DeepSeek-V3 落后于 Claude-Sonnet-3.5-1022,但显著优于开源模型
      • 开源的 DeepSeek-V3 有望推动编码相关工程任务的进步
    • 通过提供对其强大功能的访问,DeepSeek-V3 可以推动软件工程和算法开发等领域的创新和改进,使开发人员和研究人员能够突破开源模型在编码任务中能力的界限
    • 在算法任务中,DeepSeek-V3 表现出卓越的性能,在 HumanEval-Mul 和 LiveCodeBench 等基准测试中优于所有基线
      • 这一成功归功于其先进的知识蒸馏技术,该技术有效地增强了其在算法任务中的代码生成和问题解决能力
    • 在数学基准测试中,DeepSeek-V3 展示了卓越的性能,显著超过了基线,并为非 o1 类模型设定了新的最先进水平
      • 具体来说,在 AIME、MATH-500 和 CNMO 2024 上,DeepSeek-V3 在绝对分数上比第二好的模型 Qwen2.5 72B 高出约 10%,这对于如此具有挑战性的基准测试来说是一个显著的差距
      • 这种卓越的能力突显了从 DeepSeek-R1 进行蒸馏技术的有效性,该技术已被证明对非 o1 类模型非常有益
  • 中文基准 (Chinese Benchmarks)
    • Qwen 和 DeepSeek 是两个对中文和英文都有强大支持的代表性模型系列
    • 在事实性基准 Chinese SimpleQA 上,DeepSeek-V3 超过了 Qwen2.5-72B 16.4 分,尽管 Qwen2.5 是在包含 18T Token (比 DeepSeek-V3 预训练的 14.8T Token 多 20%)的更大语料库上训练的
    • 在 C-Eval(一个代表性的中文教育知识评估基准)和 CLUEWSC(中文 Winograd 模式挑战赛)上,DeepSeek-V3 和 Qwen2.5-72B 表现出相似的水平,表明这两个模型都为具有挑战性的中文推理和教育任务进行了良好的优化
Open-Ended Evaluation
  • 除了标准基准测试,论文还使用大语言模型作为评判者对论文的模型在开放式生成任务上进行了评估,结果如表 7 所示
  • 论文遵循 AlpacaEval 2.0 (2024) 和 Arena-Hard (2024a) 的原始配置,它们利用 GPT-4-Turbo-1106 作为成对比较的评判者
  • 在 Arena-Hard 上,DeepSeek-V3 相对于基线 GPT-4-0314 取得了超过 86% 的惊人胜率,与 Claude-Sonnet-3.5-1022 等顶级模型表现相当
    • 这凸显了 DeepSeek-V3 的强大能力,尤其是在处理复杂提示(包括编码和调试任务)方面
  • DeepSeek-V3 实现了一个突破性的里程碑,成为第一个在 Arena-Hard 基准测试中超过 85% 的开源模型
    • 这一成就显著缩小了开源模型和闭源模型之间的性能差距,为开源模型在挑战性领域所能达到的水平设定了新标准
  • 类似地,DeepSeek-V3 在 AlpacaEval 2.0 上展示了卓越的性能,优于闭源和开源模型
    • 这证明了其在写作任务和处理直接问答场景方面的出色熟练度
  • 值得注意的是,它以 20% 的显著优势超过了 DeepSeek-V2.5-0905,突显了其在处理简单任务方面的实质性改进,并展示了其进步的有效性
DeepSeek-V3 as a Generative Reward Model
  • 论文将 DeepSeek-V3 的判断能力与最先进的模型(即 GPT-4o 和 Claude-3.5)进行了比较
  • 表 8 展示了这些模型在 RewardBench (2024) 中的性能(注:RewardBench 是用来评估 Reward Model 本身性能的)
  • DeepSeek-V3 达到了与最佳版本的 GPT-4o-0806 和 Claude-3.5-Sonnet-1022 相当的水平,同时超越了其他版本
  • 此外,DeepSeek-V3 的判断能力也可以通过投票技术得到增强
  • 因此,论文采用 DeepSeek-V3 并结合投票来为开放式问题提供自我反馈,从而提高对齐过程的有效性和鲁棒性

Discussion

Distillation from DeepSeek-R1
  • 论文基于 DeepSeek-V2.5 对从 DeepSeek-R1 进行蒸馏的贡献进行了消融研究
  • 基线是在短 CoT 数据上训练的,而其对比模型则使用上述专家检查点生成的数据
  • 表 9 展示了蒸馏数据的有效性,在 LiveCodeBench 和 MATH-500 基准测试上均显示出显著的改进
  • 论文的实验揭示了一个有趣的权衡:蒸馏带来了更好的性能,但也显著增加了平均回答长度
  • 为了在模型准确性和计算效率之间保持平衡,论文为 DeepSeek-V3 在蒸馏过程中仔细选择了最优设置
  • 论文的研究表明,从推理模型进行知识蒸馏为后训练优化提供了一个有前景的方向
    • 虽然论文目前的工作侧重于蒸馏数学和编码领域的数据,但这种方法显示出在需要复杂推理的各种任务领域中具有更广泛应用的潜力
    • 在这些特定领域展示的有效性表明,长 CoT 蒸馏对于增强其他认知任务中的模型性能可能很有价值
    • 在不同领域进一步探索这种方法仍然是未来研究的一个重要方向
Self-Rewarding
  • 奖励在强化学习中起着关键作用,引导着优化过程
  • 在通过外部工具易于验证的领域,例如某些编码或数学场景,强化学习表现出卓越的功效
    • 但在更一般的场景中,通过硬编码构建反馈机制是不切实际的
  • 在 DeepSeek-V3 的开发过程中,对于这些更广泛的上下文,论文采用了 Constitutional AI 方法 (2022),利用 DeepSeek-V3 自身的投票评估结果作为反馈源
    • 这种方法产生了显著的对齐效果,显著提升了 DeepSeek-V3 在主观评估中的性能
    • 通过整合额外的 Constitutional 输入,DeepSeek-V3 可以向 Constitutional 方向优化
  • 作者相信,这种将补充信息与大语言模型作为反馈源相结合的范式至关重要
    • 大语言模型作为一个通用的处理器,能够将来自不同场景的非结构化信息转化为奖励,最终促进大语言模型的自我改进
    • 除了自我奖励,论文还致力于发现其他通用和可扩展的奖励方法,以持续提升模型在一般场景中的能力
Multi-token Prediction Evaluation
  • DeepSeek-V3 不仅仅预测下一个单独的 Token ,而是通过 MTP 技术预测接下来的 2 个 Token
  • 结合推测解码 (Speculative Decoding) (2023; 2023) 的框架,它可以显著加速模型的解码速度
  • 一个自然的问题是,额外预测的 Token 的接受率如何
    • 根据论文的评估,在不同生成主题下,第二个 Token 预测的接受率在 85% 到 90% 之间,表现出一致的可靠性
    • 这种高接受率使得 DeepSeek-V3 能够实现显著提高的解码速度,提供 1.8 倍的 TPS(每秒 Token 数)

Limitations, and Future Directions

Limitations

  • 在承认其强大性能和成本效益的同时,论文也认识到 DeepSeek-V3 存在一些局限性,尤其是在部署方面
  • 首先,为了确保高效的推理,DeepSeek-V3 推荐的部署单元相对较大,这可能会给小型团队带来负担
  • 其次,尽管论文为 DeepSeek-V3 设计的部署策略已经实现了端到端生成速度超过 DeepSeek-V2 的两倍,但仍有进一步提升的潜力
  • 幸运的是,随着更先进硬件的发展,这些局限性有望得到自然解决

Future Directions

  • DeepSeek 始终坚持具有长期主义(longtermism)的开源模型路线,旨在稳步接近通用人工智能(Artificial General Intelligence, AGI)的终极目标
  • 未来,论文计划在以下几个方向进行战略性投入和研究:
    • DeepSeek 将持续研究和改进论文的模型架构,旨在进一步提高训练和推理效率,努力实现对无限上下文长度的高效支持
      • 此外,DeepSeek 将尝试突破 Transformer 的架构限制,从而推动其建模能力的边界
    • DeepSeek 将持续迭代训练数据的数量和质量,并探索纳入额外的训练信号源,旨在推动数据在更全面维度上的扩展
    • DeepSeek 将持续探索和迭代模型的深度思考能力,旨在通过扩展其推理长度和深度来增强其智能和问题解决能力
    • DeepSeek 将探索更全面、多维度的模型评估方法,以防止在研究过程中倾向于优化固定的基准测试集,这可能造成对模型能力的误导性印象并影响论文的基础评估

附录 B: Ablation Studies for Low-Precision Training

  • 图 10:BF16 与 FP8 训练的损失曲线比较(结果使用系数为 0.9 的指数移动平均(Exponential Moving Average, EMA)进行了平滑处理)

B.1: FP8 v.s. BF16 Training

  • 论文在两个不同规模的基线模型上验证了论文的 FP8 混合精度框架,并与 BF16 训练进行了比较
    • 在小规模上,论文训练了一个总参数量约为 16B 的 MoE 基线模型,使用了 1.33T token
    • 在大规模上,论文训练了一个总参数量约为 230B 的 MoE 基线模型,使用了约 0.9T token
  • 论文在图 10 中展示了训练曲线,并证明了通过论文的高精度累加和细粒度量化策略,相对误差保持在 0.25% 以下

B.2:Discussion About Block-Wise Quantization(分块量化)

  • 尽管论文的切片式(tile-wise)细粒度量化有效缓解了特征异常值(feature outliers)引入的误差,但它需要对激活量化进行不同的分组,即在正向传播中使用 1x128 的分组,在反向传播中则需要 128x1 的分组
    • 激活梯度也需要类似的处理过程
  • 一个直接的策略是像论文量化模型权重那样,对每 128x128 个元素应用分块(block-wise)量化
    • 这样,反向传播只需要进行转置操作
  • 论文进行了一项实验,将与 Dgrad 相关的所有张量都在分块基础上进行量化
    • 结果显示,计算激活梯度并以链式方式反向传播到浅层的 Dgrad 操作对精度高度敏感
  • 论文在总参数量约为 16B、训练了约 300B Token 的 MoE 模型上,激活梯度的分块量化会导致模型发散
    • 论文假设这种敏感性源于激活梯度在 Token 之间高度不平衡,导致了与 Token 相关的异常值 (2023)
    • 这些异常值无法通过分块量化方法有效管理

附录 C:16B 基于辅助损失和无辅助损失模型的专家专业化模式 (Expert Specialization Patterns of the 16B Aux-Loss-Based and Aux-Loss-Free Models)

  • 本节记录了 16B 基于辅助损失的基线模型和无辅助损失模型在 Pile 测试集上的专家负载
  • 如图 11 所示,无辅助损失模型在所有层中都倾向于表现出更强的专家专业化程度(Expert Specialization)
    • 问题:如何理解这里的 专家专业化程度(Expert Specialization)?
    • 理解:是指某些任务上,某类专家被激活的更多,而在另外的任务上,其他专家被激活的更多,专家体现出一定的专业化倾向(注:这不是我们想要的,因为会导致模型拟合能力下降,且单个序列上不利于 EP 负载均衡)
  • 图 11:无辅助损失模型和基于辅助损失的模型在 Pile 测试集的三个领域上的专家负载
    • 无辅助损失模型 比 基于辅助损失模型 表现出 更强的专家专业化模式
    • 相对专家负载(Relative Expert Load)表示实际专家负载与理论平衡专家负载之间的比率

NLP——旋转位置编码-RoPE

  • 参考链接:
    • 原始论文:(RoPE) RoFormer: Enhanced Transformer with Rotary Position Embedding, Arxiv 2023 & Neurocomputing 2024, 追一科技
    • 苏神博客:Transformer升级之路:2、博采众长的旋转式位置编码
    • 旋转式位置编码 (RoPE) 知识总结 - Soaring的文章 - 知乎,一篇把知识串的比较好的博客

原始 Transformer

基本 Attention 公式

  • 在标准的Transformer模型中,自注意力机制(Self-Attention)的公式是核心组成部分
  • 给定查询矩阵 \( Q \)、键矩阵 \( K \) 和值矩阵 \( V \),注意力输出计算为:
    $$
    \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k} }\right)V
    $$
    • \( Q \in \mathbb{R}^{n \times d_k} \), \( K \in \mathbb{R}^{m \times d_k} \), \( V \in \mathbb{R}^{m \times d_v} \)(\( n \)是目标序列长度,\( m \)是源序列长度)
    • \( d_k \) 是键/查询向量的维度
    • \( \sqrt{d_k} \) 用于缩放点积,防止梯度消失

Multi-Head Attention

  • Transformer使用多头注意力扩展基本注意力:
    $$
    \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h)W^O
    $$
  • 每个头的计算为:
    $$
    \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)
    $$
    • \( W_i^Q \in \mathbb{R}^{d_{\text{model} } \times d_k} \), \( W_i^K \in \mathbb{R}^{d_{\text{model} } \times d_k} \), \( W_i^V \in \mathbb{R}^{d_{\text{model} } \times d_v} \)
    • \( W^O \in \mathbb{R}^{hd_v \times d_{\text{model} } } \) 是输出投影矩阵
    • \( h \) 是头的数量,通常满足 \( d_k = d_v = \frac{d_{\text{model} } }{h} \)

加入位置编码(仅修改输入即可)

  • 在Transformer中,输入会加上正弦位置编码 \( P \in \mathbb{R}^{d_{\text{model}}} \):
    $$
    X = \text{Embedding}(x) + P
    $$
    • 其中 \( P \in \mathbb{R}^{d_{\text{model}}} \) 的每个元素为:
      $$
      P_{pos, 2i} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model} } } }\right), \quad
      P_{pos, 2i+1} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model} } } }\right)
      $$

Self-Attention 完整公式(以单头为例)

  • 对于一个输入序列 \( X \in \mathbb{R}^{n \times d_{\text{model} } } \):
    $$
    \begin{aligned}
    Q &= XW^Q, \quad K = XW^K, \quad V = XW^V \\
    \text{Attention}(X) &= \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k} } + M\right)V
    \end{aligned}
    $$
    • \( M \) 是可选的掩码矩阵(如解码器的因果掩码)
    • 注:实际实现时,也可以直接在进入 Softmax 操作前,将 \(\frac{QK^\top}{\sqrt{d_k} }\) 的结果置为最小值 \(-e^9\),效果是等价的

Self-Attention 简单实现

  • Self-Attention的Python代码简单实现
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    # 单头Attention
    class ScaledDotProductAttention(nn.Module):
    def__init__(self, d_k):
    super().__init__()
    self.d_k = d_k

    def forward(self, Q, K, V, mask=None):
    # Q, K, V shape: (batch_size, seq_len, d_k(or d_v))
    scores = torch.matmul(Q, K.transpose(-2, -1)) / (self.d_k ** 0.5)
    if mask is not None:
    scores = scores.masked_fill(mask == 0, -1e9)
    attn_weights = F.softmax(scores, dim=-1)
    output = torch.matmul(attn_weights, V)
    return output
    # 多头Attention
    class MultiHeadAttention(nn.Module):
    def __init__(self, d_model, num_heads):
    super().__init__()
    assert d_model % num_heads == 0, "d_model must be divisible by num_heads"

    self.d_model = d_model
    self.num_heads = num_heads
    self.d_k = d_model // num_heads

    self.W_q = nn.Linear(d_model, d_model)
    self.W_k = nn.Linear(d_model, d_model)
    self.W_v = nn.Linear(d_model, d_model)
    self.W_o = nn.Linear(d_model, d_model)
    # 使用单头Attention
    self.attention = ScaledDotProductAttention(self.d_k)

    def split_heads(self, x):
    """
    x shape: (batch_size, seq_len, d_model)
    return shape: (batch_size, num_heads, seq_len, d_k)
    """
    batch_size, seq_len, _ = x.size()
    return x.view(batch_size, seq_len, self.num_heads, self.d_k).transpose(1, 2)

    def combine_heads(self, x):
    """
    x shape: (batch_size, num_heads, seq_len, d_k)
    return shape: (batch_size, seq_len, d_model)
    """
    batch_size, _, seq_len, _ = x.size()
    return x.transpose(1, 2).contiguous().view(batch_size, seq_len, self.d_model)

    def forward(self, Q, K, V, mask=None):
    Q = self.W_q(Q)
    K = self.W_k(K)
    V = self.W_v(V)

    Q = self.split_heads(Q)
    K = self.split_heads(K)
    V = self.split_heads(V)

    # 如果需要,扩展mask以匹配多头(这里假设了mask是为单头准备的)
    if mask is not None:
    mask = mask.unsqueeze(1) # (batch_size, 1, seq_len) -> (batch_size, 1, 1, seq_len)

    attn_output = self.attention(Q, K, V, mask)
    output = self.combine_heads(attn_output)
    output = self.W_o(output)
    return output

固定位置编码实现

  • 固定位置编码,比如正弦位置编码,直接在 Attention 之前将位置编码向量加入到原始向量 \(X\) 中,Attention代码不需要做任何修改

Rotary Position Embedding, RoPE

  • 本节符号和原始论文 (RoPE) RoFormer: Enhanced Transformer with Rotary Position Embedding, Arxiv 2023 & Neurocomputing 2024, 追一科技 符号保持一致
  • 旋转位置编码(RoPE)的核心思想 :通过旋转矩阵将位置信息融入Self-Attention 机制中
  • 基本定义 :对于位置\( m \)的词向量\( \boldsymbol{x}_m \in \mathbb{R}^d \),通过线性变换得到查询向量\( \boldsymbol{q}_m \)和键向量\( \boldsymbol{k}_n \):
    $$
    \boldsymbol{q}_m = W_q \boldsymbol{x}_m, \quad \boldsymbol{k}_n = W_k \boldsymbol{x}_n
    $$
  • 旋转操作 :将\( \boldsymbol{q}_m \)和\( \boldsymbol{k}_n \)划分为\( d/2 \)个复数对(每组2维,RoPE要求维度必须是偶数,这一般都能满足),对第\( i \)组复数应用旋转矩阵:
    $$
    \begin{aligned}
    \boldsymbol{q}_m^{(i)} &= \begin{pmatrix}
    q_{m,2i} \\
    q_{m,2i+1}
    \end{pmatrix}, \quad
    \boldsymbol{k}_n^{(i)} = \begin{pmatrix}
    k_{n,2i} \\
    k_{n,2i+1}
    \end{pmatrix} \\
    R_{\theta_i}^m &= \begin{pmatrix}
    \cos m\theta_i & -\sin m\theta_i \\
    \sin m\theta_i & \cos m\theta_i
    \end{pmatrix}, \quad \theta_i = 10000^{-2i/d}
    \end{aligned}
    $$
    • 注意:位置为 \(m\) 的旋转矩阵对应正余弦角度为 \(\color{red}{m}\theta_i\)
    • 理解:旋转矩阵 \(R_{\theta_i}^m\) 可以将目标向量进行旋转,\(R_{\theta_i}^m \boldsymbol{x}\) 相当于将 \( \boldsymbol{x}\) 向逆时针方向旋转 \(m\theta_i\) 度(注意:只是旋转,并不修改原始向量的模长,因为 \(R_{\theta_i}^m\) 是正交矩阵),详情见附录
  • 旋转后的向量 :旋转后的查询和键向量为:
    $$
    \begin{aligned}
    \boldsymbol{q}_m’ = \bigoplus_{i=0}^{d/2-1} R_{\theta_i}^m \boldsymbol{q}_m^{(i)}, \quad
    \boldsymbol{k}_n’ = \bigoplus_{i=0}^{d/2-1} R_{\theta_i}^n \boldsymbol{k}_n^{(i)}
    \end{aligned}
    $$
    • 其中\( \oplus \)表示向量拼接:
      $$\bigoplus_{i=0}^{d/2-1} R_{\theta_i}^m \boldsymbol{q}_m^{(i)} = \text{Concat}(\{ R_{\theta_i}^m \boldsymbol{q}_m^{(i)}\}_{i=0}^{d/2-1})$$
  • 旋转后的Attention权重变化
    $$
    \begin{equation}
    (\boldsymbol{\mathcal{R}}_m \boldsymbol{q}_m)^{\top}(\boldsymbol{\mathcal{R}}_n \boldsymbol{k}_n) = \boldsymbol{q}_m^{\top} \boldsymbol{\mathcal{R}}_m^{\top}\boldsymbol{\mathcal{R}}_n \boldsymbol{k}_n = \boldsymbol{q}_m^{\top} \boldsymbol{\mathcal{R}}_{n-m} \boldsymbol{k}_n
    \end{equation}
    $$
    • 位置为 \(m\) 的向量 \(\boldsymbol{q}_m\) 乘以矩阵 \(\boldsymbol{\mathcal{R}}_m\);位置为 \(n\) 的向量 \(\boldsymbol{k}_n\) 乘以矩阵 \(\boldsymbol{\mathcal{R}}_n\)(注意角标)
    • 上面的式子中等式是恒成立的(\( \boldsymbol{\mathcal{R}}_m^{\top}\boldsymbol{\mathcal{R}}_n = \boldsymbol{\mathcal{R}}_{\color{red}{n-m}}\)的详细证明见附录),右边的 \(\boldsymbol{\mathcal{R}}_{\color{red}{n-m}}\)仅与相对位置 \(n-m\) 有关,体现了相对位置编码的核心要义
      • 注:\(\boldsymbol{\mathcal{R}}_{m-n}\) 和 \(\boldsymbol{\mathcal{R}}_{n-m}\) 不相等,旋转角度相同,但方向相反
  • 展开成矩阵相乘的形式为(refer to Transformer升级之路:2、博采众长的旋转式位置编码):
    $$
    \begin{equation}\scriptsize{\underbrace{\begin{pmatrix}
    \cos m\theta_0 & -\sin m\theta_0 & 0 & 0 & \cdots & 0 & 0 \\
    \sin m\theta_0 & \cos m\theta_0 & 0 & 0 & \cdots & 0 & 0 \\
    0 & 0 & \cos m\theta_1 & -\sin m\theta_1 & \cdots & 0 & 0 \\
    0 & 0 & \sin m\theta_1 & \cos m\theta_1 & \cdots & 0 & 0 \\
    \vdots & \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\
    0 & 0 & 0 & 0 & \cdots & \cos m\theta_{d/2-1} & -\sin m\theta_{d/2-1} \\
    0 & 0 & 0 & 0 & \cdots & \sin m\theta_{d/2-1} & \cos m\theta_{d/2-1} \\
    \end{pmatrix}}_{\boldsymbol{\mathcal{R}}_m} \begin{pmatrix}q_0 \\ q_1 \\ q_2 \\ q_3 \\ \vdots \\ q_{d-2} \\ q_{d-1}\end{pmatrix}}\end{equation}
    $$
  • 由于旋转矩阵是一个稀疏矩阵,所以旋转过程可以改进为如下等价实现:
    $$
    \begin{equation}\begin{pmatrix}q_0 \\ q_1 \\ q_2 \\ q_3 \\ \vdots \\ q_{d-2} \\ q_{d-1}
    \end{pmatrix}\otimes\begin{pmatrix}\cos m\theta_0 \\ \cos m\theta_0 \\ \cos m\theta_1 \\ \cos m\theta_1 \\ \vdots \\ \cos m\theta_{d/2-1} \\ \cos m\theta_{d/2-1}
    \end{pmatrix} + \begin{pmatrix}-q_1 \\ q_0 \\ -q_3 \\ q_2 \\ \vdots \\ -q_{d-1} \\ q_{d-2}
    \end{pmatrix}\otimes\begin{pmatrix}\sin m\theta_0 \\ \sin m\theta_0 \\ \sin m\theta_1 \\ \sin m\theta_1 \\ \vdots \\ \sin m\theta_{d/2-1} \\ \sin m\theta_{d/2-1}
    \end{pmatrix}\end{equation}
    $$
    • 其中 \(\otimes\) 是按位相乘
  • RoPE下的Attention公式总结 :(旋转位置编码的核心公式)
    $$
    \begin{aligned}
    \text{Attention}(\boldsymbol{x}) &= \text{softmax}\left(\frac{(\boldsymbol{q}’)^\top \boldsymbol{k}’}{\sqrt{d} }\right)V
    \end{aligned}
    $$
    • 注:\(V\) 是 Attention 中的 Value 矩阵,中不需要位置编码信息
    • 这里使用 \((\boldsymbol{q}’)^\top \boldsymbol{k}’\),转置在 \(\boldsymbol{q}’\) 上,和原始论文表达方式一致,实际上这种表示是OK的,数学中常用这种表示 ,这种表示下,向量为列向量;原始 Transformer 论文中的符号转置在 Key 上,此时向量为行向量
  • 原始论文中的RoPE示意图:

多头注意力下的 RoPE

  • 为了跟传统的 Transformer 符号对齐,本节改用 \(Q,K,V\)表示矩阵,与 RoPE 原始论文符号不再一致
  • 给定输入序列 \( X \in \mathbb{R}^{n \times d_{\text{model} } } \),先投影到查询、键、值空间:
    $$
    Q = XW^Q, \quad K = XW^K, \quad V = XW^V
    $$
    • 其中 \( W^Q, W^K \in \mathbb{R}^{d_{\text{model} } \times d_k} \), \( W^V \in \mathbb{R}^{d_{\text{model} } \times d_v} \)
  • 应用旋转位置编码(RoPE) :对 \( Q \) 和 \( K \) 的每个位置 \( m \) 和 \( n \) 的分量应用旋转矩阵 \( R_{\theta}^m \) 和 \( R_{\theta}^n \):
    $$
    \begin{aligned}
    Q’ &= \text{RoPE}(Q) = \bigoplus_{i=0}^{d_k/2-1} R_{\theta_i}^m Q^{(i)} \\
    K’ &= \text{RoPE}(K) = \bigoplus_{i=0}^{d_k/2-1} R_{\theta_i}^n K^{(i)}
    \end{aligned}
    $$
    • \( Q^{(i)} \in \mathbb{R}^2 \) 和 \( K^{(i)} \in \mathbb{R}^2 \) 是 \( Q \) 和 \( K \) 的第 \( i \) 个二维分量
    • \( \oplus \)表示向量拼接:
      $$\bigoplus_{i=0}^{d_k/2-1} R_{\theta_i}^m Q^{(i)} = \text{Concat}(\{R_{\theta_i}^m Q^{(i)}\}_{i=0}^{d_k/2-1} )$$
  • 旋转矩阵 \( R_{\theta_i}^m \) 定义为:
    $$
    R_{\theta_i}^m = \begin{pmatrix}
    \cos m\theta_i & -\sin m\theta_i \\
    \sin m\theta_i & \cos m\theta_i
    \end{pmatrix}, \quad \theta_i = 10000^{-2i/d_k}
    $$
  • 多头注意力输出
    $$
    \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_H) W^O \\
    \text{head}_h = \text{Softmax}\left(\frac{Q^{\prime}_h {K^{\prime}_h}^\top}{\sqrt{d_k} }\right) V_h
    $$
    • 其中 \( W^O \in \mathbb{R}^{H d_v \times d_{\text{model} } } \) 是输出投影矩阵
  • 多头注意力下的 RoPE 的 Attention 公式总结 :
    $$
    \begin{aligned}
    \text{Attention}(Q,K,V) &= \text{softmax}\left(\frac{(\text{RoPE}(Q))(\text{RoPE}(K))^\top}{\sqrt{d_k} }\right)V \\
    \text{where} \quad \text{RoPE}(X) &= \bigoplus_{i=0}^{d/2-1} R_{\theta_i}^m X^{(i)}
    \end{aligned}
    $$

多头注意力下的 RoPE 实现

  • 多头注意力下的RoPE PyTorch 实现 (待补充)
    • 注:多头注意力下,每个头是独立编码的(每个头维度从 0 开始),且使用的旋转矩阵一样,即旋转矩阵的维度 \(d = d_{\text{head}} = d_{\text{model}}/h\)

关于 RoPE 的一些讨论

  • RoPE 传统 Transformer 的区别 :
    • 传统Transformer:位置编码是加性的(\( X + P \))
    • RoPE:位置编码是乘性的(通过旋转矩阵直接修改 \( Q \) 和 \( K \))
  • 相对位置保持性 :
    • 旋转后的注意力分数 \( [Q’ K’^\top]_{m,n} \) 仅依赖于相对位置 \( m-n \),满足线性注意力性质
  • 远程衰减性 :(注:如下图所示的远距离衰减,会导致太远的距离下,难以区分位置,效果不好,外推性变差?)

附录:相对位置旋转公式证明

  • 目标:证明 \( \boldsymbol{\mathcal{R}}_m^{\top}\boldsymbol{\mathcal{R}}_n = \boldsymbol{\mathcal{R}}_{\color{red}{n-m}}\)
  • 考虑到 \(\boldsymbol{\mathcal{R}}_m\) 是以二维子矩阵为单位的“对角”矩阵,故只要证明 \((R_{\theta_i}^m)^\top R_{\theta_i}^n = R_{\theta_i}^{\color{red}{n-m}}\) 即可,证明过程如下:
  • 给定旋转矩阵 \( R_{\theta_i}^m \) 定义为:
    $$
    R_{\theta_i}^m = \begin{pmatrix}
    \cos m\theta_i & -\sin m\theta_i \\
    \sin m\theta_i & \cos m\theta_i
    \end{pmatrix}
    $$
  • 其转置矩阵为:
    $$
    (R_{\theta_i}^m)^\top = \begin{pmatrix}
    \cos m\theta_i & \sin m\theta_i \\
    -\sin m\theta_i & \cos m\theta_i
    \end{pmatrix}
    $$
  • 计算 \((R_{\theta_i}^m)^\top R_{\theta_i}^n\)
    $$
    (R_{\theta_i}^m)^\top R_{\theta_i}^n = \begin{pmatrix}
    \cos m\theta_i & \sin m\theta_i \\
    -\sin m\theta_i & \cos m\theta_i
    \end{pmatrix}
    \begin{pmatrix}
    \cos n\theta_i & -\sin n\theta_i \\
    \sin n\theta_i & \cos n\theta_i
    \end{pmatrix}
    $$
  • 回顾三角函数和差角公式:
    $$
    \sin(A \pm B) = \sin A \cos B \pm \cos A \sin B \\
    \cos(A \pm B) = \cos A \cos B \mp \sin A \sin B
    $$
  • 计算矩阵乘积的每个元素:
    • 左上角元素:
      $$
      \begin{align}
      \cos m\theta_i \cdot \cos n\theta_i + \sin m\theta_i \cdot \sin n\theta_i &= \cos(n\theta_i - m\theta_i) \\
      &= \cos((n - m)\theta_i) \\
      \end{align}
      $$
    • 右上角元素:
      $$
      \begin{align}
      \cos m\theta_i \cdot (-\sin n\theta_i) + \sin m\theta_i \cdot \cos n\theta_i &= -\cos m\theta_i \sin n\theta_i + \sin m\theta_i \cos n\theta_i \\
      &= \sin m\theta_i \cos n\theta_i - \cos m\theta_i \sin n\theta_i\\
      & = \sin((m-n)\theta_i) \\
      & = - \sin((n-m)\theta_i)
      \end{align}
      $$
    • 左下角元素:
      $$
      \begin{align}
      -\sin m\theta_i \cdot \cos n\theta_i + \cos m\theta_i \cdot \sin n\theta_i &= -\sin m\theta_i \cos n\theta_i + \cos m\theta_i \sin n\theta_i \\
      &= \sin n\theta_i \cos m\theta_i - \cos n\theta_i \sin m\theta_i \\
      &= \sin((n - m)\theta_i)
      \end{align}
      $$
    • 右下角元素:
      $$
      \begin{align}
      -\sin m\theta_i \cdot (-\sin n\theta_i) + \cos m\theta_i \cdot \cos n\theta_i &= \sin m\theta_i \sin n\theta_i + \cos m\theta_i \cos n\theta_i \\
      &= \sin m\theta_i \sin n\theta_i + \cos m\theta_i \cos n\theta_i \\
      &= \cos((n - m)\theta_i)
      \end{align}
      $$
  • 因此,乘积矩阵为:
    $$
    (R_{\theta_i}^m)^\top R_{\theta_i}^n = \begin{pmatrix}
    \cos((n - m)\theta_i) & -\sin((n - m)\theta_i) \\
    \sin((n - m)\theta_i) & \cos((n - m)\theta_i)
    \end{pmatrix} = R_{\theta_i}^{\color{red}{n-m}}
    $$
  • 至此,我们证明了:
    $$
    (R_{\theta_i}^m)^\top R_{\theta_i}^n = R_{\theta_i}^{\color{red}{n-m}}
    $$
  • 证毕

附录:不同参数下 RoPE 对 Attention 的影响

  • RoPE原始论文已经说明了随着距离的增长,Attention Score 有越来越小的趋势(且长距离部分会波动)
  • 下面是固定 query_index 下,Attention Score 随 key_index(横轴)变化的图像(代码参考链接修改的 旋转式位置编码 (RoPE) 知识总结 - Soaring的文章 - 知乎)
  • 从上图可以观察到:
    • 图1:RoPE确实有远距离衰减趋势(震荡递减),且dim_model=256时,q,k 距离为500时Attention值已经衰减的较小了
    • 图2:与图1类似,RoPE的衰减是对称的(图2展示的是当 query_index=256时的图像);
      • 注:注意虽然 Attention Score 是对称相等的,但是旋转角度是相反的,即 \(\boldsymbol{\mathcal{R}}_{m-n}\) 和 \(\boldsymbol{\mathcal{R}}_{n-m}\) 旋转角度相同,但方向是相反的
    • 图3:RoPE 在拉到足够长的距离后,不会一直衰减(从后续的图可以知道实际上还是周期函数,只是周期很大)
    • 图4+图5:与图1对比可以发现,RoPE 在拉到足够长的距离后,实际上还是周期函数,只不过周期与 d_model 相关(d_model越大,周期越长),图4说明了当 d_model=8 时,周期是 10000 左右
    • 图6:缩小了图5的横轴区间,将图5的前半部分图像放大了看,是在小周期上震荡的,且还存在图5所示的大周期
  • 附上图的代码:
    >>>点击展开折叠内容...
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    # refer to: [旋转式位置编码 (RoPE) 知识总结 - Soaring的文章 - 知乎](https://zhuanlan.zhihu.com/p/662790439)
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.axes import Axes

    def create_sin_cos_table_cache(max_num_tokens, dim_model):
    # 所有pos下对应的cos/sin值分别存储为矩阵
    theta = 10000 ** (-np.arange(0, dim_model, 2) / dim_model)
    theta = theta.reshape(-1, 1).repeat(2, axis=1).flatten()

    pos = np.arange(0, max_num_tokens)
    table = pos.reshape(-1, 1) @ theta.reshape(1, -1) # [max_num_tokens, dim_model]

    sin_table_cache = np.sin(table)
    sin_table_cache[:, ::2] = -sin_table_cache[:, ::2]

    cos_table_cache = np.cos(table)
    return sin_table_cache, cos_table_cache

    def rotate_half(q_vec):
    # 将q_vec的值两个一组分组并在分组内对调,实现从[q_0,q_1,q_2,q_3,...,q_{d-1},q_d]到的转换[q_1,q_0,q_3,q_2,...,q_d,q_{d-1}]
    return q_vec.reshape(-1, 2)[:, ::-1].flatten()

    def rotary(vec, pos, sin_table, cos_table):
    # 原始论文中的公式
    return vec * cos_table[pos] + rotate_half(vec) * sin_table[pos]

    def plot(plt_obj: Axes, pic_index, query_index=0, dim_model=256, max_num_tokens=8192, step=1):
    # q_vec 和 k_vec 都设定为1,仅关注 RoPE 引发的Attention Score的变化
    q_vec = np.ones(dim_model)
    k_vec = np.ones(dim_model)
    sin_table, cos_table = create_sin_cos_table_cache(max_num_tokens, dim_model)

    rotated_q_vec = rotary(q_vec, query_index, sin_table, cos_table)
    k_indices = np.arange(0, max_num_tokens, step)
    rotated_k_vecs = rotary(k_vec, k_indices, sin_table, cos_table)
    attn_scores = (rotated_k_vecs @ rotated_q_vec) / np.sqrt(dim_model) # 未经过Softmax的Attention权重,用于展示RoPE对原始Attention Score

    plt_obj.plot(k_indices, attn_scores)
    plt_obj.set_title(f"Figure {pic_index}: query_index={query_index}, dim_model={dim_model}")
    plt_obj.set_xlabel("key index")
    plt_obj.set_ylabel("Attention Score")

    plt.rcParams.update({
    "font.sans-serif": ["Times New Roman", ],
    "font.size": 10
    })

    _, axes = plt.subplots(nrows=2, ncols=3, figsize=(10, 10))
    plot(axes[0, 0], 1, query_index=0, max_num_tokens=512)
    plot(axes[0, 1], 2, query_index=256, max_num_tokens=512)
    plot(axes[0, 2], 3, query_index=0, dim_model=256, max_num_tokens=65535)
    # plot(axes[1, 0], 4, query_index=0, dim_model=32, max_num_tokens=65535)
    plot(axes[1, 0], 4, query_index=0, dim_model=16, max_num_tokens=65535)
    plot(axes[1, 1], 5, query_index=0, dim_model=8, max_num_tokens=65536)
    plot(axes[1, 2], 6, query_index=0, dim_model=8, max_num_tokens=512)
    plt.show()

附录:如何改进 RoPE 以实现绝对位置编码?

  • 当前的设计仅能实现相对位置编码(因为 Query 和 Key 的内积只与他们的相对位置有关,与绝对位置无关),但如果在 Value 上也施加位置编码则能实现绝对位置编码的能力
  • 让研究人员绞尽脑汁的Transformer位置编码中苏神提到:

    这样一来,我们得到了一种融绝对位置与相对位置于一体的位置编码方案,从形式上看它有点像乘性的绝对位置编码,通过在 \(\boldsymbol{q},\boldsymbol{k}\) 中施行该位置编码,那么效果就等价于相对位置编码,而如果还需要显式的绝对位置信息,则可以同时在 \(\boldsymbol{v}\) 上也施行这种位置编码。总的来说,我们通过绝对位置的操作,可以达到绝对位置的效果,也能达到相对位置的效果


附录:旋转体现在哪里?

  • 旋转体现在 \(\boldsymbol{q}_m\)(或\(\boldsymbol{k}_n\)) 的每两个维度组成的向量 \(\boldsymbol{q}_m^{(i)} = \begin{pmatrix} q_{m,2i} \\ q_{m,2i+1} \end{pmatrix}\) 经过 RoPE 变换前后,他们的向量长度不变,即:
    $$
    \begin{pmatrix}cos(m\theta_1) &-sin(m\theta_1) \\ sin(m\theta_1) &cos(m\theta_1)\end{pmatrix} \begin{pmatrix}q_{m,2i} \\ q_{m,2i+1}\end{pmatrix} = \begin{pmatrix}q_{m,2i}\cdot cos(m\theta_1) -q_{m,2i+1}\cdot sin(m\theta_1) \\ q_{m,2i}\cdot sin(m\theta_1)+ q_{m,2i+1}\cdot cos(m\theta_1) \end{pmatrix} \\
    $$
  • 进一步,由于 \((cos(m\theta_1))^2 + (sin(m\theta_1))^2 = 1\) 有
    $$
    \begin{align}
    \left|\begin{pmatrix}q_{m,2i}\cdot cos(m\theta_1) -q_{m,2i+1}\cdot sin(m\theta_1) \\ q_{m,2i}\cdot sin(m\theta_1)+ q_{m,2i+1}\cdot cos(m\theta_1) \end{pmatrix} \right| &= \sqrt{\left(q_{m,2i}\cdot cos(m\theta_1) -q_{m,2i+1}\cdot sin(m\theta_1)\right)^2 + \left(q_{m,2i}\cdot sin(m\theta_1)+ q_{m,2i+1}\cdot cos(m\theta_1)\right)^2} \\
    &= \sqrt{(q_{m,2i})^2 + (q_{m,2i+1})^2}
    \end{align}
    $$
  • 也就是说: \(\boldsymbol{q}_m\)(或\(\boldsymbol{k}_n\))相邻两两维度在变换前后的向量长度并没有变化,是一个旋转操作

附录:可视化RoPE旋转过程

  • 旋转矩阵 \(R_{\theta_i}^m\) 的定义如下:
    $$
    \begin{aligned}
    R_{\theta_i}^m &= \begin{pmatrix}
    \cos m\theta_i & -\sin m\theta_i \\
    \sin m\theta_i & \cos m\theta_i
    \end{pmatrix}, \quad \theta_i = 10000^{-2i/d}
    \end{aligned}
    $$
  • 旋转矩阵 \(R_{\theta_i}^m\) 可以将目标向量进行旋转,\(R_{\theta_i}^m \boldsymbol{x}\) 相当于将 \( \boldsymbol{x}\) 向逆时针方向旋转 \(m\theta_i\) 度
  • 当 \(m\theta_i = \frac{\pi}{4}\) 时,其旋转可视化结果如下:
  • 实现上述旋转的代码如下
    >>>点击展开折叠内容...
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
       import numpy as np
    import matplotlib.pyplot as plt

    # 设定原始向量 x
    x = np.array([1, 0])

    # 角度转换为弧度
    angle = np.radians(45)

    # 旋转矩阵定义
    R = np.array([[np.cos(angle), -np.sin(angle)],
    [np.sin(angle), np.cos(angle)]])

    # 矩阵惩罚实现旋转向量
    x_rotated = R @ x

    plt.rcParams['figure.dpi'] = 300

    plt.figure(figsize=(6, 6))
    plt.quiver(0, 0, x[0], x[1], angles='xy', scale_units='xy', scale=1, color='b', label='Original Vector')
    plt.quiver(0, 0, x_rotated[0], x_rotated[1], angles='xy', scale_units='xy', scale=1, color='r', label='Rotated Vector')

    plt.xlim(-1.5, 1.5)
    plt.ylim(-1.5, 1.5)

    plt.grid(True)

    plt.legend()
    plt.title('Vector Rotation')
    plt.xlabel('X-axis')
    plt.ylabel('Y-axis')

    plt.savefig("./demo.png")
    plt.show()

附录:RoPE的诞生历史

  • RoPE方案来自苏神原始博客:
    • 2021年2月在让研究人员绞尽脑汁的Transformer位置编码中提出想法
    • 2023年3月在Transformer升级之路:2、博采众长的旋转式位置编码中给出详细方案和推导,同时提交论文到arXiv上
    • 原始论文:Roformer: Enhanced Transformer With Rotray Position Embedding,该论文24年发表于Neurocomputing期刊上(《Neurocomputing》是国际知名期刊,被列为中科院SCI二区top期刊,CCF-C类期刊)
    • 随后,各种开源大模型开始使用RoPE,RoPE逐渐成为大模型的标配

附录:RoPE的高维扩展

  • 论文介绍当前的是一维 RoPE,每 2 维为一组,旋转矩阵为 \(2\times 2\),在二维 RoPE 场景中,可以每 4 维为一组,旋转矩阵变成 \(4\times 4\) 即可,详情见 旋转式位置编码 (RoPE) 知识总结
  • 将四个维度作为一组:
    $$
    \boldsymbol{R}_{m_1,m_2} =
    \begin{bmatrix}
    \cos m_1 \theta & -\sin m_1 \theta & 0 & 0 \\
    \sin m_1 \theta & \cos m_1 \theta & 0 & 0 \\
    0 & 0 & \cos m_2 \theta & -\sin m_2 \theta \\
    0 & 0 & \sin m_2 \theta & \cos m_2 \theta
    \end{bmatrix}
    $$
  • 上述分组下满足:
    $$
    \mathbf{R}_{m_1,m_2}^{\top} \cdot \mathbf{R}_{n_1,n_2} = \mathbf{R}_{n_1 - m_1,n_2 - m_2}
    $$
  • 注:更高维度的可以继续扩展,比如三维的扩展为每 6 维为一组,旋转矩阵为 \(6\times 6\) 即可

附录:RoPE中的复数和旋转矩阵等价性证明

问题定义

  • 定义二维旋转矩阵和向量如下:
    $$
    \begin{align}
    R_{\theta_i}^m &= \begin{pmatrix}
    \cos m\theta_i & -\sin m\theta_i \\
    \sin m\theta_i & \cos m\theta_i
    \end{pmatrix} \\
    \boldsymbol{x} &= \begin{pmatrix} x_1 \\ x_2
    \end{pmatrix}
    \end{align}
    $$
  • 目标:证明下面的等式
    $$R_{\theta_i}^m \boldsymbol{x} = z e^{i m\theta_i}$$
    • 其中 \( z = x_1 + i x_2 \) 是向量 \(\boldsymbol{x} = \begin{pmatrix} x_1 \\ x_2 \end{pmatrix}\) 的复数形式
    • 即目标是证明:旋转矩阵 \( R_{\theta_i}^m \) 作用在 \(\boldsymbol{x}\) 上相当于将复数 \( z \) 乘以旋转因子 \( e^{i m\theta_i} \)

证明

  • 方程左边展开
    $$
    R_{\theta_i}^m \boldsymbol{x} = \begin{pmatrix}
    \cos m\theta_i & -\sin m\theta_i \\
    \sin m\theta_i & \cos m\theta_i
    \end{pmatrix}
    \begin{pmatrix} x_1 \\ x_2 \end{pmatrix} =
    \begin{pmatrix}
    x_1 \cos m\theta_i - x_2 \sin m\theta_i \\
    x_1 \sin m\theta_i + x_2 \cos m\theta_i
    \end{pmatrix}
    $$

    • 这个结果对应的复数为:
      $$
      R_{\theta_i}^m \boldsymbol{x} = (x_1 \cos m\theta_i - x_2 \sin m\theta_i) + i (x_1 \sin m\theta_i + x_2 \cos m\theta_i)
      $$
  • 等方程右边展开

    • 右边的 \(\boldsymbol{x} e^{i m\theta_i}\) 表示将复数 \( z = x_1 + i x_2 \) 乘以 \( e^{i m\theta_i} \),即:
      $$
      z e^{i m\theta_i} = (x_1 + i x_2)(\cos m\theta_i + i \sin m\theta_i)
      $$
    • 可以重新整理为:
      $$ z e^{i m\theta_i} = (x_1 \cos m\theta_i - x_2 \sin m\theta_i) + i (x_1 \sin m\theta_i + x_2 \cos m\theta_i) $$
    • 展开后与旋转矩阵作用的结果完全一致
  • 结论: 在复数表示下,旋转矩阵 \( R_{\theta_i}^m \) 作用在向量 \(\boldsymbol{x}\) 上等价于将对应的复数 \( z \) 乘以旋转因子 \( e^{i m\theta_i} \)。因此,等式成立:
    $$
    \color{red}{R_{\theta_i}^m \boldsymbol{x} = \boldsymbol{x} e^{i m\theta_i}}
    $$


附录:旋转位置编码的其他推导过程

  • 下面的推导过程来自通俗易懂-大模型的关键技术之一:旋转位置编码rope(2)和通俗易懂-大模型的关键技术之一:旋转位置编码rope (3),推导过程看过,基本没有问题,先截图,以后有时间再手打一遍
  • \(q,k\) 向量旋转后再进行Attention,注意图中 \(e^{im\theta}\) 的 \(i\) 是虚数的意思,这里使用二维向量 \((\boldsymbol{W}_q\boldsymbol{x}_m)\) 乘以一个虚数的本质是想表达向量内积的意思(虚数可以展开成二维向量),此外,\(a_{m,n}\) 表示 Attention 权重,在不考虑权重时值为 Softmax,Element-wise看:\(a_{m,n} =\frac{\exp(\frac{q^T_m k_n}{\sqrt{d_k}})}{\sum_{j=1}^N \exp(\frac{q^T_m k_j}{\sqrt{d_k}})}\),注:下图中的表达有误,实际上应该是 \(a_{m,n}=\frac{\exp(\frac{ {x^{\prime}_m}^T x^{\prime}_n}{\sqrt{d_k} })}{\sum_{j=1}^N \exp(\frac{ {x^{\prime}_m}^T x^{\prime}_j}{\sqrt{d_k} })}\)(详情见原始论文:(RoPE) RoFormer: Enhanced Transformer with Rotary Position Embedding, Arxiv 2023 & Neurocomputing 2024, 追一科技 )
  • 公式1,2,推导出公式3的过程(内积角度)
  • 公式1,2,推导出公式3的过程(公式角度)
  • 内积角度和公式角度推导结果可以对齐
  • 扩展到多维的方式,将模型d_model维度按照两两一组分(注意这里不是序列两两分,序列本来做Attention就是两两做内积的),这里要求模型维度是偶数的
  • 公式化简
  • 代码实现
    • 上述实现中使用了torch.einsum,本质是爱因斯坦求和约定 ,是矩阵乘法的一种表示,C = torch.einsum("n,d->md", A,B)表示矩阵C[m,d] = A[n]*B[d],,这是个很常用的省略写法,更详细的可以看看图学 AI:einsum 爱因斯坦求和约定到底是怎么回事?
1…345…61
Joe Zhou

Joe Zhou

Stay Hungry. Stay Foolish.

608 posts
49 tags
GitHub E-Mail
© 2026 Joe Zhou
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4