
DeepSeek-R1关键创新技术再总结 原创
本文详细介绍 DeepSeek 模型中的一些创新技术,包括对 Transformer 架构的改进(如 MLA、MOE)、Multi-Token Prediction 提高训练效率、算法、框架和硬件的协同设计、Group Relative Policy Optimization (GRPO) 强化学习算法,以及结合监督微调和强化学习的迭代训练方法。这些技术不仅提高了模型的性能,还显著降低了训练成本。记录供参考。
1. MLA多头潜在注意力
Transformer架构的注意力机制是实现高效自然语言处理的关键组件。Multi-Head Latent Attention(MLA)是DeepSeek模型中用于改进标准多头注意力(Multi-Head Attention, MHA)的一种创新技术。
1.1 标准多头注意力
每个头的计算过程如下:
1.2 低秩键值联合压缩
1.3 解耦旋转位置嵌入
MLA通过引入低秩矩阵和解耦RoPE,减少了KV缓存的大小,同时保持了甚至优于标准MHA的性能。这种改进使得MLA在处理长上下文时更具效率。
2 MOE(混合专家系统)
MoE是一种用于提高模型参数规模和计算效率的架构设计。在深度学习中,特别是在大语言模型中,MoE 通过将模型的前馈网络 FFN层替换为专家网络来实现这一目标。
在 MoE 架构中,模型的 FFN 层被替换为多个专家网络(experts),这些专家网络在结构上与标准的 FFN 相同。输入的每个 token 被路由到一个或多个专家进行处理。这种路由机制通常通过一个门控函数来实现,该函数决定每个 token 应该分配给哪些专家。
transformer vs MOE
2.1 细粒度专家分割
在传统的 MoE 架构中,整个 FFN 层被看作是一个整体,并被分割为若干个专家。细粒度专家分割在此基础上进一步细化,将 FFN 层分割为更小的子模块,每个子模块对应一个专家。这种分割方式可以表示为:
- 如果传统 MoE 中每个 FFN 层有N个专家,每个 token 激活K个专家。
- 在细粒度 MoE 中,每个 FFN 层被分割为m个更小的专家,这样每个 token 将激活mK个专家。
这种细粒度分割策略提高了激活专家的组合灵活性,使得模型能够更好地适应不同的输入特征。
2.2 共享专家隔离
共享专家隔离是一种优化策略,旨在减少不同专家之间的参数冗余。在 MoE 中,一些专家被指定为共享专家,这些专家负责捕捉跨不同上下文的通用知识。
- 设定Ks个专家作为共享专家。
- 每个 token 在被路由到其特定的专家之外,还会被分配到这些共享专家。
为了保持计算成本的恒定,总路由专家数Nr减少为mN-Ks ,每个 token 激活的路由专家数减少为mK-Ks 。
2.3 负载均衡
在 MoE 中,自动学习的路由策略可能会导致负载不均衡的问题,即某些专家总是被选择而其他专家则未被充分利用。为了解决这个问题,引入了负载均衡的辅助损失函数:
- 专家级别的负载均衡损失函数通过监控每个专家的激活次数和亲和度来调整路由策略,以确保专家的均匀使用。
- 设备级别和通信负载均衡用于确保在不同设备上的计算和通信负载均衡。
负载均衡的目标是使每个专家的激活次数尽可能均匀,以避免某些专家过载而其他专家闲置。
2.4 辅助损失函数
负载均衡的辅助损失函数通常包括专家级别的平衡损失,其形式化定义如下:
通过最小化这个损失函数,可以促使专家的激活次数和亲和度更加均匀分布。
小结
MOE 通过将模型的 FFN 层替换为多个专家网络,并通过细粒度分割和共享专家隔离来提高模型的参数规模和计算效率。负载均衡策略则确保了专家的均匀使用,避免了资源浪费。
3 MTP
在 MTP 中,模型不仅预测下一个词,而是预测一系列连续的词。对于输入序列中的每个词,模型会预测一个因果链上的多个后续词。这种方法通过在训练过程中增加更多的预测目标来提高模型的样本利用率。
3.1 实现细节
MTP 的实现通常涉及以下几个步骤:
- 多阶段预测:在每个训练步骤中,模型会生成一个因果链,预测多个后续词。这个过程可以通过在模型中添加多个预测头来实现,每个预测头负责预测不同深度的后续词。
- 共享嵌入层和输出头:在每个深度的预测中,使用共享的嵌入层和输出头来处理输入和生成输出。这样可以减少模型的参数量并提高计算效率。
- 独立变换器块和线性投影层:每个深度的预测还包括一个独立的变换器块和一个线性投影层。输入到线性投影层的信号是当前深度的嵌入和前一深度的输出嵌入的拼接。
- 损失函数:MTP 的训练目标是最大化多阶段的交叉熵损失。具体来说,损失函数是每个深度的交叉熵损失的平均值:
3.2 挑战
- 计算开销:由于需要预测多个后续词,MTP 引入了额外的计算开销,导致训练时间增加。
- 复杂性:MTP 的实现比传统的单词预测更为复杂,需要仔细设计模型结构和训练策略。
4 算法、框架和硬件的联合设计
在深度学习模型的开发和训练中,算法、框架和硬件的协同设计对于提高训练效率和模型性能至关重要。DeepSeek 模型在这方面进行了多项创新,特别是在算法和硬件优化方面。
4.1 DualPipe
DualPipe 是一种创新的管道并行算法,旨在减少跨节点专家并行性引入的通信开销。在大型模型训练中,通常需要在多个 GPU 或节点之间分配计算任务,这会导致大量的通信开销。DualPipe 通过重叠计算和通信来减少这种开销。
实现细节
- 管道划分:DualPipe 将每个计算块划分为四个部分,其中反向计算块进一步划分为输入和权重两部分。这种划分有助于减少管道气泡(pipeline bubbles),即计算和通信之间的空闲时间。
- 双向调度:DualPipe 采用双向管道调度,从管道的两端同时提供数据。这种策略可以进一步提高计算和通信的效率。
- 通信隐藏:通过将一部分 GPU SMs(流处理器)专门用于通信,DualPipe 可以确保在执行期间通信完全隐藏,从而实现接近零的全对全通信开销。
- 内存消耗:DualPipe 需要保留两个模型参数的副本,导致额外的内存消耗。尽管如此,研究表明这种开销是可以接受的,因为计算和通信效率的提升弥补了这一点。
改进
最近的研究表明,DualPipe 的双向部分是不必要的,并可以通过“减半”程序来移除,从而进一步减少内存消耗。
4.2 FP8 混合精度训练
混合精度训练是一种在保持模型性能的同时提高训练效率的技术,可以在不牺牲性能的情况下减少计算资源的使用。DeepSeek 使用 FP8 精度来实现高效的训练。
实现细节
- 精度选择:FP8 是一种低精度格式,用于加速计算。然而,由于某些操作对低精度计算敏感,DeepSeek 在嵌入模块、输出头、MoE 门控模块、归一化操作和注意力操作中保持了原始精度。
- 量化策略:为了扩展 FP8 格式的动态范围,DeepSeek 采用了一种细粒度的量化策略。具体来说,使用 tile-wise 或 block-wise 分组来处理数据,其中Nc是通道大小,在 DeepSeek 中设置为 128。
- 高精度积累:为了确保计算的准确性,DeepSeek 在低精度 GEMM 操作中使用高精度积累。具体来说,通过定期将中间结果复制到 CUDA 核心的 FP32 寄存器中进行全精度 FP32 积累。
5 GRPO
先来简单看下PPO和GRPO的区别:
- PPO:通过奖励和一个“评判者”模型(critic 模型)评估每个行为的“好坏”(价值),然后小步调整策略,确保改进稳定。
- GRPO:通过让模型自己生成一组结果(比如回答或行为),比较它们的相对质量(优势),然后优化策略。它的特点是不需要额外的“评判者”模型(critic 模型),直接用组内比较来改进。
5.1. GRPO目标函数的数学原理
GRPO的目标函数如下:
这个函数看起来复杂,但我们可以将其拆解为几个关键部分,逐一分析其作用和意义。GRPO的目标函数由两大部分组成:策略梯度更新项和KL散度正则化项。我们分别分析它们的作用。
策略梯度更新项
策略梯度部分是目标函数的主要成分,形式为:
核心思想
概率比
剪切操作
这限制了策略更新的幅度,防止单次更新偏离旧策略太远。
最小值操作
这种设计类似于PPO算法,通过剪切和最小值操作增强训练稳定性。
平均操作
这些平均和期望操作使目标函数能够泛化到不同的状态和轨迹。
KL散度正则化项
GRPO算法的整体工作流程
GRPO是一种基于组奖励的策略优化算法,其工作流程可以分为以下几个步骤:
整个流程通过迭代优化实现:从输入问题到生成响应,再到奖励分配和优势计算,最后更新策略,形成一个闭环。
6 训练后:对基础模型进行强化学习
在深度学习模型中,训练后的强化学习(RL)阶段通常用于进一步提升模型的性能,特别是在生成任务中。DeepSeek 模型在这一阶段采用了多种策略来优化其表现。
6.1 纯强化学习(Pure Reinforcement Learning)
纯强化学习是指在没有监督微调(SFT)数据的情况下,直接对基础模型进行强化学习。DeepSeek-R1-Zero 是通过这种方式训练的模型。
实现细节
- 基础模型:DeepSeek-R1-Zero 基于 DeepSeek-V3-Base 模型进行训练。该模型没有使用任何 SFT 数据,完全通过强化学习进行优化。
- GRPO 算法:DeepSeek-R1-Zero 使用 Group Relative Policy Optimization (GRPO) 算法进行训练。GRPO 通过直接估计优势函数来简化 PPO 的实现,从而提高训练效率。
- 奖励函数:模型使用两种类型的奖励函数: •准确性奖励:评估模型响应的正确性。 •格式奖励:强制模型在其思考过程中使用特定的标签(如
<think>
和</think>
),以提高可读性和逻辑性。 - 训练模板:设计了一个训练模板来指导模型遵循特定的格式,先生成推理过程,然后给出最终答案。
挑战:纯强化学习虽然能够提高模型的性能,但也面临一些挑战,如生成内容的可读性和语言一致性。这些问题通常需要通过进一步的训练和优化来解决。
6.2 强化学习与冷启动
DeepSeek-R1 采用了一种迭代训练方法,结合了监督微调和强化学习来优化模型性能。
实现细节
- 冷启动阶段:为了缓解 RL 训练初期的不稳定性,DeepSeek-R1 收集了数千个长链推理(Chain-of-Thought, CoT)示例来微调 DeepSeek-V3-Base 模型。这为后续的强化学习提供了坚实的基础。
- 推理导向的 RL:在冷启动数据上微调后,模型进行与 DeepSeek-R1-Zero 相同的 RL 训练过程。为了提高语言一致性,引入了一个额外的奖励来衡量 CoT 中目标词的比例。
- 拒绝采样和 SFT:在这一阶段,模型的目标是提高其在写作、角色扮演等通用任务上的表现。通过拒绝采样从检查点收集约 600k 的推理相关训练样本,并保留正确的响应。此外,还收集了约 200k 的非推理训练样本。
- RL 对齐:这一阶段的目的是更好地对齐模型与人类偏好,提高其有用性和无害性,同时改进推理能力。有用性基于响应的效用和相关性进行评估,而无害性则通过评估整个响应来减少潜在风险、偏见或有害内容。
通过这种迭代训练方法,DeepSeek-R1 能够在保持高准确性的同时,提高生成内容的质量和多样性。
公众号大模型自然语言处理 作者:余俊晖
原文链接:https://mp.weixin.qq.com/s/QnFpaG4253PrWwejFCbp_g
