解读DeepSeek的新工作Engram

昨天,DeepSeek发布了一篇新工作[1],推出了一个叫Engram的模块。

这个工作和之前发布的 mHC,性质差不多,都是在模型算法层面上的改进,而不是大的模型版本更迭。

本文来看看这个 Engram 的模块是个什么东西。

动机

这篇文章的标题是:Conditional Memory via Scalable Lookup: A New Axis of Sparsity for Large Language Models

翻译一下就是:大语言模型稀疏建模的新方向:条件化记忆与可扩展查找

看标题就知道,这篇文章的目的就是稀疏建模,和前面DSA之类的目的一样,那就是省钱

昨天,我写了一篇文章,回顾了一下生成式语言模型的机理。

会发现,当前GPT架构的模型,都很暴力,不管输入的问题是长还是短,是简单还是复杂,都需要进行注意力计算。

举个例子,如果问模型:1+2=?

模型会先用分词器划分token,划分成1+2=?,这几个token,然后embedding成特征向量后,再变成Q、K、V三部分,计算Attention。

如果我们被问到这样的简单计算题,人脑中是否会经历这个计算过程呢?

如果问999+345=?,这种略复杂的计算题,脑子还需要转一下去计算,但1+2=3这种问题,未必要计算,因为小学课本里见过无数次这样的计算题,已经潜移默化成了静态知识的一部分,不需要再去算,所以就能“脱口而出”。

生活中,还有很多这样的问题,比如问模型一些历史题,模型如果有这方面的静态知识储备,直接输出来就行了,而不需要专门去推理,浪费算力。

这就是 Engram 的动机。这个出发点还是挺符合直觉的。

Engram具体架构

Engram具体是怎么做的呢?下图是该模块的架构图。

图中,当模型处理到Great这个Token时,它和前一个token会组成一个2-Gramthe Great,和前两个token会组成一个3-GramAlexander the Great

这两个分别取计算哈希值,然后查表,获取到历史已经存在Embedding结果。

相当于之前这两个或三个Token放在一起的组合,如果在记忆表里出现过,那就可以直接拿出它们之前计算得到的中间结果,参与下一轮的计算。

这个原理有点类似于KV Cache,本质上还是空间换时间,只不过KV Cache对顺序有严格要求,Engram只要求满足局部顺序2/3个token的顺序。

这样做,会存在两个问题:

  • 问题一:不同的词汇虽然语义相同(比如Apple和apple),但变成Token之后,可能会非常离散,因为分词器会严格给不同的token分配不同ID,这一点如果没看懂,可以看我上一篇文章,里面有详细说明分词器的原理。
  • 问题二:这张词汇表的内容是巨大的,因为要存不少token和其组合的中间结果,如果用一张哈希表来进行计算,容易产生哈希冲突:即不同的token组合却映射成了相同结果。

对于问题一,Engram给出的解决方案是用后处理的方式,比如全部转小写、去除特殊符号,让它们尽可能表示一致。

对于问题二,Engram给出的解决方案是用多张哈希表进行计算。如果一张哈希表的冲突概率是p,K张哈希表同时冲突的概率就是p K p^KpK,这样冲突的可能性就极低了。哈希表的查询,计算复杂度是O(1),这样所带来的额外计算量微乎其微。

为什么Engram在这里用2/3-Gram,而不用4-Gram。这就涉及到一个复杂度的问题。

Engram并不是作为一个孤立模块存在的,在整个大模型中,有多个关键的部分都插入了Engram,这就意味着记忆表需要记录这些组合的多个静态中间状态,4-Gram会导致组合的种类呈指数级上升,从而使表的体积巨大。

然而,只用2/3-Gram会导致一个明显的问题是,模型太关注局部表现了。

一段话中,三个单词最多只能表示一种局部信息,这三个词放到不同的上下文语境中,结果有可能不一样。

如果静态查找的内容不符合上下文情景,反而会给模型带来“噪音”。

为了解决这个问题,Engram又引入了一种门控机制。

上图中,2-Gram Embedding 和 3-Gram Embedding 得到的结果进行拼接,然后通过两个线性层(Linear)映射成K和V。

整段内容的中间状态(input hidden),也直接输入进去,作为Q,参考transformer的计算公式,来计算相关度。

如果相关度高于门控阈值,当前全局语境与查到的记忆值具有一致性,那么记忆值就可以被直接利用;

如果相关度低于门控阈值,意味着查询到的记忆值是噪音,会被丢弃,不去干扰后面的计算。

系统效率优化

理解完Engram的原理后,不难发现,这个模块的核心,是要维护一张记忆表,这非常占用空间,如果把这张表都放进显存中,会严重挤占部署模型所需要的空间。

为此,DeepSeek又做了如下图所示的优化。

在训练的时候,记忆表的内容需要高频变化,所以该内容还是需要驻留在显存中,以保证训练速度。

但是在推理时,记忆表的内容已经固定,只需要读取就行了,它可以直接放在内存里,利用前面层的计算作为缓冲区,来进行内容读取,从而降低读取速度的影响。

并且,作者还提到,可以根据内容出现的频率进行单独优化,比如频繁访问的内容,将其缓存在更快的存储层(例如 GPU HBM 或 DRAM),低频出现的长尾分布内容再放到内存,这样对延迟的影响最小。

资源分配的讨论

作者进一步从资源分配的角度,讨论了该如何合理分配计算资源。

假设:

  • 𝑃 t o t 𝑃_{tot}Ptot表示模型的总参数量。
  • 𝑃 a c t 𝑃_{act}Pact表示模型的激活的参数量。
  • 𝑃 s p a r s e 𝑃_{sparse}Psparse(𝑃 t o t 𝑃_{tot}Ptot-𝑃 a c t 𝑃_{act}Pact)表示模型剩余可分配的参数量。

在MoE模型中,𝑃 s p a r s e 𝑃_{sparse}Psparse全部用来扩容专家(未激活的专家),但Engram提出,可以把这部分参数进行重新分配。

作者给出了一个比例因子𝜌,

  • 𝜌=1,表示这部分参数全部给MoE。
  • 𝜌<1,MoE的部分分到𝜌,Engram分到1-𝜌。

作者发现,在总参数量和激活参数量固定的情况下,只调节𝜌,模型在验证集上的损失会出现一条U型曲线

这意味着,纯MoE和纯Engram都不是最优解,最优解是混合两者,即将𝜌的取值限定为 0.75 到 0.8范围。

实验

为了验证Engram的有效性,作者基于Dense、MoE、Engram分别构建了几个模型,并在通用的Benchmark上进行测试,结果如下表所示。

这里需要注意,Engram的模型里面是包含MoE结构的,例如,Engram-27B中,路由专家从原本的72个消减成55个,节省出来的参数量用来构建Engram。

结果发现,在相同参数量27B的情况下,Engram果然比MoE效果要好,并且作者还在40B的参数量上,验证了Engram的scaling能力,发现是有效的,依然能继续涨点。

没准他们现在已经在进行上百B的Engram实验了,期待后续进一步scaling的效果。

分析

Engram有效的原理是什么,为了弄清这一点,作者又进行了可视化分析。

如下图所示,图a是通过LogitLens,来计算不同层的输出与最终结果的KL散度。

可以发现,Engram能够比纯MoE整体的KL散度下降的更快,这就意味着它的浅层就能获得MoE的更深层的信息。

图b和图c是通过 CKA 来分析Engram和纯MoE不同层之间的相似性。图中,白线在对角线以上,这就意味着Engram的浅层就和MoE的深层有很大的相似性。

这种理解非常直观,Engram就是给模型单独开了一条快速通道,让它能直接追上MoE算半天之后的结果。

看到这里,想到了Engram很像是听播客,听完行业大佬的分享,一下子获取到了原本可能需要十多年后才有的认知,这何尝不是一种 Engram 的具象化呢。

总结

看完文章,其实会发现DeepSeek做的很“克制”,它不像OpenAI那样,直接扩个十倍(GPT-2->GPT-3)看看再说,而是先考虑参数不变,看看方法的有效性。

总之,Engram 会比 mHC 更有普适性,作为即插即用的模块,估计又可以催生出一些科研成果了。

作为MoE架构的改进,如果它成为一种新的范式,那么,内存又该涨价了。

参考

[1] https://github.com/deepseek-ai/Engram/blob/main/Engram_paper.pdf

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

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

相关文章

AnimeGANv2实战教程:5分钟将照片变成二次元动漫的保姆级指南

AnimeGANv2实战教程&#xff1a;5分钟将照片变成二次元动漫的保姆级指南 1. 学习目标与前置准备 1.1 教程目标 本教程旨在帮助开发者和AI爱好者快速掌握如何使用 AnimeGANv2 模型&#xff0c;将真实世界的照片一键转换为具有宫崎骏、新海诚风格的二次元动漫图像。通过本文&a…

从零开始学大模型:通义千问2.5-7B-Instruct入门指南

从零开始学大模型&#xff1a;通义千问2.5-7B-Instruct入门指南 1. 学习目标与背景介绍 随着大语言模型技术的快速发展&#xff0c;越来越多开发者希望在本地或私有环境中部署和使用高性能开源模型。通义千问2.5-7B-Instruct作为阿里云于2024年9月发布的中等体量全能型模型&a…

VibeVoice-TTS语音克隆伦理问题:开源模型使用边界探讨

VibeVoice-TTS语音克隆伦理问题&#xff1a;开源模型使用边界探讨 1. 引言&#xff1a;技术发展与伦理挑战并存 随着深度学习和生成式AI的迅猛发展&#xff0c;文本转语音&#xff08;TTS&#xff09;技术已从简单的机械朗读演进为高度拟人化、富有情感表达的语音合成系统。V…

数据不守规矩怎么办?——聊聊乱序事件的处理策略与实战要点

数据不守规矩怎么办&#xff1f;——聊聊乱序事件的处理策略与实战要点一、先说句大实话&#xff1a;真实世界的数据&#xff0c;从来不排队 刚接触流计算那会儿&#xff0c;很多人都有一个美好的幻想&#xff1a;数据会按时间顺序乖乖地过来&#xff0c;我只要顺着算就行了。现…

AnimeGANv2部署案例:教育领域的风格转换应用

AnimeGANv2部署案例&#xff1a;教育领域的风格转换应用 1. 技术背景与应用场景 随着人工智能在图像生成领域的快速发展&#xff0c;风格迁移&#xff08;Style Transfer&#xff09; 技术已从学术研究走向实际应用。其中&#xff0c;AnimeGAN 系列模型因其轻量高效、画风唯美…

小白也能玩转大模型!通义千问2.5-7B-Instruct保姆级部署教程

小白也能玩转大模型&#xff01;通义千问2.5-7B-Instruct保姆级部署教程 1. 引言 随着大模型技术的快速发展&#xff0c;越来越多开发者和企业希望将高性能语言模型集成到实际应用中。然而&#xff0c;动辄上百亿参数的模型对硬件要求极高&#xff0c;导致部署门槛居高不下。…

深度学习毕设选题推荐:基于python-CNN深度学习训练识别青椒是否变质基于机器学习训练识别青椒是否变质

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

STM32CubeMX配置OTG主机模式超详细版教程

从零开始玩转STM32 OTG主机&#xff1a;CubeMX配置全解析 实战避坑指南你有没有遇到过这样的场景&#xff1f;你的工业设备需要读取U盘里的配方数据&#xff0c;却只能靠PC中转&#xff1b;或者想用USB键盘给HMI输入参数&#xff0c;结果还得外接一个转换芯片……其实&#xf…

小白也能用!通义千问2.5-7B-Instruct在Ollama上的快速体验

小白也能用&#xff01;通义千问2.5-7B-Instruct在Ollama上的快速体验 随着大模型技术的普及&#xff0c;越来越多开发者和普通用户希望在本地环境中运行高性能语言模型。然而&#xff0c;复杂的部署流程、高昂的硬件要求常常成为入门门槛。幸运的是&#xff0c;Ollama 的出现…

AI Agent:从“被动大脑”到“主动同事”的进化之路

引子&#xff1a;当ChatGPT学会“动起来”想象这样一个场景&#xff1a;你告诉ChatGPT&#xff1a;“我想庆祝结婚纪念日&#xff0c;需要一家浪漫的餐厅&#xff0c;要有小提琴演奏&#xff0c;能看到城市夜景&#xff0c;人均预算2000元左右&#xff0c;最好能帮我预订并提醒…

【课程设计/毕业设计】基于CNN卷积神经网络的橘子是否新鲜识别基于深度学习CNN卷积神经网络的橘子是否新鲜识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

设备树与时钟子系统集成:项目应用详解

设备树与时钟子系统集成&#xff1a;从理论到实战的完整指南你有没有遇到过这样的场景&#xff1f;新换一块开发板&#xff0c;UART串口死活没输出&#xff1b;或者系统启动一半卡住&#xff0c;日志停在某个时钟使能失败的地方。翻遍驱动代码也没发现问题&#xff0c;最后才发…

AnimeGANv2如何做压力测试?高并发请求处理能力评估

AnimeGANv2如何做压力测试&#xff1f;高并发请求处理能力评估 1. 引言&#xff1a;AI二次元转换服务的性能挑战 随着AI图像风格迁移技术的普及&#xff0c;基于AnimeGANv2的“照片转动漫”应用在社交娱乐、个性化头像生成等场景中获得了广泛使用。尤其在集成WebUI后&#xf…

ICP-10111气压传感器原理图设计,已量产(压力传感器)

目录 1、电源电路:给高精度传感器 “稳电压” 2、I2C 电平转换:解决 “电压不匹配” 的双向通信 3、传感器接口:极简布局里的细节 4、实际调试的小坑与优化 在最近的室内导航定位项目中,我们需要一款能捕捉厘米级垂直高度变化的气压传感器 —— 毕竟室内环境里,哪怕是…

OCCT运行报错error C4996: ‘Handle_Graphic3d_CLight‘: This class will be removed right after 7.9 release.

OCCT运行报错&#xff1a;error C4996: Handle_Graphic3d_CLight: This class will be removed right after 7.9 release. Use Handle(T) directly instead.解决方法&#xff1a;#define OCCT_NO_DEPRECATED

一个懂业务、能上手的AI,到底在哪里?大模型产业应用城市纵深行有解!

“我在银行工作&#xff0c;最关心AI怎么能在不违规的情况下真正帮我们提高效率。”在上海站活动开始前&#xff0c;一位与会者的提问&#xff0c;道出了众多产业人的共同心声。 1月10日至11日&#xff0c;火山引擎“大模型产业应用城市纵深行”活动在上海、杭州、武汉三地接连…

BMP388气压传感器原理图设计,已量产(压力传感器)

目录 1、电源电路:传感器精度的 “地基” 2、电平转换:低成本的双向适配方案 3、接口设计:SPI 模式的高效采集 4、调试里的 “踩坑” 细节 在最近的便携式高度 - 温度监测项目里,我们选了博世 BMP388 作为核心传感单元 —— 这款基于成熟压电式压力技术的芯片,刚好戳中…

通义千问2.5-7B功能测评:70亿参数全能模型表现如何

通义千问2.5-7B功能测评&#xff1a;70亿参数全能模型表现如何 1. 引言&#xff1a;中等体量大模型的商用新选择 在当前大模型“军备竞赛”不断向百亿、千亿参数迈进的背景下&#xff0c;70亿参数级别的模型似乎正逐渐被边缘化。然而&#xff0c;在实际落地场景中&#xff0c…

基于springboot技术的美食烹饪互动平台的设计与实现(11692)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

I2C时序毛刺抑制与滤波设计实战案例

I2C时序毛刺抑制与滤波设计实战&#xff1a;从噪声到稳定的完整路径你有没有遇到过这样的场景&#xff1f;系统运行得好好的&#xff0c;突然某个传感器读不到了&#xff1b;示波器一抓波形&#xff0c;发现SCL线上莫名其妙跳了个尖峰——紧接着主控就误判成了“起始条件”&…