【大模型】DeepSeek使用与原理解析:从V3到R1

在这里插入图片描述



提示:以下是本篇文章正文内容,下面案例可供参考

一、引言

  DeepSeek R1 是深度求索(DeepSeek,成立于2023年)公司开发的一款智能体(Agent)产品,它能够通过自然语言交互,帮助用户完成各种任务。

在这里插入图片描述

在这里插入图片描述


各种性能评估:

2000快阉割版H800,花费557亿美元(大约是使用1.6万个GPU的Llama3.1的1/10,GPT-4o的1/20),登顶了开源之最。来源于幻方量化,2023年4月成立的全资子公司。

在这里插入图片描述
数学和推理能力:

在这里插入图片描述

整体性能(MMLU代表理解能力):
在这里插入图片描述

二、使用与测评

1.7大R1使用技巧

  • 1:提出明确的要求技巧
    指出具体任务,字数要求等。

  • 2:要求特定的风格技巧
    明确写作风格,写作者身份等

  • 3:提供充分的任务背景信息技巧
    比如提供医疗帮助等,要先明确自己的身体状况。

  • 4:主动标注自己的知识状态技巧
    是否存在已知或未知的知识状态

  • 5:定义目标,而非过程技巧

  • 6:提供AI不具备的知识背景
    因为模型知识的缺乏(24年之后的新知识,或者某公司的内部资料),需要手动补上

  • 7:从开放到收敛
    先询问一个大的范围,再逐步聚焦到其中一个小的点。

2.官网实测

1.提问:
在这里插入图片描述
2.数学题:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.编程(效果略差于claud3.5)

在这里插入图片描述
整体在数学和编程能力上很强,创意生成方面差于chatGPT。上下文只有64k,远远低于cursor里的claude 200k

发展历程

&emsp

三、Deepseek MoE:专家负载均衡 (2024年1月)

主要修改:传统Transformer最后的两层MLP。

  类似于给多个专家分配工作。下图中绿色为常驻专家Shared Expert,蓝色为随机参与工作的Routed Expert。具体激活状态如下:
  设 u t u_t ut为第 t t t个标记的 FFN 输入,我们计算 FFN 输出 h t ′ h'_t ht如下:

在这里插入图片描述
   N s N_s Ns N r N_r Nr分别表示共享专家和路由专家的数量; F F N i ( s ) FFN_i^{(s)} FFNi(s)()和 F F N i ( r ) FFN_i^{(r)} FFNi(r)分别表示第 i i i个共享专家和第 i i i个路由专家; K r K_r Kr表示激活的路由专家数量; g i t g_{it} git是第 i i i个专家的门控值; s i t s_{it} sit是token到专家的亲和度; e i e_{i} ei是这一层中第个路由专家的质心;而Topk(,K)表示由计算出的第 t t t个token和所有路由专家的亲和度得分中最高的K个得分组成的集合。

模型架构层
在这里插入图片描述

对于每一个专家的亲和度(值越高越容易激活)加上一个偏置 b,如下图所示:

在这里插入图片描述

训练过程中,记录每个专家的负载率,通过调整偏置 b 进行循环,最终保证专家负载率平衡。

#以下 a、b、c 为专家,第一个数字为原始亲和度 Sit,第二个数字为偏置 bi,第三个数字为该专家的输出值。
topk 为 2,output 为 MoE 层最终输出:

a: 0.4 - 0.1  100 
b: 0.35 + 0   50 
c: 0.25 + 0.1 120 
moe_output = 50 * 0.35 + 0.25 * 120
  • 1.专家头包括 Share 专家 和 Router 专家。
  • 2.Share 专家 是一直激活的,即输入的 token 都会被 Share 专家头计算。
  • 3.Router 专家头会先和上图中的 u t u_t ut 计算亲和度(代码中直接用一个 Linear 层进行投影),选择 top-k 各专家进行推理。(代码中推理计算 top-k 时,会先将 N 各专家进行分组为 n g r o u p s n_{groups} ngroups,将每个组中 top-2 各专家的亲和力加起来,算出亲和力最高的 top_k_group 个组,然后在这些组里选 top-k 个专家)。
  • 4.最终将所有的 Share 输出和 Router 专家进行亲和度加权相加,得到 MoE 层的输出

在这里插入图片描述

  

白强伟的dp与pp并行原理图:
在这里插入图片描述
横向:同一数据在不同GPU、主机之间通信;
纵向:两个不同的input数据输入,计算出不同的loss,上下两个模型的梯度要求平均

1原始 MLP 的计算量

- **两个矩阵**:
第一个矩阵:[h, 2.5h]。
第二个矩阵:[2.5h, h]。
每个 token 向量的计算量为:

2 MoE 的计算量

MoE 结构:
假设有 n 各专家,每次选用 k 个专家。
每个专家的两个矩阵:
第一个矩阵:
。
第二个矩阵:
。
每个 token 每个专家的计算量为:

  

四、GRPO:群体相对策略优化(DeepSeek-Math,2024年4月)

从PPO 到 GRPO
  Proximal Policy Optimization (PPO,2017)是一个 actor-critic 形式的RL算法 , 常用于LLMs中的fine-tuning阶段 ( 2022). 其通过最大化以下公式,优化LLMs :

在这里插入图片描述

其中 π θ π_θ πθ π θ o l d π_{θold} πθold分别是当前和旧的policy models,q,o 是从数据集中采样的问题和输出结果。 A t A_t At是优势函数,通过 Generalized Advantage Estimation (GAE,2015)计算得到。

在这里插入图片描述
其中的KL-penalty:

在这里插入图片描述

GRPO目标函数

在这里插入图片描述
在这里插入图片描述
1.以上GRPO不再计算Critic估计的优势函数,而是以组内的相对奖励作为优势进行训练。

  • a.以下每次采样获得的优势,是该次采样的奖励减去组内奖励均值并且处以方差,即标准化过程
  • b标准化过程的目的是:不同组内标准化有一个统一量纲:(每一个组代表ACTOR同输入下,不同的O.输出采样)
    i.举例如下第一组(代码题)分数,5,4,3。第二组(写作)分数1,2,3。
    ii.如果不做标准化,所有优势为正,更加重要的是,由于两组的整体均值为3,此时将导致第-第二组所有样本被惩罚。这种情况下完全不会使得模型变好,组所有样本被奖励,

2.为什么不使用dpo和ppo:

   DPO(Distributed Policy Optimization)是一种分布式策略优化算法,它允许多个智能体(agents)在环境中并行地进行学习和策略优化。DPO的核心思想是通过分布式计算资源来加速学习过程,同时保持策略更新的稳定性和一致性。这种方法通常用于大规模强化学习问题,其中单个智能体的学习效率可能不足以在合理的时间内达到满意的性能。

  • a.Dpo的数据样式:prompt:你好。answer1:你好,有什么可以帮您。answer2:我现在很忙,戴一a.边去。(离线强化学习)
    标注成本高,将注定难以泛化。
  • b.dpo需要对每个输入,标注至少两个相对优劣的answer,
  • c.由于
    在这里插入图片描述

  PPO(Proximal Policy Optimization)由OpenAI提出,它是一种策略梯度方法,旨在通过限制策略更新的步长来确保训练的稳定性。PPO通过引入一个剪裁机制来避免过大的策略更新,这有助于防止策略性能的剧烈波动,并使得算法更加鲁棒

  • d.ppo算法的优势依赖于Critic模型对状态价值进行估计,Value的的含义是当前状态未来所有可能的奖励(reward)期望总和,reward本身就是reward model进行估计的,使用Critic model估计value将更加难以泛化(reward model的误差将会二次放大)。

在这里插入图片描述

五、三代注意力:从MHA到MLA(DeepSeek-V2,2024年6月)

5.1 LLM推理过程,以及MHA(多头注意力)

LLM推理分为两个阶段:prefill阶段和 decode阶段

  • prefill阶段:是模型对全部的Prompt tokens一次性并行计算,最终会生成第一个输出token

  • decode阶段:每次生成一个token,直到生成EOS(end-of-sequence)token,产出最终的response

  推理过程中,由于模型堆叠了多层transformer,所以核心的计算消耗在Transformer内部,包括MHA,FFN等操作,其中MHA要计算Q,K ,V 矩阵,来做多头注意力的计算。MiniCPM1.0(一个基于 Transformer的小型语言模型)中transformer计算过程如下:

在这里插入图片描述

  Wq、Wk、Wv的个数不同。x通过和第 i i i头的 W i q Wiq Wiq W i k Wik