开源长期主义:浅谈DeepSeek技术主张与早期论文

开源、长期主义与DeepSeek的技术愿景

©作者|格林

来源|神州问学

导入:Deepseek在早期就开源了许多优秀的指令模型与对话模型,并发布了多篇论文。以下,我们将基于Deepseek在早期发布的6篇论文,来梳理Deepseek公司的技术路径与主张。

Deepseek的这几篇论文都和大模型基础结构、预训练相关,其中涉及到Scaling Law以及MoE等多种新颖结构,也包括数据合成这类模型周边技术;在训练模型过程中,更加关注预训练,而后续的微调步骤除了指令微调,还包括RLHF,DPO等对齐流程。在数据集上,DeepSeek使用的是自己收集的数据,包括预训练的文本以及微调的问答对;

1.扩展法则贯彻落实:

DeepSeek在大语言模型的研究中,重点探索了如何在有限的计算资源下高效地扩展模型,在早期就提出了新颖且有实际指导意义的非传统扩展法则(Scaling Law)。

【23年11月29日】DeepSeek LLM Scaling Open-Source Language Models with Longtermism(DeepSeek LLM)

23年11月,DS发布了第一篇通用语言模型的论文,其中的核心创新点就在于扩展法则的实践。论文中提到,开源社区中扩展法则存在不一致性,先前的研究对于如何在不同的计算预算、数据和模型规模下进行模型扩展得出了不同的结论。此外,对于高效扩展所需的最佳超参数和模型配置尚无明确的指导,这对推动开源大模型向通用人工智能(AGI)发展构成了障碍。

因此,DS在论文中提出了新的扩展法则:基于超参数(如批量大小和学习率)以及模型/数据,构建了一个经验框架,用于在模型规模和数据量之间的计算资源的最佳分配,即非嵌入FLOPs/词元来精确表述模型规模。

基于这些扩展法则,DS团队开发了DeepSeek LLM,这是一种开源的大型语言模型,具有两种配置:一个较小的7B参数模型和一个较大的67B参数模型。值得一提的是,当时67B的模型DS已在尝试使用分组查询注意力机制 (GQA),而非常规的多头注意力机制 (MHA)。

该模型使用了一个独特的预训练数据集,总计2T个词元,并采用了如监督微调(SFT)直接偏好优化(DPO)等技术来提高性能。在测试中,DeepSeek LLM显示出优越的性能,尤其是在代码、数学和推理等领域,其67B模型在多项评估中超越了LLaMA-2 70B。

论文中还强调了高质量数据的重要性以及计算预算的合理分配,以开发更高性能的模型,可见从23年底开始,DS就强调精简计算预算以及数据规模,而不是存粹堆叠算力与数据,暴力提升模型的性能表现。

2.MoE模型的深度研究:

DS在混合专家(MoE)架构方面的研究也取得了重要进展。他们开发了DeepSeekMoE架构,通过引入细粒度专家分割和共享专家隔离策略,解决了传统MoE架构中存在的知识混杂和冗余问题,从而实现了更高效的专家激活和模型专化。这种创新设计大幅提升了模型的性能和效率,同时降低了计算成本。

【24年1月11日】DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models

24年1月,DS联合来自北大、清华还有南京大学的实验室团队,共同发布了MoE V1版本的模型以及相应论文,主要改进MoE结构,让专家激活更加灵活,避免“专家不够专”问题。

研究团队发现,传统的MoE框架有一定局限性,经常存在有限数量专家间知识混杂和知识冗余等问题,阻碍了专家的专化,导致每个专家无法获得独特且不重叠的知识,从而降低了模型的有效性和性能(又是一项关于增加效能的研究)。

为此,DeepSeekMoE架构在这篇文章中首次亮相,采用了两个主要策略,能够实现真正的专家专化:

细粒度专家分割:此策略将专家分割成更精细的片段,允许更灵活的专家激活组合。通过为每个专家分配更具体的知识,这种方法旨在增强知识获取的准确性和专化程度。

共享专家隔离:指定某些专家为共享专家,用于捕获和整合公共知识,从而减少其他专家之间的冗余。

基于大量实验,团队证明了DeepSeekMoE确实能够有效降低计算量并提升表现,从一个具有20亿(2B)参数的小规模模型开始,就能以显著更少的计算量实现与较大规模MoE模型(如GShard)相当或更好的性能。

此外,当模型扩展到160亿(16B)和1450亿(145B)参数时,依然显示出其相对于传统MoE架构的优势。其中,2B参数的DeepSeekMoE模型匹配了GShard 2.9B模型的性能,16B参数的DeepSeekMoE模型优于LLaMA2 7B模型,而只使用了大约40%的计算量。有趣的是,在一代的MoE模型中,DS就尝试了64个专家(1个共享专家以及63个路由专家,共享专家总是被激活)的MoE结构,为三代的256个专家系统打下基础。

从这篇论文开始,DS团队就意识到了MoE结构的重要性,能够在扩大模型参数时管理计算成本。在后续的语言模型训练中,DS沿用了其DeepSeekMoE架构并不断优化。

【24年5月】DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model(MoE LLM)

在V2版本,模型的参数规模有了一定提升,包含了 236B 个参数,其中每个 token 激活 21B,支持 128K token 的上下文长度。

V2论文的核心在于,如何更好地平衡模型性能与训练和推理效率。团队发现使用多头注意力机制(MHA)的模型,在推理过程中由于需要大规模的键值(KV)缓存,效率不高。由此在DeepSeek-V2 时,DS就开始采用多头潜在注意力 (MLA) ,并在由 8.1T 标记组成的高质量多源语料库上对 DeepSeek-V2 进行了预训练,并进一步执行监督微调 (SFT) 和强化学习 (RL) 以充分释放其潜力。V2依然沿用了DeepSeekMoE的架构设计,通过稀疏计算以较低的成本训练强大的模型。它采用细粒度的专家分割和共享专家隔离,允许更高的专化度并减少冗余,优于传统的MoE架构如GShard。

基于架构以及注意力机制上的创新,与DeepSeek 67B相比,训练成本节省了42.5%,并且由于KV缓存的内存需求减少,支持更大的批次大小。模型的生成吞吐量也显著提高,使其在实际应用中更具实用性。在表现评测上,DeepSeek-V2模型在多个基准测试中实现了开源模型中的领先表现,在英语、代码和数学基准测试中优于Qwen1.5 72B和Mixtral 8x22B等模型,并在中文任务中表现出色,在LMSYS的Chatbot Arena 超越了当时所有的开源模型。

对于V2版本,DS依然选择开源:通过将DeepSeek-V2及其较小版本DeepSeek-V2-Lite发布到开源社区,并鼓励进一步研究和实验MLA和DeepSeekMoE架构。在DS提供的API服务中,V2版本模型能够对标 GPT-4-Turbo 的性能,但价格只要 1块钱/百万输入,这是 GPT-4-Turbo 的 1/70。因此DS在当时 成了业内知名的“价格屠夫”,并掀起了一波模型降价潮。

3.基于代码和定理证明的推理能力研究:

DeepSeek-Coder系列模型是DS在代码生成和编程任务领域的开源模型,旨在缩小开闭源之间的性能差距。DS通过使用自己收集的大规模高质量数据集和创新的预训练策略,显著提高了模型代码生成和补全的能力。

除此之外,DeepSeek-Prover模型代表了DeepSeek公司在自动定理证明领域的创新,通过生成大规模合成数据来克服训练数据稀缺的挑战。这种方法大大增强了模型在正式数学证明任务中的性能,并在多个基准测试中取得了优异的表现。

【23年11月2日】DeepSeek-Coder: When the Large Language Model Meets Programming--The Rise of Code Intelligence

这是DS团队最早开源的模型之一,除了代码相关的研究以外,这篇论文在背景介绍中就奠定了DS的研究基调:开源与闭源在性能上的差距,闭源模型(如OpenAI的Codex和GPT-3.5)在代码生成和其他编程相关任务中表现出了显著的能力,但由于其专有闭源性质,限制了更广泛的研究和开发社区的使用。

为此,DS推出了coder系列,这是一个开源代码模型集合,参数规模从1.3B到33B不等。

这些模型从头开始训练,使用了来自87种编程语言的2T个令牌的庞大数据集。训练过程中采用了创新的方法,包括使用16K上下文窗口的中间填充(FIM)任务,以增强模型的代码生成和补全能力。值得一提的是,在V3模型的训练中,也使用了FIM策略,有别于一般自回归式的语言建模训练集。除此之外,在在预训练过程中还引入了一种独特的代码库级别数据组织方法,提高了模型对项目中跨文件依赖关系的理解能力。

在当时的评估中,DeepSeek-Coder模型在多个基准测试中优于现有的开源模型,包括HumanEval、MBPP、DS-1000和LeetCode比赛基准。DeepSeek-Coder-Base 33B模型在多语言和单语言基准测试中的准确性优于CodeLlama-Base 34B。此外,DeepSeek-Coder-Instruct 33B模型在许多编码任务中超越了OpenAI的GPT-3.5 Turbo,缩小了开源和专有模型之间的性能差距。

【24年5月】DeepSeek-Prover: Advancing Theorem Proving in LLMs through Large-Scale Synthetic Data Challenge

在24年5月,DS发布了一篇有趣但没有受到广泛关注的文章,主题是关于通过大规模合成数据推进大型语言模型(LLMs)的定理证明。显然在早期,DS就尝试了数据合成,为后续V3和R1系列的数据蒸馏打下基础。这篇论文主要讨论了在正式定理证明领域中,大语言模型(LLMs)缺乏训练数据的问题。与自然语言或代码不同,正式证明的训练数据集非常有限

由此,论文提出了一种在Lean 4证明环境中生成大规模合成数据的新方法。通过将主要来自高中和本科竞赛问题的非正式数学问题转化为正式陈述,并过滤低质量的陈述、生成证明,并使用Lean 4验证器进行验证。DS以此生成了一个包含800万个正式陈述及其对应证明的数据集,显著扩展了大模型在定理证明训练中的可用数据,并以此微调得到了DeepSeek-Prover模型,在各种基准测试(如miniF2F和FIMO数据集)超越了GPT-4和其他模型,得到了领域内最佳的训练结果。例如,DeepSeek-Prover在miniF2F测试中以64个样本达到了46.3%的完整证明生成准确率,而GPT-4仅为23.0%

Coder和Prover模型系列的成功,也让DS在早期积累了一定关于模型推理能力的训练经验。在后续V3以及R1模型的构建以及训练过程中,也可看到一些用于Coder和Prover模型训练的相似方法。

4.多模态领域探索:

在视觉-语言理解领域,DeepSeek公司在早期开发了DeepSeek-VL系列模型,这些模型通过混合视觉编码器和创新的训练策略,能够高效处理高分辨率图像和复杂的多模态任务,显示出在真实世界应用中的强大能力。

【24年3月11日】DeepSeek-VL: Towards Real-World Vision-Language Understanding

其实视觉是DS选择去处理真实世界多模态信息理解的第一步,在其中主要探讨如何处理高分辨率图像并保持强大的语言能力。当时开源模型由于训练数据的多样性不足、处理复杂视觉-语言任务的模型架构不够理想,以及无法有效平衡视觉和语言理解的训练策略,常在实际应用中落后于专有模型。

VL系列的预训练数据集主要来自于网页截图、PDF、OCR、图表,以及来自教科书和专家知识的知识型内容。此外,研究团队还创建了一个用例分类体系来指导指令微调,提升模型在真实世界环境中的用户体验。

在模型架构上,DeepSeek-VL采用了一种混合视觉Encoder,将低分辨率文本对齐Encoder与高分辨率Encoder相结合,使模型能够高效处理详细图像。此设计在保持各种任务中的重要语义和详细视觉信息的同时,平衡了Token预算和计算成本。

除此之外,DS还尝试了一种新的训练方法,在发展多模态能力的同时保持强大的语言能力。该策略包括“模态预热”阶段,逐步将视觉-语言数据纳入训练,以平衡这两种模态。DeepSeek-VL家族,包括1.3B和7B模型,均采用此方法进行训练,确保其在视觉和语言中心基准测试上具有稳健的表现。

DeepSeek-VL模型在各种基准测试中表现出最先进或具有竞争力的性能。7B模型的表现优于许多相似规模的开源模型,甚至在某些基准测试中接近专有模型如GPT-4V,显示出其在真实世界应用中的有效性。例如,DeepSeek-VL在SeedBench上取得了70.4的得分接近GPT-4V的71.6,并在数学逻辑和自然图像理解任务中表现优异。

DS在VL一代模型上的成功,让其选择继续探索多模态模型。在24年12月13日,DS开源了第二代的VL系列模型,架构和训练方法上类似于一代模型。今年1月27日,在V3以及R1系列模型之后,推出了DS Janus-Pro多模态模型。

总结

我们可以看出,在今年DS的V3、R1以及Janus-Pro大爆发之前,其实DS已经深刻研究了核心的算法、训练以及数据的优化方式,每篇先前发布的论文都导向现如今其在推理模型训练上的成功,并且基本都强调了开源,和伙伴一起共建社区生态。DS的成功也证明了,实质的社区开源与坚定的技术主张是真正的长期主义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TTS-Web-Vue系列:Vue3实现内嵌iframe文档显示功能

🖼️ 本文是TTS-Web-Vue系列的新篇章,重点介绍如何在Vue3项目中优雅地实现内嵌iframe功能,用于加载外部文档内容。通过Vue3的响应式系统和组件化设计,我们实现了一个功能完善、用户体验友好的文档嵌入方案,包括加载状态…

Elasticsearch索引设计与调优

一、分片策略设计 1.‌分片容量规划 单分片容量建议30GB(日志场景可放宽至100GB),避免超大分片引发查询延迟。分片总数计算公式:总数据量 / 30GB 1.2(20%余量应对未来增长)。主分片数创建后不可修改,副本分片数支持动态调整。2.‌分片分布优化 PUT logs-2025 { &qu…

Spring AI 集成 Mistral AI:构建高效多语言对话助手的实战指南

Spring AI 集成 Mistral AI:构建高效多语言对话助手的实战指南 前言 在人工智能应用开发领域,选择合适的大语言模型(LLM)与开发框架至关重要。Mistral AI 凭借其高效的多语言模型(如 Mistral-7B、Mixtral-8x7B 等&am…

从新手到高手:全面解析 AI 时代的「魔法咒语」——Prompt

引言:AI 时代的「语言炼金术」 在人工智能技术突飞猛进的今天,我们正在经历一场堪比工业革命的生产力变革。从聊天机器人到图像生成,从数据分析到自动化写作,AI 模型正在重塑人类与信息交互的方式。而在这一切背后,隐…

MySQL 8.0安装(压缩包方式)

MySQL 8.0安装(压缩包方式) 下载安装包并解压 下载 https://dev.mysql.com/downloads/mysql/可关注“后端码匠”回复“MySQL8”关键字获取 解压(我解压到D:\dev\mysql-8.4.5-winx64目录下) 创建mysql服务 注意,这步之前一定要保证自己电…

免费Ollama大模型集成系统——Golang

Ollama Free V2 Web 功能实现:界面交互与后端逻辑 一、Web 界面概述 Ollama Free V2 的 Web 界面提供了丰富的交互功能,包括模型选择、图片上传、历史记录查看等。界面使用 Bootstrap 进行布局,结合 JavaScript 实现动态交互。 二、前端界…

【AI】人工智能数据标注细分和商业机会

一、数据标注的常见方法 数据标注是为人工智能模型训练提供高质量标签的过程,根据数据类型(图像、文本、音频、视频等)的不同,标注方法也有所差异: 1. 图像标注 分类标注:为图像分配类别标签&#xff08…

lanqiaoOJ 652:一步之遥 ← 扩展欧几里得定理

【题目来源】 https://www.lanqiao.cn/problems/652/learning/ 【题目背景】 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 【题目描述】 从昏迷中醒来,小明发现自己被关在X星球的废矿车里。矿车停在平直的废弃…

HTTP / HTTPS 协议

目录 一、前言: 二、Fiddler 抓包工具: 三、http 协议: 1、http 请求: 1.(1)请求行: 1、(2) 请求头: 1、(3) 请求正文: 2、http 响应: 2、(1) 状态码&#x…

使用泛型加载保存数据

文章速览 泛型泛型概述定义优点 实例加载数据保存数据 一个赞,专属于你的足迹! 泛型 泛型概述 泛型(Generics)是 C# 中一种重要的编程特性,它允许程序员编写灵活且类型安全的代码。通过使用泛型,可以创建…

Redis内存淘汰策略和过期键删除策略有哪些?

Redis 提供 8 种内存淘汰策略,以下是详细解析及场景建议: 一、核心策略解析 noeviction (默认策略) 机制:内存满时拒绝新写入操作,返回错误优势:绝对数据安全场景:金融交易系统、医疗数据存储 allkeys-lr…

【C/C++】自定义类型:结构体

文章目录 前言自定义类型:结构体1.结构体类型的声明1.1 结构体回顾1.1.1 结构的声明 1.1.2 结构体变量的创建和初始化1.2 结构的特殊声明1.3 结构的自引用 2.结构体内存对齐2.1 对⻬规则2.2 为什么存在内存对齐?2.3 修改默认对⻬数 3. 结构体传参4.结构体…

PPO算法:一种先进的强化学习策略

什么是PPO算法? PPO(Proximal Policy Optimization)是一种增强学习算法,主要应用于解决连续控制任务。PPO算法在2017年由OpenAI提出,旨在解决传统策略梯度方法在连续控制任务中面临的挑战。PPO算法通过引入一个近似目…

OpenCV实现数字水印的相关函数和示例代码

OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 实现数字水印的相关函数 用OpenCV来实现数字水印功能,需要使用一些位操作函数,我们需要先了解一下这些函数。 1. bitwise_and函数 bitwise_and函数是OpenCV中的位运算函数之一&…

基于Python的计算机科学研究话题管理系统的设计与实现 - 爬虫

标题:基于Python的计算机科学研究话题管理系统的设计与实现 - 爬虫 内容:1.摘要 本文聚焦于基于Python的计算机科学研究话题管理系统的爬虫部分。背景是随着计算机科学研究的快速发展,相关话题数据海量且分散,人工管理效率低。目的是设计并实现一个能高…

告别手动解析!借助 CodeBuddy 快速开发网页源码提取工具

作为一名长期从事 Web 开发的程序员,我们在日常工作中,时不时会需要查看网页的源代码。这么做的目的通常是为了排查前端渲染的问题、分析接口返回的数据结构,或者就是单纯地想快速提取页面中的某些信息,比如文章链接、图片地址&am…

为什么要在 input() 后加 .strip()?

strip() 是 Python 字符串的一个方法,用于去除字符串开头和结尾的空白字符(包括空格、制表符 \t、换行符 \n 等)。 为什么要在 input() 后加 .strip()? 用户在输入时,可能会不小心在开头或结尾输入空格,例…

【日撸 Java 300行】Day 14(栈)

目录 Day 14:栈 一、栈的基本知识 二、栈的方法 1. 顺序表实现栈 2. 入栈 3. 出栈 三、代码及测试 拓展: 小结 Day 14:栈 Task: push 和 pop 均只能在栈顶操作.没有循环, 时间复杂度为 O(1). 一、栈的基本知识 详细的介…

dotnet core c#调用Linux c++导出函数

1.声明C++导出函数 platform_export.h // // Created by dev on 5/6/25. //#ifndef PLATFORM_EXPORT_H #define PLATFORM_EXPORT_H #if defined(_WIN32)#ifdef LIB_EXPORTS#define LIB_API __declspec(dllimport)#else#define LIB_API __declspec(dllimport)#endif #else#ifde…

SparkSQL操作Mysql

前面的课程我们学习了如何从csv文件中读入数据,这相当于是对csv这种类型的数据的操作。那么接下来,我们一起看看,如何写Spark程序来操作mysql数据库。先来给大家介绍一下我们这节课的主要学习内容: (1)安装…