从Encoder-Decoder到Mamba网络

从Encoder-Decoder到Mamba网络学习笔记

最近还是在做流量分类的项目,之前试过一些CV的方法,现在想结合NLP来做一些实验。于是准备从embedding开始学习,需要了解onehot编码,同时学习一些相关的编码方式以及NLP发展过程中经典的模型和结构,在这里对整个学习过程做一个记录。

分类特征

学习分类特征主要是学习onehot编码,后面的embedding层就是基于onehot编码做的。

分类特征是重要的一类特征,分类特征是离散的,非连续的,比如:

  • 性别
  • 城市
  • 颜色
  • IP地址
  • ID

有些分类特征也是数值,比如账号ID,IP地址,但是这些数值不是连续的。

下面介绍几种编码方式。

自然数编码/序列编码(ordinal Encoding)

某些分类本来就有一定的排序,比如教育等级小学、初中、高中和大学等;酒店评分如一星级、二星级、三星级等;健康状态非常不健康、不健康、一般、健康和非常健康等。这时就可以按照自然数进行编码。

  • 小学:1
  • 初中:2
  • 高中:3
  • 大学:4
  • 硕士:5
  • 博士:6

独热编码(One-Hot Encoding)

独热编码也是一种将分类特征转换为数值特征的编码方法,通过将每一个类比值转换为一个0和1的向量。其中只有一个位置为1,其余位置为0。独热编码非常适合与机器学习和深度学习中的分类变量处理。

过程:

  1. 识别分类特征所有的唯一值:例如对于一个包含颜色的类别变量[“red”,“green”,“blue”],首先识别出所有的唯一值。
  2. 创建一个新的二进制变量矩阵:为每一个唯一值创建一个二进制变量。例如,对于颜色变量,创建三个二进制变量分别对应“red”,“green”,“blue”。
  3. 编码每一个样本:将每个样本按照其类别值编码为对应的二进制向量。例如“green”被编码为[0,1,0]

示例:

假设现在有一个包含颜色变量的类别变量,值分别为:“red”,“green”,“blue”。

在这里插入图片描述

one-hot编码后:
在这里插入图片描述
问题:

  • 增加数据维度:向量维度会随着类别数量线性增长,影响模型的存储和计算效率
  • 稀疏性问题:onehot编码产生的矩阵通常是稀疏的,在处理大规模数据时,存储和计算效率可能会收到影响

虚拟变量(Dummy Variable)编码

类似于One-Hot编码,但是比One-Hot编码少一个取值。它会选择一个基准类别,其编码会被省略。

dummy variable相比于onehot编码,允许不出现1,也就是用全零表示最后一个类型。

示例:
在这里插入图片描述

用0,0代表feature1的第三种取值,也就是将这种取值设置为基准

Embedding

onehot编码在小型分类问题中使用的比较多,因为稀疏矩阵在做矩阵运算时,只需要把1对应位置的数相乘求和即可。所以它的优势是计算方便快捷,表达能力强。

但是如果有一篇中文的长文章,所有的简体繁体汉字加起来有十几万,用onehot编码就会需要一个很大的矩阵,占用巨大的内存空间,显然是不现实的。但是实际上文章中可能有大部分是重复的,所以全部表示出来浪费了大量空间。并且词和词、句子和句子之间的联系也不能在onehot编码的矩阵中体现。

embedding的思想是将高维稀疏矩阵映射到一个低维连续向量空间中,使得数据表示更紧凑,更适合于后续的机器学习任务。(这里有一篇很好的博客可以学习:https://blog.csdn.net/weixin_42078618/article/details/84553940)在NLP中,embedding层将一个稀疏矩阵,通过一些线性变换,变成了一个密集矩阵,这个矩阵用了N个特征来表征所有的文字,在这个密集矩阵中,代表着密集矩阵跟单个字的一一对应关系,实际上还蕴含了大量的字与字之间、词与词和句子和句子之间的内在关系。他们之间的关系,用的是嵌入层学习来的参数进行表征。从稀疏矩阵到密集矩阵的过程,叫做embedding,很多人也把它叫做查表,因为他们之间也是一个一一映射的关系。这种关系在反向传播的过程中,是一直在更新的,因此能在多次epoch后,使得这个关系变成相对成熟,即:正确的表达整个语义以及各个语句之间的关系。这个成熟的关系,就是embedding层的所有权重参数。

embedding的一些常用的方法:

word2vec

word2vec是浅层神经网络模型,有两种网络结构:CBOW和Skip-gram,这两个结构都是单隐藏层的模型,最后模型训练完成后(用反向传播更新模型参数),输入一个词,得到的隐藏层向量就是词嵌入的结果。

  • 目标:将词语表示为低维向量,使得语义上相似的词在向量空间中更接近
  • 输入:大量的文本数据
  • 输出:每个词对应的低维向量(嵌入向量)
CBOW(Continuous Bag-of-Words Model)
  • 目标:通过上下文词预测目标词
  • 输入:上下文词(上下窗口内的词)
  • 输出:目标词的概率分布
  • 优点:在小数据集上效果较好,训练速度快
Skip-gram(Continuous Skip-gram Model)
  • 目标:通过目标词预测上下文词
  • 输入:目标词
  • 输出:上下文词的概率分布
  • 优点:在大数据集上效果较好,能够捕捉更多语义信息。

在这里插入图片描述

两种方法的工作原理:

  1. 构建上下文窗口:

    • 对于每个目标词,定义一个上下文窗口(例如,窗口大小为2),考虑目标词前后各两个词作为上下文。

    • 例如,对于句子“I love natural language processing”,目标词 “love” 的上下文词是 [“I”, “natural”](窗口大小为1)。

  2. 训练模型:

    • 使用 CBOW 或 Skip-Gram 模型,通过最大化目标词和上下文词之间的共现概率来训练模型。
    • 训练过程中,模型会不断调整词嵌入向量,使得上下文词和目标词的嵌入向量在向量空间中更接近。
  3. 优化算法:

    • 通常使用负采样(negative sampling)或分层softmax来加速训练过程。

Word2vec的优点:

  • Word2Vec可以捕捉到词语之间的语义关系,使得相似的词在向量空间中更接近。
  • 计算效率高

Encoder-Decoder

Encoder-Decoder是一种常见的神经网络架构,广泛应用于序列到序列(seq2seq)任务中,如机器翻译、文本摘要、图像描述等。该结构通过将输入序列编码成一个固定长度的向量,再将该向量解码成输出序列,实现对输入到输出的映射。模型可以是CNN、RNN、LSTM、GRU、Attention等等。

  • 编码器:将输入编程成中间表达形式(特征)
  • 解码器:将中间表达形式解码成输出

所以无论输入序列和输出序列是什么,中间表达形式向量C的长度都是固定的,这是Encoder-Decoder框架的特点。

seq2seq

最早用来做机器翻译,是一个经典的Encoder-Decoder架构。
在这里插入图片描述

seq2seq中输入和输出长度都是任意的,只要满足目的就可以,提出seq2seq的文章中encoder部分和decoder部分使用的都是RNN。

Attention

Attention的引入为了解决一个问题:在Encoder-Decoder架构中,解码时会在每一次都引用中间表达形式C,但是这样每一个生成的词使用的C都是一样的,没有任何区别。这意味着输入序列的任意单词对输出的影响都是相同的,这实际上不符合我们的常识。比如翻译的时候,一般一个长文章的头部对应着译文的头部,尾部对应着译文的尾部。实际上如果Encoder使用RNN的话,输入越靠后的单词影响越大,并非各个单词的影响都相同,所以谷歌团队在提出seq2seq时发现把句子逆序输入会得到更好的效果。

下面是attention机制中比较经典的图:

在这里插入图片描述

可以看到attention最早出现在Encoder-Decoder架构之中,为了解决机器翻译的问题。和传统的架构不同,attention中的中间表达形式C不再是一个固定的向量了,而是有多个。当我们预测Y1时,就重点关注C1这个中间表达形式,用C1作为语义编码,预测Y2时就使用C2。这样就模拟了人类的注意力机制。作者在文章最后的展望中也预测了attention机制可以扩展到机器翻译之外的领域,目前attention机制已经在所有深度学习领域得到了广泛应用。

attention中的核心就是Q、K、V三个值,其中Q是query。它可以理解为想要获得的信息,或者重点关注的信息。而K和V是成对出现的,key-value对,它们可以相同也可以不同,大多数应用是这两个都是相同的。以阅读理解为例,Q就是问题,K-V就是原始文本。通过计算Q和K的相似性,得到每个Key对应Value的权重系数,然再和V进行加权求和。

(在Transformer中计算attention的公式如下:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q,K,V)=\text{softmax}(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V
其中除以根号dk的目的是为了解决softmax中的一些问题。)

Attention的步骤:

在这里插入图片描述

阶段一:计算Q和K的相似度评分S1-Sn

阶段二:将相似度S1-Sn进行归一化为a1-an

阶段三:用a1-an来更新V得到最后的attention值

Transformer

这一部分的内容是结合李沐老师在B站的文献精读视频完成的,Transformer模型的原文是:Attention Is All You Need,文章链接:https://proceedings.neurips.cc/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html

首先给出transformer的经典架构图:

在这里插入图片描述

可以看到transformer也是一个经典的Encoder-Decoder架构,其中左边是Encoder,右边是Decoder。其中Encoder和Decoder都是N×的,也就是多个块堆叠起来的。

Encoder

首先看左边的编码器部分,输入先传递给embedding,也就是嵌入层。然后有一个位置编码,最后是进入到多头注意力层和一个前馈层(可以理解为MLP)。其中每一个层都是512维(这个是可以调整的参数,和上面的N是transformer中可以调整的两个参数)。

LayerNorm

在Encoder中使用的正则化是layernorm而不是batchnorm,batchnorm相当于把每一个列(每一列是batch中不同样本的同一个特征)变换为均值为0,方差为1,而layernorm是把每一行(每一行是每一个样本的不同特征)变换为均值为0,方差为1。

实际上在变长输入处理的时候多使用layernorm,因为对于变长的样本,不同样本可能不会具有相同的维度的特征,所以如果使用batchnorm会引入很多0,造成抖动。

嵌入层

在这里插入图片描述

嵌入层也就是embedding层,在NLP中非常常用的一个层,将词转换为一个向量表示。

位置编码

attention实际上没有时序信息,因为attention是直接对所有的词之间的关系特征进行提取,它不关心这些词的位置信息和时序信息,这就无法处理时序信息。所以需要加入时序信息,做法就是在输入中直接加入位置信息,比如记录词在句子中间的位置。

多头注意力层

注意力函数就是将Q和一些K-V对映射成一个输出的函数。具体说输出就是V的一个加权和,那么输出的维度和V的维度是一样的。这里的V的权重就是根据Q和V相对应的K的相似度计算出的。注意力的计算公式如下:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q,K,V)=\text{softmax}(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V
其中除根号dk是在dk长度较大时,做点积时结果中的值差距会比较大,所以结果会向0和1靠拢,即大的那些都趋近于1,小的那些都趋近于0,就会导致梯度比较小。

而多头注意力就是为了识别不同的模式,将QKV通过几个科学系的参数WQ、WK、WV投影到低维空间中,再做注意力函数。

前馈层

实际上就是一个MLP,它是把一个MLP对每一个词作用一次,实际上是单个隐藏层的MLP,将512投影到2048再投影到512维的输出。在前馈层和attention层中都加入了残差连接,用来解决梯度消失和梯度爆炸的问题,并且可以增强特征的表达能力。

Decoder

Decoder的结构中一部分和Encoder十分相似:
在这里插入图片描述

而不同的就是在masked中,这是为了在解码器中,考虑到t时间不能看到t之间之后的东西,所以需要屏蔽t1-t-1时刻的东西,而不能看到之后的东西。这是因为在注意力机制中,Q会和所有的K做运算,这里面就包括了t时刻之后的K,这样是不符合我们要求的。而mask的作用就是将t时刻之后的值换成一个非常大的负数,这样在softmax()时就会等于0

Mamba网络

从Transformer到Mamba中间还需要了解SSM、HIPPO、S4。这里简单介绍一下,详细可以参考这篇博客https://blog.csdn.net/v_JULY_v/article/details/134923301,讲得非常好。

因为Transformer的计算复杂度和序列长度的平方成正比,比如两个相乘的矩阵大小分别为N×d和d×N,那么复杂度就是N的平方。这成为了制约Transformer发展的一大问题,也是ChatGPT等大模型处理长文本算力消耗巨大的问题。所以出现了很多对于Transformer复杂度优化的方法,比如S4、FlashAttention以及FlashAttention v2等。而Memba就是在S4和FlashAttention的作者们提出的新的序列模型,比transformer的性能要高很多,所以才会成为当前的风口模型。

RNN

我们知道RNN中,每个循环中的当前隐藏状态 h t h_{t} ht的确定都需要两个输入:当前的输入 x t x_{t} xt和上一个时间的隐藏状态 h t − 1 h_{t-1} ht1,最终预测输出 y t y_{t} yt

公式:
h t = t a n h ( W h t − 1 + U x t ) h_{t}=tanh (Wh_{t-1}+Ux_{t}) ht=tanh(Wht1+Uxt)
在这里插入图片描述

RNN的问题在于,随着时间的推移,RNN往往会忘记某一部分的信息,并且没有办法并行训练,因为它必须等待上一个时刻的隐藏状态输入后才能计算出当前的隐藏状态。

而SSM和RNN本质上差不多,下面是SSM:

在这里插入图片描述

SSM

SSM是状态空间模型state space model的缩写,状态空间模型是用于描述状态表示并根据某些输入预测其下一个状态可能是什么的模型。一般SSM包括:映射输入序列 x ( t ) x(t) x(t),潜在状态表示 h ( t ) h(t) h(t),和导出预测输出序列 y ( t ) y(t) y(t),但是SSM不是离散序列,而是使用连续序列作为输入并预测输出序列。

在这里插入图片描述

SSM假设系统可以通过两个方程从其在时间t时的状态进行预测

1、状态方程,这个方程和RNN的循环结构非常类似,通过上一个隐藏状态和当前输入综合得到当前的隐藏状态,只是权重W、U换成了A和B。
h ′ ( t ) = A h ( t ) + B x ( t ) \mathbf{h'(t)}=\mathbf{Ah(t)}+\mathbf{Bx(t)} h(t)=Ah(t)+Bx(t)
这个方程也可以换个写法更好理解:
h ( t ) = A h ( t − 1 ) + B x ( t ) \mathbf{h}(\mathbf{t})=\mathbf{Ah}(\mathbf{t-1})+\mathbf{Bx(t)} h(t)=Ah(t1)+Bx(t)
这样是不是就和RNN的方程差不多了。只是换了两个参数并且去掉了RNN里面使用的tanh函数。这里的系数A存储着之前所有历史信息的矩阵表示,以基于A更新下一个时刻的空间状态hidden state。用图来表示:

在这里插入图片描述

这样就可以直观地看出,A影响的是上一个状态 h ( t ) h(t) h(t),而 h ( t ) h(t) h(t)指的是任何给定时间 t t t的潜在状态表示,B影响的是当前的输入 x ( t ) x(t) x(t),

2、输出方程,描述了状态通过C转换影响输入,以及输入通过D转换影响输出。
y ( t ) = C h ( t ) + D x ( t ) \mathbf{y}(t)=\mathbf{Ch}(t)+\mathbf{Dx}(t) y(t)=Ch(t)+Dx(t)
同样用图表示:

在这里插入图片描述

那么SSM就可以看做:

在这里插入图片描述

关键就是在找到状态标识 h ( t ) h(t) h(t),以便结合其与输入序列 x ( t ) x(t) x(t)进行预测输出序列。

将上面两个方程统一后可以表达为下面的图:

在这里插入图片描述

这里的D一般是一个类似跳跃连接skip connection一样的结构。在没有D的情况下,SSM通常被视为:

在这里插入图片描述

S4

S4对比SSM有三个升级的地方:离散化SSM、循环/卷积表示、基于HIPPO处理长序列

离散化SSM

除了连续的输入外,还有很多时候需要处理离散的输入,所以S4就在SSM中,使用零阶保持技术来处理离散化数据。(注意!实际上是将数据从离散化转为连续,而不是将模型改为只处理连续数据)

具体过程:

  1. 每次收到离散信号,保留其值,知道收到新的离散信号
  2. 保持该值的时间由一个可学习的参数表示,称为步长$\Delta $,它代表输入的阶段性保持
  3. 有了连续的输入后,便可以生成连续的输出,并且根据输入的时间步长在输出序列进行采样

用图表示:

输入:

在这里插入图片描述

输出:

在这里插入图片描述

循环/卷积表示

循环结构表示:

在每一个时间t都会涉及到隐藏状态的更新,比如 h k h_{k} hk取决于 A ‾ k − 1 \overline{A}_{k-1} Ak1 B ‾ k \overline{B}_{k} Bk的共同作用,然后通过 C h k Ch_{k} Chk预测输出 y k y_{k} yk。如果展开的话:

在这里插入图片描述

可以通过公式推导:

在这里插入图片描述

那么这个形式就可以使用RNN的结构来进行处理,也就是上面的那个图。

在这里插入图片描述

但是不仅如此,这个式子:

在这里插入图片描述

还可以换一个形式:

在这里插入图片描述

这样的话,可以将前面的矩阵当做一个卷积核 k ‾ \overline{k} k,这样右侧就是我们的输入向量 x x x,左边就是卷积。由于其中A、B、C在预测的时候都是常数,也就是固定好的,那么就可以作为一个固定的卷积核。

但是RNN的优点是推理速度快,CNN的优点是训练速度快,所以最后在SSM中使用RNN进行推理,CNN进行训练。

在这里插入图片描述

HIPPO解决长距离依赖问题

HIPPO的全称是High-order Polynomial Projection Operator,高阶多项式投影算子。使用HIPPO是为了解决矩阵A只捕获前几个前几个token和捕获迄今为止看到的每个token之间的区别,特别是在循环表示的上下文中,因为它只回顾以前的状态。它使用矩阵A构建一个“可以很好捕获最近的token”状态表示,通过函数逼近产生状态矩阵A的最优解。我们回顾一下这个图:

在这里插入图片描述

我们可以看到,ABCD四个参数中,实际上D只是一个偏置,对整个模型的影响不大,所以论文中直接将这个参数设置为0。而其中最关键的参数就是A这个矩阵,某种意义上A产生了隐藏状态。所以文中对A进行了深入地调整,也就是使用了HIPPO方法。HIPPO的矩阵:
A n k = − { ( 2 n + 1 ) 1 / 2 ( 2 k + 1 ) 1 / 2 if  n > k n + 1 if  n = k 0 if  n < k . \boldsymbol{A}_{nk}=-\begin{cases}(2n+1)^{1/2}(2k+1)^{1/2}&\text{if }n>k\\n+1&\text{if }n=k\\0&\text{if }n<k\end{cases}. Ank= (2n+1)1/2(2k+1)1/2n+10if n>kif n=kif n<k.

所以S4模型可以总结为:序列的结构化状态空间Structured State Space for Sequences

在这里插入图片描述

详细的内容可以参考原文进行理解。

Mamba

Mamba的三个主要创新点:

  1. 对输入信息有选择性处理
  2. 硬件感知的算法
  3. 更简单的架构
选择性状态空间模型

作者认为序列建模的一个基础问题是把上下文压缩成更小的状态,那么Transformer模型的注意力机制虽然有效果但是效率不高,因为需要显式地存储整个上下文,即KV缓存,直接导致了训练和推理消耗的算力很大;而RNN模型的推理训练效率高,但是性能容易受到上下文压缩程度的限制;而SSM的问题在于,其中的ABC矩阵不随输入不同而不同,即无法针对不同输入进行针对性推理(因为ABC是固定的,所以才可以在训练过程中像CNN一样将ABC矩阵转换成卷积核)。

而Mamba的解决方案就是,相比于SSM压缩所有历史记录,Mamba设计了一个简单的选择机制,通过参数化SSM的输入,让模型对信息有选择性地处理,以便关注或者忽略特定的输入。“好比,Mamba每次参考前面所有内容的一个概括,越往后写对前面内容概括得越狠,丢掉细节、保留大意”

Mamba就是在上面的S4的基础上进行了改进,S4的核心就是在SSM的基础上进行了离散化、使用循环/卷积表示和使用HIPPO解决长距离依赖。我们知道,S4模型有4个参数 Δ \Delta Δ和ABC(D不重要就先忽略),并且这四个参数都不会随着输入的改变而改变。

S4中使用到这几个参数的公式如下,其中1a和1b是SSM中的输出计算公式:
h ′ ( t ) = A h ( t ) + B x ( t ) ( 1 a ) y ( t ) = C h ( t ) ( 1 b ) \begin{aligned}h^{\prime}(t)&=Ah(t)+Bx(t)\quad(1\text{a})\\y(t)&=Ch(t)\quad(1\text{b})\end{aligned} h(t)y(t)=Ah(t)+Bx(t)(1a)=Ch(t)(1b)
S4中使用公式 A ‾ = f A ( Δ , A ) 和 B ‾ = f B ( Δ , A , B ) \overline{\boldsymbol{A}}=f_A(\Delta,\boldsymbol{A})\text{和}\overline{\boldsymbol{B}}=f_B(\Delta,\boldsymbol{A},\boldsymbol{B}) A=fA(Δ,A)B=fB(Δ,A,B)离散化后的公式,其中 f A 和 f B f_{A}和f_{B} fAfB是称为离散化规则,且可以使用多种规则来实现,在原文中使用的是零阶保持技术,离散化后的公式如2a和2b:
h t = A ‾ h t − 1 + B ‾ x t (2a) y t = C h t (2b) \begin{aligned}&h_{t}=\overline{A}h_{t-1}+\overline{B}x_{t}&&\text{(2a)}\\&y_{t}=Ch_{t}&&\text{(2b)}\end{aligned} ht=Aht1+Bxtyt=Cht(2a)(2b)
最后是使用循环/卷积表示的公式3a和3b:
K ‾ = ( C B ‾ , C A B ‾ , . . . , C A ‾ k B ‾ , . . . ) (3a) y = x ∗ K ‾ (3b) \begin{aligned}&\overline{K}=(C\overline{B},C\overline{AB},...,C\overline{A}^{k}\overline{B},...)&&\text{(3a)}\\&y=x*\overline{K}&&\text{(3b)}\end{aligned} K=(CB,CAB,...,CAkB,...)y=xK(3a)(3b)
S4中的三个矩阵维度如图:

在这里插入图片描述

但是Mamba在对批量大小为B、长度为L、通道数为D的输入序列x进行操作时,给这D个维度的每一个维度都设置一个独立的SSM,即SSM被独立地应用在每一个通道。下面给出S4和Mamba的算法对比:

在这里插入图片描述

这个变化过程中,影响输入的B矩阵和影响隐藏状态的C矩阵大小从原来的(D,N)变成了(B,L,N),且 Δ \Delta Δ的大小由原来的D变成了(B,L,D),意味着对于一个batch里的每个token都有一个独特的 Δ \Delta Δ,总共有B×L个token。且每一个token都有独特的B矩阵和C矩阵,可以解决感知问题。

这是一篇很好的博客的解释:“Mamba模型在推理时,可根据不同的输入数据动态计算矩阵B、C和步长Δ的值,但用于这些计算的参数(即决定如何计算这些矩阵和步长的函数或映射)是固定不变的。这些参数在训练阶段确定,并在推理阶段被重用(推理过程中不会对模型的参数进行重新训练或调整,而是简单地应用训练阶段学到的参数来生成预测)”(原文链接:https://blog.csdn.net/v_JULY_v/article/details/134923301)

最后这三个参数实际上类似于RNN中的门控单元:

  • Δ \Delta Δ的作用类似于RNN中的遗忘门,较小的 Δ \Delta Δ会忽略当前输入,而更多地使用先前的上文,较大的步长 Δ \Delta Δ会更多地关注当前输入而不是上文。
  • B的作用类似于输入门
  • C的作用类似于输出门
硬件感知

在Mamba改进S4后,ABC矩阵都变成了动态的,所以就无法使用卷积来计算了(CNN需要一个固定的内核),因此为了优化,Mamba使用并行扫描且使用了flash attention技术。

简化的SSM架构

Mamba采用了大多数SSM架构与Transformer中的门控MLP相结合,组成了新的Mamba块,重复这个块,与归一化和残差连接结合,构成了Mamba架构。

在这里插入图片描述

做线性投影的目的是增加输入嵌入的维度,让模型能够处理更高维度的特征空间,从而捕获更细致、更复杂的特征。SSM前使用卷积的目的是对数据做进一步的预处理,CNN负责提取局部特征,而SSM负责处理这些特征并捕捉序列数据中的长期依赖关系,两者互为补充(有些类似于将CNN结合LSTM的工作)。

最终在更高速的SRAM内存中执行离散化和递归操作,再将输出写回HBM:

在这里插入图片描述

通过Mamba预测下一个token

在这里插入图片描述

首先进行线性投影以扩展输入嵌入,再使用CNN提取局部特征,然后经过激活函数后交给选择性SSM块进行序列特征提取,最后计算输出。

在选择性SSM中包括:

  1. Recurrent SSM通过离散化创建循环SSM
  2. HIPPO对矩阵A进行初始化以解决长距离依赖问题
  3. 选择性扫描算法选择性压缩信息
    ,让模型能够处理更高维度的特征空间,从而捕获更细致、更复杂的特征。SSM前使用卷积的目的是对数据做进一步的预处理,CNN负责提取局部特征,而SSM负责处理这些特征并捕捉序列数据中的长期依赖关系,两者互为补充(有些类似于将CNN结合LSTM的工作)。

最终在更高速的SRAM内存中执行离散化和递归操作,再将输出写回HBM:

[外链图片转存中…(img-vA5I4CGP-1720609252479)]

通过Mamba预测下一个token

[外链图片转存中…(img-RuK6Qajk-1720609252480)]

首先进行线性投影以扩展输入嵌入,再使用CNN提取局部特征,然后经过激活函数后交给选择性SSM块进行序列特征提取,最后计算输出。

在选择性SSM中包括:

  1. Recurrent SSM通过离散化创建循环SSM
  2. HIPPO对矩阵A进行初始化以解决长距离依赖问题
  3. 选择性扫描算法选择性压缩信息
  4. 使用硬件感知算法加速计算
  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值