【AI学习】Mamba学习(十二):深入理解S4模型

#1024程序员节|征文#

HiPPO的学习暂告一段落,按照“HiPPO->S4->Mamba 演化历程”,接着学习S4。

S4对应的论文:《Efficiently Modeling Long Sequences with Structured State Spaces》
文章链接:https://ar5iv.labs.arxiv.org/html/2111.00396,https://arxiv.org/abs/2111.00396

上一篇文章初步了解了S4(Structured State Space sequence model)这个序列模型,接下来深入学习一下。

文章的第二章讲述了算法背景,接着学习。从第二章可以看出,发展到S4模型,作者才引入了SSM,而HiPPO那篇论文是没有提到SSM的。

2、S4背景:状态空间

在这里插入图片描述

图1中的四个属性描述了状态空间模型(SSM):经典的连续时间表示、用HiPPO框架解决长距离依赖问题、离散时间递归表示,以及可并行化的卷积表示。特别是2.4节介绍了SSM卷积核K,这是我们在第3节中理论贡献的重点。

2.1 状态空间模型:连续时间潜在状态模型

状态空间模型由简单的方程(1)定义。它将一维输入信号u(t)映射到N维潜在状态x(t),然后投影到一维输出信号y(t)。
在这里插入图片描述
SSM在许多科学学科中广泛使用,并且与潜在状态模型如隐马尔可夫模型(HMM)相关。我们的目标是简单地将SSM作为一个黑盒表示,用于深度序列模型,其中A、B、C、D是梯度下降学习的参数。在本文的其余部分,为了表述方便,我们将省略参数D(或者等价地,假设D = 0),因为项Du可以被视为一个跳跃连接,并且容易计算。

前面说过,Du项相当于残差连接,而整个模型中一般也有残差连接,可以合并到整个模型,而在SSM方程这里省略。

2.2 用HiPPO解决长距离依赖问题

先前的工作发现基本的SSM(1)在实践中实际上表现非常差。直观地,一个解释是线性一阶ODEs解决为指数函数,因此可能遭受梯度在序列长度上呈指数增长(即,梯度消失/爆炸问题[32])。为了解决这个问题,线性状态空间层(LSSL)利用了连续时间记忆的HiPPO理论[16]。HiPPO指定了一类特定的矩阵A∈RN×N,当它们被纳入(1)时,允许状态x(t)记忆输入u(t)的历史。这个类别中最重要的矩阵由方程(2)定义,我们将称之为HiPPO矩阵。例如,LSSL发现简单地将SSM从随机矩阵A修改为方程(2)将其在顺序MNIST基准测试上的性能从60%提高到98%。

在这里插入图片描述

2.3 离散时间SSM:递归表示

为了在离散输入序列(u0, u1, …)上应用而不是连续函数u(t),(1)必须通过一个步长∆来离散化,该步长表示输入的分辨率。从概念上讲,输入uk可以被视为对隐含的连续信号u(t)的采样,其中uk = u(k∆)。
为了离散化连续时间SSM,我们遵循先前的工作,使用双线性方法[43],将状态矩阵A转换为近似A。离散SSM是:
在这里插入图片描述

方程(3)现在是序列到序列的映射uk → yk,而不是函数到函数的映射。此外,状态方程现在是一个递归的xk,允许离散SSM像RNN一样计算。具体来说,xk ∈ RN可以被视为具有转换矩阵在这里插入图片描述的隐藏状态。

从符号上讲,本文中我们使用AB、…来表示由(3)定义的离散SSM矩阵。注意,这些矩阵是A和步长∆的函数;当它清晰时,我们为了符号方便而省略了这种依赖。

2.4 训练SSM:卷积表示

递归SSM(3)不适用于在现代硬件上进行训练,因为它是顺序的。相反,线性时不变(LTI)SSM(如(1))和连续卷积之间有一个众所周知的联系。相应地,(3)实际上可以写成一个离散卷积。
为了简单起见,让初始状态为x−1 = 0。然后展开(3)得到
在这里插入图片描述

这可以向量化为一个卷积(4),并为卷积核(5)提供一个明确公式。
在这里插入图片描述

换句话说,方程(4)是一个单一的(非循环)卷积,并且可以使用FFTs高效计算,前提是K是已知的。然而,计算(5)中的K并非易事,这是我们在第3节中技术贡献的重点。我们称K为SSM卷积核或滤波器。

个人说明

前面介绍部分就提到“SSM由于具体的理论原因,它尚未适用于深度学习。深度 SSM 实际上即使在简单的任务上也很困难,但当配备最近为解决连续时间记忆(就是HiPPO)问题而导出的特殊状态矩阵 A 时,可以表现得非常好”。第二章部分进一步阐释,“基本的 SSM在实践中表现非常差。直观地说,一种解释是线性一阶常微分方程解为指数函数,因此可能会受到序列长度中梯度指数缩放的影响(即消失/爆炸梯度问题)。”其实,熟悉RNN的训练就会知道,RNN的训练就面临梯度爆炸或消失的问题。

S4 这里选取的矩阵 A 为 HiPPO-LegS的矩阵形式, 但是LegS 所满足的 ODE 是矩阵A、B下面要除以t的。就是下面的形式:
在这里插入图片描述

不知道为啥HiPPO-LegS的矩阵形式直接用到SSM方程效果就可以很好。
这里面有点奇怪,回头需要再看看相关论文:《Legendre memory units: Continuous-time representation in recurrent neural networks. In Advances in Neural Information Processing Systems, pages 15544–15553, 2019.》
苏神在文章《重温状态空间模型SSM:HiPPO的高效计算(S4)》也进行了分析,这种修改之后,导致时间度量无法对整个历史平均的取权重,而是历史信息呈现指数衰减的效应,就是更看重时间较近的信息。

离散时间 SSM这里的离散化还是使用了双线性的近似方式,没有采用解析解。要在后面Mamba模型才使用离散化的解析解。

在前面介绍部分,就提到,深层 SSM 原则上可以解决 LRD 问题,但是由于状态表示引起的计算和内存要求过高,LSSL 在实践中不可行。以及,“尽管提出了 LSSL 的 理论上有效的算法,但这些算法在数值上是不稳定的。特别是,特殊 A 矩阵在线性代数意义上是高度非正规的,这阻碍了传统算法技术的应用。因此,尽管 LSSL 表明 SSM 具有很强的性能,但它们目前作为通用序列建模解决方案在计算上是不切实际的。”这就引出了下一章,具体的S4方法。

注:正规矩阵的一个重要性质是它可以经过一个‌酉变换变为对角矩阵。厄米矩阵(Hermitian matrices)和酉矩阵(unitary matrices)都是正规矩阵的典型例子。

3、Method: Structured State Spaces (S4)

具体方法,咱们直接跳到最终方法部分:
在这里插入图片描述
这个方法,就是把HiPPO 矩阵A分解为正规矩阵和低秩矩阵的和。这个分解的目的,就是为了方便的实现矩阵A的对角化。
为什么要对角化?为了计算简便。前面的公式5的卷积形式,矩阵A的L次幂,如果是对角矩阵,计算就可以大大简化。

文章3.1节,给出了这种对角化动机的目的。
在这里插入图片描述
但是文章接着说,不幸的是,由于数值问题,对角化的简单应用在实践中不可行。尽管有其他方法,数值上也不稳定。

那怎么办,3.2节给出方法:将HiPPO 矩阵A分解为正态矩阵和低秩矩阵的和。这样处理后获得了一个反对称矩阵,“重点来了,反对称矩阵不单单一定可以对角化,它一定可以被正交矩阵(复数域叫做酉矩阵)对角化!酉矩阵一般数值稳定性都非常好”。
在这里插入图片描述
这里的生成函数如何理解?其实也简单,熟悉卷积运算的就知道,卷积运算计算量大,可以先做FFT,在频域变成乘法,然后IFFT。这是利用FFT的简化卷积运算经常使用的方法。只不过,这里傅立叶变换所需要的实际是“截断生成函数”,将无限长度截断为L。
在这里插入图片描述
最后,再总结一下S4的架构细节。
在这里插入图片描述
具体第三章涉及的公式推导,可以参见苏神在文章《重温状态空间模型SSM:HiPPO的高效计算(S4)》中的详细推导。

最后

再重温一下上篇《Mamba学习(十一):S4》提到的问题和S4的方法:

解决的主要问题
  • 序列建模中长距离依赖(LRDs)的有效处理。
  • 现有模型在处理非常长序列时的局限性。
  • 先前基于SSM的方法在计算和内存需求上的高成本问题。
方法
  • 提出了S4模型,它基于SSM的新参数化,通过将状态矩阵A分解为低秩和正规项的和,使得A可以被稳定地对角化。
  • 利用Woodbury identity和Cauchy核的计算,将SSM的计算复杂度从O(N^2L)降低到O(N+L),其中N是状态维度,L是序列长度。
  • 在多个任务和数据集上验证了S4模型的性能,包括顺序CIFAR-10、WikiText-103语言建模、图像分类和时间序列预测等。

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

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

相关文章

Two output files share the same path but have different contents

报错 ✘ [ERROR] Two output files share the same path but have different contents: node_modules/.vite/deps_temp_c5811052/three_examples_jsm_controls_orbitControls__js.js7:48:33 PM [vite] error while updating dependencies: Error: Build failed with 1 error: …

7款视频转换器大测评!哪款是最适合你的视频格式转换器?

视频已成为我们生活中不可或缺的一部分,但不同的设备、平台和软件往往支持不同的视频格式,这给我们的视频分享、编辑和播放带来了不少困扰。因此,一款高效、易用的视频格式转换器成为了许多人的必备工具。本文将从软件界面、功能特性、难易程…

利用移动式三维扫描技术创建考古文物的彩色纹理网格【上海沪敖3D】

文章来源于蔡司工业质量解决方案,作者蔡司工业质量 在考古环境中,三维扫描技术应用广泛,如存档、保存、复制和分享(包括实体和虚拟形式)。 文中,通过真实的扫描案例,您将了解到三维光学解决方案…

实战-任意文件下载

实战-任意文件下载 1、开局 开局一个弱口令,正常来讲我们一般是弱口令或者sql,或者未授权 那么这次运气比较好,直接弱口令进去了 直接访问看看有没有功能点,正常做测试我们一定要先找功能点 发现一个文件上传点,不…

022_matrix_dancing_in_Matlab中求解一个超简单的矩阵问题

矩阵体操 首先,可以复习一下向量、矩阵和索引的基础知识。 向量约定矩阵约定矩阵索引 一般而言,我们利用进行计算大概就是以下的步骤: #mermaid-svg-UovF0Uldf5XxntJi {font-family:"trebuchet ms",verdana,arial,sans-serif;fo…

Webserver(2)GCC

目录 安装GCCVScode远程连接到虚拟机编写代码gcc编译过程gcc与g的区别Xftp连接虚拟机上传文件 安装GCC sudo apt install gcc g查看版本是7.5 touch test.c创建代码 但是在虚拟机中写代码很不方便 VScode远程连接到虚拟机编写代码 gcc test.c -o app在虚拟机中用gcc编译的…

世界肺癌日:新药涌现:不断拓展治疗边界

肺癌,这一全球性的健康杀手,每分钟都无情地夺去超过三人的生命,每年导致约180万人不幸离世,占据了全球癌症死亡人数的18%,成为癌症死亡的首要原因。患者不仅要承受生理上的巨大痛苦,还要面对心理上的沉重压…

OpenCV高级图形用户界面(20)更改窗口的标题函数setWindowTitle()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在OpenCV中,cv::setWindowTitle函数用于更改窗口的标题。这使得您可以在程序运行时动态地更改窗口的标题文本。 函数原型 void cv::…

外包干了2年,技术原地踏步。。。。。

先说一下自己的情况,本科生,19年通过校招进入南京某软件公司,干了接近2年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

一文掌握Kubernates核心组件,构建智能容器管理集群

1.Kubernates简要概述 Kubernates(常称为K8s,因省略了“ubernate”中的8个字符)是Google开源的容器编排平台,专为简化和自动化应用服务的部署、扩展和管理而设计。它将应用与底层的服务器抽象开来,提供了自动化的机制…

修改huggingface的缓存目录以及镜像源

执行以下语句查看当前配置 huggingface-cli env默认输出应该如下 (py39-transformers) PS D:\py_project\transformers_demo> huggingface-cli envCopy-and-paste the text below in your GitHub issue.- huggingface_hub version: 0.26.1 - Platform: Windows-10-10.0.22…

LeetCode课程表打卡(拓扑排序例题)

例题一:LeetCode :207 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] [ai, bi] ,表示如果要学…

算法速刷(LeetCode)(160.相交链表)

个人思路: 笨蛋做法,但是好用 代码如下 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution …

微信小程序文字转语音播报案例

插件申请 在小程序官方申请同声传译插件,地址: mp.weixin.qq.com 引入插件 在app.json中加入 "plugins": {"WechatSI": {"version": "0.3.6","provider": "wx069ba97219f66d99"}},封装…

Vue入门示例

今天滴学习目标!!! 示例简介HTML内容主体区域输入框列表区域统计和清空 JS引入Vue.js库定义Vue实例el选项data选项methods选项 示例简介 HTML内容 本次实例讲解的是v-for、v-on、v-model来写这小小的实例,下面是实例的效果图&am…

springboot小区物业报修管理系统-计算机设计毕业源码03418

摘 要 本课题的研究对象是小区物业报修管理系统app的设计与实现,该系统实现了用户管理、业主信息管理、报修信息管理、维修记录管理、通知公告管理等功能。本系统在设计上,考虑到系统内容以及系统的受众群体,在系统的美工方面采用了比较正规的…

【JavaEE】【多线程】单例模式

目录 一、设计模式1.1 单例模式1.1.1 饿汉模式1.1.2 懒汉模式 1.2 线程安全问题1.3 懒汉模式线程安全问题的解决方法1.3.1 原子性问题解决1.3.2 解决效率问题1.3.3 解决内存可见性问题和指令重排序问题 一、设计模式 在讲解案例前,先介绍一个概念设计模式&#xff…

【开源免费】基于SpringBoot+Vue.JS母婴商城系统 (JAVA毕业设计)

本文项目编号 T 030 ,文末自助获取源码 \color{red}{T030,文末自助获取源码} T030,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

力扣 简单 111.二叉树的最小深度

文章目录 题目介绍题解 题目介绍 题解 最小深度:从根节点到最近叶子结点的最短路径上节点数量。 分三种情况讨论即可: 当前节点为空,则返回当前节点minDepth0;当前节点左右子树都存在,则返回当前节点minDepth 左右子…

【Unity踩坑】如何关闭项目中的Version Control (Plastic SCM)

Unity官方提供了版本控制Version Control(即原来的Plastic SCM),虽然方便,但是在不同的电脑上同步时,会出现项目不一致的问题。因为只是少数几个人使用,那还不如直接使用Git或SVN来管理。 而且最近发现有一个bug还与P…