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

深度学习基础模型之Mamba

Mamba模型简介

问题:许多亚二次时间架构(运行时间复杂度低于O(n^2),但高于O(n)的情况)(例如线性注意力、门控卷积和循环模型以及结构化状态空间模型(SSM))已被开发出来,以解决 Transformer 在长序列上的计算效率低下问题,但此类模型的一个关键弱点是它们无法执行基于内容的推理

1. 模型架构

模型简单理解(特殊的门控RNN网络):线性层+门控+选择性SSM的组合

在这里插入图片描述

2. 模型特点

2.1 选择性机制

在这里插入图片描述

Δ \Delta Δ 、A、B、C应该是SSM中的可学习参数

  • 根据输入参数化 SSM 参数来设计一种简单的选择机制,这使得模型能够过滤掉不相关的信息并无限期地记住相关信息。
    这里作者认为(研究动机):‘序列建模的一个基本问题是将上下文压缩成更小的状态。事实上,我们可以从这个角度来看待流行序列模型的权衡。例如,注意力既有效又低效,因为它明确地根本不压缩上下文。自回归推理需要显式存储整个上下文(即KV缓存),这直接导致Transformers的线性时间推理和二次时间训练缓慢。’
    在这里插入图片描述
  • 序列模型的效率与有效性权衡的特征在于它们压缩状态的程度:高效模型必须具有较小的状态,而有效模型必须具有包含上下文中所有必要信息的状态。反过来,我们提出构建序列模型的基本原则是选择性:或关注或过滤掉序列状态输入的上下文感知能力。

2.2 硬件算法

算法通过扫描而不是卷积来循环计算模型,但不会具体化扩展状态,计算速度比所有先前的 SSM 模型提升三倍。

代码调用

import torch
from mamba_ssm import Mambabatch, length, dim = 2, 64, 16
x = torch.randn(batch, length, dim).to("cuda")
model = Mamba(# This module uses roughly 3 * expand * d_model^2 parametersd_model=dim, # Model dimension d_modeld_state=16,  # SSM state expansion factord_conv=4,    # Local convolution widthexpand=2,    # Block expansion factor
).to("cuda")
y = model(x)
print(x.shape)
print(y.shape)
assert y.shape == x.shape

总结

这项基础性模型研究旨在解决transformer模型的长序列数据计算效率低的问题,其解决方法的动机:利用选择性机制实现有效特征的提取。个人理解为通过有效特征信息的选择实现知识提取(信息压缩),这让我联想到,最初的VGG语义分割网络结构设计其实类似于模拟知识特征的压缩与抽取,但后来发现这种方式会损失边缘信息,因此提出了U-net架构,再进一步卷积的方式无法有效估计全局上下文信息的联系,进而提出注意力机制来解决这一问题。
从技术与文章写作的角度来看,问题的发展似乎从知识压缩->细节特征提取->全局信息整合,到Mamba貌似是在全局信息整合基础上在进行一次有效信息的抽取,进而使模型从数据中提取根据代表性的特征。整体突出一点:深度学习也是一个特征工程,利用模型来替换原有的手工设计的特征

  • 详细代码链接
  • 相关模型应用案例:U-Mamba
    在这里插入图片描述

相关文章:

  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • 【微服务篇】深入理解微服务注册中心与配置中心
  • 使用Spring的缓存抽象来集成不同的缓存提供者,如Ehcache、Redis等
  • 大数据面试专题 -- kafka
  • 算法提高篇基础算法第一章 - 贪心算法
  • 乡村数字化转型:科技赋能打造智慧农村新生态
  • JAVA面试大全之数据库篇
  • 无论PC还是Mac,都能畅快地使用移动硬盘 Mac使用NTFS移动硬盘不能读写
  • Mistral 7B v0.2 基础模型开源,大模型微调实践来了
  • Linux网络配置(超详细)
  • 本地项目上传到GitHub
  • leetcode283-Move Zeroes
  • vue实现相机拍摄,可录视频、拍照片、前置后置切换(简单小demo)
  • Redis的Hash数据结构中100万对field和value,field是自增时如何优化?优化Hash结构。
  • Git 核心知识
  • JS 中的深拷贝与浅拷贝
  • “大数据应用场景”之隔壁老王(连载四)
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【前端学习】-粗谈选择器
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Docker: 容器互访的三种方式
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Python_网络编程
  • spring boot下thymeleaf全局静态变量配置
  • spring-boot List转Page
  • 编写高质量JavaScript代码之并发
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从0到1:PostCSS 插件开发最佳实践
  • 搭建gitbook 和 访问权限认证
  • 服务器之间,相同帐号,实现免密钥登录
  • 浮现式设计
  • 前端_面试
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 第二十章:异步和文件I/O.(二十三)
  • 国内开源镜像站点
  • ​Java并发新构件之Exchanger
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • #### go map 底层结构 ####
  • (3)(3.5) 遥测无线电区域条例
  • (4)(4.6) Triducer
  • (安卓)跳转应用市场APP详情页的方式
  • (补)B+树一些思想
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (九)c52学习之旅-定时器
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (推荐)叮当——中文语音对话机器人
  • (一) springboot详细介绍
  • (一)Dubbo快速入门、介绍、使用
  • (转)Android学习笔记 --- android任务栈和启动模式
  • ***监测系统的构建(chkrootkit )
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net core 3.0 linux,.NET Core 3.0 的新增功能