【自然语言处理】利用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模型结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis持久化的两种方式:RDB和AOF

redis中的数据存储在缓存中,如果没有持久化的策略,Redis一旦宕机,那么将会导致数据丢失;因此redis提供了以下两种持久化方式:RDB和AOF 一般来说,大部分公司对这两种方式都是同时开启的 一、RDB RDB策略全…

linux查看所有程序占用的本地端口

sudo ss -tulwnp ss是Socket Statistics的缩写,用来替代旧的netstat工具,功能更强大,执行更快。它用于查看系统的网络连接情况,包括TCP、UDP等协议的信息。 查阅ss的帮助文档(man ss),发现选项…

组件库选择:ElementUI 还是 Ant Design

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

9 数据流图

9 数据流图 9.1数据平衡原则 子图缺少处理后的数据操作结果返回前端应用以及后端数据库返回操作结果到数据管理中间件。 9.2解题技巧 实件名 存储名 加工名 数据流

CEF132 编译指南 MacOS 篇 - 基础开发工具安装实战 (二)

1. 引言 在 macOS 平台上编译 CEF132 之前,首要任务是搭建一个完善的开发环境。与 Windows 和 Linux 环境不同,macOS 的开发环境主要以 Xcode 为核心。本篇将作为 CEF132 编译指南系列的第二篇,详细指导读者如何在 macOS 系统上安装和配置 X…

单片机简介

一、单片机简介 电脑和单片机性能对比 二、单片机发展历程 三、CISC VS RISC

Idea集成deepseek生成代码

今天我带大家在idea上安装CodeGpt插件,这个插件可以根据我们的提示词生产代码,我们一起试试。 1、安装插件 打开idea,再点击setting菜单,按以下步骤操作。 安装完成后,一定要点击第四步“ok”。再次点击菜单setting…

服务器使用宝塔面板Docker应用快速部署 DeepSeek-R1模型,实现Open WebUI访问使用

Deepseek这段时间非常火,最新推理模型Deepseek R1,都想装上试一试,特别是部署到服务器教程网上一堆教程好像没几个部署成功靠谱的,先说服务器上下载Ollama就难倒一堆人,每次都超时。今天终于在宝塔看到一篇 应用安装文…

json格式,curl命令,及轻量化处理工具

一. JSON格式 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于一个子集的JavaScript编程语言,使用人类易于阅读的文本格式来存储和表示数据。尽管名字中有“JavaScript”,但JSON是语言无关的,几…

Django在终端创建项目(pycharm Windows)

1.选择目录 选择或新建一个文件夹,作为项目保存的地方 2.右键在终端打开 3.确定django-admin.exe安装位置 找到自己安装django时,django-admin.exe安装的位置,例如 4.运行命令 使用django-admin.exe的绝对路径,在刚才打开的终端…

四次挥手详解

文章目录 一、四次挥手各状态FIN_WAIT_1CLOSE_WAITFIN_WAIT_2LAST_ACKTIME_WAITCLOSE 二、双方同时调用close(),FIN_WAIT_1状态后进入CLOSING状态CLOSING状态 三、TIME_WAIT状态详解(1) TIME_WAIT状态下的2MSL是什么MSL (报文最大生存时间)为…

哪吒闹海!SCI算法+分解组合+四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测

哪吒闹海!SCI算法分解组合四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测 目录 哪吒闹海!SCI算法分解组合四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测效果一览基本介绍程序设计参考资料 效果一览…

MybatisPlus常用增删改查

记录下MybatisPlus的简单的增删改查 接口概述 Service和Mapper区别 Mapper简化了单表的sql操作步骤(CRUD),而Serivce则是对Mapper的功能增强。 Service虽然加入了数据库的操作,但还是以业务功能为主,而更加复杂的SQL…

支付宝安全发全套解决方案

产品价值 ● 通过支付宝的资金能力,让服务商机构通过信息流驱动资金流,在不碰触客户企业资金的同时,为客户企业完成转账。账目清晰,无合规和资质风险。 ● 为服务商提供全链路的资金流动明细信息,服务商可以将这些信息…

PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 thinkphp框架

源码介绍 PHP盲盒商城系统源码 晒图免签短信验证在线回收 thinkphp框架 源码前端uniapp开发,可以打包成APP(非H5封壳)H5,接其他平台支付通道,前后端全开源 H5盲盒首页可以直接开盒新UI 修复优化BUG,修复无…

Redis企业开发实战(四)——点评项目之分布式锁

目录 一、分布式锁介绍 (一)分布式锁基本介绍 (二)分布式锁满足的条件 (三)常见的分布式锁 1.Mysql 2.Redis 3.Zookeeper 二、Redis分布式锁详解 (一)Redis分布式锁的实现核心思路 获取锁: 释放锁: (二)基于Redis实现分布式锁初级版本 1.…

【HarmonyOS Next 自定义可拖拽image】

效果图: 代码: import display from "ohos.display" import { AppUtil } from "pura/harmony-utils"/*** 自定义可拖拽图标组件*/ Component export default struct DraggableImage {imageResource?: ResourceimageHeight: numbe…

Jmeter快速实操入门

以下操作需要提前安装了JDK(JDK版本要Java8),并且配置了环境变量。 1、下载Jmeter,下载连接。选择zip版本,解压即可。 2、解压后的文件目录如下。 3、进入bin文件夹,双击ApacheJMeter,运行Jmeter。 4、在测…

学习 PostgreSQL 流复制

PostgreSQL 流复制 PostgreSQL数据库异常中止后,数据库刚重启时,会重放停机前最后一个checkpoint点之后的 WAL日志,在把数据库恢复到停机的状态后,自动进入正常的状态,可以接收其他用户的查询和修改。 想象另一个场景…

macbook2015升级最新MacOS 白苹果变黑苹果

原帖:https://www.bilibili.com/video/BV13V411c7xz/MAC OS系统发布了最新的Sonoma,超酷的动效锁屏壁纸,多样性的桌面小组件,但是也阉割了很多老款机型的升级权利,所以我们可以逆向操作,依旧把老款MAC设备强…