【自然语言处理】利用Memory Layer替换Transformer中的FFN

论文地址:https://arxiv.org/pdf/2412.09764

相关博客
【自然语言处理】利用Memory Layer替换Transformer中的FFN
【自然语言处理】【大模型】BitNet:用1-bit Transformer训练LLM
【自然语言处理】BitNet b1.58:1bit LLM时代
【自然语言处理】【长文本处理】RMT:能处理长度超过一百万token的Transformer
【自然语言处理】【大模型】MPT模型结构源码解析(单机版)
【自然语言处理】【大模型】ChatGLM-6B模型结构代码解析(单机版)
【自然语言处理】【大模型】BLOOM模型结构源码解析(单机版)

​ 本文提出了一种memory layer用于替换Transformer中的FFN,从而提升模型的知识容量。

一、Memory Layer

​ 这里定义的memory layer与注意力机制类似。即给定query q ∈ R n q\in\mathbb{R}^n qRn、一组key K ∈ R N × n K\in\mathbb{R}^{N\times n} KRN×n和一组value V ∈ R N × n V\in\mathbb{R}^{N\times n} VRN×n,最终输出value的软组合。但是,memory layer与标准注意力层有两个区别:

​ (1) 标准注意力中key和value是激活值,而memory layer中是可训练参数;

​ (2) memory layer中的key和value规模要比标准注意力大很多,需要稀疏查询和更新;

Memory Layer的正式描述
I = SelectTopkIndices ( K q ) , s = Softmax ( K I q ) , y = s V I (1) I=\text{SelectTopkIndices}(Kq),\quad s=\text{Softmax}(K_I q),\quad y=sV_I\tag{1} \\ I=SelectTopkIndices(Kq),s=Softmax(KIq),y=sVI(1)
其中:

  • I I I是选中的key-value对的索引集合;
  • s ∈ R k s\in\mathbb{R}^k sRk是权重向量;
  • K I K_I KI V I V_I VI是选中的key和value;
  • y ∈ R n y\in\mathbb{R}^n yRn是memory layer的输出;

二、计算Topk索引 I I I的优化

1. memory layer的瓶颈

​ 阻碍memory layer大规模应用的一个主要瓶颈就是query-key检索机制。一般来说,可以利用简单的最近邻搜索来比较每个query-key对,但是对于更大规模的记忆来说,这种方法并不可行。当然,也有一些快速近似向量相似度的技术,但是当key在持续训练中不断更新,则需要不断的重新索引。

2. product-key

K K K的分解。计算 I I I的主要挑战是 K K K太大,那么可以考虑用笛卡尔积的方式分解 K K K。具体来说,随机初始化 K 1 ∈ R N × n 2 K_1\in\mathbb{R}^{\sqrt{N}\times\frac{n}{2}} K1RN ×2n K 2 ∈ R N × n 2 K_2\in\mathbb{R}^{\sqrt{N}\times\frac{n}{2}} K2RN ×2n两个独立的key集合,通过 K 1 K_1 K1 K 2 K_2 K2的笛卡尔积就可以得到 K K K,即两两拼接 K 1 K_1 K1 K 2 K_2 K2中的向量:
K [ i , j ] = concat ( K 1 [ i ] , K 2 [ j ] ) K[i,j]=\text{concat}(K_1[i],K_2[j]) \\ K[i,j]=concat(K1[i],K2[j])
注意,在实际计算中索引 I I I的过程中并不需要计算出 K K K,直接利用 K 1 K_1 K1 K 2 K_2 K2即可。

查询。将query q q q也分解为两个部分 q 1 , q 2 ∈ R n 2 q_1,q_2\in\mathbb{R}^{\frac{n}{2}} q1,q2R2n,然后分别与 K 1 K_1 K1 K 2 K_2 K2进行相似度计算,得到 I 1 , I 2 I_1,I_2 I1,I2 s 1 , s 2 s_1,s_2 s1,s2。最终topk的索引以及分数为
arg ⁡ max ⁡ i 1 ∈ I 1 , i 2 ∈ I 2 s 1 [ i 1 ] + s 2 [ i 2 ] \mathop{\arg\max}_{i_1\in I_1,i_2\in I_2}\quad s_1[i_1]+s_2[i_2] \\ argmaxi1I1,i2I2s1[i1]+s2[i2]

三、并行优化

在这里插入图片描述

​ memory layer本质上是存储密集型的,其包含了大量可训练参数以及对应的优化器状态。为了能够实现包含数百万个key的memory layer,需要在多个GPU上并行化embedding的查找和聚合操作。

​ 具体来说,在embedding的维度上进行分片。每一步中,从进程组收集索引,然后每个进程在其所属的分片上进行查找和聚合操作。最后,每个进程收集与自身部分索引相对应的部分embedding。通过确保每个GPU只获取其自身那部分数据,从而无需实例化整个embedding输出,控制激活内存。

四、共享记忆

​ 在所有memory layerz中使用一个共享的记忆参数池,从而保持参数量不变并最大化参数共享。实验发现,在一定数量的层内,多个memory layer比具有相同总参数量的单个memory layer效果更好。当在超过这个数量的层内替换FFN会导致性能下降,这表明稀疏层和密集层都是必要的,而且很可能具有互补性

五、性能和稳定性提升

  • 通过自定义CUDA核,相较于Pytorch的EmbeddingBag有6倍的提升;
  • 引入silu激活函数来提高memory layer的性能。公式(1)的输出变为

output = ( y ⊙ silu ( x ⊤ W 1 ) ) ⊤ W 2 (2) \text{output} = (y\odot\text{silu}(x^\top W_1))^\top W_2 \tag{2}\\ output=(ysilu(xW1))W2(2)

其中 silu ( x ) = x ⋅ sigmoid ( x ) \text{silu}(x)=x\cdot\text{sigmoid}(x) silu(x)=xsigmoid(x) ⊙ \odot 表示逐元素相乘。

  • 大规模memory layer使得训练不稳定,特别是对小模型。使用qk-normalization来缓解这一问题;

六、实验设置

设置。遵循Llama系列的Transformer模型,然后利用共享记忆层替换一个或多个前馈层。scaling law实验中,参数规模分别是134m、373m、720m、1.3b。

baselines。除了密集型baselines外,还将比较MOE和PEER。MOE模型中,FFN层由多个“专家”组成,对于每个输入,只有一部分“专家”参与计算。PEER类似memory layer。

评估基准。NaturalQuestions、TriviaQA、HotpotQA、MMLU、HellaSwag、OBQA、PIQA、HumanEval、MBPP。

七、实验结果

1. 固定参数量

在这里插入图片描述

​ 上表展示了记忆增加型架构的效果。

​ (1) 配备记忆层的模型相较于密集型模型由显著提升,通常是同参数密集型模型的两倍;

​ (2) Memory+比Memory效果更好;

​ (3) 参数量相同下,PEER与Memory相近,但落后于Memory+;

​ (4) MOE大幅度落后于各种配备记忆层的模型。

2. 缩放memory layer

在这里插入图片描述

​ 如上图所示,在事实问答基准上,模型性能随memory的尺寸增加而增加。当拥有6400万个key后,1.3B模型的效果接近Llama2 7B的性能。

3. 8B模型结果

在这里插入图片描述

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

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

相关文章

ChunkKV:优化 KV 缓存压缩,让 LLM 长文本推理更高效

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

台湾精锐APEX减速机在半导体制造设备中的应用案例

半导体制造设备对传动系统的精度、可靠性和稳定性要求极高,台湾精锐APEX减速机凭借其低背隙、高精度和高刚性等优势,在半导体制造设备中得到了广泛应用。 案例一:晶圆切割设备 1.应用场景 在晶圆切割过程中,设备需要高精度的运…

如何为win10本地部署的deepseek创建一个快捷方式

简介:在桌面上创建一个快捷方式,双击即可实现打开终端并且输入ollama run的命令。 在win10系统下,本地部署了deepseek之后,每次需要打开powershell,然后再手动输入指令 ollama run deepseek-r1:1.5b 要想实现一个桌面…

解锁Rust:融合多语言特性的编程利器

如果你曾为理解Rust的特性或它们之间的协同工作原理而苦恼,那么这篇文章正是为你准备的。 Rust拥有许多令人惊叹的特性,但这些特性并非Rust所独有。实际上,Rust巧妙地借鉴了众多其他语言的优秀特性,并将它们融合成了一个完美的整体。深入了解Rust这些重要特性的来源以及它是…

【阅读笔记】信息熵自动曝光An Automatic Exposure Algorithm Based on Information Entropy

一、算法背景 信息熵作为衡量图像信息量的重要指标,能够反映图像的细节丰富程度。通过基于信息熵的自动曝光算法,可以自动调整曝光时间,使图像包含更多信息,从而提高图像质量。 灰度直方图在各个灰度值上分布越均匀,…

2025我的第二次社招,写在春招之季

先说一个好消息,C那些事 4w star了! 前面断更了一个月,本篇文章就可以看到原因,哈哈。 大家好,我叫光城,腾讯实习转正做后端开发,后去小公司做数据库内核,经过这几年的成长与积累&am…

运用Deek Seeker协助数据分析

我的数据源有两张表,一个是每日销售表(字段有日期、产品名称、实际销量),一个是每月目标表(字段有年度月份、产品名称、目标销量);我的需求是,按月、按年来统计每个产品的目标完成情况请问用PowerBl进行分析,应该如何建立数据模型…

【设计模式】【行为型模式】策略模式(Strategy)

👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 📫 欢迎V: flzjcsg2,我们共同讨论Java深渊的奥秘 &#x1f…

【高级架构师】多线程和高并发编程(三):锁(中)深入ReentrantLock

文章目录 3、深入ReentrantLock3.1 ReentrantLock和synchronized的区别3.2 AQS概述3.3 加锁流程源码剖析3.3.1 加锁流程概述3.3.2 三种加锁源码分析3.3.2.1 lock方法3.3.2.2 tryLock方法3.3.2.3 lockInterruptibly方法 3.4 释放锁流程源码剖析3.4.1 释放锁流程概述3.4.2 释放锁…

WPF 进度条(ProgressBar)示例一

本文讲述&#xff1a;WPF 进度条(ProgressBar)简单的样式修改和使用。 进度显示界面&#xff1a;使用UserControl把ProgressBar和进度值以及要显示的内容全部组装在UserControl界面中&#xff0c;方便其他界面直接进行使用。 <UserControl x:Class"DefProcessBarDemo…

Android studio怎么创建assets目录

在Android Studio中创建assets文件夹是一个简单的步骤&#xff0c;通常用于存储不需要编译的资源文件&#xff0c;如文本文件、图片、音频等 main文件夹&#xff0c;邮件new->folder-assets folder

工业相机在工业生产制造过程中的视觉检测技术应用

随着技术不断发展以及工业4.0时代的到来&#xff0c;利用工业相机进行视觉检测技术已经成为制造业不可或缺的一部分。通过结合先进的计算机视觉、AI算法和自动化设备&#xff0c;工业视觉检测为生产线质量控制和效率提升提供了革命性的解决方案。 一、什么是工业视觉检测技术 …

快速上手Vim的使用

Vim Linux编辑器-vim使用命令行模式下所有选项都可以带数字底行模式可视块模式&#xff08;ctrlV进入&#xff09; Linux编辑器-vim使用 Vim有多种模式的编辑器。能帮助我们很快的进行代码的编辑&#xff0c;甚至完成很多其他事情。 默认情况下我们打开vim在命令模式下&#x…

数据结构-基础

1、概念&#xff1a; 程序 数据结构 算法 2、程序的好坏 可读性&#xff0c;稳定性&#xff0c;扩展性&#xff0c;时间复杂度&#xff0c;空间复杂度。 3、数据结构 是指存储、组织数据的方式&#xff0c;以便高效地进行访问和修改。通过选择适当的数据结构&#xff0c; 能…

本地部署DeepSeek(Mac版本,带图形化操作界面)

一、下载安装&#xff1a;Ollama 官网下载&#xff1a;Download Ollama on macOS 二、安装Ollama 1、直接解压zip压缩包&#xff0c;解压出来就是应用程序 2、直接将Ollama拖到应用程序中即可 3、启动终端命令验证 # 输入 ollama 代表已经安装成功。 4、下载模型 点击模型…

山东大学软件学院人机交互期末复习笔记

文章目录 2022-2023 数媒方向2023-2024 软工方向重点题目绪论发展阶段 感知和认知基础视觉听觉肤觉知觉认知过程和交互设计原则感知和识别注意记忆问题解决语言处理影响认知的因素 立体显示技术及其应用红蓝眼镜偏振式眼镜主动式&#xff08;快门时&#xff09;立体眼镜 交互设…

《Kettle实操案例一(全量/增量更新与邮件发送)》

目录 一、场景描述:二、要求:三、思路四、整体作业五、各部分详细配置1、Start2、转换-获取执行开始时间3、获取目标表抽取前行数4、检验字段的值5、增量更新6、全量更新7、获取目标表抽取后行数8、获取执行结束时间9、日志写入数据库10、写日志11、发送数据抽取完成邮件 六、最…

位运算算法篇:进入位运算的世界

位运算算法篇&#xff1a;进入位运算的世界 本篇文章是我们位运算算法篇的第一章&#xff0c;那么在我们是算法世界中&#xff0c;有那么多重要以及有趣的算法&#xff0c;比如深度优先搜索算法以及BFS以及动态规划算法等等&#xff0c;那么我们位运算在这些算法面前相比&#…

redis高级数据结构HyperLogLog

文章目录 背景常见API注意事项实现原理1、哈希函数2、前导零统计3、存储与计数4、基数估算 pf 的内存占用为什么是 12k&#xff1f;总结 背景 在开始这一节之前&#xff0c;我们先思考一个常见的业务问题&#xff1a;如果你负责开发维护一个大型的网站&#xff0c;有一天老板找…

<tauri><rust><GUI>基于rust和tauri,在已有的前端框架上手动集成tauri示例

前言 本文是基于rust和tauri&#xff0c;由于tauri是前、后端结合的GUI框架&#xff0c;既可以直接生成包含前端代码的文件&#xff0c;也可以在已有的前端项目上集成tauri框架&#xff0c;将前端页面化为桌面GUI。 环境配置 系统&#xff1a;windows 10 平台&#xff1a;visu…