状态空间模型(SSM)简介
更新日志
2023-12-14:文章发布。
2024-04-08:修正了打字错误(我的英语不是很好😅)。
2024-06-11:添加了SSM系列博客文章第二篇的链接。
2024-07-18:修正了LaTex排版错误。
2024-09-23:重写了引言部分,并增加了关于深度学习中SSM起源的章节。
前言
我衷心感谢 Boris ALBAR、Pierre BEDU 和 Nicolas PREVOT 同意组建一个SSM主题的工作组,并在此过程中陪伴我探索这种模型。特别感谢 Boris ALBAR 抽出时间审阅这篇博客文章。
简介
状态空间模型(States Spaces Models)传统上用于控制理论中,通过状态变量对动态系统进行建模。
Aaron R. VOELKER 和 Chris ELIASMITH 探讨了大脑如何有效表示时间信息的问题。他们在2018年发表的论文“Improving Spiking Dynamical Networks: Accurate Delays, Higher-Order Synapses, and Time Cells”中发现,SSM是描述大脑中“时间细胞”(特别是海马体和皮层)的优秀模型。
从神经科学出发,他们将研究应用于深度学习领域,并因此(据我们所知)率先在深度学习中使用SSM。有关这项工作的更多细节,请参阅本博客文章末尾的“SSM历史”部分。
在本文中,我们将定义深度学习SSM的基础知识。为此,我们将基于 Albert GU 等人在2021年提出的S4模型,该模型发表在“高效建模长序列的结构化状态空间”中。这并不是一个在实践中原样使用的模型(现在有其他性能更好或更易于实现的SSM)。我们在这里使用它主要是出于教育目的。S4发表一周前,同一批作者发表的LSSL也是该主题的重要信息来源。我们将在未来的博客文章中探讨S4的各种发展。在此之前,让我们先深入了解SSM的基础知识。
深度学习中SSM的定义
让我们用下图来定义SSM:
![]() |
---|
图1:连续时不变SSM视图(来源:https://en.wikipedia.org/wiki/State-space_representation) |
可以看出,SSM基于三个与时间相关的变量:
- 表示 个状态变量,
- 表示 个状态输入,
- 表示 个输出,
我们还可以看到它由四个可学习矩阵组成: 和 。
- 是状态矩阵(控制潜态 ),
- 是控制矩阵,
- 是输出矩阵,
- 是命令矩阵,
上图可简化为以下方程组:
注意:这里我们使用符号 来表示 的导数。文献中也可能使用符号 。
同样,由于变量依赖于时间是隐含的,为了简化,前面的方程通常写成以下形式:
这个系统可以进一步简化,因为在深度学习SSM中, 被看作是一个易于计算的跳跃连接(skip connection)。
此系统是连续的。因此,在将其提供给计算机之前,必须先对其进行离散化。
离散化
离散化是SSM中最重要的一点,如果不是最重要的话。该架构的所有效率都体现在这一步,因为它使我们能够从SSM的连续视图过渡到其另外两种视图:递归视图和卷积视图。
如果这篇文章有什么值得记住的,那就是这一点。
图2:图片来自 Albert GU 等人(2022)的博客文章Structured State Spaces: Combining Continuous-Time, Recurrent, and Convolutional Models |
我们将在稍后的文章中看到有几种可能的离散化方法。这是各种现有SSM架构之间的主要区别之一。
对于本文,让我们应用S4中提出的离散化来阐释SSM的两个额外视图。
SSM的递归视图
为了对连续情况进行离散化,我们使用梯形方法,其原理是将函数 在区间 上代表曲线下的区域近似为梯形并计算其面积 :。
我们有: 其中 。
如果 (SSM方程的第一行),对应于 ,那么
(*)(控制向量在小的 范围内被认为是常数)。
我们刚刚得到了离散化的SSM!
为了使其完全显式化,我们设:
我们便得到:
带横线的矩阵表示法在S4中被引入,用于表示离散情况下的矩阵,此后在应用于深度学习的SSM领域中已成为一种约定。
SSM 的卷积视图
这个递推关系可以写成卷积形式。为此,只需迭代系统的方程
我们从系统的第一行开始
步骤 0:
步骤 1:
步骤 2:
我们有 ,可以写成由 参数化的函数 。
我们来看系统的第二行,现在可以把刚才计算出的 值代入
步骤 0:
步骤 1:
步骤 2:
我们可以观察到卷积核 适用于 ,因此为 。
与矩阵类似,我们对 应用横线,以表明它是离散化后获得的卷积核。在文献中,它通常被称为 SSM 卷积核,其大小等同于整个输入序列。
此卷积核通过快速傅里叶变换 (FFT) 计算,将在未来的文章中进行解释。
三种视图的优缺点
图 3: 图片来自 Albert GU 等人撰写的论文 结合递归、卷积和连续时间模型与线性状态空间层,该论文在 S4 发布前一周发布 |
SSM 的不同视图各有优缺点——让我们仔细看看。
对于连续视图,优缺点如下
✓ 自动处理连续数据(例如音频信号、时间序列)。这在处理采样不规则或时间偏移的数据时具有巨大的实际优势。
✓ 数学上可行的分析,例如通过计算精确轨迹或构建记忆系统(HiPPO)。
✗ 训练和推理都极其缓慢。
对于递归视图,这些是递归神经网络众所周知的优缺点,即
✓ 对序列数据具有天然的归纳偏置,并且原则上上下文不受限制。
✓ 高效推理(恒定时间状态更新)。
✗ 学习缓慢(缺乏并行性)。
✗ 训练过长序列时梯度消失或爆炸。
对于卷积视图,我们这里讨论的是卷积神经网络(我们这里是在其一维版本的上下文中)众所周知的优缺点,即
✓ 局部、可解释的特征。
✓ 高效(可并行化)训练。
✗ 在在线或自回归上下文中速度缓慢(每个新数据点都必须重新计算整个输入)。
✗ 上下文大小固定。
因此,根据过程的阶段(训练或推理)或我们拥有的数据类型,可以从一种视图切换到另一种视图,以便回到一个有利的框架中,从而最大限度地利用模型。
我们更喜欢用于通过并行化进行快速训练的卷积训练视图,用于高效推理的递归视图,以及用于处理连续数据的连续视图。
学习矩阵
在上面开发的卷积核中, 和 是可学习的标量。
关于 ,我们看到在我们的卷积核中,它在时间 处表示为 的幂。这可能非常耗时,因此我们正在寻找一个固定的 。为此,最好的选择是让它成为对角矩阵
根据线性代数的谱定理,这正是正规矩阵的类别。
除了上面提到的离散化选择之外,矩阵初始化的SSM会导致糟糕的结果,而基于**HiPPO**矩阵(高阶多项式投影算子)的初始化则能获得非常好的结果(在MNIST序列基准测试中从60%提高到98%)。 的定义和初始化方式也是文献中开发的各种SSM架构的差异点之一,我们将在下一篇博文中详细阐述。事实上,经验表明,用随机
**HiPPO**矩阵由S4的作者在之前的一篇论文(2020年)中引入。它也包含在S4作者的LSSL论文(2021年)以及S4的附录中。其公式如下:
该矩阵不是正规矩阵,但它可以分解为正规矩阵和低秩矩阵之和(在论文中简称为NPLR,即Normal Plus Low Rank)。作者在他们的论文中证明,这种类型的矩阵可以通过三种技术(参见论文中的算法1)高效计算:截断生成级数、柯西核和伍德伯里恒等式。
关于NPLR矩阵可以被高效计算为对角矩阵的详细证明,可以在论文附录(参见B和C部分)中找到。
S4的作者随后在他们的论文《如何训练你的HiPPO》(2022年)中修改了**HiPPO**矩阵(关于如何初始化它)。该论文产生的模型在文献中通常被称为“S4 V2”或“S4更新版”,以区别于“原始S4”或“S4 V1”。
在下一篇文章中,我们将看到其他作者(特别是Ankit GUPTA)建议使用对角矩阵而不是NPRL矩阵,这种方法现在更受青睐,因为它实现起来更简单。
实验结果
让我们通过分析S4在各种任务和基准测试中的一些结果来结束这篇博文,以了解SSM的潜力。
我们首先从音频任务和WARDEN(2018)的基准测试Speech Commands开始。
图4:来自Albert GU等人(2022)的论文On the Parameterization and Initialization of Diagonal State Space Models的图片,该模型也称为S4D,在S4之后发布,但以更结构化的形式再现了S4在该基准上的结果(S4D的结果已从图片中删除,以免剧透下一篇文章;) |
从这个表格中可以观察到几点。
首先,在参数数量大致相等的情况下,S4的表现(至少高出13%)明显优于其他模型,这里是ConvNet类型。
其次,为了达到相同的性能,ConvNet需要多85倍的参数。
第三,在16K Hz上训练的ConvNet,当应用于8K Hz数据时,结果非常差。相比之下,S4在重新采样时保留了95%的性能。这可以解释为SSM的连续视图,在测试阶段,只需将值减半即可。
让我们继续一个时间序列任务(在S4的一个修订版中引入)。
论文的作者采用了ZHOU等人(2020年)的Informer模型的,并表明他们的模型在50种配置中的40种上优于该transformer。表格中显示的结果是单变量框架下的,但在多变量框架下也观察到了相同的结果(附录中的表14)。
让我们继续一个视觉任务,以及KRIZHESKY(2009)的基准测试sCIFAR-10。
S4在sCIFAR-10上以仅10万个参数实现了SOTA(作者没有具体说明其他方法的参数数量)。
最后,我们来看一个文本任务,以及TAY等人(2020年)的基准测试Long Range Arena (LRA)。
LRA包含6项任务,其中包括长度为16K tokens的Path-X,S4是第一个成功解决该任务的模型,展示了其在超长序列任务上的性能。
两年多以后,AMOS等人才在他们的论文Never Train from Scratch: Fair Comparison of Long-Sequence Models Requires Data-Driven Priors(2023年)中表明,由Ashish VASWANI等人(2017年)引入的transformer(且未与SSM混合)也可以解决此任务。然而,与SSM不同的是,它们无法通过65K tokens的PathX-256。
注意,S4在文本方面有一个缺点:与Transformer(标准版,更优化的版本具有更低的困惑度)在MERITY等人(2016年)的WikiText-103上相比,S4的困惑度更高。
这可能是由于文本的非连续性(它并非从语音或时间序列等底层物理过程中采样而来)。我们将在专门讨论2023年SSM发展的文章中看到,这一点已经成为大量研究的焦点,并且SSM现在已经成功弥补了这一差距。
结论
SSM是具有三种视图的模型。一种连续视图,以及在离散化后的循环视图和卷积视图。
这种架构的挑战在于,根据处理过程的阶段(训练或推理)和处理的数据类型,知道何时偏向于一种视图而不是另一种。
这种模型具有高度通用性,因为它可应用于文本、视觉、音频和时间序列任务(甚至图形)。
它的一个优点是能够处理非常长的序列,通常比其他模型(ConvNet或transformers)使用更少的参数,同时速度也非常快。
正如我们将在接下来的文章中看到的,现有各种SSM架构之间的主要区别在于基本SSM方程的离散化方式,或者矩阵的定义。
深入了解
SSM 历史
LMU由VOELKER、KAJIĆ和ELIASMITH于2019年12月发表,比S4早两年,可被视为S4的鼻祖。在这篇论文中,作者通过提出HOCHREITER和SCHMIDHUBER的LSTM的替代方案来启动循环视图,LSTM存在当处理步骤数量过高(根据变体不同,限制在100到5000之间)时梯度消失的问题。在论文中,他们展示了他们的模型能够处理超过10万步(VOELKER甚至在他的论文第6.1节中达到了超过10亿步)。为此,他们基于常微分方程x'(t) = Ax(t) + Bu(t)(在论文中x表示为m),并通过欧拉法对其进行离散化。矩阵A和B通过Padé近似获得,这极大地启发了HiPPO框架。该动力系统的关键特性是x通过勒让德多项式(直到d-1阶)表示u的滑动窗口。我们邀请读者查阅论文第2节以获取详细信息。
如引言所述,这篇论文是将同作者于2018年发表的更侧重于神经科学的模型应用于深度学习的成果。
最后,我们来提一下CHILKURI和ELIASMITH于2021年2月发布的LMU后续工作。在这篇论文中,他们展示了如何高效地计算他们的模型。为此,他们通过非顺序地重写其常微分方程来并行化训练(特别是论文第3页),从而可以使用标准控制理论工具(参见论文方程22和ÅSTRÖM和MURRAY以获取详细信息),然后将其视为卷积。他们取得了比SANH等人(2019)的DistillBERT更好的结果,参数数量减少了一半,并对text8数据集进行了字符级建模。还要注意的是,作者通过ZOH(零阶保持)离散化了他们的SSM,我们将在下一篇博客文章中更详细地讨论这一点。
SSM 资源
要了解更多关于SSM的信息,请查看
S4 资源
关于S4,请查阅以下资源
- 视频
- Albert GU的《用结构化状态空间高效建模长序列 - Albert Gu - 斯坦福 MLSys #46》
- Albert GU的《MedAI #41: 用结构化状态空间高效建模长序列》(稍长,涵盖更多示例)
- Sasha RUSH的《JAX Talk: 使用S4生成极长序列》 + 视频中使用的幻灯片
- 代码
- Sasha RUSH和Sidd KARAMCHETI的《Annotated S4》(用Jax实现)
- S4官方实现的GitHub(用PyTorch实现)
- 博文
HiPPO 资源
有关**HiPPO**矩阵的更多信息,请查阅以下资源
- Hazy Research相关博文
- Albert GU等人(2022年)的论文如何训练你的HiPPO:具有广义正交基投影的状态空间模型
参考文献
- Sepp HOCHREITER,Jürgen SCHMIDHUBER(1997)的《长短期记忆》
- Karl Johan ÅSTRÖM, Richard M. MURRAY (2012版本) 的《反馈系统》
- Alex KRIZHESKY(2009)的《从微小图像中学习多层特征》
- Stephen MERITY,Caiming XIONG,James BRADBURY,Richard SOCHER(2016)的《指针哨兵混合模型》
- Ashish VASWANI, Noam SHAZEER, Niki PARMAR, Jakob USZKOREIT, Llion JONES, Aidan N. GOMEZ, Lukasz KAISER, Illia POLOSUKHIN (2017) 的《注意力就是你所需要的一切》
- Pete WARDEN(2018)的《语音命令:用于有限词汇语音识别的数据集》
- Aaron R. VOELKER, Chris ELIASMITH (2018) 的《改进尖峰动态网络:精确延迟、高阶突触和时间细胞》
- Aaron R. VOELKER, Ivana KAJIĆ, Chris ELIASMITH(2019)的《勒让德记忆单元:循环神经网络中的连续时间表示》
- Aaron R. VOELKER(2019)的《尖峰神经形态硬件中的动态系统》
- Victor SANH, Lysandre DEBUT, Julien CHAUMOND, Thomas WOLF (2019) 的《DistilBERT:一个BERT的蒸馏版本:更小、更快、更便宜、更轻量》
- Yi TAY, Mostafa DEHGHANI, Samira ABNAR, Yikang SHEN, Dara BAHRI, Philip PHAM, Jinfeng RAO, Liu YANG, Sebastian RUDER, Donald METZLER (2020) 的《长距离竞技场:一个高效 Transformer 的基准测试》
- Haoyi ZHOU, Shanghang ZHANG, Jieqi PENG, Shuai ZHANG, Jianxin LI, Hui XIONG, Wancai ZHANG (2020) 的《Informer: 超越高效Transformer,用于长序列时间序列预测》
- Albert GU, Tri DAO, Stefano ERMON, Atri RUDRA, Christopher RÉ (2020) 的《HiPPO: 具有最优多项式投影的循环记忆》
- Narsimha CHILKURI, Chris ELIASMITH (2021) 的《并行化勒让德记忆单元训练》
- Albert GU, Isys JOHNSON, Karan GOEL, Khaled SAAB, Tri DAO, Atri RUDRA, Christopher RÉ (2021) 的《用线性状态空间层结合循环、卷积和连续时间模型》
- Albert GU, Karan GOEL, Christopher RÉ (2021) 的《用结构化状态空间高效建模长序列》
- Albert GU, Isys JOHNSON, Aman TIMALSINA, Atri RUDRA, Christopher RÉ (2022) 的《如何训练你的HiPPO: 具有广义正交基投影的状态空间模型》
- Albert GU, Ankit GUPTA, Karan GOEL, Christopher RÉ (2022) 的《关于对角状态空间模型的参数化与初始化》
- Albert GU (2023) 的《用结构化状态空间建模序列》
- Ido AMOS, Jonathan BERANT, Ankit GUPTA (2023) 的《从不从零开始训练:长序列模型公平比较需要数据驱动先验》