当前位置: 首页 > news >正文

回顾Transformer,并深入讲解替代方案Mamba原理(图解)

一种语言建模中 Transformer 的替代方案

       Transformer 架构是大语言模型(LLMs)成功的关键组成部分。几乎所有今天使用的大语言模型都采用了该架构,从开源模型如 Mistral 到闭源模型如 ChatGPT。

        为了进一步改进大语言模型,新的架构被开发出来,这些架构可能甚至会超越 Transformer 架构。其中一种方法是 Mamba,一种 状态空间模型

回顾Transformer原理,并深入讲解平提方案Mamba-1

Mamba 在论文 Mamba: Linear-Time Sequence Modeling with Selective State Spaces1 中被提出。你可以在其 仓库 中找到其官方实现和模型检查点。

在这篇文章中,我将介绍在语言建模背景下的状态空间模型领域,并逐步探索各个概念,以帮助理解这一领域。然后,我们将讨论 Mamba 如何可能挑战 Transformer 架构。

作为一个视觉指南,本文将通过许多可视化内容来帮助理解 Mamba 和状态空间模型!

第 1 部分:Transformers 的问题

为了说明 Mamba 是多么有趣的架构,我们首先简要回顾一下 Transformers,并探索其一个缺点。

Transformer 将任何文本输入视为由 tokens 组成的 sequence

回顾Transformer原理,并深入讲解平提方案Mamba-1

Transformers 的一个主要优点是,无论它接收到什么输入,它都可以回溯到序列中任何早期的 tokens 来推导其表示。

回顾Transformer原理,并深入讲解平提方案Mamba-1

Transformers 的核心组件

记住,Transformer 由两个结构组成,一个用于表示文本的编码器块集和一个用于生成文本的解码器块集。结合起来,这些结构可用于多个任务,包括翻译。

回顾Transformer原理,并深入讲解平提方案Mamba-1

我们可以采用这种结构,通过仅使用解码器来创建生成模型。这个基于 Transformer 的模型,生成式预训练 Transformer(GPT),使用解码器块来完成一些输入文本。

让我们看看这是如何工作的!

训练中的祝福...

单个解码器块由两个主要组件组成,遮蔽的自注意力机制和前馈神经网络。

回顾Transformer原理,并深入讲解平提方案Mamba-1

自注意力机制是这些模型工作得如此出色的一个重要原因。它使整个序列的未压缩视图得以实现,并且训练速度快。

那么它是如何工作的呢?

它创建了一个矩阵,将每个 Token 与之前的每个 Token 进行比较。矩阵中的权重取决于 Token 对彼此的相关性。

回顾Transformer原理,并深入讲解平提方案Mamba-1

在训练过程中,这个矩阵一次性创建。“My”和“name”之间的注意力不需要先计算,才能计算“name”和“is”之间的注意力。

它实现了并行化,这极大地加快了训练速度!

推理中的问题!

然而存在一个缺陷。当生成下一个 Token 时,我们需要重新计算整个序列的注意力,即使我们已经生成了一些 Token。

回顾Transformer原理,并深入讲解平提方案Mamba-1

生成长度为L的序列需要大约次计算,如果序列长度增加,计算代价会很高。

回顾Transformer原理,并深入讲解平提方案Mamba-1

这种需要重新计算整个序列的情况是 Transformer 架构的主要瓶颈之一。

让我们看看一种“经典”技术——循环神经网络(Recurrent Neural Networks, RNN)是如何解决这个推理速度慢的问题。

RNN 是解决方案吗?

循环神经网络(RNN)是一种基于序列的网络。它在每个时间步中接收两个输入,即时间步t的输入和上一个时间步t-1的隐藏状态,用以生成下一个隐藏状态并预测输出。

RNN 有一个循环机制,允许它将信息从前一步传递到下一步。我们可以将这个可视化过程“展开”,使其更加明确。

回顾Transformer原理,并深入讲解平提方案Mamba-1

在生成输出时,RNN 只需要考虑前一个隐藏状态和当前输入。它避免了 Transformer 所需的重新计算所有之前隐藏状态的问题。

换句话说,RNN 能够快速进行推理,因为它随着序列长度线性扩展!理论上,它甚至可以拥有无限的上下文长度

为了说明这一点,让我们将 RNN 应用于我们之前使用的输入文本。

回顾Transformer原理,并深入讲解平提方案Mamba-1

每个隐藏状态都是所有之前隐藏状态的聚合,通常是一个压缩的视图。

然而,这里有一个问题……

        注意,当生成名字“Maarten”时,最后一个隐藏状态已经不再包含关于单词“Hello”的信息了。RNN 随时间推移往往会忘记信息,因为它们只考虑上一个状态。

        虽然 RNN 在训练和推理方面速度较快,但它们缺乏 Transformer 模型所能提供的精度。

        因此,我们研究状态空间模型 (State Space Models) 来高效地使用 RNN(有时还会使用卷积)。

第 2 部分:状态空间模型 (SSM)

        状态空间模型 (SSM) 像 Transformer 和 RNN 一样处理信息序列,比如文本和信号。在本节中,我们将介绍 SSM 的基本概念以及它们与文本数据的关系。

什么是状态空间?

        状态空间包含完全描述一个系统所需的最少变量数。它是一种通过定义系统可能状态来数学表示问题的方法。

        让我们简化一下。想象我们正在穿越迷宫。“状态空间”就是所有可能位置(状态)的地图。每个点代表迷宫中的一个独特位置,并带有特定的细节,比如你距离出口有多远。

        “状态空间表示”是对这张地图的简化描述。它显示了你当前的位置(当前状态)、你可以前往的下一个位置(可能的未来状态)、以及你如何到达下一个位置(向右或向左移动)。

回顾Transformer原理,并深入讲解平提方案Mamba-1

虽然状态空间模型使用方程和矩阵来跟踪这种行为,但它实际上只是跟踪你在哪里、你可以去哪里、以及如何到达那里的一种方式。

变量描述了一个状态,在我们的例子中,X 和 Y 坐标,以及到出口的距离,可以表示为“状态向量”。

回顾Transformer原理,并深入讲解平提方案Mamba-1

        听起来很熟悉吗?这是因为在语言模型中,嵌入或向量也经常用于描述输入序列的“状态”。例如,描述你当前位置的向量(状态向量)可能类似于如下所示:

回顾Transformer原理,并深入讲解平提方案Mamba-1

在神经网络中,“状态”通常指的是系统的隐藏状态,在大语言模型中,这是生成新 token 时最重要的方面之一。

什么是状态空间模型?

SSM(状态空间模型)是一类用于描述这些状态表示并预测其下一个状态的模型,预测基于某些输入。

传统上,在时间 t,SSM:

  • 将输入序列 x(t)(例如,在迷宫中向左和向下移动)映射到潜在状态表示 h(t)(例如,到出口的距离和 x/y 坐标)
  • 并推导出预测的输出序列 y(t)(例如,再次向左移动以更快到达出口)

然而,SSM 并不是使用离散序列(如向左移动一次),而是接受连续序列作为输入并预测输出序列。

回顾Transformer原理,并深入讲解平提方案Mamba-1

SSM 假设动态系统(如在 3D 空间中移动的物体)可以通过时间 t 的状态和两个方程来预测。

回顾Transformer原理,并深入讲解平提方案Mamba-1

        通过求解这些方程,我们假设可以根据观测到的数据(输入序列和先前状态)揭示预测系统状态的统计原则。

 其目标是找到这个状态表示 h(t),使我们能够从输入到输出序列

回顾Transformer原理,并深入讲解平提方案Mamba-1

这两个方程是状态空间模型的核心。

这两个方程将在整个指南中引用。为了让它们更直观,我们使用颜色编码,这样你可以快速引用它们。

状态方程 描述了状态如何根据输入(通过 矩阵 B)影响状态(通过 矩阵 A)而变化。

回顾Transformer原理,并深入讲解平提方案Mamba-1

如前所述,h(t) 指的是任意给定时间 t 的潜在状态表示,x(t) 指的是某个输入。

输出方程 描述了状态如何通过 矩阵 C 转换为输出,以及输入如何通过 矩阵 D 影响输出。

回顾Transformer原理,并深入讲解平提方案Mamba-1

注意:矩阵 ABC 和 D 也常被称为 参数,因为它们是可学习的。

将这两个方程可视化,我们得到以下架构:

回顾Transformer原理,并深入讲解平提方案Mamba-1

让我们一步步了解这些矩阵如何影响学习过程。

假设我们有一些输入信号 x(t),该信号首先与 矩阵 B 相乘,矩阵 B 描述了输入如何影响系统。

回顾Transformer原理,并深入讲解平提方案Mamba-1

更新后的状态(类似于神经网络的隐藏状态)是一个潜在空间,其中包含了环境的核心“知识”。我们将状态与 矩阵 A 相乘,该矩阵描述了所有内部状态之间的关联,表示系统的基本动态。

回顾Transformer原理,并深入讲解平提方案Mamba-1

你可能已经注意到,矩阵 A 在创建状态表示之前应用,并在状态表示更新后再次应用。

然后,我们使用 矩阵 C 来描述状态如何转换为输出。

回顾Transformer原理,并深入讲解平提方案Mamba-1

最后,我们可以使用 矩阵 D 提供从输入到输出的直接信号。这通常也被称为 跳跃连接

回顾Transformer原理,并深入讲解平提方案Mamba-1

由于 矩阵 D 类似于跳跃连接,SSM 通常被认为是不包含跳跃连接的以下形式。

回顾Transformer原理,并深入讲解平提方案Mamba-1

回到我们的简化视角,我们现在可以将重点放在矩阵 AB 和 C 上,作为 SSM 的核心。

回顾Transformer原理,并深入讲解平提方案Mamba-1

我们可以更新原始方程(并添加一些漂亮的颜色)来标明每个矩阵的用途,就像我们之前做的那样。

        这两组方程一起旨在从观察数据中预测系统的状态。由于输入是连续的,SSM 的主要表示形式是 连续时间表示

从连续信号到离散信号

        如果你有一个连续信号,找到状态表示 h(t) 在解析上具有挑战性。此外,由于我们通常有离散输入(例如文本序列),我们希望对模型进行离散化。

        为此,我们使用了 零阶保持技术。其工作原理如下:首先,每当我们接收到离散信号时,我们保持其值,直到我们接收到新的离散信号为止。这个过程会生成一个连续信号,供 SSM 使用:

        我们保持数值的时间由一个可学习的新参数 步长  表示。它表示输入的分辨率。

        现在我们为输入生成了一个连续信号,接下来我们可以生成连续输出,并根据输入的时间步长对这些值进行采样。

回顾Transformer原理,并深入讲解平提方案Mamba-1

这些采样的值就是我们离散化的输出!

从数学上讲,我们可以如下应用零阶保持:

回顾Transformer原理,并深入讲解平提方案Mamba-1

它们共同使我们可以从一个连续的 SSM 过渡到一个离散的 SSM。此时模型不再是 函数对函数 x(t) → y(t),而是 序列对序列 x → y_

回顾Transformer原理,并深入讲解平提方案Mamba-1

 这里,矩阵 A 和 B 现在表示模型的离散化参数。

我们用 k 来代替 t,以区分我们何时在谈论连续的 SSM 与离散的 SSM。

        注意: 在训练期间,我们仍然保留 矩阵 A 的连续形式,而不是其离散化版本。在训练过程中,连续表示会被离散化。

        现在我们已经有了一个离散化表示的公式,让我们探讨如何实际 计算 该模型。

递归表示

        我们的离散化 SSM 使我们能够在特定的时间步中,而不是连续信号中,构建问题。正如我们之前在 RNN 中看到的,递归方法在这里非常有用。

如果我们考虑离散的时间步而不是连续信号,我们可以使用时间步重新表述这个问题:

回顾Transformer原理,并深入讲解平提方案Mamba-1

在每个时间步中,我们计算当前输入 (Bx) 如何影响前一个状态 (Ahₖ₋₁),然后计算预测输出 (Ch)。

回顾Transformer原理,并深入讲解平提方案Mamba-1

这个表示可能已经让你感到熟悉!我们可以像之前对 RNN 的处理方法一样进行分析。

回顾Transformer原理,并深入讲解平提方案Mamba-1

我们可以将其展开(或展开成一系列时间步)如下:        

回顾Transformer原理,并深入讲解平提方案Mamba-1

请注意,我们可以使用 RNN 的基本方法来使用这种离散化的版本。

卷积表示

        我们可以使用卷积来表示 SSM。记住在经典图像识别任务中,我们应用滤波器(kernels)来提取聚合特征:

回顾Transformer原理,并深入讲解平提方案Mamba-1

由于我们处理的是文本而不是图像,我们需要使用一维视角:

回顾Transformer原理,并深入讲解平提方案Mamba-1

我们用来表示这个“滤波器”的内核源自 SSM 公式:

回顾Transformer原理,并深入讲解平提方案Mamba-1

让我们来看看这个内核在实践中的作用。像卷积一样,我们可以使用 SSM 内核遍历每组 tokens 并计算输出:

回顾Transformer原理,并深入讲解平提方案Mamba-1

        这也展示了填充可能对输出产生的影响。我更改了填充的顺序以改善可视化,但我们通常在句子末尾应用填充。

在下一步中,内核会移动一次以执行计算的下一步:

回顾Transformer原理,并深入讲解平提方案Mamba-1

在最后一步中,我们可以看到内核的全部效果:

回顾Transformer原理,并深入讲解平提方案Mamba-1

        将 SSM 表示为卷积的一个主要好处是它可以像卷积神经网络(CNNs)一样并行训练。然而,由于内核大小固定,它们的推理速度不如 RNNs 快且不受限制。

三种表示方式

        这三种表示方式——连续递归 和 卷积 各有不同的优缺点:

回顾Transformer原理,并深入讲解平提方案Mamba-1

有趣的是,我们现在可以利用递归 SSM 进行高效推理,同时利用卷积 SSM 进行并行训练。

利用这些表示方式,我们可以使用一个巧妙的技巧,即根据任务选择表示方式。在训练过程中,我们使用可以并行化的卷积表示,而在推理过程中,我们使用高效的递归表示:

回顾Transformer原理,并深入讲解平提方案Mamba-1

        这个模型被称为 线性状态空间层(LSSL)。 2

        这些表示方式共享一个重要属性,即线性时间不变性(LTI)。LTI 表示 SSM 的参数 AB 和 C 在所有时间步中都是固定的。这意味着矩阵 AB 和 C 对每个生成的 Token 都是相同的。

        换句话说,无论你给 SSM 任何序列,AB 和 C 的值都保持不变。我们有一个不关心内容的静态表示方式。

        在探讨 Mamba 如何解决这个问题之前,让我们探讨最后一个拼图碎片——矩阵 A

矩阵 A 的重要性

        可以说,SSM 公式中最重要的方面之一是 矩阵 A。正如我们之前在递归表示中看到的,它捕捉了有关 上一个 状态的信息,以构建 新的 状态。

回顾Transformer原理,并深入讲解平提方案Mamba-1

本质上,矩阵 A 生成隐藏状态:

回顾Transformer原理,并深入讲解平提方案Mamba-1

因此,创建 矩阵 A 可能会决定我们能否记住仅仅几个之前的 token 或捕捉到我们迄今为止看到的每一个 token。特别是在递归表示的背景下,因为它只 回顾 上一个状态

如何以保留大量记忆(上下文大小)的方式创建 matrix A

我们使用 Hungry Hungry Hippo!或者 HiPPO3 来实现阶 项式 影 算符。HiPPO 试图将其至今看到的所有输入信号压缩为一个系数向量。

回顾Transformer原理,并深入讲解平提方案Mamba-1

它使用 matrix A 来构建一个状态表示,该表示能够较好地捕捉最近的 token,并衰减较旧的 token。其公式可以表示如下:

回顾Transformer原理,并深入讲解平提方案Mamba-1

假设我们有一个方阵 matrix A,这给我们提供了:

回顾Transformer原理,并深入讲解平提方案Mamba-1

使用 HiPPO 构建 matrix A 被证明比将其初始化为随机矩阵要好得多。因此,它在重建 更新 信号(最近的 token)方面比 较旧 信号(初始 token)更为准确。

HiPPO 矩阵的核心思想是生成一个记忆其历史的隐藏状态。

从数学上讲,它通过跟踪 Legendre 多项式 的系数来实现这一点,这使得它能够近似所有的历史记录。4

然后 HiPPO 被应用于我们之前看到的递归和卷积表示,以处理长距离依赖关系。结果是 Structured State Space for Sequences (S4),一种可以高效处理长序列的 SSM 类。5

它由三部分组成:

  • 状态空间模型
  • HiPPO 用于处理 长距离依赖
  • 离散化用于创建 递归 和 卷积 表示

回顾Transformer原理,并深入讲解平提方案Mamba-1

这类 SSM 具有多个优点,具体取决于你选择的表示方式(递归与卷积)。它还可以处理长文本序列,并通过基于 HiPPO 矩阵来高效地存储记忆。

注意:如果你想深入了解如何计算 HiPPO 矩阵并自己构建 S4 模型,我强烈建议你阅读 Annotated S4。

第 3 部分:Mamba - 一种选择性状态空间模型

我们终于覆盖了理解 Mamba 特殊之处所需的所有基础知识。状态空间模型可以用于建模文本序列,但仍然有一系列我们希望避免的缺点。

在这一部分,我们将讨论 Mamba 的两个主要贡献:

  1. 一种 选择性扫描算法,允许模型筛选(不)相关信息
  2. 一种 硬件感知算法,通过 并行扫描内核融合 和 重新计算 来高效存储(中间)结果。

这两者共同创建了 选择性状态空间模型 或 S6 模型,可以像自注意力一样用于创建 Mamba 块

在探索这两个主要贡献之前,让我们首先探讨一下它们为何必要。

试图解决什么问题?

状态空间模型,甚至 S4(结构化状态空间模型),在语言建模和生成中某些关键任务上表现不佳,即 关注或忽略特定输入的能力

我们可以用两个合成任务来说明这一点,即 选择性复制 和 诱导头

在 选择性复制 任务中,SSM 的目标是复制输入的部分并按顺序输出:

回顾Transformer原理,并深入讲解平提方案Mamba-1

然而,由于 SSM 是 线性时间不变,它在这个任务上表现不佳。正如我们之前看到的,矩阵 AB 和 C 对于 SSM 生成的每个 token 都是相同的。

因此,SSM 无法执行 内容感知推理,因为它由于固定的 A、B 和 C 矩阵而平等对待每个 token。这是一个问题,因为我们希望 SSM 对输入(提示)进行推理。

SSM 在另一个任务上表现不佳,即 诱导头,其目标是重现输入中找到的模式:

回顾Transformer原理,并深入讲解平提方案Mamba-1

在上面的示例中,我们本质上是在进行一次性提示,其中我们尝试“教”模型在每个 “Q:” 后提供一个 “A:” 响应。然而,由于 SSM 是时间不变的,它无法选择从历史中召回哪些先前的 tokens。

让我们通过关注 矩阵 B 来说明这一点。无论输入 x 是什么,矩阵 B 始终保持不变,因此与 x 无关:

回顾Transformer原理,并深入讲解平提方案Mamba-1

同样,A 和 C 也始终保持固定,与输入无关。这表明我们迄今看到的 SSM 的 静态 特性。

回顾Transformer原理,并深入讲解平提方案Mamba-1

相比之下,这些任务对于 Transformer 来说相对简单,因为它们根据输入序列 动态 改变注意力。它们可以选择性地“观察”或“关注”序列的不同部分。

SSM 在这些任务上的较差表现说明了时间不变 SSM 的潜在问题,矩阵 AB 和 C 的静态特性导致了 内容感知 的问题。

选择性保留信息

SSM 的递归表示创建了一个较小的状态,这种状态非常高效,因为它压缩了整个历史。然而,与 Transformer 模型相比,Transformer 模型不会对历史进行压缩(通过注意力矩阵),因此它的能力更强。

Mamba 旨在兼具两者的优势。一个与 Transformer 状态一样强大的小状态:

如上所述,它通过选择性地将数据压缩到状态中来实现。当你有一个输入句子时,通常会有一些信息,例如停用词,没有太多意义。

为了选择性地压缩信息,我们需要参数依赖于输入。为此,让我们首先探索 SSM 在训练过程中输入和输出的维度:

回顾Transformer原理,并深入讲解平提方案Mamba-1

在结构化状态空间模型(S4)中,矩阵 AB 和 C 与输入无关,因为它们的维度 N 和 D 是静态的,不会改变。

回顾Transformer原理,并深入讲解平提方案Mamba-1

相反,Mamba 通过结合输入的序列长度和批量大小,使矩阵 B 和 C,甚至 步长 _,依赖于输入:

回顾Transformer原理,并深入讲解平提方案Mamba-1

这意味着对于每个输入 token,我们现在有不同的 B 和 C 矩阵,这解决了内容感知的问题!

注意:矩阵 A 保持不变,因为我们希望状态本身保持静态,但它的影响方式(通过 B 和 C)是动态的。

它们共同 选择性地 选择保留在隐藏状态中的内容和忽略的内容,因为它们现在依赖于输入。

较小的 步长  导致忽略特定的词汇,而更多地使用之前的上下文,而较大的 步长  则更加关注输入词汇,而不是上下文:

回顾Transformer原理,并深入讲解平提方案Mamba-1

扫描操作

由于这些矩阵现在是 动态 的,它们不能使用卷积表示进行计算,因为卷积表示假设一个 固定 的卷积核。我们只能使用递归表示,这样就失去了卷积提供的并行化优势。

为了实现并行化,让我们探索如何使用递归计算输出:

回顾Transformer原理,并深入讲解平提方案Mamba-1

每个状态都是前一个状态(乘以 A)与当前输入(乘以 B)的和。这被称为 扫描操作,可以通过 for 循环轻松计算。

相比之下,并行化似乎是不可能的,因为每个状态只能在有了前一个状态之后才可以计算。然而,Mamba 通过 并行扫描 算法使这一点成为可能。

它假设我们进行操作的顺序不重要,利用了结合律的属性。因此,我们可以将序列分成若干部分进行计算,然后迭代地将它们组合起来:

回顾Transformer原理,并深入讲解平提方案Mamba-1

动态矩阵 B 和 C 以及并行扫描算法共同创造了 选择性扫描算法,以表示使用递归表示的动态和快速特性。

硬件感知算法

最近的 GPU 的一个缺点是它们的小型但高效的 SRAM 与大型但稍微不那么高效的 DRAM 之间的传输(IO)速度有限。频繁地在 SRAM 和 DRAM 之间复制信息会成为瓶颈。

回顾Transformer原理,并深入讲解平提方案Mamba-1

Mamba 类似于 Flash Attention,试图限制从 DRAM 到 SRAM 及反向的次数。它通过 kernel fusion 实现这一点,允许模型防止写入中间结果,并持续执行计算直到完成。

回顾Transformer原理,并深入讲解平提方案Mamba-1

我们可以通过可视化 Mamba 的基本架构来查看 DRAM 和 SRAM 分配的具体实例:

回顾Transformer原理,并深入讲解平提方案Mamba-1

在这里,以下内容被融合成一个内核:

  • 离散化步骤与 step size 
  • 选择性扫描算法
  • 与 C 的乘法

硬件感知算法的最后一部分是 recomputation

中间状态不会被保存,但在反向传递中计算梯度时是必要的。相反,作者在反向传递期间重新计算这些中间状态。

尽管这看起来可能效率低下,但比从相对较慢的 DRAM 中读取所有这些中间状态要便宜得多。

我们现在已经涵盖了其架构的所有组件,该架构在其文章中的图像如下所示:

回顾Transformer原理,并深入讲解平提方案Mamba-1

选择性 SSM。 取自:Gu, Albert 和 Tri Dao. “Mamba: 具有选择性状态空间的线性时间序列建模。” arXiv 预印本 arXiv:2312.00752 (2023)。

这个架构通常被称为 选择性 SSM 或 S6 模型,因为它本质上是使用选择性扫描算法计算的 S4 模型。

Mamba 模块

我们迄今为止探索的 选择性 SSM 可以作为一个模块进行实现,就像我们可以在解码器模块中表示自注意力一样。

回顾Transformer原理,并深入讲解平提方案Mamba-1

像解码器一样,我们可以堆叠多个 Mamba 模块,并将它们的输出作为下一个 Mamba 模块的输入:

回顾Transformer原理,并深入讲解平提方案Mamba-1

它以线性投影开始,以扩展输入嵌入。然后,在 选择性 SSM 之前应用卷积,以防止独立的 token 计算。

选择性 SSM 具有以下特性:

  • 通过 离散化 创建的 递归 SSM
  • 在矩阵 A 上进行 HiPPO 初始化,以捕捉 长程依赖性
  • 选择性扫描算法 以选择性地压缩信息
  • 硬件感知算法 以加快计算速度

当我们查看代码实现时,我们可以对这个架构进行更多扩展,并探索一个端到端的示例会是什么样的:

回顾Transformer原理,并深入讲解平提方案Mamba-1

注意一些变化,例如增加了归一化层和用于选择输出 token 的 softmax。

当我们将所有内容整合在一起时,我们得到了快速的推理和训练,甚至是无限上下文。使用这种架构,作者发现其性能与同等大小的 Transformer 模型相匹配,有时甚至超过!

结论

        这就结束了我们对状态空间模型和令人难以置信的 Mamba 架构使用选择性状态空间模型的探索。希望这篇文章能让你更好地理解状态空间模型,特别是 Mamba。谁知道这是否会取代 Transformers,但现在,看到如此不同的架构获得应有的关注真是令人惊叹!

相关文章:

回顾Transformer,并深入讲解替代方案Mamba原理(图解)

一种语言建模中 Transformer 的替代方案 Transformer 架构是大语言模型(LLMs)成功的关键组成部分。几乎所有今天使用的大语言模型都采用了该架构,从开源模型如 Mistral 到闭源模型如 ChatGPT。 为了进一步改进大语言模型,新的架构…...

2025开源风险治理最佳实践︱新能源汽车车企开源风险治理案例

案例来源:悬镜安全 案例背景 当前我国新能源汽车产业蓬勃发展,智能网联趋势持续深化。汽车技术与工程核心逐渐从传统硬件层面转移到软件层面,踏上软件定义汽车(SDV)的变革之路。引用开源组件成为车企、Tier1、Tier2在软件开发过程中的常规操…...

Spring中Bean的自动装配

1.自动装配的核心概念 定义: Bean的自动装配是Spring框架中用于自动满足Bean依赖的一种机制。通过自动装配,Spring容器会在应用上下文中为某个Bean寻找其依赖的Bean,从而减少手动配置的工作量。其核心目标是减少配置代码,通过类型…...

一文掌握 PostgreSQL 的各种指令(PostgreSQL指令备忘)

引言 PostgreSQL 作为一款功能强大、开源的关系型数据库管理系统(RDBMS),以其高扩展性、SQL 标准兼容性以及丰富的功能特性,成为企业级应用的首选数据库之一。无论是开发、运维还是数据分析,掌握 PostgreSQL 的核心指…...

C#入门学习记录(三)C#中的隐式和显示转换

C#类型转换:隐式与显式转换的机制与应用 在C#的强类型体系中,数据类型转换是实现数据交互和算法逻辑的基础操作。当数值类型范围存在包含关系,或对象类型存在继承层次时,系统通过预定义的转换规则实现类型兼容处理。隐式转换&…...

【Linux网络-网络层】TCP与IP的关系+IP协议基本概念+网段划分+路由+IP分片与组装

网络层 在复杂的网络环境中确定一个合适的路径 一、TCP与IP的关系 TCP(传输控制协议)和IP(互联网协议)是互联网协议栈中的两个核心协议,属于不同的层级,分别在传输层和网络层,共同实现数据的可…...

【第K小数——可持久化权值线段树】

题目 代码 #include <bits/stdc.h> using namespace std;const int N 1e5 10;int a[N], b[N]; int n, m, len; int rt[N], idx; // idx 是点分配器struct node {int l, r;int s; } tr[N * 22];int getw(int x) {return lower_bound(b 1, b len 1, x) - b; }int bui…...

需要使用新应用以打开此ms-gamingoverlay链接怎么解决

要解决Windows系统提示“需要使用新应用以打开此ms-gamingoverlay链接”的问题&#xff0c;通常与系统自带的游戏工具栏&#xff08;Game Bar&#xff09;或Xbox相关应用缺失或配置错误有关。以下是综合多个来源的详细解决方法&#xff1a; 方法1&#xff1a;关闭游戏栏功能 这…...

五子棋小游戏-简单开发版

一、需求分析 开发一个基于 Pygame 库的五子棋小游戏&#xff0c;允许两名玩家在棋盘上轮流落子&#xff0c;当有一方达成五子连珠时游戏结束&#xff0c;显示获胜信息&#xff0c;并提供退出游戏和重新开始游戏的操作选项。 1.棋盘显示 &#xff1a; 显示一个 15x15 的五子棋…...

C语言内存函数讲解

&#xff08;一&#xff09;memcpy函数 这是memcpy函数的说明。它的头文件是string.h。函数原型是 void* memcpy(void* destination, const void* source, size_t num) 第一个参数是一个指向一个字符串的指针&#xff0c;第二个也是一样的。而第三个参数是复制的字节个数。这…...

2018年全国职业院校技能大赛高职组-计算机网络应用竞赛竞赛样题C卷

目录 总体规划 模块二:设备基础信息配置 模块三:网络搭建与网络冗余备份方案部署 模块四:移动互联网搭建与网优 模块五:出口安全防护与远程接入 总体规划 CII教育公司在进行企业大学信息化建设的过程中,为了保证北京校区、广州校区与本部校区的日常OA办公通信等关键业务,…...

《解锁Flutter:跨平台开发的未来之光》:此文为AI自动生成

《解锁Flutter&#xff1a;跨平台开发的未来之光》&#xff1a;此文为AI自动生成 Flutter&#xff1a;崭新时代的跨平台框架 在当今数字化浪潮中&#xff0c;移动应用已成为人们生活中不可或缺的一部分。无论是购物、社交、娱乐还是办公&#xff0c;我们都离不开各种手机应用…...

基于大数据的酒类商品数据可视化分析系统

【大数据】基于大数据的酒类商品数据可视化分析系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统充分利用Python与Flask的强大后端处理能力&#xff0c;结合前端Layui框架&#xff0…...

【数学建模】一致矩阵的应用及其在层次分析法(AHP)中的性质

一致矩阵在层次分析法(AHP)中的应用与性质 在层次分析法(AHP)中&#xff0c;一致矩阵是判断矩阵的一种理想状态&#xff0c;它反映了决策者判断的完全合理性和一致性&#xff0c;也就是为了避免决策者认为“A比B重要&#xff0c;B比C重要&#xff0c;但是C又比A重要”的矛盾。…...

【YOLOv8】YOLOv8改进系列(7)----替换主干网络之LSKNet

主页&#xff1a;HABUO&#x1f341;主页&#xff1a;HABUO &#x1f341;YOLOv8入门改进专栏&#x1f341; &#x1f341;如果再也不能见到你&#xff0c;祝你早安&#xff0c;午安&#xff0c;晚安&#x1f341; 【YOLOv8改进系列】&#xff1a; 【YOLOv8】YOLOv8结构解读…...

【MySQL】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法

在DQL的基础查询中&#xff0c;我们已经学过了多表查询的一种&#xff1a;联合查询&#xff08;union&#xff09;。本文我们将系统的讲解多表查询。 笛卡尔积现象 首先&#xff0c;我们想要查询emp表和stu表两个表&#xff0c;按照我们之前的知识栈&#xff0c;我们直接使用…...

练习-平方拆分问题(线性筛法-筛质数)

问题描述 小蓝非常热爱数学&#xff0c;一天老师给小蓝出了一道数学题&#xff0c;想锻炼锻炼小蓝的思维能力。题目是这样的&#xff1a;给定两个数 a 和 b&#xff0c;在 a 到 b&#xff08;包括 a,b&#xff09;之间所有数的平方当中&#xff0c;试问有几个数能够表示为 xy …...

CVE-2018-2628(使用 docker 搭建)

介绍&#xff1a; 是一个影响 Oracle WebLogic Server 的严重漏洞&#xff0c;属于 远程代码执行&#xff08;RCE&#xff09; 漏洞。以下是对该漏洞的详细分析&#xff1a; ● 漏洞类型: 远程代码执行(RCE) ● 影响范围:Oracle WebLogic Server 10.3.6.0, 12.1.3.0, 12.2.1.2…...

【深度学习与大模型基础】第5章-线性相关与生成子空间

线性相关是指一组向量中&#xff0c;至少有一个向量可以表示为其他向量的线性组合。具体来说&#xff0c;对于向量组 v1,v2,…,vn&#xff0c;如果存在不全为零的标量 c1,c2,…,cn使得&#xff1a; c1v1c2v2…cnvn0 则称这些向量线性相关。否则&#xff0c;它们线性无关。 举…...

使用 PaddlePaddle 官方提供的 Docker 镜像

CUDA版本高PaddlePaddle不支持时&#xff0c;可以使用 PaddlePaddle 官方提供的 Docker 镜像 1. 安装 Docker Desktop1.1 下载 Docker Desktop1.2 安装 Docker Desktop1.3 启用 WSL 2 或 Hyper-V1.4 启动 Docker Desktop1.5 Docker不运行解决方法 2. 拉取 PaddlePaddle Docker …...

LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 论文阅读

一、TL&#xff1b;DR 为什么要这么做&#xff1f;预训练模型越来越大&#xff0c;比如GPT-3 175B训练独立变得越来越不可行方法&#xff1a;冻结预训练模型的权重&#xff0c;在Transformer架构的每一层中注入可训练的低秩分解矩阵效果&#xff1a;训练参数量减少10000x&…...

企业的应用系统

一、人力资源系统 负责管理员工信息&#xff0c;处理入职&#xff0c;离职&#xff0c;调岗。 1、一般员工的信息有电子档和纸质档两份。 电子档经常是excel文件。 2、高级的公司会建立一套Web应用系统。 3、实现的功能&#xff1a; 新员工入职登记 (登记信息一般是&#xff1a…...

SpringBoot手动注册定时任务

一、背景 项目存在这样一个场景。程序启动过程中&#xff0c;在Spring的Bean组件注册完毕后&#xff0c;会初始化一些基础数据到数据库中&#xff0c;而项目中有部分定时任务需要依赖这些基础数据才能正常运行。如果直接使用Scheduled注解标注定时任务方法&#xff0c;会导致定…...

通过 Python 爬虫提高股票选股胜率

此贴为Python爬虫技术学习贴 在股票中&#xff0c;即便有了选股规则&#xff0c;从5000多只股票中筛选出符合规则的股票也是十分困难的&#xff0c;于是想通过爬虫来实现自动化的快速选股。全文用GP代替股票 实现方案 1、指定两套规则&#xff0c;第一套弱约束&#xff0c;第…...

InternVL:论文阅读 -- 多模态大模型(视觉语言模型)

更多内容&#xff1a;XiaoJ的知识星球 文章目录 InternVL: 扩展视觉基础模型与通用视觉语言任务对齐1.概述2.InternVL整体架构1&#xff09;大型视觉编码器&#xff1a;InternViT-6B2&#xff09;语言中间件&#xff1a;QLLaMA。3&#xff09;训练策略&#xff08;1&#xff09…...

代码随想录算法训练营第三十五天(20250303) |01背包问题 二维,01背包问题 一维,416. 分割等和子集 -[补卡20250316]

01背包问题 二维 链接 遍历物品没有大小顺序要求重点是模拟&#xff0c;推导出递推公式 #include <iostream> #include <vector>int main(){int m, n;std::cin>>m>>n;std::vector<int> weight(m,0),value(m,0);for(int i{0}; i<m; i){std:…...

RGV调度算法(三)--遗传算法

1、基于时间窗 https://wenku.baidu.com/view/470e9fd8b4360b4c2e3f5727a5e9856a57122693.html?_wkts_1741880736197&bdQuery%E7%8E%AF%E7%A9%BF%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95 2.2019年MathorCup高校数学建模挑战赛B题 2019-mathorcupB题-环形穿梭机调度模型&a…...

并发编程-

一、简述 线程&#xff1a;线程是cpu可执行的最小单位&#xff0c;而进程是操作系统可分配的最小资源单位。一个进程中可以有多个线程。 线程的五个状态&#xff1a; 新建&#xff08;new Thread()&#xff09; 就绪 &#xff08;thread.start()&#xff09; 运行&#xff08…...

Mac中nvm切换node版本失败,关闭终端再次打开还是之前的node

Mac中使用 nvm 管理 node 版本&#xff0c;在使用指令&#xff1a;nvm use XXX 切换版本之后。 关闭终端&#xff0c;再次打开&#xff0c;输入 node -v 还是得到之前的 node 版本。 原因&#xff1a; 在这里这个 default 中有个 node 的版本号&#xff0c;使用 nvm use 时&a…...

C语言(25)

一.数据在内存中的存储 1.整数在内存中的存储 整数在内存中以二进制的形式储存&#xff0c;分别为原码&#xff0c;补码&#xff0c;反码 有符号的整数&#xff0c;在上述三种形式都有符号位和数值位两个部分&#xff0c;符号位为0是正数&#xff0c;1是负数&#xff0c;最高…...

HTML、CSS

什么是HTML、CSS HTML结构标签及特点 CSS引入方式 CSS颜色表示形式&#xff1a; CSS引入方式、颜色表示、颜色属性 CSS选择器 超链接...

c#:主窗体与子控件之间的数据传递:基于事件和委托的实现

1. 概述 在WPF中&#xff0c;主窗体与子控件之间的数据传递通常通过以下两种方式实现&#xff1a; 事件&#xff08;Event&#xff09;&#xff1a;主窗体触发事件&#xff0c;子控件订阅事件并接收数据。 委托&#xff08;Delegate&#xff09;&#xff1a;通过委托将子控件…...

Dynamics 365 启用用户安全角色变更的审核功能

D365自身的审核功能这里就不说了&#xff0c;是一个很古老的功能&#xff0c;用过D365的人应该都知道&#xff0c;今天要说的是用户安全角色变更的审核记录。 很多人用系统的审核功能&#xff0c;更多的是用来追踪用户的登录记录&#xff0c;或者记录的修改记录。 而实际的项目…...

MyBatis注解

MyBatis 的注解&#xff08;Annotations&#xff09;提供了一种简洁的方式来配置 SQL 映射&#xff0c;而无需使用 XML 文件。通过在 Mapper 接口的方法上使用注解&#xff0c;可以直接在 Java 代码中定义 SQL 语句和相关映射。这种方式使得代码更加集中和易于维护&#xff0c;…...

1.Windows+vscode+cline+MCP配置

文章目录 1.简介与资源2.在windows中安装vscode及Cline插件1. 安装vscode2. 安装Cline插件3. 配置大语言模型3. 配置MCP步骤(windows) 1.简介与资源 MCP官方开源仓库 MCP合集网站 参考视频 2.在windows中安装vscode及Cline插件 1. 安装vscode 2. 安装Cline插件 Cline插件…...

94.HarmonyOS NEXT动画系统实现教程:深入理解FuncUtils

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT动画系统实现教程&#xff1a;深入理解FuncUtils 文章目录 HarmonyOS NEXT动画系统实现教程&#xff1a;深入理解FuncUtils1. 动画系…...

Python----数据分析(Pandas一:pandas库介绍,pandas操作文件读取和保存)

一、Pandas库 1.1、概念 Pandas是一个开源的、用于数据处理和分析的Python库&#xff0c;特别适合处理表格类数 据。它建立在NumPy数组之上&#xff0c;提供了高效的数据结构和数据分析工具&#xff0c;使得数据操作变得更加简单、便捷和高效。 Pandas 的目标是成为 Python 数据…...

设计模式之原型模式:原理、实现与应用

引言 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它通过复制现有对象来创建新对象&#xff0c;而不是通过实例化类。原型模式特别适用于创建成本较高的对象&#xff0c;或者需要动态配置的对象。本文将深入探讨原型模式的原理、实现方…...

平方矩阵问题

Ⅰ 回字形二维数组 #include <iostream> #include <iomanip> using namespace std; int main(){int n;while(cin>>n,n){for(int i0; i<n;i){for(int j0; j<n; j){int upi, downn-i1, leftj, rightn-j1;cout<<min(min(up,down),min(left,right)…...

C语言之链表

文章目录 前言 一、链表基本概念 1、声明节点结构 2、创建节点变量 3、链表所有节点 4、遍历链表 二、add添加 三、insert插入 四、remove删除 五、查找 总结 前言 链表是一种重要的数据结构&#xff0c;用于存储和组织数据。它是由一系列节点组成的数据结构&#x…...

RabbitMQ延迟消息

文章目录 延迟消息死信交换机延迟消息延迟消息应用场景 延迟消息 生产者在发送消息的时候指定一个时间&#xff0c;消费者不会立即收到该消息&#xff0c;而是在指定时间之后才收到消息&#xff0c;这就是延迟消息。 比如说这么一个场景&#xff0c;用户下单后将商品库存进行…...

Unity中WolrdSpace下的UI展示在上层

一、问题描述 Unity 中 Canvas使用World Space布局的UI&#xff0c;想让它不被3d物体遮挡&#xff0c;始终显示在上层。 二、解决方案 使用shader解决 在 UI 的材质中禁用深度测试&#xff08;ZTest&#xff09;&#xff0c;强制 UI 始终渲染在最上层。 Shader "Custo…...

【从零开始学习计算机科学】算法分析(一)算法、渐进分析、递归分析

【从零开始学习计算机科学】算法分析(一)算法、渐进分析、递归分析 算法算法分析正确性算法完成需要的时间使用的存储空间简单性渐进分析递归分析主方法求解递归式递归树求解代入法概率分析和随机算法顺序统计量算法 什么是算法?算法(Algorithm)是指解题方案的准确而完整…...

【菜鸟飞】Conda安装部署与vscode的结合使用

介绍 Conda 是一个跨平台的开源工具&#xff0c;用于管理软件包和环境。最初由 Anaconda 公司开发&#xff0c;它的设计目标是支持数据科学和机器学习领域&#xff0c;但其功能不仅局限于此。 以下是 Conda 的核心特点&#xff1a; 包管理&#xff1a;安装、更新、卸载各种库…...

LeetCode2593 标记所有元素后数组的分数

贪心算法实战&#xff1a;数组标记与分数计算&#xff08;LeetCode 同类题解析&#xff09; 一、问题描述 给定一个正整数数组 nums&#xff0c;按以下规则计算最终分数&#xff1a; 初始分数 score 0每次选择最小且未被标记的元素&#xff08;值相同选下标最小&#xff09…...

【C++多线程】thread

C中的std::thread是C11引入的线程库的一部分&#xff0c;提供了创建和管理线程的能力。它封装了操作系统的线程接口&#xff0c;使得在C中更方便地进行多线程编程。 1. std::thread 的定义 std::thread 类位于<thread>头文件中&#xff0c;定义在std命名空间下&#xff…...

补充二分LIS

B3637 最长上升子序列 题目描述 这是一个简单的动规板子题。 给出一个由 n ( n ≤ 5000 ) n(n\le 5000) n(n≤5000) 个不超过 1 0 6 10^6 106 的正整数组成的序列。请输出这个序列的最长上升子序列的长度。 最长上升子序列是指&#xff0c;从原序列中按顺序取出一些数字排…...

airtest用法

安装python3.7.9 64 python3 -m pip install -U airtest 或者&#xff1a; git clone https://github.com/AirtestProject/Airtest.git pip install -e airtest 下载adb 可以开始无界面的airtest 下载AirtestIDE 安装与启动 - Airtest Project Docs Airtest Project...

30天学习Java第四天——设计模式

设计模式概述 设计模式是一套被广泛接受的、经过试验的、可反复使用的基于面向对象的软件设计经验总结&#xff0c;它是开发人员在软件设计时&#xff0c;对常见问题的解决方案的总结和抽象。 一句话就是&#xff0c;设计模式是针对软件开发中常见问题和模式的通用解决方案。 …...

MongoDB 和 Elasticsearch的区别、优缺点对比,以及选型建议

MongoDB 和 Elasticsearch 在存储和搜索方面各有特点&#xff0c;适用于不同的场景。以下是它们的区别、优缺点对比&#xff0c;以及选型建议。 1. 概述 MongoDB&#xff1a;分布式 NoSQL 文档数据库&#xff0c;基于 BSON&#xff08;类似 JSON&#xff09;的文档存储&#x…...