场景文本检测识别学习 day09(SSM、S4、Mamba、S6)

SSM(State Space Model)

在这里插入图片描述

  • SSM是一个针对连续函数的模型,即输入是连续函数,输出也是连续函数。
  • 上图为状态方程和输出方程,其中h(t)是当前时刻的状态,x(t)是当前时刻的输入,h’(t)是下一个时刻的状态,y(t)是当前时刻的输出。于是上图可以写成下图的形式:
    在这里插入图片描述
  • 下面是详细的流程图,由于D * x(t)为跳跃连接(res连接),所以在论文中一般都省略,灰色部分为通常意义上的SSM模型流程部分
    在这里插入图片描述
  • 综上,SSM的方程可以写成以下的形式:
    在这里插入图片描述
  • 由此可以得出SSM跟RNN很类似,一个拥有状态,一个拥有隐藏状态,如下:在这里插入图片描述

S4模型(Structured State Space Model for Sequence Modeling)

  • S4模型对SSM的改进有以下三点:
    1. 采用零阶保持,来进行连续化:由于SSM模型是针对连续函数的,但是在文本、图像等领域,数据都是离散的,所以我们需要将离散的点连续化,才能输入进SSM模型,最后再从连续的输出中采样离散的点来得到真正的输出
    2. 使用卷积结构表示,从而能够并行训练,加快训练速度
    3. 使用HIPPO矩阵,解决长距离依赖
  • 先看零阶保持,如下:
    在这里插入图片描述
    在这里插入图片描述
  • 对于离散输入,在每个时间步 Δ \Delta Δ中,都保持到一个位置上,从而可以使输入连续
  • 对于连续输出,每隔一个时间步 Δ \Delta Δ,都进行一个采样,从而可以得到离散输出
  • 由于只有A、B矩阵是反应之前状态、输入是如何影响当前状态的(在连续模型中),而C矩阵是反应状态和输出的映射关系(在连续模型和离散模型中是相同的),所以离散化的重点就是离散化那些描述状态是如何随时间改变的连续模型的矩阵,即A、B矩阵。A、B矩阵是常数。
  • 注意:矩阵可以乘函数,但是这个函数得是向量值函数,通常是用来表示系统状态。
  • 相对应的离散化A、B矩阵如下:
    在这里插入图片描述
  • 那么状态方程和输出方程就变成如下的形式,为了简化,现在的 h k h_k hk表示当前的状态, h ( k − 1 ) h_(k-1) h(k1)表示之前的状态, y k y_k yk表示当前的输出, x k x_k xk表示当前的输入
    在这里插入图片描述
  • 再看卷积结构表示,如下:
    在这里插入图片描述
    在这里插入图片描述
  • 如果我们递归的将 h t h_t ht代入,并且展开可以得到一个 h t h_t ht的通用表达式,将这个表达式代回 y t y_t yt可以得到 y t y_t yt的通用表达式,而 y t y_t yt的表达式可以看作两个矩阵相乘,其中一个矩阵为输入矩阵(移动矩阵),另一个矩阵为固定矩阵(由于A、B、C矩阵是固定的,所以 K ‾ \overline{K} K也为固定矩阵),这个形式非常类似CNN中的卷积操作(但是由于mamba是处理文本的,所以只需要一维矩阵),而卷积可以并行,所以它也可以并行执行
  • 注意:这里的输入矩阵并不是整个输入,而是对应于卷积上跟卷积核相乘的那个输入矩阵
  • 由于我们之前说到SSM跟RNN很类似,于是S4还有一种循环表示形式,使用离散化的A、B矩阵后,如下:
    在这里插入图片描述
    在这里插入图片描述
  • 综上:S4模型有两种表示形式:循环表示类似RNN、卷积表示类似CNN。
  • 那么我们可以在训练时使用CNN来进行并行计算,加快训练。在推理时使用RNN来直接生成预测结果,加快推理。
    在这里插入图片描述
  • 最后,我们看HIPPO矩阵,如下:
    在这里插入图片描述
  • 由于HIPPO矩阵也是一个二维矩阵,那么相比Transformer的注意力矩阵,并没有减少运算量,那么S4模型使用了低秩分解来表示HIPPO矩阵,从而减少运算量,如下:
    在这里插入图片描述
  • 由于A矩阵是直接与状态相乘,所以使用HIPPO矩阵来替换掉之前SSM模型中的随机初始化的矩阵 A ‾ \overline{A} A。因为HIPPO矩阵能够很好的使用最近的token,并逐渐衰减较旧的token,如下:
    在这里插入图片描述

Mamba(S6)

  • Mamba模型对于S4模型的改进有以下三点:
    1. 参数化矩阵:对输入信息进行有选择性的处理,从而得到类似Attention的效果,即不同的输入拥有不同的状态,token信息
    2. 硬件感知算法,并行化–选择扫描算法,加快训练推理速度
    3. 更简化的SSM模型架构
  • 先看对输入信息进行有选择性的处理
    在这里插入图片描述
    在这里插入图片描述
  • 如上,A、B、C矩阵只会在训练过程中更新,一旦训练完成,在推理时,只要这个输入是模型没有见过的,那么对应的A、B矩阵都是完全一样的,这样会导致输入的状态信息也相同,没有针对性,不能做到像Attention那样,对于每个输入都有对应的注意力信息。
    在这里插入图片描述
  • 但是如果我们只是单单将A、B矩阵改为根据输入的变化而变化,那么由公式可以得出,只有当得到输入时,才能确定A、B矩阵,这样就无法像之前一样预先计算卷积核来进行并行加速运算了
  • 这里Mamba模型采用了另外一种做法–参数矩阵,用来选择性的处理输入信息,如下:
  • B表示batch size,L表示序列长度,D为每个时间步 Δ \Delta Δ的数据特征维度,N表示状态的维度
    在这里插入图片描述
  • Mamba使用了参数化矩阵,来让A、B、C矩阵能根据输入来进行对应的变化。在原始的S4模型中,在训练完成后,对于每个输入只有一个 A ‾ 、 B ‾ \overline{A}、\overline{B} AB矩阵,但是在Mamba模型中,每个batch中的每个序列的每一个输入元素都有一个 A ‾ 、 B ‾ \overline{A}、\overline{B} AB矩阵,如下:
  • 注意:如果 Δ \Delta Δ越小,那么Mamba模型就会更关注之前时刻的状态,而忽略最近的状态,如果 Δ \Delta Δ越大,那么Mamba模型就会更关注最近的状态
    在这里插入图片描述
  • 接下来我们看,硬件感知算法,并行化–选择扫描算法:
    在这里插入图片描述
    在这里插入图片描述
  • 重新定义一种“加”运算,在这个运算中,是可以并行的,那么假设A矩阵是独立的,跟运算顺序是无关的,那么 y 2 y_2 y2就可以表示为,如下:
    在这里插入图片描述
  • 由上图可知,由于矩阵A是独立的,且B、C矩阵式通过x得到的,那么 X 0 X_0 X0 “加” X 1 X_1 X1 取第二项就是 H 1 H^1 H1 X 0 X_0 X0 “加” X 1 X_1 X1 的结果再 “加” X 2 X_2 X2 取第二项就是 H 2 H^2 H2,乘以C矩阵就是 y 2 y_2 y2
  • 对于计算 y 3 y_3 y3,那么我们可以写出 X 0 、 X 1 、 X 2 、 X 3 X_0、X_1、X_2、X_3 X0X1X2X3的新表示形式,然后分别计算第一层的结果,即 X 0 X_0 X0 “加” X 1 X_1 X1 X 2 X_2 X2 “加” X 3 X_3 X3 得到两个结果,再将这两个结果做"加"运算,将得到的结果取第二项,乘以C矩阵,就是 y 3 y_3 y3的结果,如下:
    在这里插入图片描述
  • 综上:使用了新定义的"加"运算可以并行操作,加快计算速度,解决了使用参数化矩阵后,无法使用卷积形式来加速运算的缺点
  • 接下来我们看硬件感知算法:
    在这里插入图片描述
  • 如上图,利用SSM本身显存占用小的优点,将重点状态更新的计算放在SRAM中,而其他的简单运算(A、B、C矩阵的获取等)都放到DRAM中。
  • 而Transformer,由于显存占用过大,所以无法整个放入SRAM,只能从DRAM中分批放入SRAM,在计算完成后分批取出,这个来回存取的过程很浪费时间。
  • 最后我们看Mamba提出的更简单的SSM结构,如下:
    在这里插入图片描述
    在这里插入图片描述
  • 在上图中,输入信息会被分成两份:
    1. 左侧会先进行线性嵌入,之后经过卷积、激活、SSM块(之前提到的并行计算就在卷积、SSM块中)
    2. 右侧也会先进行线性嵌入,之后是一个门控,用于对信息进行筛选
    3. 然后将左侧的结构乘以右侧的结果,再进行嵌入,通过一个跳跃连接,得到最后的输出

总结

  • Transformer、RNN、Mamba的对比如下:
    在这里插入图片描述
  • 对于CNN来说,训练时由于可以并行,所以训练速度也算快,但是推理的时候速度慢。但是由于Mamba没有使用卷积结构表示形式,而是定义了一种新的"加"运算,所以这里不拿CNN作为对比。
  • 而Mamba就做到了,既克服了Transformer推理慢的缺点,也克服了RNN训练慢的缺点,解释如下:
    在这里插入图片描述

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

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

相关文章

应用TRIZ创新原理解决技术矛盾的步骤是什么样的?

如何在有限的时间和资源下,高效地解决技术矛盾,推动技术的进步和创新呢?答案就隐藏在TRIZ创新原理之中。 首先,我们需要了解什么是TRIZ创新原理。TRIZ,即发明问题解决理论,是一套系统的创新方法论&#xff…

程序验证之Dafny--证明霍尔逻辑的半自动化利器

一、What is Dafny?【来自官网介绍 Dafny 】 1)介绍 Dafny 是一种支持验证的编程语言,配备了一个静态程序验证器。 通过将复杂的自动推理与熟悉的编程习语和工具相结合,使开发者能够编写可证明正确的代码(相对于 {P}S{Q} 这种…

uniapp微信小程序通过萤石云接入海康摄像机

需求:在uniapp微信小程序上查看海康威视的摄像机监控视频和和操作摄像机拍摄方向 在萤石云接入海康摄像机设备,由于不同品牌设备在不同时间段接入方式可能不一致,具体接入方式查看官方文档或咨询官方客服。 海康摄像机官方客服热线&#xf…

web学习笔记(五十五)

目录 1. 配置代码片段的步骤 2. 条件判断 2.1 v-if、v-else、v-else-if 2.2 v-show 2.3 v-show和v-if的区别 1. 配置代码片段的步骤 在Visual Studio Code中我们可以将常用的代码配置成代码片段,这样就可以在页面上快速输入大段代码了。 (1&#…

JavaScript-基本数据类型和变量

基本数据类型 JavaScript支持数字、字符串和布尔值3种基本数据类型 字符串型 字符串型是JavaScript用来表示文本的数据类型,字符串通常由单引号或双引号括起来,如果字符串存在特殊字符,可以用转义字符代替 数字型 数字型也是JavaScript中的基…

pytest教程-46-钩子函数-pytest_sessionstart

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_report_testitemFinished钩子函数的使用方法,本小节我们讲解一下pytest_sessionstart钩子函数的使用方法。 pytest_sessionstart 是 Pytest 提供的一个钩子函数&#xff0c…

U盘中毒文件变乱码?揭秘原因与高效恢复方法!

在日常使用U盘的过程中,有时我们会遭遇到一个非常棘手的问题——文件突然出现乱码。当你满怀期待地插入U盘,准备打开某个重要文件时,却发现文件名或内容变成了一堆无法识别的字符,这种心情无异于晴天霹雳。乱码文件不仅影响了我们…

数据结构------二叉树经典习题1

博主主页: 码农派大星. 关注博主带你了解更多数据结构知识 1判断相同的树 OJ链接 这道题相对简单,运用我们常规的递归写法就能轻松写出 所以我们解题思路应该这样想: 1.如果p为空,q为空,那么就是两颗空树肯定相等 2.如果一个树为空另一棵树不为空那么…

Android 应用开发-实现将公共存储空间内的文件复制到应用的私用存储空间中

一、前言 几个月前,我用Android Studio给公司销售部门的同事开发了一款手机app,让同事们用自己的手机就能进行商品的扫码盘点操作,帮他们提高了工作效率,他们用了一段时间,反映还不错。不过前几天,销售部门…

洗衣洗鞋店做小程序有什么优势?

互联网洗衣洗鞋小程序闪亮登场,想知道这款小程序有何魅力吗? 如今,众多商家纷纷推出预约上门洗鞋服务,💁‍♀️并倾力打造洗鞋小程序,旨在拓展线上销售渠道。🌟那么,这款洗鞋小程序究…

libsndfile读取wav文件基本属性

本文的目的是提供一种方法读取wav文件的基本属性&#xff1a;音频帧数&#xff0c;格式、通道数和采样率信息。 代码如下所示&#xff1a; #include <iostream> #include <QDebug> #include "sndfile.h"using namespace std;int main() {// 初始化 ALS…

Gradio

文章目录 关于 Gradio安装InterfaceChatInterface TextBlocksSentence BuilderDiff Texts MediaSepia FilterVideo IdentityIterative OutputGenerate Tone TabularFilter RecordsVideo IdentityIterative OutputGenerate Tone TabularFilter RecordsTranspose MatrixTax Calcu…

C++ 日志库 log4cpp 编译、压测及其范例代码 [全流程手工实践]

文章目录 一、 log4cpp官网二、下载三、编译1.目录结构如下2.configure 编译3.cmake 编译 四、测试五、压测源码及结果1.运行环境信息2.压测源码3.压测结果 文章内容&#xff1a;包含了对其linux上的完整使用流程&#xff0c;下载、编译、安装、测试用例尝试、以及一份自己写好…

20232906 2023-2024-2 《网络与系统攻防技术》第十次作业

20232906 2023-2024-2 《网络与系统攻防技术》第十次作业 1.实验内容 一、SEED SQL注入攻击与防御实验 我们已经创建了一个Web应用程序&#xff0c;并将其托管在http://www.seedlabsqlinjection.com/&#xff08;仅在SEED Ubuntu中可访问&#xff09;。该Web应用程序是一个简…

Qt多文档程序的一种实现

注&#xff1a;文中所列代码质量不高&#xff0c;但不影响演示我的思路 实现思路说明 实现DemoApplication 相当于MFC中CWinAppEx的派生类&#xff0c;暂时没加什么功能。 DemoApplication.h #pragma once#include <QtWidgets/QApplication>//相当于MFC中CWinAppEx的派生…

【Python报错】Python安装模块时报错Fatal error in launcher

【Python报错】Python安装模块时报错Fatal error in launcher 最近需要用到python下载一个小工具&#xff0c;自信敲下回车键本想看到黑乎乎的终端上会出现快速跳跃的命令代码&#xff0c;没想到&#xff0c;报错了...... Fatal error in launcher: Unable to create process …

外卖系统拦截器实现(Interceptor)

SpringMVC的拦截器主要是用于拦截控制器方法的执行&#xff1b; 概念&#xff1a;是一种动态拦截方法调用的机制&#xff0c;类似于过滤器。在Spring中动态拦截控制器中方法的执行。 作用&#xff1a;在指定的控制器中调用前后执行预先设定的代码&#xff0c;完成功能增强。 应…

day08|字符串题目part01

相关题目&#xff1a; ● 344.反转字符串 ● 541. 反转字符串II ● 卡码网&#xff1a;54.替换数字 ● 151.翻转字符串里的单词 ● 卡码网&#xff1a;55.右旋转字符串 344.反转字符串—双指针的应用 力扣链接 思路&#xff1a;创建两个指针分别指向头部和尾部&#xff0c;首…

【JavaEE进阶】 Bean的作用域与生命周期

文章目录 &#x1f343;Bean的作用域&#x1f6a9;作用域的使用&#x1f6a9;观察Bean的作用域&#x1f388;单例作用域&#x1f388;多例作用域&#x1f388;请求作用域&#x1f388;会话作⽤域&#x1f388;Application作⽤域 &#x1f384;Bean的⽣命周期⭕总结 &#x1f34…

Linux 第三十三章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…