Skip to content

DeepSeek 系列

📅 发表于 2025/07/16
🔄 更新于 2025/07/16
👁️ -- 次访问
📝 0 字
0 分钟
deepseek
#DeepSeek R1
#R1-Zero
#Native Sparse Attention

(2505) DeepSeek-R1-0528

(2502) Native Sparse Attention

摘要
  • paper
  • Native 稀疏注意力思想:使用动态计算更紧凑的KV,保证稀疏性,解决了传统稀疏注意力实际效果不好的问题。
    • 压缩块级粗粒度选择保留细粒度局部滑动注意力,3种注意力加权求和

问题背景:长度扩展依赖稀疏注意力

❓问题背景

稀疏注意力对长度扩展有用

llm长度很重要

  • 长度很重要,但传统softmax注意力,时间复杂度随文本长度二次方增长太高了不ok
    • 如:解码64k长度,softmax注意力占据70-80%时间

稀疏注意力可解

  • 稀疏注意力:只选择与Q相关的少量Token,来计算Query-Key注意力
  • 稀疏注意力笔记

稀疏注意力实际效果并不好

稀疏注意力存在问题

实际加速效果不好

  • 不符合硬件计算逻辑, 内存访问不连续

    • Sparse Attention 逻辑:减少FLOPS运算,随机、不规则访问内存

    • GPU 逻辑:并行计算。

    • 不匹配:导致GPU大量在等待数据、找数据,而非计算,实际加速并不高。

  • 只在推理特定阶段做加速

缺乏预训练/训推不一致

  • 架构偏差/不一致预训练采用full后训练/inference采用sparse

    • 模型未充分学到Sparse,无法充分发挥sparse的潜力和优势
  • 使用稀疏注意力,需解决:硬件对齐问题训练感知问题

稀疏注意力实际不高效的原因

当前稀疏注意力实际不高效的原因

1. 只在推理某个特定阶段做加速

  • H2O(2023):仅在decoding使用Sparse Attention
    • 在prefilling需要计算复杂的预处理,如注意力map/索引构建等操作。
  • MInference(2024):仅在prefilling使用Sparse Attention

2. 与主流解码架构MQA/GQA不兼容

  • MQA,GQA

    • 多个Q头 共享 1组 K和V头
    • 解码时非常高效,GPU只需从内存加载一小部分K和V
  • Quest(2024)/Sparse

    • 核心设计:每个Q头独立选择KV-Cache

    • 在MHA下,是稀疏的,但在GQA下

      • 需把Group内所有Q头独立选的KV-Cache都访问选出来,做并集,作为GQA的KV

      • 虽然Sparse减少计算操作,但需要的KV-Cache却仍然高

      • 在解码阶段,内存访问非常高内存是瓶颈,最终导致实际加速效果不理想

稀疏注意力训练存在挑战

稀疏注意力训练困难

1. 若不训练稀疏注意力,直接用效果不好

  • 预训练好的模型(Full Attention)上,直接应用稀疏注意力,会损害模型性能

2. 若训练稀疏注意力,则存在挑战

  • 某些稀疏操作不可微分,导致模型无法学习
    • 训练依赖梯度,某些操作是离散的,要么A要么B,没有中间状态,导致梯度无法通过这些操作回传
  • 某些操作尽管理论上可训练,但其内存访问模式非常不规则,导致在GPU上训练效率很低
    • FlashAttention利用SRAM 把连续内存块加载进来进行计算。
    • 但某些Sparse是Token粒度的,可能会选择5、28、106这些不连续的token
      • GPU需要从内存的各零散位置去读数据
      • 大部分时间都在找数据、而非算数据,导致训练速度极慢。

Native Sparse Attention

核心思想

📕核心方法

核心方法

核心思想

  • 对每个qt不使用原始完整的KV,使用通过q和上下文kv动态计算出来的更紧凑的KV
  • 重新映射的KV总数,远小于原始总数,维持高稀疏性Ntt
K~t=fK(qt,k:t,v:t),V~t=fV(qt,k:t,v:t)ot=Attn(qt,K~t,V~t)
  • 同时有压缩选择滑动3种策略进行加权,权重由门控网络计算出来。ot=cCgtcAttn(qt,K~t,V~t)

压缩/选择/滑动

压缩粗粒度注意力

压缩思想

  • 通过将连续的键值块聚合成块级表示,来捕获整个块的信息
  • 创建了更紧凑信息更密集的键值对
  • 把多个token进行压缩聚合

具体做法

  • 将K序列分成长度为l的块,每块之间有d的滑动步长。
  • 一个可学习的MLP(多层感知器)φ与块内位置编码一起,将每个块中的键映射到一个压缩键。

优的

  • 捕获更粗粒度的高级语义信息,从而减少注意力机制的计算负担

缺点

  • 可能丢失细粒度信息
选择性保留注意力

选择思想

  • 选择性保留的细粒度token

  • 从历史信息中,挑选最重要的几个信息快,来参与计算

具体做法

  • 重要性分数
    • NSA利用压缩令牌的注意力计算产生的中间注意力分数来推导选择块的重要性分数
  • Top-n 选择
    • 在获得选择块的重要性分数后,保留在按块重要性分数排名的Top-n稀疏块中的令牌。

优点

  • 在降低计算复杂度的同时,保留重要的细粒度信息避免因过度压缩而损失关键细节
滑动局部注意力

目的

  • 为了防止局部模式过快适应并主导学习过程,从而阻碍模型从压缩和选择令牌中有效学习
  • NSA引入了一个专门的滑动窗口分支来显式处理局部上下文

核心思想

  • 处理局部信息的滑动窗口,只关注最近一小段的历史信息

核心创新

硬件对齐

Hardware-aligned System

背景

  • 稀疏注意力的硬件不对齐问题,计算逻辑不同,导致实际加速和理论不匹配。

核心思想

  • NSA 所有操作都是基于block,使得内存访问变得很规整、连续,方便GPU。

训练感知

训练感知

背景

  • Sparse缺乏预训练问题、训推不一致问题。

核心思想

  • 端到端训练,模型从预训练开始,就学会如何高效做信息压缩和筛选
  • 使得稀疏模式和模型本身就很匹配。

算法实验

✍️实验设置

实验配置

模型

  • 27B

预训练数据

  • 260B tokens

架构

  • Native Sparse Attention

评估Bench

  • 通用评估
  • 长上下文评估
  • CoT 推理评估

🍑关键结果

关键结果
  • 在通用、长上下文、CoT上,NSA和Full 效果差不多,但提速却达6-11被。

计算效率

⛳未来方向

未来方向

(2501) DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning

摘要

问题背景

❓问题背景

问题背景
  • LLM在推理方向有进展,但在复杂数学和科学上仍是重大挑战,开源界缺乏复制o1的明确路径。⚠️
  • 之前推理相关方法存在问题 👿
    • SFT方法高质量SFT推理数据成本高难以获取
    • RL方法:通常和SFT数据结合,难以探索纯RL潜力
    • Test-Time Scaling:通过长度提升能力,但如何有效扩展,仍然是挑战。
    • PRM:实际场景难以应用存在局限性
    • MCTS搜索:效果有限。

核心方法

📕核心方法

整体训练流程

训练流程
  • DeepSeek-R1-Zero:纯强化学习
  • DeepSeek-R1:冷启动SFT -> 推理任务RL -> Cot+通用数据SFT(80w) -> 全场景RL
  • 蒸馏小模型:直接用80w数据做SFT

R1-Zero

DeepSeek R1-Zero 纯强化学习

核心思想

  • 核心方法:直接基模+Rule-based RL,不使用SFT
  • Reward
    • 准确率奖励:评估答案正确性,答案输出在box中,数学/Code任务。
    • 格式奖励:输出遵循格式, <think>
  • 🔥GRPO算法
    • 通过组内奖励来优化模型,无需critic model
    • 采样一组输出并计算组内奖励均值和标准差来估计优势函数,来优化模型
  • 训练模板
    • 特定prompt,要求模型先生成推理过程,再输出最终答案,保证可解释性。

💥取得效果

  • 数学评估:随RL推进,AIME24任务由15.6% -> 71%,媲美o1-0912
  • 自我演化过程
    • 输出长度不断增加,从几百到几千token,
    • 模型自然获得解决复杂任务的能力,更深入探索和优化思维过程
  • 顿悟时刻(AhaMoment)🤔
    • 主动回溯、推翻先前想法并重新推理的行为。类似于人类恍然大悟

💔缺点不足

  • 可读性差语言混合

R1-多阶段训练方式

DeepSeek R1 冷启动+多阶段训练方式

目标

  • 解决R1-Zero中存在的语言混合/可读性差等问题。
  • 训练一个人类友好、通用性强的模型

🐱阶段1:冷启动

  • 目的:为了避免RL不稳定,让模型掌握基本CoT能力,更具输出可读性
  • 思想:RL之前,使用小部分高质量CoT数据微调模型,作为最初RL Actor,使用DeepSeek-V3-base作为起点
  • 数据方法:
    • Few-Shot Long Cot方法:让模型输出带反思和验证的答案
    • 收集R1-Zero结果:进行人工修正优化
    • 最终收集几千条数据📚

🐸阶段2:推理导向的强化学习

  • 目的:专注于推理任务做大规模强化学习,解决语言一致性问题
  • 方法:在冷启动模型上,使用代码/数学/科学/逻辑推理等数据(具有明确答案)做RL
  • 奖励设置
    • 语言一致性:计算目标语言在CoT中的比例。reard=CoT中目标语言的Token数CoT总Token数
    • 答案正确性:正确答案。

🐬阶段3:拒绝采样和SFT

  • 目的:提升模型在写作/问答/RolePlay等通用任务上的能力
  • 方法:构建推理和非推理SFT数据,基于V3-Base做SFT。
  • 推理数据构建(60w)
    • 核心:用上阶段RL模型做拒绝采样每个推理样本生成多个轨迹,仅保留正确选项,构建高质量样本
    • 评估筛选标准
      • 规则判断:对于数学等容易判断的,使用rule进行判断。
      • 模型判断:对于rule无法判断的,用DeepSeekV3作为生成式RM,同时输入标准和模型答案,来判断是否正确。
      • 可读性过滤:过滤难以阅读的样本,比如语言混合、过长段落、过长代码片段等。
  • 非推理数据构建(20w)
    • 核心:使用Deepseek-v3的pipeline部分v3的SFT数据
    • 方法:让v3在回答任务之前,先生成一些Cot;对于简单任务(如hello),则不需要Cot
  • 训练:使用80wSFT数据对V3-Base做了2轮SFT训练

🐶阶段4:全场景下的强化学习

  • 目的:使模型在推理和非推理所有任务上表现良好,保证安全性和无害性
  • 方法:在上阶段的SFT模型上进行RL训练。

小模型蒸馏

蒸馏小模型
  • 核心:使用80wSFT数据,直接对Qwen/LLaMA等小模型做SFT微调
  • 效果:显著提高了小模型的性能🚀,在较小训练开销下取得远胜于自身RL学习的效果👍,展现出蒸馏技术的有效性。

算法实验

✍️实验设置

实验配置
  • 基准评测:
    • 多种数学推理(AIME24/Math500)
    • 代码题(LiveCodeBench/Codeforces)
    • 知识问答(MMLU/GPQA/SimpleQA)
    • 开放式场景(AlpacaEval2.0/ArenaHard)
  • 蒸馏模型评测:AIME24/Math500/GPQA/Codeforces/LiveCodeBench。
  • 参数设置:最大生成长度32k,temperature=0.6, top-p=0.95,每次生成64回答以估计pass@1

🍑关键结果

关键结果
  • DeepSeekR1 效果好
    • 教育知识Bench效果好相比V3提升显著(MMLU-Pro/GPQA等)
    • 指令遵循能力强(IF-Eval),摘要简洁长度偏差小
    • 数学推理能力和o1持平,远超其他模型
  • 蒸馏模型效果好
    • R1-Qwen-7B所有方法超过GPT4o-0523,R1-14B全面超越QwQ-32B-Preview,R1-32B和R1-70B大多数都优于o1-mini

未来方向

⛳未来方向

未来方向
总访客数:   ·   总访问量:
PLM's Blog @ 2016 - 2025