DeepSeek-V3 的核心技术创新
DeepSeek-V3 的核心技术创新
flyfish
DeepSeek-V3 的核心技术创新主要体现在其架构设计和训练目标上,通过 多头潜在注意力(MLA)、DeepSeekMoE 架构、无辅助损失的负载均衡策略 和 多 Token 预测训练目标(MTP)


1. 多头潜在注意力(Multi-head Latent Attention, MLA)
MLA 是一种改进的注意力机制,旨在减少推理时的显存占用并提升效率。其核心原理是通过 低秩压缩技术 对键(Key)和值(Value)进行联合压缩:
- KV 缓存优化:传统 Transformer 的 KV 缓存需存储所有历史键值对,显存占用随序列长度线性增长。MLA 通过低秩矩阵将键值投影到更低维度的潜在空间,减少缓存数据量。例如,键值压缩维度从 7168 降至 512,显存占用减少约 75%。
- 计算效率提升:MLA 在保持与标准多头注意力(MHA)相似性能的同时,减少了推理时的计算量,尤其适合长序列任务(如 128K 上下文窗口)。
2. DeepSeekMoE 架构
DeepSeekMoE 是一种混合专家(Mixture-of-Experts, MoE)架构,结合了共享专家与路由专家,实现了细粒度的计算分配:
- 专家分配策略:每个 MoE 层包含 1 个共享专家 和 256 个路由专家,每个 Token 激活 8 个专家。共享专家处理通用特征,路由专家专注于特定模式,提升模型表达能力。
- 经济高效的训练:通过动态路由策略,仅激活部分专家(如每个 Token 激活 37B 参数),大幅降低计算成本,使 671B 参数的模型训练成本仅为同类模型的 1/14。
3. 无辅助损失的负载均衡策略
传统 MoE 模型依赖辅助损失函数强制均衡专家负载,但可能导致模型性能下降。DeepSeek-V3 创新性地通过动态调整实现负载均衡:
- 动态偏置调整:在路由过程中引入可学习的偏置项,根据专家负载动态调整路由决策。例如,当某专家负载过高时,降低其亲和分数,使 Token 更倾向于负载较低的专家。
- 序列级均衡:额外引入序列级负载均衡损失,避免单个序列内的极端不平衡。实验表明,该策略在多数基准测试中优于传统方法,且不损害模型性能。
4. 多 Token 预测训练目标(MTP)
MTP 扩展了传统语言模型的单 Token 预测目标,要求模型同时预测多个未来 Token:
- 训练目标设计:每个位置预测未来多个 Token(如 4 个),通过多个顺序模块实现因果链的完整性。例如,第 (i) 个模块基于当前 Token 预测第 (i+1) 至 (i+n) 个 Token。
- 推理加速:MTP 模块支持 推测解码(Speculative Decoding),通过并行预测多个 Token 减少生成步骤,使推理速度提升 1.8 倍。
- 性能提升:MTP 提高了训练信号的密度,增强模型对长程依赖的捕捉能力,尤其在代码和数学任务中表现显著。
技术协同与综合效果
这些技术通过 架构与训练的深度协同 实现突破:
- FP8 混合精度训练:结合低精度计算(FP8)与高精度累加(FP32),在保持数值稳定性的同时降低显存占用。
- 并行训练优化:采用 16 路流水线并行、64 路专家并行和 ZeRO-1 数据并行,结合 DualPipe 算法减少通信开销,提升训练效率。
- 长上下文扩展:通过 YaRN 技术分阶段扩展上下文至 128K,在长文本任务中保持高性能。
FIM策略
FIM策略是指Prefix-Suffix-Middle(PSM)框架下的数据构造策略,全称为Fill-in-Middle策略。该策略应用于DeepSeek-V3模型的预训练过程,目的是让模型能够基于上下文线索准确预测中间文本,同时不影响其下一个令牌的预测能力。
- 具体内容:在数据构造时,FIM策略将数据结构化表示为<|fim_begin|> 𝑓pre<|fim_hole|> 𝑓suf<|fim_end|> 𝑓middle<|eos_token|>的形式。在文档层面的预打包过程中,按照0.1的比例应用该策略 ,即10%的数据采用这种结构进行处理。在这个结构中, 𝑓pre和 𝑓suf分别表示前缀和后缀文本, 𝑓middle表示需要模型根据上下文预测的中间文本。
- 应用效果:在DeepSeekCoder-V2的训练过程中,就观察到FIM策略不会损害模型的下一个令牌预测能力,还能使模型依据上下文准确预测中间文本。DeepSeek-V3沿用该策略后,在预训练阶段取得了良好的效果,有助于提升模型对文本的理解和生成能力,从而在后续的任务中表现更优。
无辅助损失的负载均衡策略
无辅助损失的负载均衡策略是DeepSeek-V3为解决MoE模型负载不均衡问题提出的创新方法,通过动态调整专家路由偏置平衡负载,避免传统辅助损失带来的性能下降。
- 提出背景:在MoE模型里,若专家负载不均衡,会出现路由崩溃,在专家并行场景下降低计算效率。传统方法借助辅助损失来平衡负载,但辅助损失过大会损害模型性能。
- 实现方式:为每个专家引入可学习的偏置项 b i b_{i} bi ,把它加到token与专家的亲和度得分 s i , t s_{i,t} si,t上,以此确定Top-K路由 。即 g i , t ′ = { s i , t , s i , t + b i ∈ T o p k ( { s j , t + b j ∣ 1 ≤ j ≤ N r } , K r ) 0 , o t h e r w i s e g_{i, t}'=\begin{cases}s_{i, t}, & s_{i, t}+b_{i} \in Topk(\{s_{j, t}+b_{j} | 1 \leq j \leq N_{r}\}, K_{r})\\0, & otherwise\end{cases} gi,t′={si,t,0,si,t+bi∈Topk({sj,t+bj∣1≤j≤Nr},Kr)otherwise。训练时,持续监控每个训练步骤中整个批次的专家负载。若专家负载过高,就减小其偏置项;若负载过低,则增大偏置项。偏置项仅用于路由,门控值仍由原始亲和度得分计算。
- 优势效果:避免了因使用辅助损失而导致的性能下降,在保持负载均衡的同时,提升了模型性能。实验显示,相比仅用辅助损失平衡负载的模型,该策略能让专家负载更均匀,训练效率和推理性能也得到提高 。如在不同规模模型的实验中,采用无辅助损失负载均衡策略的模型在多数评估基准上表现更优。
Multi - Token Prediction
MTP指Multi - Token Prediction,是一种扩展预测范围的训练目标和技术,能提升模型性能并加速推理。
- 定义:MTP是一种在自然语言处理(NLP)任务中,扩展模型预测范围的训练目标和技术。与传统的单一token预测不同,它让模型在训练时同时预测多个未来的token,在一个时间步上,模型可以预测未来2个、3个或更多token,通过一次前向计算得到多个token的概率分布。
- 原理
- 提高上下文感知能力:传统单token预测只关注当前上下文与下一个token的关系,而MTP使模型必须从更大范围的上下文中提取信息,对语言模式的学习更加全面,生成的句子更流畅且符合语义逻辑。
- 增加训练信号的密度:单token预测每个时间步只提供一个训练信号,MTP在每个时间步上提供多个token的训练信号,使模型在相同训练迭代下能更快地学到语言结构,提高训练效率。
- 改进序列建模的效率:MTP的目标更接近实际生成任务,能让模型更好地学习到多token的联合分布,而传统单token预测可能导致模型局限于逐步生成,MTP可提高建模性能。
- 运作机制
- MTP模块:使用D个顺序模块来预测D个额外token。以第k个MTP模块为例,它由共享嵌入层Emb、共享输出头OutHead、一个Transformer块 T R M k ( ⋅ ) TRM_{k}(\cdot) TRMk(⋅)和投影矩阵 M k ∈ R d × 2 d M_{k} \in \mathbb{R}^{d ×2 d} Mk∈Rd×2d组成。对于第i个输入token t i t_{i} ti,在第k个预测深度,先将第i个token在第k - 1深度的表示 h i k − 1 h_{i}^{k - 1} hik−1与第(i + k)个token的嵌入 E m b ( t i + k ) Emb(t_{i + k}) Emb(ti+k)通过线性投影组合,得到 h i ′ k h_{i}^{\prime k} hi′k , h i ′ k h_{i}^{\prime k} hi′k作为第k深度Transformer块的输入,产生当前深度的输出表示 h i k h_{i}^{k} hik,最后共享输出头以 h i k h_{i}^{k} hik为输入,计算第k个额外预测token的概率分布 P i + 1 + k k P_{i + 1 + k}^{k} Pi+1+kk。
- MTP训练目标:对每个预测深度,计算交叉熵损失 L M T P k L_{MTP }^{k} LMTPk ,最后计算所有深度MTP损失的平均值,并乘以加权因子λ得到总体MTP损失 L M T P L_{MTP } LMTP,作为DeepSeek - V3的额外训练目标。
- MTP在推理中的应用:MTP策略主要用于提高主模型性能,推理时可直接丢弃MTP模块,主模型能独立正常运行。也可将MTP模块用于推测式解码,模型一次性生成多个token的候选结果,通过某种机制验证和修正这些候选结果,若候选token验证通过则直接使用,从而跳过若干步推理,显著加速推理过程。
Multi-head Latent Attention(MLA)
Multi-head Latent Attention(MLA)是DeepSeek-V3中采用的创新注意力机制,旨在降低推理时的显存占用和计算开销,同时保持模型性能。
- 定义:MLA是一种应用于DeepSeek-V3模型的创新注意力机制,通过对注意力中的键(Key)和值(Value)进行低秩联合压缩,减少推理时的Key-Value(KV)缓存,进而降低显存占用和计算开销 ,同时保证模型性能不下降。
- 原理
- 低秩联合压缩:传统多头注意力(MHA)需保存完整的Key和Value缓存,限制了batch size和序列长度。MLA通过低秩分解对注意力的Key和Value进行联合压缩,核心是将注意力输入 h t h_{t} ht通过下投影矩阵 W D K V W^{D K V} WDKV压缩成低维的 c t K V c_{t}^{K V} ctKV ,再通过上投影矩阵 W U K W^{U K} WUK、 W U V W^{U V} WUV分别得到用于注意力计算的键 k t , i k_{t, i} kt,i和值 v t , i C v_{t, i}^{C} vt,iC 。推理时,仅需缓存 c t K V c_{t}^{K V} ctKV和携带位置信息的 k t R k_{t}^{R} ktR,大幅减少了缓存占用 。
- 查询的低秩压缩:为减少训练时激活函数的内存占用,MLA对查询(queries)也进行低秩压缩。将查询输入 h t h_{t} ht通过下投影矩阵 W D Q W^{D Q} WDQ压缩得到 c t Q c_{t}^{Q} ctQ ,再经上投影矩阵 W U Q W^{U Q} WUQ和 W Q R W^{Q R} WQR得到用于注意力计算的查询 q t , i q_{t, i} qt,i 。
- 解耦Rotary Positional Embedding (RoPE):传统RoPE对Q和K分别应用位置编码,低秩分解KV后矩阵运算的交换律问题会使计算复杂。MLA新增独立维度保存位置信息,通过额外的多头queries( q t , i R q_{t, i}^{R} qt,iR)和共享的键( k t R k_{t}^{R} ktR)来支撑RoPE ,将RoPE的计算与低秩压缩解耦,既保留位置感知能力,又避免额外计算开销。
- 运作机制
- 压缩与投影:输入的每个token的特征首先被压缩成低维潜在向量,如 c t K V c_{t}^{K V} ctKV和 c t Q c_{t}^{Q} ctQ ,然后通过特定的投影矩阵扩展到各个注意力头所需的键、值和查询空间。
- 注意力计算:计算注意力时,利用压缩后的查询 q t , i q_{t, i} qt,i、键 k j , i k_{j, i} kj,i和值 v j , i C v_{j, i}^{C} vj,iC ,按照传统注意力机制的方式计算注意力得分并加权求和,得到每个头的注意力输出 o t , i o_{t, i} ot,i 。公式为 o t , i = ∑ j = 1 t S o f t m a x j ( q t , i T k j , i d h + d h R ) v j , i C o_{t, i}=\sum_{j = 1}^{t} Softmax_{j}(\frac{q_{t, i}^{T}k_{j, i}}{\sqrt{d_{h}+d_{h}^{R}}})v_{j, i}^{C} ot,i=∑j=1tSoftmaxj(dh+dhRqt,iTkj,i)vj,iC。
- 输出融合:将多个头的注意力输出 o t , i o_{t, i} ot,i进行拼接,再通过输出投影矩阵 W O W^{O} WO得到最终的注意力输出 u t u_{t} ut ,公式为 u t = W O [ o t , 1 ; o t , 2 ; . . . ; o t , n h ] u_{t}=W^{O}[o_{t, 1}; o_{t, 2};... ; o_{t, n_{h}}] ut=WO[ot,1;ot,2;...;ot,nh] 。
相关文章:
DeepSeek-V3 的核心技术创新
DeepSeek-V3 的核心技术创新 flyfish DeepSeek-V3 的核心技术创新主要体现在其架构设计和训练目标上,通过 多头潜在注意力(MLA)、DeepSeekMoE 架构、无辅助损失的负载均衡策略 和 多 Token 预测训练目标(MTP) 1. 多…...
函数指针(Function Pointer)与 typedef int (*FuncPtr)(int, int);typedef与using(更推荐)
C 函数指针(Function Pointer)详解 函数指针是指向函数的指针,它可以存储函数地址,并通过该指针调用函数。函数指针在回调函数、策略模式、动态函数调用等场景中非常有用。 1. 什么是函数指针? 函数指针是一个指向函…...
【AI时代】以聊天框的模式与本地部署DeepSeek交互 (Docker方式-Open WebUI)
一、本地部署DeepSeek 参考地址:(含资源下载) https://blog.csdn.net/Bjxhub/article/details/145536134二、安装Docker https://www.docker.com/ 三、拉取Open WebUI 镜像 docker pull ghcr.io/open-webui/open-webui:main 四、启动并验证 启动: docker run …...
【Elasticsearch】监控与管理:集群监控指标
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
鸿蒙接入支付宝SDK后模拟器无法运行,报错error: install parse native so failed.
鸿蒙项目接入支付宝后,运行提示error: install parse native so failed. 该问题可能由于设备支持的 Abi 类型与 C 工程中的不匹配导致. 官网error: install parse native so failed.错误解决办法 根据官网提示在模块build-profile.json5中添加“x86_64”依然报错 问…...
react redux用法学习
参考资料: https://www.bilibili.com/video/BV1ZB4y1Z7o8 https://cn.redux.js.org/tutorials/essentials/part-5-async-logic AI工具:deepseek,通义灵码 第一天 安装相关依赖: 使用redux的中间件: npm i react-redu…...
Maven 在 Eclipse 中的使用指南
Maven 在 Eclipse 中的使用指南 引言 Maven 是一个强大的项目管理和构建自动化工具,它可以帮助开发者更高效地管理项目依赖、构建和测试。Eclipse 作为一款流行的集成开发环境(IDE),与 Maven 的结合使用大大提高了 Java 项目的开发效率。本文将详细介绍如何在 Eclipse 中…...
【Matlab优化算法-第13期】基于多目标优化算法的水库流量调度
一、前言 水库流量优化是水资源管理中的一个重要环节,通过合理调度水库流量,可以有效平衡防洪、发电和水资源利用等多方面的需求。本文将介绍一个水库流量优化模型,包括其约束条件、目标函数以及应用场景。 二、模型概述 水库流量优化模型…...
Redis 集群(Cluster)和基础的操作 部署实操篇
三主三从 集群概念 Redis 的哨兵模式,提高了系统的可用性,但是正在用来存储数据的还是 master 和 slave 节点,所有的数据都需要存储在单个 master 和 salve 节点中。 如果数据量很大,接近超出了 master / slave 所在机器的物理内…...
[2025年最新]2024.3版本idea无法安装插件问题解决
背景 随着大模型的持续发展,特别年前年后deepseek的优异表现,编程过程中,需要解决ai来辅助编程,因此需要安装一些大模型插件 问题描述 在线安装插件的时候会遇到以下问题: 1.数据一直在加载,加载的很满 2.点…...
elasticsearch安装插件analysis-ik分词器(深度研究docker内elasticsearch安装插件的位置)
最近在学习使用elasticsearch,但是在安装插件ik的时候遇到许多问题。 所以在这里开始对elasticsearch做一个深度的研究。 首先提供如下链接: https://github.com/infinilabs/analysis-ik/releases 我们下载elasticsearch-7-17-2的Linux x86_64版本 …...
golang 开启HTTP代理认证
内部网路不能直接访问外网接口,可以通过代理发送HTTP请求。 HTTP代理服务需要进行认证。 package cmdimport ("fmt""io/ioutil""log""net/http""net/url""strings" )// 推送CBC07功能 func main() {l…...
【Unity3D】UGUI的anchoredPosition锚点坐标
本文直接以实战去理解锚点坐标,围绕着将一个UI移动到另一个UI位置的需求进行说明。 (anchoredPosition)UI锚点坐标,它是UI物体的中心点坐标,以UI物体锚点为中心的坐标系得来,UI锚点坐标受锚点(Anchors Min…...
C++多态性之包含多态(一)—学习记录
一、C的包含多态 面向对象程序设计的四大特点为抽象、封装、继承和多态,其中,多态性可以提高代码的可拓展性和可维护性。 多态是指同样的消息被不同类型的对象接收时导致不同的行为。所谓消息是指对类的成员函数的调用,不同的行为是指不同的实…...
KERL文献阅读分享:知识图谱与预训练语言模型赋能会话推荐系统
标题期刊年份Knowledge Graphs and Pre-trained Language Models enhanced Representation Learning for Conversational Recommender SystemsJournal of LaTeX Class Files2021 📈研究背景 在数字时代,个性化推荐系统已经成为了我们生活的一部分。从电…...
C#、.Net 中级高级架构管理面试题杂烩
1、简述值类型和引用类型的区别 存储位置:值类型变量直接存储数据的值,通常存储在栈上;引用类型变量存储的是对象在堆上的引用地址。 内存管理:值类型的内存由系统自动管理,当超出作用域时自动释放;引用类…...
从零开始:使用Jenkins实现高效自动化部署
在这篇文章中我们将深入探讨如何通过Jenkins构建高效的自动化部署流水线,帮助团队实现从代码提交到生产环境部署的全流程自动化。无论你是Jenkins新手还是有一定经验的开发者,这篇文章都会为你提供实用的技巧和最佳实践,助你在项目部署中走得…...
Lua限流器的3种写法
学而不思则罔,思而不学则殆 引言 上篇文章讲解了Lua脚本,事务和Pipline之间的使用方式和性能差距,本篇文章将聚焦Lua脚本,我将用三种写法来展现如何实现一个Redis限流器 固定窗口限流 固定窗口限流也是最简单的限流算法&#x…...
hive的几种复杂数据类型
Hive的几种复杂数据类型 Hive 提供了几种复杂数据类型,能够支持更灵活和多样的数据存储。这些复杂数据类型对于处理嵌套数据或不规则数据特别有用。主要包括以下几种: 文章目录 Hive的几种复杂数据类型1. 数组(ARRAY)2. 结构体&a…...
序列化/反序列化与TCP通信协议
深入理解序列化/反序列化与TCP通信协议 一、序列化与反序列化 1.1 基本概念 序列化(Serialization): 将数据结构或对象状态转换为可存储/传输格式的过程反序列化(Deserialization): 将序列化后的数据恢复为原始数据结构的过程 …...
Ollama 本地部署 体验 deepseek
下载安装ollama,选择模型 进行部署 # 管理员命令行 执行 ollama run deepseek-r1:70b浏览器访问http://ip:11434/ 返回 Ollama is runninghttp://ip:11434/v1/models 返回当前部署的模型数据 下载安装CherryStudio,本地对话UI 客户端 在设置中 修改API地址&#x…...
Linux探秘坊-------4.进度条小程序
1.缓冲区 #include <stdio.h> int main() {printf("hello bite!");sleep(2);return 0; }执行此代码后,会 先停顿两秒,再打印出hello bite,但是明明打印在sleep前面,为什么会后打印呢? 因为ÿ…...
postgreSQL16.6源码安装
1.获取源码 从PostgreSQL: File Browser获取tar.bz2或者tar.gz源码 2.解压 tar xf postgresql-version.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# tar xf postgresql-16.6.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# ll 总计 24324 drwxr-xr-x 12 ro…...
树莓派上 基于Opencv 实现人脸检测与人脸识别
一,需求 基于树莓派4b,usb1080p摄像头,实现人脸检测与人脸识别。尝试了海陵科的模组和百度的sdk。海陵科的模组无法录入人脸,浪费了100多块钱。百度的sdk 在树莓派上也无法录入人脸,官方解决不了。最后只能用opencv自…...
vscode怎么更新github代码
vscode怎么更新github代码 打开终端: 在 VS Code 中,使用快捷键 Ctrl (Mac 上是 Cmd) 打开终端。 导航到项目目录: 确保你当前所在的终端目录是你的项目目录。如果不是,可以使用 cd 命令导航到项目目录,例如…...
Golang Web单体项目目录结构最佳实践
在Golang 开发Web 项目的过程中,如何组织目录结构是一项至关重要的任务。合理的目录结构不仅能提高代码的可维护性,还能为团队协作提供清晰的代码规范。 为什么要设计合理的目录结构? 在 Golang 项目中,代码的组织方式会影响开发…...
Zookeeper 作注册中心 和nacos 和eruka 有什么差异 ?基于什么理论选择?
目录 三者的差异 1. 设计定位与功能特性 2. 服务注册与发现机制 3. 可用性与容错性 4. 性能 选择依据 1. 业务场景 2. 可用性和一致性需求 3. 性能需求 三者的差异 1. 设计定位与功能特性 Zookeeper 设计定位:最初是为分布式应用提供协调服务的,本身并不是专门作为…...
mac下dify+deepseek部署,实现私人知识库
目前deepseek 十分火爆,本地部署实现私有知识库,帮助自己日常工作,上一篇使用工具cherry studio可以做到私人知识库。今天学习了一下,使用Dify链接deepseek,实现私人知识库,也非常不错,这里分享…...
CSS 实现下拉菜单效果实例解析
1. 引言 在 Web 开发过程中,下拉菜单是一种常见且十分实用的交互组件。很多前端教程都提供过简单的下拉菜单示例,本文将以一个简洁的实例为出发点,从 HTML 结构、CSS 样式以及整体交互逻辑三个层面进行详细解析,帮助大家理解纯 C…...
C# 比较两个List集合内容是否相同
在 C# 中,要比较两个 List<T> 集合的内容是否相同,可以通过以下几种方法: 一、非自定义类的元素比较 1. 使用 SequenceEqual 方法(顺序和内容都相等) 顺序和内容都相等:使用 SequenceEqual。 usin…...
