【完整版】DeepSeek-R1大模型学习笔记(架构、训练、Infra、复现代码)

0 DeepSeek系列总览

DeepSeek-R1基于DeepSeek-V3-Base模型,提出了一系列训练策略,包括基于纯强化学习的训练(DeepSeek-R1-Zero)、基于多阶段的训练和冷启动(DeepSeek-R1)、知识蒸馏等。下面是我总结的DeepSeek系列的整体框架:

在这里插入图片描述

1 模型架构设计

基本参数

  • DeepSeek-R1和DeepSeek-V3采用同样的模型参数,并且设计和DeepSeek-V2类似
  • Attention采用多头潜在注意力机制(MLA)
  • FFN采用无辅助损失的DeepSeekMoE
  • 61层Transformer Layer
  • MoE中1个共享专家,256个路由专家,对每个token选择top-8专家

在这里插入图片描述

专家混合模型(MoE)[DeepSeek-V2提出, DeepSeek-V3改良]

MoE在每次推理时选择性地激活部分模型参数,在不成比例增加计算成本的情况下,可以扩展模型参数。在DeepSeek-V2中就已经提出了用于FFN层的DeepSeekMoE。

  • 动态专家分配:根据token的上下文动态分配合适的专家
  • DeepSeek-V2引入辅助损失进行负载均衡,确保token在专家之间的分配更加均衡。DeepSeek-V3和DeepSeek-R1进一步采用用auxiliary-loss-free load balancing实现负载均衡,引入一个expert bias,这个bias只影响专家路由,而不影响任何梯度。动态调整bias,专家overloaded则降低bias,专家unoverloaded则增大bias。简单来说就是用加法高效地对gating score进行re-weight的过程
  • DeepSeek-R1和DeepSeek-V3一致,总参数量671B,通过MoE对单个token的激活参数量仅37B (~5.5%)。MoE中有1个shared expert+256个routed expert,每次只激活的8个exert。

在这里插入图片描述
Auxiliary-Loss-Free Load Balancing [DeepSeek-V3提出]
和DeepSeek-V3一样,DeepSeek-R1采用了细粒度的MoE,一些expert作为共享expert,另一些expert作为routed expert进行动态激活。对于第t个token u t u_t ut,下面是MoE计算的过程:

在这里插入图片描述
以前基于auxiliary loss的方法需要修改loss function,当auxiliary loss很大时会影响模型性能。那么Auxiliary-Loss-Free则是在gating value g g g的基础上,额外加上了bias来实现负载均衡:

在这里插入图片描述
注意bias只影响专家路由,而不影响任何梯度。专家overloaded则降低bias,专家unoverloaded则增大bias。调整的速度由超参数 γ \gamma γ控制,这个和反向传播的梯度更新过程类似。

下图是该方法的出处:Auxiliary-Loss-Free Load Balancing Strategy for Mixture-of-Experts文章所提出的负载均衡策略:
在这里插入图片描述
和DeepSeek-V2一样,DeepSeek-V3和DeepSeek-R1都采用了限制设备数量的MoE,并且不会再训练时做token dropping了。

多头潜在注意力(MLA)[DeepSeek-V2提出]

MLA通过将QKV矩阵投影到低维潜在空间,显著降低计算和内存成本。DeepSeek-V2中就提出了用MLA来替代传统的多头自注意力。

MLA和其他注意力的对比如下,KV cache以一个更低的维度去存储和计算。
在这里插入图片描述
K和V的联合压缩如下:
在这里插入图片描述

真正推理时,cache的就是低维的 c t K V c_t^{KV} ctKV,并且down-proj和up-proj矩阵可以分别被吸收进 W Q W^Q W

### 如何训练 DeepSeek 模型 #### 训练环境准备 为了有效地训练 DeepSeek 模型,需先设置合适的开发环境。这通常涉及安装必要的软件包和配置硬件资源。DeepSeek 支持多种编程语言接口,但最常用的是 Python 接口[^2]。 ```bash pip install deepseek ``` #### 数据集准备 高质量的数据对于构建有效的深度学习模型至关重要。数据预处理阶段包括清洗、标注以及转换成适合输入到神经网络的形式。具体操作取决于所选的任务类型,比如图像分类可能需要调整图片尺寸并标准化像素值;而文本处理则要进行分词、去除停用词等步骤[^1]。 #### 定义模型架构 基于特定的应用场景选择或设计相应的网络结构是成功的关键之一。例如,在计算机视觉任务上可以采用卷积神经网络(CNN),而对于序列预测问题,则更适合使用循环神经网络(RNN) 或者其变体 LSTM/GRU。DeepSeek 提供了一些预定义好的基础模块来简化这个过程: ```python from deepseek.models import CNNModel, RNNModel model = CNNModel() # or RNNModel() ``` #### 超参数设定与优化器选择 超参数决定了算法的学习行为,合理的选择能够加速收敛速度并且提高最终性能指标。常见的有批量大小(batch size)、迭代次数(epoch number) 和初始学习率(learning rate) 等。此外还需要指定损失函数(loss function) 及对应的梯度下降方法(optimizer): ```python import torch.optim as optim criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) ``` #### 开始训练流程 一切就绪之后就可以启动正式的训练环节了。通过反复向模型提供样本对 (input-output pairs), 并不断更新权重使得预测误差最小化: ```python for epoch in range(num_epochs): running_loss = 0.0 for i, data in enumerate(trainloader, 0): inputs, labels = data optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() print(f'Epoch {epoch + 1}, Loss: {running_loss / len(trainloader)}') ``` #### 测试评估效果 完成一轮或多轮完整的训练周期后,应该利用独立测试集合验证泛化能力。计算各类评价标准如准确率(Accuracy)、精确度(Precision)、召回率(Recall) 和 F1-score 来衡量实际表现,并据此做出进一步改进决策.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.zwX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值