随着 ChatGPT 迅速走红,这两年大家在日常工作中使用 LLM 进行的场景越来越多。本系列将针对主流算法架构进行讲解。
另外,我撰写的大模型相关的博客及配套代码均整理放置在Github:llm-action,有需要的朋友自取。
本文将讲述今年春节期间火遍全网的国产之光DeepSeek的技术演进及模型架构。
DeepSeek 发展历程
DeepSeek 从诞生至今,已经陆续发布了V1、V2、V3、R1等模型。
DeepSeek-V1
从微观上讲, DeepSeek-V1 遵循了LLaMA的设计,采用了Pre-Norm结构(使用RMSNorm函数),并使用SwiGLU作为 FFN 的激活函数。此外,该架构还采用了旋转位置编码(Rotary Embedding)来处理位置信息。为了优化推理成本,67B模型使用了分组查询注意力(GQA)来替代传统的多头注意力(MHA)。
从宏观上讲,DeepSeek LLM与LLaMA略有不同。具体来说,DeepSeek LLM 7B是一个30层的网络,而DeepSeek LLM 67B有95层。层的调整不仅保持了与其他开源模型的参数一致性,还便于模型的流水线分割,从而优化训练和推理过程。与大多数使用GQA的工作不同,在67B模型中通过增加网络深度而不是常见的扩展FFN中间层宽度来扩展参数,以实现更好的性能。
具体的模型参数规格以及模型类型如下:
DeepSeek-V2
DeepSeek-V2 是一种强大、经济且高效的 MOE 大语言模型,具备2360亿参数,其中,每个Token激活21亿参数,支持 128K Token 的上下文长度。它采用了MLA和DeepSeekMoE架构,实现了显著提升了推理效率,同时降低了训练成本。
具体模型规格如下:
而模型测评结果显示 DeepSeek-V2 Chat 对其他业界大模型相比,具备很强的竞争力:
此外,DeepSeek-V2 模型 的 API 定价远低于同行。
DeepSeek-V2 主要创新点为MLA与DeepseekMOE。
MLA,即 Multi Latent Attention,对传统多头注意力(MHA)的改进,利用低秩KV联合压缩来消除推理时KV Cache的瓶颈。其作用如下:
- 降低推理过程中的KV Cache资源开销。缓解MQA、GQA对性能的损耗。
DeepseekMOE,则改进了传统MOE结构,传统MoE的缺陷如下:
- 知识杂糅(Knowledge Hybridity):传统的MoE模型中,每个专家往往需要处理多种类型的知识,这使得专家难以形成专门化的知识结构。知识冗余(Knowledge Redundancy):不同的专家在处理不同的输入时可能需要相同的知识,导致多个专家中存在重复的知识,浪费了模型参数。
DeepseekMOE的具体策略如下:
- 细粒度专家拆分(Fine-Grained Expert Segmentation):通过将每个FFN专家进一步细分,使模型在保持参数总数不变的情况下,激活更多的、更细粒度的专家。这种策略使得各个专家能够专注于更细致的知识领域,提高了专家的专业化程度。共享专家隔离(Shared Expert Isolation):设置一部分专家作为“共享专家”,这些专家总是被激活,用于捕捉和整合常见的跨上下文知识。这样可以减少路由专家之间的知识冗余,每个路由专家可以更专注于独特的知识领域。
DeepSeek-V3
DeepSeek-V3 服用了DeepSeek-V2 的模型架构,此外,引入了MTP。
- Multi-head Latent Attention (MLA)
优势:保障模型同时关注输入的多个方面,同时使推理更高效。
- DeepSeekMoE
优势:训练更经济实惠。
传统的负载平衡方法可能会使用辅助损失函数来确保各个专家模块的负载均衡,但DeepSeek-V3开创了一种无需辅助损失的策略。这种策略可以均匀地分配计算负载,最大限度地减少了因鼓励负载均衡而导致的性能下降,使模型训练更加稳定,并且在推理阶段能够更准确地生成结果。
具体来说,该策略通过为每个专家添加一个偏置项,动态调整专家的负载,在训练过程中,如果某个专家的负载过高,则减少其偏置项;如果负载过低,则增加偏置项,从而避免了因负载不均衡导致的性能下降。
为了防止单个序列内出现极端的负载不均衡,DeepSeek-V3 还引入了一个序列级的辅助损失,但其权重非常小,主要用于微调负载均衡。
- Multi-Token Prediction (MTP)
引入 MTP 的目的是为了在每个位置预测多个未来的Token,而不是仅预测下一个Token。其优势在于能够增强模型的训练信号,提高数据利用效率,并可能使模型更好地规划未来的表示,从而提升整体性能;也可以用于推理加速的投机解码。
每个 MTP 模块包含一个共享的嵌入层、一个共享的输出头、一个 Transformer 块和一个投影矩阵。
在预测第 i 个额外Token时,将前一个预测的隐藏状态与当前Token的嵌入进行拼接,然后通过 Transformer 块和输出头进行计算。最终,通过计算每个 MTP 模块的交叉熵损失,并将其加权平均,作为模型的额外训练目标。
此外,DeepSeek-V3 具体模型规格如下:
与业界最先进模型的测评结果对比如下:
DeepSeek-V3 的训练过程:
- 预训练:迈向极致的训练效率
- 设计了一个 FP8 混合精度训练框架,并首次验证了在超大规模模型上进行 FP8 训练的可行性和有效性。通过算法、框架和硬件的协同设计,克服了跨节点 MoE 训练中的通信瓶颈,几乎实现了计算与通信的完全重叠。这显著提高了训练效率并降低了训练成本,使得在不增加额外开销的情况下进一步扩大模型规模。以仅 266.4 万 H800 GPU 小时的经济成本,在 14.8 万亿Token上完成了 DeepSeek-V3 的预训练,产生了目前最强的开源基础模型。预训练之后的后训练阶段仅需 0.1 万 GPU 小时。
- 后训练:从 DeepSeek-R1 提取知识进行蒸馏
- 引入了一种创新的方法,将长思维链模型的推理能力蒸馏到标准 LLM 中。即将 R1 的验证和反思模式整合到 DeepSeek-V3 中,并显著提高了其推理性能。同时,还控制了 DeepSeek-V3 的输出风格和长度。
DeepSeek-V3 的训练成本:
其总训练成本仅为557万美元,远低于传统大模型数亿美元的训练成本,这使得其在资本和技术领域都获得了极大的竞争优势。
DeepSeek-R1
DeepSeek-R1基于DeepSeek-V3在后训练阶段大规模使用了强化学习技术,在仅有极少标注数据的情况下,极大提升了模型推理能力。在数学、代码、自然语言推理等任务上,性能比肩 OpenAI o1 正式版。
R1的主要贡献为开源3类模型(共8个模型)以及对应的训练方法。
- 通过DeepSeek-R1-Zero,首次公开验证了纯强化学习激发LLM推理能力的可行性,即无需预先的 SFT 数据,仅通过强化学习,就能激励模型学会长链推理(long-CoT)、自我验证(self-verification)、反思(reflection)等能力。提出了多阶段训练策略(冷启动->RL->SFT->全场景 RL),有效兼顾准确率与可读性,产出 DeepSeek-R1,性能比肩 OpenAI-o1-1217。展示了知识蒸馏在提升小模型推理能力方面的潜力,并开源多个尺寸的蒸馏模型(1.5B~70B),提供了在低资源环境中也能获得高推理能力的模型选择。
具体的蒸馏模型如下:
其中, 32B 和 70B 模型在多项能力上实现了对标 OpenAI o1-mini 的效果。
DeepSeek-R1 多阶段训练流程
DeepSeek-R1的多阶段训练流程如下:
- 阶段1:使用少量高质量的 CoT 数据进行冷启动,预热模型。阶段2:进行面向推理的强化学习,提升模型在推理任务上的性能。阶段3:使用拒绝采样和监督微调,进一步提升模型的综合能力。阶段4:再次进行强化学习,使模型在所有场景下都表现良好。
阶段1:冷启动
使用少量(几千条)高质量长 CoT 数据,对DeepSeep-V3-Base进行微调,作为RL训练的初始起点。
冷启动数据的收集方法如下:
- 采用长 CoT 为示例的 few-shot 提示,直接提示模型生成包含反思与验证细节的答案。收集 DeepSeek-R1-Zero 可读性好的输出,并人工改善结果。
DeepSeek-R1 使用冷启动数据进行SFT,相比于DeepSeek-R1-Zero直接基于base模型进行强化学习,具有以下优势:
- 可读性提升。
- DeepSeek-R1-Zero 的输出内容可能存在语言混用或缺乏格式化的问题,导致用户体验不佳。在冷启动数据中,DeepSeek-R1 采用了更友好的输出格式:
|special_token|<reasoning_process>|special_token|<summary>
。这种结构不仅可以清晰地展示推理过程,还会在每个响应末尾提供一个简洁的总结,增强用户的阅读体验。- 冷启动数据的设计为后续强化学习阶段提供了更高质量的初始模型(Initial RL Actor),为模型的进一步优化奠定了基础。
阶段2:面向推理的强化学习
在冷启动数据上对 DeepSeek-V3-Base 进行微调后,采用与DeepSeek-R1-Zero相同的强化学习方法GRPO进行训练。
此阶段侧重点是提升模型的推理能力,尤其是在编程、数学、科学和逻辑推理等推理密集型任务方面。
为缓解语言混杂的问题,在强化学习训练期间引入了语言一致性奖励。
- R1-Zero 奖励函数:准确性奖励 + 格式奖励
- 准确性奖励(Accuracy Rewards):评估生成的最终答案是否正确。格式奖励(Format Rewards):评估是否满足格式要求:思考过程放在标签中,答案放在标签中。
- 语言一致性奖励: CoT 中目标语言 token 所占比例
尽管消融实验表明这种对齐会导致模型效果略有下降,但这种奖励对齐了人类偏好,使其更具可读性。
阶段3:拒绝采样与监督微调
在第二步强化学习收敛后,利用所得的checkpoint来收集监督微调(SFT)数据,并重新对DeepSeek-V3-Base模型进行SFT。
与最初侧重于推理的冷启动数据不同,此阶段引入了来自其他领域的数据,侧重点是提升模型的综合能力,使其在写作、事实问答等多种任务上表现良好。
具体收集的数据分为两个部分:推理数据与非推理数据。
对于推理数据,使用第二阶段强化学习训练后的checkpoint,通过拒绝采样生成推理轨迹。
- 数据生成:对于每个提示,通过设置温度等参数采样多个回答,并仅保留正确的回答。数据过滤:
- 结合两种方法进行数据答案正确性评估:
- 基于规则:对于数学问题,直接对比答案是否正确;对于代码问题,运行生成的代码,对比结果是否正确。基于判断模型:对于此阶段,添加其他来源丰富的数据集,通过将真实值和模型预测输入到DeepSeek-V3中进行判断。
对于非推理数据,比如,写作、事实问答、自我认知和翻译,采用了 DeepSeek-V3 的流程,并重用了 DeepSeek-V3 的 SFT 数据集的部分内容。对于某些非推理任务,在回答问题之前,通过 DeepSeek-V3 并使用提示词来生成一个潜在的思维链。但更简单的查询:比如“你好”;在响应过程中则不会生成 CoT。总共收集了约 20 万个与推理无关的训练样本。
对于写作、事实问答、自我认知和翻译等任务,这些任务通常不需要复杂的逻辑推理或多步计算,更强调信息的准确性、语言流畅性或创造性。生成潜在思维链(CoT)的动机如下:
- 提升回答质量,即使是非推理任务,生成 CoT 可以帮助模型内部组织思路。例如:
- 写作任务:先列出大纲(如“开头引入→论点展开→结论总结”),再生成具体内容。翻译任务:先分析句子结构(如主谓宾拆分),再逐部分翻译并整合。
而简单的查询不生成 CoT 的原因:
- 效率考量:
- 对于“hello”等简单查询,直接回答“你好”即可,无需额外步骤。生成 CoT 会增加响应延迟(如额外生成“用户问候→需友好回应→选择‘你好’”的思考过程)。
最终,第三阶段使用大约80万个样本(60w推理+20w通用)对DeepSeek-V3-Base模型进行了2个eopch的 SFT。
阶段4:对所有场景进行强化学习
在上一阶段 SFT 模型的基础上进行 RL 训练,侧重点是使模型在所有场景下都能表现良好,包括推理任务和非推理任务,并且保证模型的安全性和无害性。
通过奖励信号组合和多样化的提示词分布来训练模型。
- 对于推理数据,遵循 DeepSeek-R1-Zero中的方法,利用基于规则的奖励来引导数学、代码和逻辑推理领域的学习过程。对于一般数据,借助奖励模型来捕捉人类在复杂且微妙场景中的偏好。基于 DeepSeek-V3 流程进行构建,并采用类似的偏好对和训练提示词分布。对于有用性,只关注最终的总结,这样评估就能着重体现回复对用户的有用性和相关性,同时尽量减少对底层推理过程的干扰。对于无害性,评估模型的整个回复,包括推理过程和总结,以识别并减轻生成过程中可能出现的任何潜在风险、偏见或有害内容。
最终,奖励信号的融合与多样化的数据分布使训练出的模型在推理方面表现出色,同时优先考虑帮助性和无害性。
DeepSeek-R1 蒸馏方案
大模型蒸馏简介
什么是蒸馏?
蒸馏是一种机器学习技术,使用一个较小的模型(学生模型)进行训练去模仿一个较大的模型(教师模型)的行为。
在AI中,蒸馏技术通过以下三步实现知识传递:
- 教师生成“解题笔记”:大模型(教师)针对数学、代码等任务生成详细答案,例如:解方程时每一步的推导逻辑。学生模仿“思维模式”:小模型(学生)不再死记硬背答案,而是学习教师解题时的决策过程,比如:优先选择哪种公式、如何验证结果。提炼“知识精华”:最终,小模型能像教师一样举一反三,甚至在未见过的新题型上灵活应用学到的策略。
举个实际例子:
- 教师模型(如:DeepSeek-R1)遇到题目“解方程3x + 5 = 20”时,会生成步骤:“首先减5得3x=15,再除以3得x=5,最后代入验证。”学生模型(如:Qwen-7B)通过大量类似例子,学会“分步拆解+验证”的通用方法,这样,学生模型就不仅仅是记住了x=5这个结果,也学会了解题过程。
为什么需要蒸馏?
其目标是在显著降低计算成本和内存占用的同时,保留大部分教师模型的表现。
- 成本效率:较小的模型需要更少的计算资源。速度:非常适合对延迟敏感的应用(例如:Api、边缘设备)。专业化:在不重新训练巨型模型的情况下为特定领域量身定制模型。
蒸馏类型
大模型的蒸馏大致可以分为以下几类:
- 数据蒸馏:在数据蒸馏中,教师模型生成合成数据,然后用于训练学生模型。这种方法可以应用于广泛的任务。Logits蒸馏:Logits 是应用 softmax 函数之前神经网络的原始输出分数(软标签)。在 Logits 蒸馏中,学生模型被训练成匹配老师的 logits,而不仅仅是最终的预测。特征蒸馏:特征蒸馏涉及到将知识从教师模型的中间层传递给学生。通过对齐两个模型的隐表征,学生可以学习到更丰富、更抽象的特征。
DeepSeek R1的蒸馏
蒸馏小模型
为了获得更高效的小模型,并使其配备像 DeekSeek-R1 的推理能力,直接对 Qwen 和 Llama 等开源模型进行了微调,使用的是上面用于 SFT DeepSeek-R1 的80万数据。使用的基座模型有:
- Qwen2.5-Math-1.5BQwen2.5-Math-7BQwen2.5-14BQwen2.5-32BLlama-3.1-8BLlama-3.3-70B-Instruct
结果表明,这种直接蒸馏方法显著提高了小模型的推理能力。
蒸馏模型评估
通过对蒸馏模型进行评估发现:
- 蒸馏后的Qwen-7B,在所有方面均优于非推理模型 GPT-4o-0513(通过蒸馏,即使较小的模型也能获得不错的推理能力)。蒸馏后的 Qwen-14B 在所有指标上都超越了 QwQ-32B(体现了在小模型领域,通过R1蒸馏的方式,相比于其他开源推理模型的优越性)蒸馏后的 Qwen-32B 和 Llama-70B 在大多数基准测试中均显著优于 o1-mini。
选择蒸馏还是强化学习?
通过蒸馏 DeepSeek-R1,小模型取得了显著成效。然而,这引发了一个疑问:小模型是否能在不依赖蒸馏的情况下,仅凭大规模强化学习训练就达到类似的性能水平?
为了解答这一疑问,DeepSeek 对 Qwen-32B-Base 进行了超过 10,000 步的大规模强化学习训练,最终得到了DeepSeek-R1-Zero-Qwen-32B。如表 6 所示,经过大规模强化学习训练后,其性能与 QwQ-32B-Preview 相当。然而,通过蒸馏 DeepSeek-R1 得到的 DeepSeek-R1-Distill-Qwen-32B 在所有基准测试中的表现均明显优于DeepSeek-R1-Zero-Qwen-32B。这表明,在小参数模型上,直接进行强化学习训练的效果不如通过蒸馏DeepSeek-R1。
为什么直接用 RL 在小模型上训练不如先做大模型再蒸馏?
- 大模型在强化学习阶段可能自发出现许多高阶推理模式。但小模型因为容量和表示能力有限,很难在纯强化学习情境下学到相似水平的推理模式。蒸馏可将「大模型的推理轨迹」直接转移给小模型,小模型只需要模仿大模型相对完备的推理流程,可以在较小训练/推理开销下取得远胜于自身独立强化学习的效果。在蒸馏模型的实现中,仅采用了 SFT 阶段,而未包含 RL 阶段,尽管 RL 的加入能显著提升模型性能。按照 DeepSeek 的说法,本工作的核心目的在于展示蒸馏技术的有效性,而将 RL 阶段的深入探索留给更广泛的研究社群去完成。
此外,DeepSeek-R1训练过程本身也包含了数据蒸馏。比如:DeepSeek-R1训练流程的第一阶段冷启动需要收集数千条带长思维链的数据,主要是通过之前纯RL得到的DeepSeek-R1-Zero 来合成。通过使用带有长链思维(CoT)示例的少样本提示,直接提示模型生成包含反思和验证的详细答案,以可读格式收集 DeepSeek-R1-Zero 的输出,并通过人工标注者的后处理优化结果;又比如:第三阶段的拒绝采样方法在第二阶段的模型的大量输出上,使用多种方式(如:“规则判断”、“将真实值和模型预测输入 DeepSeek-V3 进行判断”、“过滤掉混合语言、长段落和代码块的思维链”等)过滤数据,并添加额外的非推理数据。最后基于DeepSeek-V3-Base进行训练,可以认为是数据合成或数据蒸馏,通过这个过程实现了从Zero到R1的“去其糟粕,取其精华”。
总结
本文主要介绍了DeepSeek的发展历程,从V1、V2、V3到R1;同时,介绍了DeepSeek R1的多阶段训练方法以及 DeepSeek R1 的蒸馏方案。