(2024,LSTM,Transformer,指数门控,归一化器状态,多头内存混合)xLSTM:扩展的 LSTM

xLSTM: Extended Long Short-Term Memory

公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群)

目录

0. 摘要

1. 简介

2. 扩展的 LSTM

2.1 LSTM 回顾

2.2 sLSTM

2.3 mLSTM

2.4 xLSTM 架构

2.5 内存和速度考虑

4. 实验

5. 限制

6. 结论


0. 摘要

在 1990s,恒定误差旋转门(constant error carousel)和门控(gating)被引入作为长短期记忆(Long Short-Term Memory,LSTM)的核心思想。从那时起,LSTM 经受住了时间的考验,并为许多深度学习成功故事做出了贡献,特别是构成了第一个大型语言模型(LLMs)。然而,随着 Transformer 技术的出现,以可并行化的自注意力为核心,标志着一个新时代的开端,在规模上超越了 LSTM。我们现在提出一个简单的问题:当将 LSTM 的规模扩大到数十亿参数,并利用现代 LLM 的最新技术,同时减轻已知的 LSTM 限制时,我们能在语言建模方面取得多远?首先,我们引入具有适当归一化和稳定化技术的指数门控(exponential gating)。其次,我们修改 LSTM 的内存结构,获得:(i)带有标量内存、标量更新和新的内存混合的 sLSTM,(ii)完全可并行化的 mLSTM,具有矩阵内存和协方差更新规则。将这些 LSTM 扩展集成到残差块骨干中,得到了 xLSTM 块,然后将它们残差叠加到 xLSTM 架构中。指数门控和修改后的内存结构提升了 xLSTM 的能力,使其在性能和规模方面与最先进的 Transformers 和状态空间模型(SSM)相比表现出色。 

1. 简介

LSTM 的思想(Hochreiter, 1991; Hochreiter & Schmidhuber, 1997b,a),即恒定误差旋转门和门控,是为了克服 RNN(Hochreiter, 1991; Hochreiter et al., 2000)的梯度消失问题而引入的:

恒定误差旋转门是单元状态 c_(t−1)(绿色)通过单元输入 zt 的加法更新,并由 sigmoid 门(蓝色)调节。输入门 it 和遗忘门 ft 控制此更新,而输出门 ot 控制内存单元的输出,即隐藏状态 ht 。单元状态由 ψ 归一化或压缩,然后输出门给出隐藏状态。 

尽管 LSTM 取得了巨大的成功,但仍存在三个主要限制:

  • 无法修订存储决策。我们通过最近邻搜索问题来说明这一限制(也见附录 B):给定一个参考向量,必须按顺序扫描序列,以找到最相似的向量,以便在序列末尾提供。图 2 的左侧面板显示了该任务的均方误差。当找到一个更相似的向量时,LSTM 在修订存储值时遇到困难,而我们的新 xLSTM 通过指数门控修复了这个限制。
  • 有限的存储容量,即信息必须压缩到标量单元状态中。我们通过稀有标记预测(Rare Token Prediction)来说明这一限制。在图 2 的右侧面板中,给出了对 Wikite-103(Merity et al., 2017)上的标记预测的困惑度,针对不同标记频率的块(buckets)。由于其有限的存储容量,LSTM 在稀有标记上表现较差。我们的新 xLSTM 通过矩阵存储解决了这个问题。
  • 由于记忆混合导致缺乏并行性,即从一个时间步到下一个时间步的隐藏状态之间的隐藏-隐藏连接,强制进行了顺序处理。

这些 LSTM 的限制为 Transformers(Vaswani et al., 2017)在语言建模中的出现铺平了道路。当克服这些限制并将 LSTM 扩展到当前大型语言模型的规模时,我们能够在语言建模中实现什么样的性能?

2. 扩展的 LSTM

2.1 LSTM 回顾

原始的 LSTM 思想(Hochreiter, 1991; Hochreiter & Schmidhuber, 1997b,a)引入了标量内存单元作为一个中心处理和存储单元,通过恒定误差旋转门(单元状态更新)避免了梯度消失(Hochreiter, 1991; Hochreiter et al., 2000)。内存单元包含三个门:输入门、输出门和遗忘门。遗忘门由 Gers 等人引入(2000年)。在时间步 t,LSTM 内存单元的更新规则为:

其中,

  • 权重向量 w_z, w_i, w_f, 和 w_o 分别对应于输入 x_t 与单元输入、输入门、遗忘门以及输出门之间的输入权重向量。
  • 权重 r_z, r_i, r_f, 和 r_o 对应于隐藏状态 h_{t-1} 与单元输入、输入门、遗忘门以及输出门之间的递归权重。
  • b_z, b_i, b_f, 和 b_o 是相应的偏置项。
  • φ 和 Ψ 是单元输入和隐藏状态激活函数(通常为双曲正切)。Ψ 用于归一化或压缩单元状态,否则将无界。
  • 所有门的激活函数都是 sigmoid 函数,即 σ(x) = 1/(1 + exp(-x))。

在后续的公式中,多个内存单元被合并成一个向量,这允许使用递归权重矩阵来混合内存单元的单元输出(Greff et al., 2015),更多细节请参见附录 A.1。消融研究表明,内存单元的所有组件都至关重要(Greff et al., 2015)。

2.2 sLSTM

为了赋予 LSTM 修订存储决策的能力,我们引入了指数门控(红色)以及归一化和稳定化。特别地,输入门和遗忘门可以具有指数激活函数。对于归一化,我们引入一个归一化器(normalizer)状态,它将输入门与所有未来遗忘门的乘积相加。 

sLSTM的前向传播过程是:

我们将原始的 LSTM 门控技术,即输入和/或隐藏依赖的门控以及偏置项,广播到新的架构中。指数激活函数可能导致产生大值而引起溢出。因此,我们使用额外的状态 m_t(Milakov & Gimelshein, 2018)来稳定门控:  

我们在附录 A.2 中展示,将 ft 替换为 f'_t,以及将 it 替换为 i'_t 在前向传播中既不会改变整个网络的输出,也不会改变损失对参数的导数。

新的内存混合。sLSTM 可以像原始的 LSTM 一样具有多个内存单元(见附录 A.2)。多个内存单元通过从隐藏状态向量 h 到内存单元输入 z 和门 i、f、o 的递归连接 rz、ri、rf、ro 实现内存混合。内存混合的新方面是指数门的影响。新的 sLSTM 可以在每个头部(head)内进行内存混合,但不能跨头部进行混合。引入头部对 sLSTM 的指数门以及内存混合建立了一种新的内存混合方式。

附录:基于 Greff 等人(2015)的标准 LSTM 内存单元更新规则,在时间步 t 将标量单元状态公式扩展为单元状态向量,类似地,sLSTM 也可以向量化为多个单元:

2.3 mLSTM

为了增强 LSTM 的存储容量,我们将 LSTM 内存单元从标量 c ∈ R 增加到矩阵 C ∈ R^(d×d)。因此,检索是通过矩阵乘法执行的。在时间 t,我们想要存储一对向量,即键 k_t ∈ R^d 和值 v_t ∈ R^d(我们使用 Transformer 术语)。稍后在时间 t + τ,值 v_t 应该由查询向量 q_(t+τ) ∈ R^d 检索。这是双向联想记忆(Bidirectional Associative Memories,BAMs)(Kohonen, 1972; Anderson, 1972; Nakano, 1972; Anderson et al., 1977)的设置。存储键-值对的协方差更新规则(Sejnowski, 1977; Dayan & Willshaw, 1991)是

我们假设在将输入投影到键和值之前进行层归一化,因此它们的平均值为零。协方差更新规则是最优的(Dayan & Willshaw, 1991),可实现检索的二进制向量的最大可分性,这等效于最大的信噪比。当将检索限制为成对交互并接受二次复杂度时,更高的可分性是可能的(Krotov & Hopfield, 2016, 2017; Ramsauer et al., 2021)。协方差更新规则等效于快速权重编程器(Schmidhuber, 1992; Schlag et al., 2021),后者已经配备了一个乘以 C_(t−1) 的恒定衰减率和一个乘以 v_t·k^T_t 的恒定学习率(Ba et al., 2016a)。在这个精神上,我们将协方差更新规则集成到 LSTM 框架中,其中遗忘门对应于衰减率,输入门对应于学习率,而输出门缩放检索到的向量。

对于这个矩阵内存,归一化器状态是键向量的加权和,其中每个键向量都由输入门和所有未来遗忘门加权。同样,归一化器状态记录门的强度。由于查询和归一化器状态之间的点积可能接近零,我们使用该点积的绝对值,并将其下限设为一个阈值(通常为 1.0),就像以前一样(Sun et al., 2023)。mLSTM 的前向传播过程是: 

mLSTM 可以像原始的 LSTM 一样具有多个内存单元。对于 mLSTM,因为没有内存混合,多个头部和多个单元是等价的。为了稳定 mLSTM 的指数门,我们使用与 sLSTM 相同的稳定化技术,参见方程(15)。由于 mLSTM 没有内存混合,这种递归可以重新表述为并行版本。更多细节请参阅附录 A.3。 

2.4 xLSTM 架构

xLSTM 块。xLSTM 块应该在高维空间中非线性地总结过去,以更好地区分不同的历史或上下文。分离历史是正确预测下一个序列元素(如下一个标记)的前提。我们诉诸于 Cover 定理(Cover, 1965),该定理指出在高维空间中,非线性嵌入的图样(patterns)更可能被线性分离,而不是在原始空间中。我们考虑两种残差块架构:

  • 一个带有后上投影(post up-projection)的残差块(类似于Transformer),它在原始空间中非线性地总结过去,然后线性映射到高维空间,应用非线性激活函数,然后线性映射回原始空间;见图 3 的左侧面板和图 1 中的第三列。附录中的图 9 展示了更详细的版本。
  • 一个带有前上投影(pre up-projection)的残差块(类似于 SSM),它线性映射到高维空间,然后在高维空间中非线性地总结过去,最后线性映射回原始空间。

对于包含 sLSTM 的 xLSTM 块,我们主要使用后向投影块。对于包含 mLSTM 的 xLSTM 块,我们使用预向投影块,因为在高维空间中的存储容量更大。有关更多细节,请参见图 3 的左侧面板和图 1 的第三列,或附录中的图 9。

图 9:sLSTM 块的示意图 - 后上投影(post up-projection):嵌入在 pre-LayerNorm 残差结构中,输入可以选择通过窗口大小为 4 的因果卷积进行传递,其中包括用于输入门和遗忘门的 Swish 激活。然后,对于所有输入、遗忘和输出门 i、f、o,以及单元更新 z,输入通过一个具有四个对角块或 “头” (Head)的对角线线性层。这些对角块与来自上一个隐藏状态的递归门 pre-activations 相一致,对应于一个具有四个头的 sLSTM,用圆形箭头表示。得到的隐藏状态通过一个 GroupNorm 层(Wu & He, 2018) - 对于每个头部的 LayerNorm。最后,输出通过一个门控 MLP 进行上下投影,使用 GeLU 激活函数和投影因子(PF) 4/3 来匹配参数。 

图10:mLSTM 块的示意图 - 前上投影(pre up-projection):嵌入在 pre-LayerNorm 残差结构中,首先对输入进行上投影,投影因子为 2,一次用于外部化输出门,一次作为 mLSTM 单元的输入。 mLSTM 单元的输入在维度方向上因果卷积(卷积核大小为4)之后,进入可学习的跳跃连接。我们通过块(Block)大小为 4 的块对角投影矩阵获得输入 q 和 k。值 v 直接馈送,跳过卷积部分。在 mLSTM 序列混合之后,通过 GroupNorm(Wu & He, 2018)进行输出归一化(对于每个头的 LayerNorm)。最后,将可学习的跳跃输入添加到结果中,并使用外部输出门对结果进行逐分量门控。然后进行下投影。 

xLSTM 架构。xLSTM 架构是通过残差堆叠构建块(Srivastava等,2015; He等,2016)构建的。我们依赖于当代大型语言模型中最常用的 pre-LayerNorm(Ba等,2016b)残差主干。请参见图 1 中的最后一列。

2.5 内存和速度考虑

与 Transformer 相反,xLSTM 网络具有线性计算和与序列长度相对应的恒定内存复杂度。由于 xLSTM 内存具有压缩性,因此非常适合工业应用和在边缘上的实现。

mLSTM 的记忆不需要参数,但通过其 d×d 矩阵存储和 d×d 更新而在计算上昂贵。我们在内存容量与计算复杂性之间进行权衡。尽管如此,计算可以在 GPU 上并行进行,因此这些计算对墙上时钟时间(wall clock time)的影响很小。

虽然 mLSTM 类似于 FlashAttention(Dao等,2022; Dao,2024)或 GLA(Yang等,2023)可并行化,但由于内存混合(隐藏-隐藏连接),sLSTM 不可并行化。然而,我们开发了一个快速的 CUDA 实现,通过 GPU 内存优化到寄存器级别,通常比 mLSTM 慢不到两倍。 

4. 实验

5. 限制

  • 与 mLSTM 相比,sLSTM 的内存混合阻止了可并行化操作,因此不允许快速的并行实现。尽管如此,我们为 sLSTM 开发了一个快速的 CUDA 核心,目前的速度大约比我们的并行 mLSTM 实现慢了 1.5 倍左右。
  • mLSTM 的 CUDA 核心尚未优化,因此当前的实现速度约为 FlashAttention 或 Mamba 中使用的扫描的 4 倍。可以通过类似于 FlashAttention 的方法获得更快的 CUDA 核心。
  • 因为必须处理 d×d 矩阵,mLSTM 的矩阵内存具有较高的计算复杂性。尽管如此,内存的更新和检索不使用参数,并且可以使用标准矩阵操作进行并行化,因此由于复杂的内存而引起的墙上时钟时间开销很小。
  • 遗忘门的初始化必须谨慎选择。
  • 由于矩阵内存与序列长度有关(原论文中为无关,我认为应该是有关),增加序列长度可能会使较长上下文大小的内存超载。尽管如此,对于长达 16k 的上下文来说,这似乎并不是一个限制,参见第 4.3 节。
  • 由于大型语言实验的昂贵计算负载,我们既没有完全优化架构,也没有优化超参数,特别是对于更大的 xLSTM 架构。我们预计,xLSTM 达到其全部潜力需要进行广泛的优化过程。

6. 结论

我们部分回答了我们的简单问题:将 LSTM 扩展到数十亿个参数时,我们能取得多远的语言建模进展?到目前为止,我们可以回答:“至少与当前的技术(如 Transformer 或 SSM)一样远”。我们通过指数门和内存混合以及新的内存结构将 LSTM 改进为 xLSTM。与 Transformer 和 SSM 等最新方法相比,xLSTM 模型在语言建模方面表现良好。扩展定律表明,更大的 xLSTM 模型将成为使用 Transformer 技术构建的当前大型语言模型的严肃竞争对手。xLSTM 有潜力对其他深度学习领域产生重大影响,如强化学习、时间序列预测或物理系统建模。 

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

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

相关文章

python:画饼图

我现在因工作需要在写一篇中文文章,领导要我用python处理数据和画图,那我也刚好学习一下python画图。 import matplotlib.pyplot as plt # 饼图数据 labels [A, B, C, D] sizes [15, 30, 45, 10] # 每个部分的大小 # 绘制饼图 plt.figure(figsize(6,…

读书笔记——《高质量C++/C编程指南》(2)

目录 前言 命名规则 共性规则 简单的Windows应用程序命名规则 表达式和基本语句 运算符优先级 复合表达式 if语句 布尔变量与零值比较 整型变量与零值比较 浮点变量与零值比较 指针变量与零值比较 对if 语句的补充说明 循环语句的效率 for 语句的循环控制变量 s…

数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面

项目目录的管理 前言 在上几篇的文章里面我们完成了基本环境的搭建,整理了项目数据库表结构并且成功的手动的加载了Qt的mysql数据库驱动,现在就要开始完成项目准备工作的最后一步:构建项目目录,一个好的项目离不开一个好的代码组织结构,所以在开始动手写我们这个项…

Java | Leetcode Java题解之第70题爬楼梯

题目: 题解: public class Solution {public int climbStairs(int n) {double sqrt5 Math.sqrt(5);double fibn Math.pow((1 sqrt5) / 2, n 1) - Math.pow((1 - sqrt5) / 2, n 1);return (int) Math.round(fibn / sqrt5);} }

无人机+通信中继:短波电台技术详解

随着无线通信技术的不断发展,无人机作为一种新型的信息传输平台,已经在多个领域得到了广泛应用。其中,无人机与短波电台的结合,为通信中继领域带来了全新的可能性。本文将详细解析无人机在通信中继中的应用,以及短波电…

产品专访|“产品”远程运维系统与“设备”远程运维系统的区别?

在日益复杂的工业制造环境下,远程运维已经成为生产制造企业不可或缺的一部分。在这个大背景下,产品远程运维系统和设备远程运维系统的需求越来越多,各自发挥着独特的作用。然而,尽管它们都涉及到远程运维的概念,但在实…

Nest.js中使用任务调度

java中的xxl在nestJs中是有内置的任务调度nestjs/schedule npm install --save nestjs/schedule 在model中引入使用 在service中直接使用就行 具体间隔多久看官方配置 Task Scheduling | NestJS 中文文档 | NestJS 中文网

STM32F1#1(入门了解)

一、STM32开发平台和工具 1.1 STM32芯片介绍 典型微控制器由CPU(运算器、控制器)、RAM、ROM和输入输出组成。 1.2 STM32核心板 STM32核心板配件: ①JTAG/SWD仿真-下载器 ②通信-下载模块 ③OLED显示屏 1) 通信-下载模…

智慧工厂管理系统

随着科技的飞速发展,传统工厂正经历着一场前所未有的变革。在这个以智能化、信息化为主导的新时代,HiWoo Cloud平台以其卓越的智慧工厂管理系统,成为了众多企业转型升级的首选工具。今天,就让我们一起走进HiWoo Cloud的世界&#…

FTTR(光猫)ITMS注册NCE纳管

ITMS注册 TR069交互过程: 1.1. TR069交互—主动连接机制 主动连接机制是指CPE主动发出请求连接事件(事件可以为: 0 BOOTSTRAP; 1 BOOT; PERIODIC等等)给ACS。在连接建立之后才能进行业务处理(通过调用RPC方法实现)。 备注:政企…

【2024最新华为OD-C卷试题汇总】字符串分割(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 文章目录 前…

2024.5.8

聊天框完善 #include "mywidget.h" #include "ui_mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent), ui(new Ui::MyWidget) {ui->setupUi(this);//设置窗口大小this->resize(400,560);//设置窗口图标和标题this->setWindowTit…

快过VS Code,10天暴增20k star,高性能多人协作IDE横空出世

道歉 其实不意味着道歉的人错了 而是他认为这段关系 比自己的尊严更重要 失败了 不是说你有多差 而是说 你需要更努力了 写代码最重要的一个选择就是选哪个IDE了,目前主流的选择是vscode和IDEA了。 但是vscode虽然轻量,但是对于大型的项目仍然显得…

C语言----杨辉三角

各位看官们好。学习到这里想必大家应该对C语言的了解也是很深刻的了吧。但是我们也不能忘记我们一起学习的知识啊。在我们以前学习C语言的时候我想大家应该都听说过杨辉三角吧。虽然我们把其中的规律找到那么这个代码就简单很多了。那么接下里我们就来讲讲杨辉三角。 首先我们先…

实战28套JAVA高端架构P6/P7/P8架构—全栈架构

概述 Java SE Java SE(Java Platform,Standard Edition)。Java SE 以前称为J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java应用程序。Java SE 包含了支持Java Web 服务开发的类,并为Java Platform&…

Web服务器和Tomcat

Web介绍 对于http协议操作进行封装、简化web程序开发 部署web项目,对外提供上网信息浏览 Tomcat介绍 一个轻量级的web服务器 也称为web容器 Tomcat的文件夹介绍 下载地址:Apache Tomcat - Apache Tomcat 9 Software Downloads 安装:直…

「YashanDB迁移体验官」Oracle向YashanDB迁移的丝滑体验

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…

【数据可视化-01】Matplotlib图形实战宝典

在数据分析领域,图形化展示数据是非常重要的环节。Python中的matplotlib库是绘制各类图形的强大工具。本文将介绍如何使用matplotlib绘制折线图、直方图、饼图、散点图和柱状图等数据分析中常见的图形,并附上相应的代码示例,可以当初matplotl…

GD32F103RCT6/GD32F303RCT6(9)高级定时器互补PWM波输出实验

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 后续项目主要在下面该专栏中发布: 手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转: 手把手教你嵌入式国产化-实战项目-无刷电机驱动&am…

第 8 章 电机测速(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 8.3.3 电机测速01_理论 测速实现是调速实现的前提,本节主要介绍AB相增量式编码器测速原理。 1.概…
最新文章