单目深度估计学习 第四、五周
学习论文:
- [1409.2329v5] Recurrent Neural Network Regularization (arxiv.org)
- [1506.04214] Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting (arxiv.org)
- [2312.00752] Mamba: Linear-Time Sequence Modeling with Selective State Spaces (arxiv.org)
- [2401.09417] Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model (arxiv.org)
学习任务
了解Mamba模型。
参考资料:一文通透想颠覆Transformer的Mamba:从SSM、HiPPO、S4到Mamba_mamba模型-CSDN博客
一、SSM
1.1 Transformer模型存在的问题
Transformer模型在训练大型数据集时需要消耗大量的计算资源,尤其是对于长序列数据,其注意力机制的计算复杂度高达 O ( n 2 ) O(n^2) O(n2)。
对于Transformer模型在长文本序列上所遇到的问题,人们从主要两个方面去优化和改进:
- 针对注意力机制本身进行优化,其目的是减少复杂度。
- 提出全新的序列模型用以代替Transformer模型。
1.2 RNN与LSTM
RNN
**递归神经网络(Recurrent Neural Network, RNN)**是一种用于处理序列数据的神经网络。它的核心是通过类似递归的算法,对输入的token序列 x i x_i xi,使用共享的参数 U U U、 W W W、 b b b,从而不断推出当前token的状态 h i h_i hi,再通过对 h i h_i hi进行Softmax处理,获得token的输出 y i y_i yi。
对于RNN,通俗的理解是,对当前输入token的理解是基于先前输入token的理解的。RNN会通过先前输入的计算,从而学习到对后续输入的处理。
基于递归算法的本质,RNN的优点十分明显:即理论上RNN可以记住序列中的信息,并且将这些信息用于后续的计算;在计算的过程中使用的参数是固定的,这有利于模型的简介和高效。但相对的缺点,RNN是一个按顺序串行训练的神经网络架构,在训练过程中,由于我们需要计算损失函数关于权重的梯度,权重矩阵若与1差距很大,十分容易出现梯度消失/爆炸的问题,因此,尽管RNN理论上可以记住序列中的信息,但是在长距离依赖上,RNN容易收到短时记忆的影响,一旦权重在短期训练中发生了梯度消失问题,RNN就不会继续学习。
为了保留RNN的优点,解决它的问题,人们改进出了LSTM网络。
LSTM
**长短期记忆网络(Long ShortTerm, LSTM)**是基于RNN的一种特殊的循环神经网络,他们的本质结构是相同的,但在计算 h i h_i hi上,LSTM使用了特殊的设计,从而实现RNN长距离依赖问题的避免。
LSTM的算法本质是:记住重要的内容,忘记无关紧要的内容。
LSTM的关键是细胞状态。在LSTM中,使用三种不同的操作:忘记门、输入门和输出门来保护和控制细胞形态,从而对细胞状态进行去除或增加信息。
Sigmoid激活函数σ的作用是将输入数值限制在[0,1],
值接近 0 表示关闭(不通过),接近 1 表示打开(完全通过)。
Tanh函数tanh的作用是将输入数值限制在[-1,1],
Tanh 函数主要用于细胞状态的更新以及隐藏状态的生成。
-
忘记门
对于来自上一个时间的输出 h t − 1 h_{t-1} ht−1和当前输出 x i x_i xi,共同进入Sigmoid激活函数处理,输出值接近 0 表示忘记,接近 1 表示记忆。
-
输入门
Sigmoid激活函数决定了输入数据中什么对我们更重要,筛选出重要的信息;tanh 函数的作用是产生当前的隐藏状态。通过点乘处理后,抛弃不需要的信息,产生重要信息,形成新的更新状态,然后输入细胞状态当中。
-
输出门
首先使用Sigmoid激活函数选择出需要输出的细胞状态信息,然后将忘记门和输入门处理过后的实际细胞状态信息经过tanh函数处理,最后将两者相乘,最终输出我们实际需要的重要信息部分。
1.3 状态空间模型(State Space Model,SSM)
SSM用于状态的描述,并且能够根据某些输入预测未来状态。
SSMs模型由输入序列
x
(
t
)
x(t)
x(t),状态序列
h
(
t
)
h(t)
h(t)和输出序列
y
(
t
)
y(t)
y(t)组成。
其中,状态方程与RNN网络求
h
i
h_i
hi的方法类似,即利用上一个隐藏状态和当前输入,通过权重系数的乘积求和来综合获得当前的隐藏状态。在这里系数矩阵
A
A
A是一个存储了先前所有历史信息的信息矩阵。在SSM中,系数ABCD是不变的。
SSM的流程如图可以细分为如下步骤:
- 初始输入序列 x ( t ) x(t) x(t)与系数矩阵B相乘获得红绿矩阵。
- 将上一个状态序列 h ( t ) h(t) h(t)与系数矩阵A相乘获得蓝黄矩阵。
- 把红绿矩阵与蓝黄矩阵相加求和,用以更新为新的蓝色状态矩阵。
- 将更新后的状态矩阵与系数矩阵C相乘获得输出序列 y ( t ) 1 y(t)_1 y(t)1。
- 初始输入序列与系数矩阵D相乘获得输出序列 y ( t ) 2 y(t)_2 y(t)2。
- 输出序列1与输出序列2相加获得最终的输出序列 y ( t ) y(t) y(t)。
SSM模型通过一组方程直观描述了系统的动态特性,为研究和设计复杂动态系统提供了一种强大的工具。
二、S4
2.1 离散化SSM
实际应用中经常需要接触到离散化的数据,于是为了SSM的通用性考虑,实现了离散化SSM来处理离散化数据。离散化数据的处理实际上是通过零阶保持技术,将离散化数据转化成SSM能识别的连续信号。
于是离散化SSM模型的实际效果如下:
通过对SSM的离散化,允许用离散时间步长来重新表示问题,于是可以表示为类似RNN的逻辑特征。
2.2 SSM卷积
通过卷积核将SSM表示成卷积形式。
好处是可以将SSM像CNN一样并行训练。
最后,SSMs将RNN与CNN结合,推理用RNN结构,训练用CNN结构,可以将序列高效地计算为递归或卷积,在序列长度上具有线性或近线性缩放。
2.3 HiPPO(High-order Polynomial Projection Operator)
类似RNN,SSM也需要解决序列建模的长距离依赖问题,解答的方法则是使用HiPPO矩阵。
HiPPO矩阵通常用于将连续时间信号投影到正交多项式基下,以代表过去的状态/信息,它会尝试将当前看到的输入信号压缩为一个系数向量,通过函数逼近,产生状态矩阵 A A A的最优解。
由于HiPPO能够通过计算产生一个隐藏状态矩阵 A A A来记录历史信息,所以使用它来应用与循环表示和卷积表示中时,能够处理SSM长距离依赖的问题。
2.4 S4(Structured State Space for Sequences)
综上所述,一类可以有效处理长序列的SSM模型,即 S 4 S4 S4模型应运而生
其中对状态矩阵A做了改进
2.5 SSM系列模型仍然存在的问题
- 对于SSM,方程中的系数矩阵是固定的。这意味着对于训练模型而言,使用SSM无法针对输入做针对性的推理。
- 对于输入的token,模型往往用相同的“精力”处理,这意味着模型会对一些无关紧要的信息进行处理,我们希望需要LSTM模型一样的方法,将模型关注在重要内容上。
三、Mamba
Mamba模型是基于SSM的升级和改进模型,它包含了三点创新:
- 对输入信息的选择性处理
- 硬件感知算法
- 更简单的架构
概括来说,Mamba模型会对输入的信息进行选择性处理。它保留信息当中必须关注的,过滤信息当中可以忽略的,以此达到对先前信息的总结概括。通过对信息的选择性处理的总结归纳,从而兼顾训练和推理的效率。
各个模型的特点:
在S4算法中,包含四个参数 A A A、 B B B、 C C C、 D D D,这四个参数是不随输入变化的,由上述2.5中”SSM系列模型存在的问题“中可知,SSM无法针对输入做针对性的推理,对于输入的token,模型往往用相同的“精力”处理。
在Mamba模型的优化如下:将参数 B B B、 C C C、 D D D( Δ Δ Δ)成为输入的函数,让模型能够根据输入内容自适应地调整。
S6在S4的基础上做出的改进:
由于参数变为了动态,Mamba在利用CNN计算中不能直接卷积计算。所以Mamba通过使用并行扫描算法实现类似卷积的并行训练能力。
- 图中有四个输入变量 X 1 X1 X1、 X 1 X1 X1、 X 2 X2 X2 和 X 3 X3 X3。
- 输入变量被分配给不同的处理器(或线程),以便在多个处理器上同时执行计算任务。
- 每个处理器都执行一个基本的累加操作,将当前处理的输入值与之前的结果相乘,然后传递给下一个处理器。
- 这些处理器之间的通信通过箭头表示,箭头指向接收结果的处理器。
- 在这个过程中,有两个关键步骤:Sweep-down 和 Sweep-up。Sweep-down 是指从顶部开始逐层向下累加的过程;而 Sweep-up 则是从底部向上逐层累加。
- 最终得到的结果是所有输入变量的累积值,存储在输出变量 H 0 H0 H0、 H 1 H1 H1、 H 2 H2 H2 和 H 3 H3 H3 中。
将SSM的基础块(如H3)与MLP相结合,经过重复、归一化和残差连接结合之后,就形成了Mamba架构。
在SRAM中进行离散化和递归后,最后写回HBM,这样就完成了Mamba模型的流程。
,存储在输出变量
H
0
H0
H0、
H
1
H1
H1、
H
2
H2
H2 和
H
3
H3
H3 中。
将SSM的基础块(如H3)与MLP相结合,经过重复、归一化和残差连接结合之后,就形成了Mamba架构。
[外链图片转存中…(img-lUcGHMA5-1724674212094)]
在SRAM中进行离散化和递归后,最后写回HBM,这样就完成了Mamba模型的流程。