DeepSeek系列_国产大模型的技术创新解析

文章目录

    • [1. 先把问题讲清楚:DeepSeek 路线关注的是能力/成本比](#1. 先把问题讲清楚:DeepSeek 路线关注的是能力/成本比)
    • [2. MoE:总参数变大,但每个 token 不必用完](#2. MoE:总参数变大,但每个 token 不必用完)
    • [3. MoE 成本账:总参数、激活参数、显存、通信分开看](#3. MoE 成本账:总参数、激活参数、显存、通信分开看)
    • [4. MoE 的难点:路由和负载均衡](#4. MoE 的难点:路由和负载均衡)
    • [5. MLA:长上下文的瓶颈是 KV Cache](#5. MLA:长上下文的瓶颈是 KV Cache)
    • [6. MLA 的工程意义:长上下文不是只看窗口长度](#6. MLA 的工程意义:长上下文不是只看窗口长度)
    • [7. MTP:训练时不只预测下一个 token](#7. MTP:训练时不只预测下一个 token)
    • [8. 推理训练:复杂任务不只是"回答风格"问题](#8. 推理训练:复杂任务不只是“回答风格”问题)
    • [9. 推理模型的成本:答案更好,也可能更慢](#9. 推理模型的成本:答案更好,也可能更慢)
    • [10. 如何评估 DeepSeek 或类似路线的模型](#10. 如何评估 DeepSeek 或类似路线的模型)
    • [11. 常见误区](#11. 常见误区)
    • [12. 小结](#12. 小结)
    • 大模型视角
    • 下一篇

摘要:DeepSeek 系列的学习价值,不在于把 MoE、MLA、MTP、推理训练这些缩写背下来,而在于理解它们共同回答的工程问题:怎样在成本可控的前提下扩大模型容量、降低长上下文缓存压力、提高训练信号密度,并让模型更擅长数学、代码和多步推理。本文不做未经验证的版本排名,也不猜测未公开细节,而是围绕公开讨论较多的技术方向,拆解每个机制解决什么瓶颈、带来什么代价、开发者如何评估。

  • 前置知识:专栏一 Transformer、 KV Cache、 Scaling Law
  • 阅读时间:60-75 分钟
  • 代码环境:Python 3.10+,示例只依赖标准库
  • 读完目标:能解释 MoE、MLA、MTP、推理训练分别解决什么问题,能区分总参数、激活参数、KV Cache、推理 token 成本和训练评估指标

1. 先把问题讲清楚:DeepSeek 路线关注的是能力/成本比

大模型能力提升通常要付出成本:更多参数、更多训练 token、更长上下文、更复杂推理、更高推理延迟。Dense 模型一路变大当然能提升上限,但训练和部署成本会迅速变高。

DeepSeek 系列公开技术讨论里经常出现的关键词,可以放到一个主线下理解:怎样提升模型能力,同时控制训练和推理成本。

拆开看,有几条技术线:

技术方向 想解决的问题 主要代价
MoE 扩大总容量,但每个 token 只激活部分专家 路由、负载、通信、部署复杂
MLA 降低长上下文 KV Cache 压力 注意力结构更复杂,工程实现要求高
MTP 训练时提供更密集的未来 token 信号 训练目标更复杂,需要验证收益
推理训练 提升数学、代码、多步推理能力 输出更长、训练更复杂、评估更难
相对/可验证奖励 给推理过程更有效反馈 需要可判题任务或高质量偏好数据

这篇文章的目标不是把 DeepSeek 神化,而是让你能看懂这些设计背后的工程账:省了哪里,贵在哪里,适合什么任务,不适合什么任务。


2. MoE:总参数变大,但每个 token 不必用完

Dense Transformer 里,每个 token 都经过同一套 FFN。模型做大后,每个 token 的计算也跟着变贵。MoE(Mixture of Experts,专家混合)把部分 FFN 替换成多个专家网络,每个 token 只选择少数专家。

简化公式:

y = ∑ i ∈ TopK ( r ( x ) ) p i E i ( x ) y = \sum_{i \in \text{TopK}(r(x))} p_i E_i(x) y=i∈TopK(r(x))∑piEi(x)

逐项解释:

  • x x x:某个 token 的隐藏表示;
  • r ( x ) r(x) r(x):router,对每个专家打分;
  • E i E_i Ei:第 i i i 个专家,通常是 FFN 分支;
  • TopK:只选分数最高的 k 个专家;
  • p i p_i pi:被选专家的权重;
  • y y y:多个专家输出加权后的结果。

大白话:模型准备很多"计算分支",但每个 token 只走其中几个。这样总参数容量可以很大,但单 token 计算量可控。

用代码模拟 top-2 路由:

python 复制代码
# Python 3.10+
import math


def softmax(values):
    m = max(values)
    exps = [math.exp(v - m) for v in values]
    total = sum(exps)
    return [v / total for v in exps]

scores = [0.2, 2.1, -0.5, 1.4, 0.7]
probs = softmax(scores)
top_k = 2
selected = sorted(enumerate(probs), key=lambda x: x[1], reverse=True)[:top_k]

print("probs:", [round(p, 3) for p in probs])
print("selected experts:", selected)

这段代码体现了 router 的核心:同一个 token 不会送给所有专家,只送给 top-k 专家。


3. MoE 成本账:总参数、激活参数、显存、通信分开看

MoE 最容易被误解。看到"总参数大",有人以为推理一定按总参数计算;看到"激活参数少",有人以为部署一定便宜。这两种都不准确。

需要分四个账本:

成本项 含义 工程影响
总参数 所有专家和共享层参数 权重存储、加载、分片
激活参数 单个 token 实际经过的参数 每 token 计算量
常驻显存 推理时需要放在设备上的权重 部署容量和量化压力
通信成本 token 分发到专家再聚合 多卡吞吐和延迟

写个粗略估算器:

python 复制代码
# Python 3.10+

def moe_ffn_params(hidden_size, ffn_size, num_experts, active_experts):
    # 简化 FFN: up projection + down projection,不含门控和 bias
    one_expert = hidden_size * ffn_size + ffn_size * hidden_size
    total = one_expert * num_experts
    active = one_expert * active_experts
    return total, active

hidden = 4096
ffn = 14336
for experts, active in [(8, 2), (16, 2), (64, 4)]:
    total, active_params = moe_ffn_params(hidden, ffn, experts, active)
    print(f"experts={experts}, active={active}")
    print(f"  total_ffn_params≈{total/1e9:.2f}B")
    print(f"  active_ffn_params/token≈{active_params/1e9:.2f}B\n")

这个例子说明:总容量可以随专家数上升,但每 token 激活计算主要由 active experts 决定。真实模型还有共享层、attention、router、负载均衡等开销,所以不能只看这一项。


4. MoE 的难点:路由和负载均衡

如果 router 总是把 token 分给少数专家,会出现两个问题:热门专家过载,冷门专家学不到东西。训练时要让路由既能选择合适专家,又不能严重失衡。

一个负载统计示例:

python 复制代码
# Python 3.10+
from collections import Counter

assignments = [0, 1, 1, 1, 2, 1, 3, 1, 2, 1, 0, 0]
num_experts = 4
counts = Counter(assignments)
for expert in range(num_experts):
    print(expert, counts[expert])

max_load = max(counts.values())
min_load = min(counts[e] for e in range(num_experts))
print("load_ratio=", round(max_load / max(min_load, 1), 2))

负载不均在训练和推理都会出问题。训练时会造成专家利用不充分;推理时热门专家可能成为瓶颈。MoE 的复杂度很多时候不在数学公式,而在系统调度。


5. MLA:长上下文的瓶颈是 KV Cache

自回归生成时,模型会缓存历史 token 的 Key 和 Value。序列越长、并发越高,KV Cache 越容易成为显存瓶颈。

先估算普通 KV Cache:

python 复制代码
# Python 3.10+

def kv_cache_gb(layers, seq_len, kv_heads, head_dim, bytes_per_value=2):
    # Key 和 Value 两份缓存
    return layers * seq_len * kv_heads * head_dim * 2 * bytes_per_value / 1024**3

for seq_len in [4096, 32768, 131072]:
    print(seq_len, f"{kv_cache_gb(32, seq_len, 8, 128):.2f} GB")

MLA(Multi-head Latent Attention)的直觉是:不要为每个 token 都缓存完整展开后的 Key/Value,而是缓存更紧凑的 latent 表示,再在注意力计算中使用或恢复需要的信息。

可以简化理解为:

c t = W c h t c_t = W_c h_t ct=Wcht

其中:

  • h t h_t ht:第 t t t 个 token 的 hidden state;
  • W c W_c Wc:压缩投影;
  • c t c_t ct:更紧凑的 latent 表示。

这不是 MLA 的完整实现,只是它要解决的问题:长上下文下,缓存每个 token 的完整 KV 太贵,所以要压缩缓存表示。


6. MLA 的工程意义:长上下文不是只看窗口长度

如果一个模型支持很长上下文,但 KV Cache 成本太高,就会影响:

text 复制代码
1. 单请求最大长度;
2. 并发数量;
3. 首 token 延迟;
4. 显存占用;
5. 推理服务成本;
6. 多轮对话可承载历史。

MLA 类方法的价值在于降低长上下文推理成本。但开发者评估时仍要看三层能力:

text 复制代码
放得下:上下文能输入;
找得到:关键证据能定位;
用得对:答案能基于证据,不被干扰误导。

不要把"KV Cache 更省"直接等同于"长文档问答更准"。长文档准确性仍需要 RAG、引用、评估和拒答边界。


7. MTP:训练时不只预测下一个 token

普通语言模型训练目标是 next-token prediction:

P ( x t + 1 ∣ x ≤ t ) P(x_{t+1} \mid x_{\le t}) P(xt+1∣x≤t)

MTP(Multi-Token Prediction,多 token 预测)的直觉是:训练时不只让模型预测下一个 token,还让它预测更远的几个未来 token,从而提供更密集的训练信号。

例如给定:

text 复制代码
快速排序的核心思想是

普通目标可能只预测下一个 token:"分"。MTP 辅助目标可能同时预测:"分 / 治 / 和"。

用代码构造多步标签:

python 复制代码
# Python 3.10+

tokens = ["快速", "排序", "的", "核心", "思想", "是", "分", "治", "和", "递归"]
max_future = 3

for i in range(len(tokens)):
    future = []
    for k in range(1, max_future + 1):
        if i + k < len(tokens):
            future.append(tokens[i + k])
    print(tokens[i], "->", future)

这个例子说明 MTP 的训练信号更密集。但要注意:训练时预测多个未来 token,不等于推理时一定一次生成多个 token。它可以作为辅助目标,帮助模型学习局部未来结构。


8. 推理训练:复杂任务不只是"回答风格"问题

数学、代码、多步推理任务,和普通对话不一样。模型需要:

  • 分解问题;
  • 生成中间步骤;
  • 检查候选答案;
  • 从多个解法中选择更好答案;
  • 避免看起来合理但实际错误的推理;
  • 在可验证任务上利用正确/错误反馈。

SFT 可以教模型模仿推理格式,但不一定能让它真的提高解题正确率。推理训练常常会结合偏好优化、强化学习、拒绝采样、可验证奖励等思路。

下面用组内相对优势建立直觉。假设同一个问题采样了 4 个答案,每个答案有奖励:

python 复制代码
# Python 3.10+

rewards = [0.2, 0.9, 0.4, 0.1]
mean_reward = sum(rewards) / len(rewards)
advantages = [r - mean_reward for r in rewards]

for i, (r, a) in enumerate(zip(rewards, advantages)):
    print(i, "reward=", r, "relative_advantage=", round(a, 3))

相对优势为正的答案比组内平均更好,训练可以提高这类答案概率;为负的答案则相对较差。真实算法会复杂得多,但核心思想是:不仅告诉模型标准答案,还通过比较和奖励告诉它哪种推理更值得保留。


9. 推理模型的成本:答案更好,也可能更慢

推理能力增强常伴随更长输出、更高采样成本和更复杂评估。对业务来说,要同时看质量和成本。

指标 为什么重要
最终答案正确率 推理任务核心指标
中间步骤可靠性 是否能帮助检查和调试
输出长度 影响延迟和费用
过度思考比例 简单问题是否输出过长
自我纠错能力 能否发现错误并修正
安全边界 推理能力强也不能越权
单位成本收益 每提升 1% 正确率付出多少成本

比如简单客服 FAQ 不需要长链推理。推理模型可能回答更慢、更长,反而影响体验。数学、代码、复杂规划、科研辅助等任务更可能受益。


10. 如何评估 DeepSeek 或类似路线的模型

建议按任务拆评估,而不是只看综合分:

text 复制代码
数学:最终答案、步骤一致性、可验证题目正确率;
代码:单元测试通过率、API 真实性、patch 最小性;
长文档:证据定位、引用准确、抗干扰;
普通问答:是否简洁、是否过度推理;
工具调用:参数合法、权限正确、失败恢复;
部署成本:首 token、tokens/s、显存、并发、KV Cache;
安全:越权、危险请求、幻觉、误拒。

一个评估结果不要只记 pass/fail,最好记录失败原因:

json 复制代码
{
  "task_id": "code_fix_042",
  "category": "code",
  "passed": false,
  "failure_reason": "编造了不存在的 SDK 参数",
  "output_tokens": 1240,
  "latency_ms": 8300,
  "needs_tool": true
}

这样才能判断模型问题是推理不够、事实检索不足、工具能力不足,还是成本不可接受。


11. 常见误区

误区一:MoE 总参数大,所以推理一定同样贵。 要区分总参数、激活参数、权重显存和通信成本。

误区二:激活参数少,所以部署一定便宜。 MoE 仍需要存储或分片所有专家,专家通信和负载均衡也会带来成本。

误区三:MLA 省 KV Cache,所以长文档问答一定更准。 KV 成本和证据利用是两个问题,仍要评估定位和引用。

误区四:MTP 训练能直接让推理一次吐多个 token。 MTP 更常作为训练辅助信号理解,推理形态要看具体实现。

误区五:推理模型适合所有任务。 复杂任务受益,简单任务可能被延迟、输出长度和成本拖累。

误区六:只看榜单就能选型。 业务评估、部署成本、权限、安全和可维护性同样重要。


12. 小结

DeepSeek 系列给开发者的启发,是用系统工程方式提升能力/成本比:MoE 用稀疏激活扩大容量,MLA 面向长上下文 KV Cache 压力,MTP 提供更密集的训练信号,推理训练让模型更擅长数学、代码和多步问题。这些技术都不是免费午餐,它们把成本从一个地方转移到另一个地方:路由、通信、训练目标、输出长度、评估和部署复杂度。

学习这条路线,重点不是背缩写,而是能判断:这个技术解决的瓶颈是不是我的瓶颈,它带来的代价我能不能承受,我的评估集能不能证明收益。

大模型视角

从大模型演进看,单纯堆 dense 参数越来越昂贵,未来竞争会更关注能力/成本比。稀疏激活、注意力缓存优化、多 token 训练信号和推理强化,都是围绕这个目标展开。真正落地时,模型能力、推理系统和评估体系必须一起设计。

下一篇

下一篇会讲 Mistral/Mixtral。我们会继续从高效架构角度理解滑动窗口注意力、GQA 和 MoE 专家混合模型的取舍。

相关推荐
企业数字化笔记1 小时前
AI工具的文件和参数怎么设计?上传校验、配置版本与可复现任务
前端·人工智能
seconp1 小时前
AI 时代怎么做计算机毕业设计?
人工智能·毕业设计·软件工程·课程设计·毕设
loulanyue_1 小时前
智能成为“商品”之后:读吴泳铭 2026 云栖演讲的六个取舍
人工智能
鬼手点金1 小时前
opencode-性能优化建议
java·人工智能·git·自动化·nanogpt
在所不辞兄1 小时前
分层PINN提升多物理场耦合效率
人工智能·深度学习·神经网络·机器学习·工程仿真
AI技术新视界1 小时前
微软确认 GPT‑6 使用 Looped Transformers
人工智能·llm
智圣新创011 小时前
智圣新创智慧学生社区线上服务平台 高校一站式育人场景数字化升级全域建设指南
大数据·人工智能
朝朝辞暮i2 小时前
VLA 系统学习第 5 课:神经网络的参数到底是什么?——从 nn.Linear 真正理解 W、 b 和 Gradient
人工智能·python·深度学习·神经网络·vla