Mamba:6 线性RNN

若在阅读过程中有些知识点存在盲区,可以回到如何优雅的谈论大模型重新阅读。另外斯坦福2024人工智能报告解读为通识性读物。若对于如果构建生成级别的AI架构则可以关注AI架构设计。技术宅麻烦死磕LLM背后的基础模型。当然最重要的是订阅跟随“鲁班模锤”

Mamba自从出道就一直被拿来和Transformer对比,文章巨多,带着标题的爆炸性字样“颠覆Transfomer”,“全面包围”等等。文章深浅不一,小编认为其背后的设计思路以及演化过程更加重要。为此本专题将从山上有座庙开始,沿着RNN、SSM、S4、HIPPO一路走来。期间抛弃冗杂的文辞,以更接地气的模式协助读者打开新的逻辑思维。

线性RNN

2023年的<Resurrecting Recurrent Neural Networks for Long Sequences>将RNN拉回了赛道。文中提出的LRU通过简单的线性函数替换神经网络,然后在两个自注意力层之间用神经网络连接起来以弥补非线性处理能力的不足。会不会有点拗口,先来看看下面的结构图:

左边是线性RNN引入新单元的架构Deep Linear Recurrent Unit(LRU),这个模型通过堆叠LRU块而构成可扩展,每两层之间是非线性投影,模型还使用了跳跃连接(类似残差网络)和归一化方法。在LRU单元内部,不同时刻的状态变化成为了线性变换,(会不会很眼熟。)

循环操作被调整为纯线性,就可以解决之前RNN的两个痛点。它在 O(log(n)) 时间内并行计算应用于n个向量的线性递推。然后通过特殊的参数设计用来解决训练中的梯度问题(左上部分)。

线性替代

线性循环神经网络是什么?其实用线性函数替换神经网络即是,大白话就是将上述的激活函数去掉。

论文作者做了实验得出结论其实线性化对于块状结构其实已经足够。

值得一提的是线性RNN配合MLP(非线性映射)在sequence to sequence map中表现尚可。下图中的隐藏状态能够还原出足够的信息。

不仅仅如此,线性化的好处在于并行化和矩阵对角化,甚至之前的魔幻矩阵A也可以不通过HiPPO模式进行预设,而是通过训练学习得到。

将并行化和矩阵对角化结合在训练速度方面的确超过了s4和s5。

梯度消失与爆炸

先来看个场景,简化模型且假设第一个输入之后的每个输入都是0。那么按照循环网络,在每一步,前一个输出都会乘以权重向量得到后一个,n步之后得到了w^{n}与x的乘积。

 这个时候假如按照梯度稍微的调整权重矩阵,那么再次训练的时候得到了如下的式子。

两者的差值是一个恒定的缩放因子w^{n-1}乘以x1。这里存在的问题是随着n变大,这项要么变得非常小,要么变得非常大,具体取决于w中的值是小于还是大于1。(想象一下1.2^{10000}0.8^{10000}的数值大小)

无论哪种情况,这都是一个问题:若梯度非常大,则权重变化太大,已经学习的现有功能就会被破坏。若梯度非常小,则权重变化不够,根本学不到任何东西。这被称为梯度消失和爆炸问题。

值得一提的是,这对于常规神经网络来说可能不是问题,因为在每一层中都会使用不同的权重。有些层的权重可以小于1,有些层的权重可以大于 1,只要梯度保持大致相同的大小,神经网络就能够学习。而且目前也有很多的权重配置方法可以确保训练过程中的梯度稳定。

但对于循环结构,在每个步骤中使用相同的权重,只有一种稳定的配置,就是都为1。任何偏离1的情况都会导致梯度呈指数增长或衰减,当权重为复数的时候使用其绝对值。那么我们如何解决梯度消失和爆炸问题呢?

只要循环权重为1并且输入为0,RNN梯度就是稳定的。线性RNN论文中,作者建议在这种稳定状态下初始化。具体来说,以复极坐标形式ae^{ib}参数化权重,其中a是幅度,b是角度。然后通过此 e^{-e^{a}}函数调整,将a的幅度限制为小于1,该函数始终输出0到1之间的数字,而不是常规的以0 为中心的正态分布中随机采样。

e^{-e^{a}} 均匀分布在0.999和1之间。b均匀分布在0和π/10弧度之间。这确保了在初始化时,权重都非常接近1。

当然输入的信号要乘以另一个可学习参数Δ,初始化为\sqrt{1-e^{-e^{a}}},因为e^{-e^{a}}接近于1,所以这个参数是非常小的数字。这确保了初始化时输入都接近0。

虽然模型在训练的过程中很难保证梯度的稳定性,但是按照这种方法进行初始化则在实践中已经证明,它能够学会数万步的上下文。

后话

计算速度飞快的线性RNN,可以通过训练应付极长的上下文。在线性RNN的原始论文中,它在远程竞技场基准评估了该模型。

例如在PathX任务中,模型必须根据图像是否包含两个圆之间的完整虚线路径对图像进行分类。 只不过图像被展平为16000 像素的长序列。 线性RNN在长距离领域实现了最先进的性能,在所有任务中平均比Transformer高出约33%。

受控制理论启发的状态空间模型的初始化与线性RNN初始化大致相同。不管如何,当听到状态空间模型时,都会想到线性RNN。虽然线性RNN在长距离竞技场基准测试中确实表现出色,但这并不意味着它们是良好的语言模型。对于自然语言的建模,线性RNN的性能比Transformer差得多,尤其是和各种最先进的语言模型对比。 

正如Mamba论文中所指出的,其原因是线性RNN无法选择性地忘记输出向量中的信息。如果权重接近 0,则每次输入后输出向量将设置为0,实际上模型将始终立即忘记当前输入之前的任何内容。如果权重接近1,则输出向量在与权重相乘时不会改变,因此输出向量将累积来自观察到的所有输入的信息。 然而对于自然语言模型而言,需要它具备能够根据看到的输入来决定何时存储信息以及何时忘记信息的能力。不过整体而言,线性RNN将RNN拉回了生死线。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单实现---基于STL的演讲比赛流程管理系统(C++实现)

前言 事先声明&#xff1a;本文章中编写的代码仅用于学习算法思想和编写基础形式使用&#xff0c;并未进行太多的代码优化&#xff0c;因此&#xff0c;若需要对代码进行优化以及异常处理的小伙伴们&#xff0c;可自行添加相关操作&#xff0c;谢谢&#xff01; 一、题…

​​​【收录 Hello 算法】第 6 章 哈希表

目录 第 6 章 哈希表 本章内容 第 6 章 哈希表 Abstract 在计算机世界中&#xff0c;哈希表如同一位聪慧的图书管理员。 他知道如何计算索书号&#xff0c;从而可以快速找到目标图书。 本章内容 6.1 哈希表6.2 哈希冲突6.3 哈希算法6.4 小结

日志:打印技巧

一、概览 Unity日志打印技巧 常规日志打印彩色日志日志存储与上传日志开关日志双击溯源 二、常规日志打印 1、打印Hello World 调用堆栈可以很好的帮助我们定位问题&#xff0c;特别是报错的Error日志 Debug.Log("Hello World");Debug.Log("This is a log m…

【java】代理

什么是代理 假设有一个核心方法叫转账&#xff0c;为了安全性考虑&#xff0c;不能让用户直接访问接口。此时涉及到了代理&#xff0c;这使得用户只能访问代理类&#xff0c;增加了访问限制。 代理的定义&#xff1a;给目标对象提供一个代理对象&#xff0c;并且由代理对象控…

果蔬经营平台|基于SSM+vue的果蔬经营平台系统的设计与实现(源码+数据库+文档)

果蔬经营平台系统 目录 基于SSM&#xff0b;vue的果蔬经营平台系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介…

Python面试50题!面试巩固必看!

题目001: 在Python中如何实现单例模式。 点评&#xff1a;单例模式是指让一个类只能创建出唯一的实例&#xff0c;这个题目在面试中出现的频率极高&#xff0c;因为它考察的不仅仅是单例模式&#xff0c;更是对Python语言到底掌握到何种程度&#xff0c;建议大家用装饰器和元类…

【卫星影像三维重建-全流程代码实现】点云Mesh重构

点云—>Mesh模型 1.介绍1.1 背景1.2 效果示意 2 算法实现2.1 依赖库2.2 实验数据2.3 代码实现2.4 实验效果 3.总结 1.介绍 1.1 背景 &#xff08;1&#xff09;本文主要内容是将三维点云&#xff08;离散的三维点&#xff09;进行表面重建生成Mesh网格&#xff0c;之前有篇…

IP跳变是什么,有什么作用?

IP跳变&#xff0c;简单来说&#xff0c;就是用户在使用网络时&#xff0c;不固定使用一个IP地址&#xff0c;而是定期或根据需求切换到另一个IP地址。这种技术为用户在网络环境中提供了一定的灵活性和安全性。 首先&#xff0c;我们来看看IP跳变的具体实现方式。当用户需要切…

UML快速入门篇

目录 1. UML概述 2. 类的表示 2.1. 类的表示 2.2. 抽象类的表示 2.3. 接口的表示 3. 类的属性&#xff0c;方法&#xff0c;访问权限的表示 3.1. 类的属性 3.2. 类的方法 3.3. 类的权限 4. 类的关联 4.1. 单向关联 4.2. 双向关联 4.3. 自关联 4.4. 类的聚合 4.5.…

Lists.partition用法详解

文章目录 一、引入依赖二、用法三、输出 一、引入依赖 依赖于谷歌的guava 包 <!-- guava --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>28.1-jre</version></dependency&…

仿照el-upload 封装自己的上传控件(el-upload 移动端无法吊起相机)

input选择图片的那个选择在h5的时候在去年下半年突然无法无法出现唤醒相机的选项 不知道出现的原因 发现el-upload作为h5的时候无法吊起相机 又因为需要对服务端地址图片进行回显&#xff08;处于编辑功能的情况下 非新增 新增el-upload 可以实现回显&#xff09; 两个功…

如文所示:

影响 ConnectWise 的 ScreenConnect 远程桌面访问产品的严重漏洞已被广泛利用来传播勒索软件和其他类型的恶意软件。 ConnectWise 于 2 月 19 日通知客户&#xff0c;它已发布针对关键身份验证绕过缺陷和高严重性路径遍历问题的补丁。该安全漏洞当时没有 CVE 标识符。第二天&am…

绘唐3启动器怎么启动一键追爆款3正式版

绘唐3启动器怎么启动一键追爆款3正式版 工具入口 一.文案助手&#xff1a; 【注意&#xff01;&#xff01;】如果图片无显示&#xff0c;一般情况下被杀毒拦截&#xff0c;需关闭杀毒软件或者信任文件路径。 win10设置排除文件&#xff1a; 1.【新建工程】使用前先新建工程…

谷歌Gboard应用的语言模型创新:提升打字体验的隐私保护技术

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

blender cell fracture制作破碎效果,将一个模型破碎成多个模型

效果&#xff1a; 1.打开编辑-》偏好设置。搜索cell&#xff0c;勾选上如下图所示的&#xff0c;然后点击左下角菜单里的保存设置。 2.选中需要破碎的物体&#xff0c;按快捷键f3&#xff08;快速搜索插件&#xff09;&#xff0c;搜索cell fracture。 3.调整自己需要的参数配置…

广东省网络安全竞赛部分web,misc wp

我的队伍只做了5题&#xff0c;还是太菜了&#xff0c;本来不想发的&#xff0c;但是写都写了&#xff0c;还是水一篇博客吧 这里是我们队的wp misc1 给了一个压缩包&#xff0c;解压需要密码&#xff0c;用纯数字密码没跑出来&#xff0c;感觉可能不是要强跑&#xff0c;看…

今天开发了一款软件,我竟然只用敲了一个字母(文末揭晓)

软件课题&#xff1a;Python实现打印100内数学试题软件及开发过程 一、需求管理&#xff1a; 1.实现语言&#xff1a;Python 2.打印纸张&#xff1a;A4 3.铺满整张纸 4.打包成exe 先看效果&#xff1a; 1. 2.电脑打印预览 3.打印到A4纸效果&#xff08;晚上拍的&#x…

Java后端的接口参数两个interger 类型情况解决

get请求 &#xff0c;对应请求头 RequestParm, post请求&#xff0c; 对应请求体 &#xff0c;RequestBody 两个Integer参数情况 GetMapping("/insertStaffClass")public R<Void> insertStaffClass(RequestParam Integer staffId,RequestParam List<Integ…

Node.js全栈:从一个简单的例子开始

第一章&#xff1a;从一个简单的例子开始第二章&#xff1a;看官方文档的艺术第三章&#xff1a;浏览器显示一个网页 首先&#xff0c;在VSCode编辑器中打开一个没有任何文件的空目录&#xff0c;然后创建一个package.json文件。 为了方便大家复制&#xff0c;我把文件内容放到…

Pytorch的torch.nn.functional.cross_entropy的ignore_index细解

作用 ignore_index用于忽略ground-truth中某些不需要参与计算的类。假设有两类{0:背景&#xff0c;1&#xff1a;前景}&#xff0c;若想在计算交叉熵时忽略背景(0)类&#xff0c;则可令ignore_index0&#xff08;同理忽略前景计算可设ignore_index1&#xff09;。 代码示例 i…