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

Raki的读paper小记:RWKV: Reinventing RNNs for the Transformer Era

Abstract&Introduction&Related Work

  • 研究任务
    基础模型架构
  • 已有方法和相关工作
    • RNN,CNN,Transformer
    • 稀疏注意力(Beltagy等人,2020年;Kitaev等人,2020年;Guo等人,2022年)、近似全注意力矩阵(Wang等人,2020年;Ma等人,2021年;Choromanski等人,2020年)、将分块注意力与门控结合(Ma等人,2023年)FlashAttention(Dao等人,2022a年)MLP-Mixer,Attention Free Transformer(AFT)(Zhai等人,2021年)用计算效率更高的替代方法替换了点积自注意力,可以看作是一个多头注意力,其中每个特征维度对应一个头
  • 面临挑战
    • 训练以及推理开销太高
  • 创新思路
    • 提出了一种新的注意力机制,改变了线性注意力的结果
    • 受到AFT的启发,RWKV采取了类似的方法,但通过修改交互权重来简化它,使其可以转换成RNN。同时,也对RNN风格的递归组件进行了修改,以增加上下文长度,例如Recurrent Memory Transformer和Linear Recurrent Units,还提出了像S4(Gu等人,2022年)及其变体这样的状态空间模型(SSM)
  • 实验结论
    • RWKV利用线性注意机制、时间混合和token偏移等技术,捕捉和传播顺序信息,具有稳定梯度和较深层次的优势,具有高效处理顺序数据的能力。
    • RWKV模型能够在时间顺序模式下进行递归推理,与自注意力相比,在处理长序列时具有恒定的速度和内存占用。设计结合了注意力机制和RNN更新方式,通过时间相关的softmax运算和层归一化等技术确保梯度稳定性和学习能力。
    • 模型采用自定义CUDA内核、FFN与R门、小初始化嵌入和自定义初始化等附加优化,提高了计算效率和训练稳定性。

经典注意力机制:
Attn ⁡ ( Q , K , V ) t = ∑ i = 1 T e q t ⊤ k i v i ∑ i = 1 T e q t ⊤ k i . \operatorname{Attn}(Q,K,V)_t=\large\frac{\sum_{i=1}^Te^{q_t^\top k_i}v_i}{\sum_{i=1}^Te^{q_t^\top k_i}}. Attn(Q,K,V)t=i=1Teqtkii=1Teqtkivi.

AFT把注意力机制改成:
Attn ⁡ + ( W , K , V ) t = ∑ i = 1 t e w t , i + k i v i ∑ i = 1 t e w t , i + k i , \operatorname{Attn}^+(W,K,V)_t=\large\frac{\sum_{i=1}^te^{w_{t,i}+k_i}v_i}{\sum_{i=1}^te^{w_{t,i}+k_i}}, Attn+(W,K,V)t=i=1tewt,i+kii=1tewt,i+kivi,

{ w t , i } ∈ R T × T \{w_{t,i}\}\in R^{T\times T} {wt,i}RT×T是学习到的位置偏移,矩阵中每个元素是一个标量

RWKV

受AFT的启发,我们让RWKV中的每个 w t , i w_t, i wt,i成为一个channel-wise time decay vector,乘以从当前时间向后追溯的相对位置: w t , i = − ( t − i ) w , w_{t,i}=-(t-i)w, wt,i=(ti)w, 维度为d,d是通道数
在这里插入图片描述

RWKV与其他模型的结构对比:

在这里插入图片描述
RWKV的模型结构
在这里插入图片描述
RWKV架构由一系列堆叠的残差块组成,每个残差块由一个时间混合和一个通道混合子块组成,具有递归结构
递归在RWKV中有两种表述方式:

  1. 作为当前输入和上一个时间步骤的输入之间的线性插值(我们称之为时间偏移混合或token偏移技术,如图3中的对角线所示)这可以针对输入embedding的每个线性投影(例如时间混合中的R、K、V,以及通道混合中的R、K)进行独立调整,并且作为时间依赖的WKV的更新,其公式化在方程式14中。 WKV计算与AFT(Zhai等人,2021年)类似,但现在W是一个通道-wise向量,乘以相对位置,而不是AFT中的成对矩阵。还引入了一个向量U,用于单独关注当前token,以弥补W可能出现的退化问题。
    在这里插入图片描述

在其中,WKV计算wkvt扮演了Transformer中Attn(Q, K, V)的角色,而不会产生二次成本,因为交互是在标量之间进行的。直观地说,随着时间t的增加,向量 o t o_t ot 依赖于一个较长的历史,由逐渐增加的项的总和来表示。对于目标位置t,RWKV在位置间隔 [ 1 , t ] [1,t] [1t]内执行加权求和,然后与接受度 σ ( r ) σ(r) σ(r) 相乘。因此,交互在给定时间步内是乘性的,而在不同时间步内是加性的
在这里插入图片描述

在这里插入图片描述
time-mixing的公式与模型示意图:
在这里插入图片描述
各个模型的复杂度对比:
在这里插入图片描述

Experiments

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Conclusions

RWKV是一种利用基于时间混合组件潜力的新型RNN模型。RWKV引入了几个关键策略,使其能够捕捉局部性和长程依赖,并解决当前架构的局限性:

  1. 通过标量公式将二次的QK注意力替换为线性成本
  2. 重新构造递归和顺序归纳偏置以实现有效的训练并行化和高效的推理
  3. 使用自定义初始化增强训练动态

我们在各种NLP任务上对所提出的架构进行了基准测试,显示出与SoTA相当的性能,同时减少了成本。进一步的实验涉及表达能力、可解释性和扩展性,展示了模型的能力,并揭示了RWKV与其他LLM之间的行为相似之处。

RWKV为在顺序数据中建模复杂关系提供了一个可扩展和高效的新途径。虽然已经提出了许多替代Transformer的方法,并声称具有类似的特点,但RWKV是首个用数百亿参数预训练模型来支持这些主张的研究

Limitations

尽管提出的RWKV模型在训练和推理期间展现出了有希望的效率,但也应该意识到并解决一些限制,以便在未来的研究中加以应对。首先,RWKV的线性注意力确实带来了显著的效率提升,但它也可能限制了模型在需要回忆极其详细信息的非常长上下文任务中的性能。这是因为相比标准Transformer的二次注意力维持的完整信息,RWKV通过单个向量表示在许多时间步上传递信息。换句话说,模型的循环结构本质上限制了它“回顾”之前的标记的能力,与传统的自注意机制相对立。虽然学习的时间衰减有助于防止信息丢失,但与完整的自注意力相比,它在机制上存在一定的限制。

这项工作的另一个限制是与标准Transformer模型相比,prompt engineering的重要性增加了。RWKV中使用的线性注意力机制限制了从prompt中传递到模型继续部分的信息。因此,精心设计的提示可能对模型在任务中表现良好至关重要

Remark

是个好工作,但是跟RetNet一样,个人对其超长距离建模能力保持怀疑,希望后续工作能增加到万级别tokens来证明一下模型的真正实力?

相关文章:

Raki的读paper小记:RWKV: Reinventing RNNs for the Transformer Era

Abstract&Introduction&Related Work 研究任务 基础模型架构已有方法和相关工作 RNN,CNN,Transformer稀疏注意力(Beltagy等人,2020年;Kitaev等人,2020年;Guo等人,2022年&am…...

PaddleOCR #PP-OCR常见异常扫雷

异常一:ModuleNotFoundError: No module named ‘tools.infer’ 实验案例: PaddleOCR #使用PaddleOCR进行光学字符识别(PP-OCR文本检测识别) 参考代码: 图片文本检测实验时,运行代码出现异常:M…...

Qt加载字体文件

本文记录如何使用 Qt 加载外部字体文件,并遍历字体名称和样式名称。 bool LoadFont(const QString& fontPath) {const int fontId QFontDatabase::addApplicationFont(fontPath);if (fontId -1) {return false;}// 遍历字体名和样式名 #if QT_VERSION > QT…...

3ds MAX绘制简单动画

建立一个长方体和茶壶: 在界面右下角点击时间配置: 这是动画制作的必要步骤 选择【自动】,接下来,我们只要在对应的帧改变窗口中图形的位置,就能自动记录该时刻的模样 这就意味着,我们通过电脑记录某几个…...

页面访问控制远程仓库

页面访问权限控制 什么是jwt身份认证 在前后端分离模式的开发中,服务器如何知道来访者的身份呢? 在登录后,服务器会响应给用户一个 令牌 (token)令牌中会包括该用户的id等唯一标识浏览器收到令牌后,自己…...

小程序 user agent stylesheet 覆盖了page下wxss背景色

如下图: login页面的page下的背景色,被:user agent stylesheet覆盖。 分析与解决: 1、user agent stylesheet是浏览器默认样式表,是浏览器默认样式。 2、不同浏览器的默认样式不同个,甚至同种浏览器不同版…...

Vue.js高阶学习和常用知识(二)

目录 1. Vue 实例2. 组件3. 指令4. 计算属性5. 监听器6. 生命周期钩子 Vue.js 是一个流行的 Web 前端框架,它由 Evan You 于 2014 年创建。Vue.js 的设计目标是简单、灵活和易于使用,同时具有高性能和可扩展性。 Vue.js 基于组件化的思想,将页…...

html实现蜂窝菜单

效果图 CSS样式 keyframes _fade-in_mkmxd_1 {0% {filter: blur(20px);opacity: 0}to {filter: none;opacity: 1} } keyframes _drop-in_mkmxd_1 {0% {transform: var(--transform) translateY(-100px) translateZ(400px)}to {transform: var(--transform)} } ._examples_mkmx…...

云原生训练营课程大纲

第一部分:Go 语****言基础 模块一:Go 语言特性 教学目标: 理解 Go 语言基本语法 理解 Go 语言常用数据类型 理解 Go 语言常用小技巧 深入理解 Go 语言的多线程编程 针对的用户痛点: 云原生从业者因为未熟练掌握 Go 语言&#…...

【Ajax】笔记-同源策略

同源策略(Same-Origin Policy),是浏览器的一种安全策略 同源(即url相同):协议、域名、端口号 必须完全相同。(请求是来自同一个服务) 跨域:违背了同源策略,即跨域。 ajax请求是遵循…...

Java使用FFmpeg实现mp4转m3u8

Java使用FFmpeg实现mp4转m3u8 前言FFmpegM3U8 一、需求及思路分析二、安装FFmpeg1.windows下安装FFmpeg2.linux下安装FFmpegUbuntuCentOS 三、代码实现1.引入依赖2.修改配置文件3.工具类4.Controlle调用5.Url转换MultipartFile的工具类 四、播放测试1.html2.nginx配置3.效果展示…...

【JavaEE初阶】Servlet (三)MessageWall

在我们之前博客中写到的留言墙页面,有很严重的问题:(留言墙博客) 如果刷新页面/关闭页面重开,之前输入的消息就不见了.如果一个机器上输入了数据,第二个机器上是看不到的. 针对以上问题,我们的解决思如如下: 让服务器来存储用户提交的数据,由服务器保存. 当有新的浏览器打开页…...

D. Make It Round

在Berlandia发生了通货膨胀,所以商店需要改变商品的价格。 商品n的当前价格已经给出。允许将该商品的价格提高k倍,1≤k≤m,k为整数。输出商品的最圆的可能的新价格。也就是在最后有最大数量的零的那个。 例如,数字481000比数字1…...

Python网站页面开发HTML总结

Python网站页面开发HTML总结 一、HTML基础语法 1.HTML是什么? ●HTML是HyperText Mark-up Language的首字母简写,即超文本标记语言。 ●HTML不是一种编程语言,而是一种标记语言。 ●超文本指的是超链接,标记指的是标签&#xf…...

[个人笔记] vCenter设置时区和NTP同步

VMware虚拟化 - 运维篇 第三章 vCenter设置时区和NTP同步 VMware虚拟化 - 运维篇系列文章回顾vCenter设置时区和NTP同步(附加)ESXi设置alias参考链接 系列文章回顾 第一章 vCenter给虚机添加RDM磁盘 第二章 vCenter回收活跃虚拟机的剩余可用空间 vCente…...

(原创)Flutter与Native通信的方式:EventChannel和BasicMessageChannel

前言 上一篇博客主要介绍了MethodChannel的使用方式 Flutter与Native通信的方式:MethodChannel 这篇博客接着讲另外两种通信方式 EventChannel和BasicMessageChannel EventChannel用于从native向flutter发送通知事件,例如flutter通过其监听Android的重…...

【解决】el-tree报Cannot read property ‘getCheckedKeys‘ of undefined

如果你报错 Cannot read property getCheckedKeys of undefined 或者 Cannot read property getCheckedNodes of undefined 只要在你的在<el-tree>上加个这个&#xff0c;就可以了 ref"tree"...

车载软件架构 —— 信息安全与基础软件

车载软件架构 —— 信息安全与基础软件 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕…...

C\C++内存管理

目录 1.C/C内存分布2.C语言中动态内存管理方式3.C中动态内存管理3.1new/delete内置类型3.2new和delete操作自定义类型 4.operator new与operator delete函数4.2重载operator new与operator delete&#xff08;了解&#xff09; 5.new和delete的实现原理5.1内置类型5.2 自定义类…...

会议室预约系统-检验是否被预约核心SQL

会议室预约时&#xff0c;判断能否被预约&#xff0c;即查询是否已经有预约记录&#xff0c;存在不能被预约。 s,e&#xff1b;表示已经预约的开始结束时间&#xff1b; ns,ne&#xff0c;表示表单提交的预约时间&#xff1b; 只需要(ns,ne)与(s,e)区间没有交集&#xff0c;可…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...