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=1Teqt⊤ki∑i=1Teqt⊤kivi.
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+ki∑i=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=−(t−i)w, 维度为d,d是通道数
RWKV与其他模型的结构对比:
RWKV的模型结构
RWKV架构由一系列堆叠的残差块组成,每个残差块由一个时间混合和一个通道混合子块组成,具有递归结构
递归在RWKV中有两种表述方式:
- 作为当前输入和上一个时间步骤的输入之间的线性插值(我们称之为时间偏移混合或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] [1,t]内执行加权求和,然后与接受度 σ ( r ) σ(r) σ(r) 相乘。因此,交互在给定时间步内是乘性的,而在不同时间步内是加性的
time-mixing的公式与模型示意图:
各个模型的复杂度对比:
Experiments
Conclusions
RWKV是一种利用基于时间混合组件潜力的新型RNN模型。RWKV引入了几个关键策略,使其能够捕捉局部性和长程依赖,并解决当前架构的局限性:
- 通过标量公式将二次的QK注意力替换为线性成本
- 重新构造递归和顺序归纳偏置以实现有效的训练并行化和高效的推理
- 使用自定义初始化增强训练动态
我们在各种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不是一种编程语言,而是一种标记语言。 ●超文本指的是超链接,标记指的是标签…...

[个人笔记] 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>上加个这个,就可以了 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(了解) 5.new和delete的实现原理5.1内置类型5.2 自定义类…...
会议室预约系统-检验是否被预约核心SQL
会议室预约时,判断能否被预约,即查询是否已经有预约记录,存在不能被预约。 s,e;表示已经预约的开始结束时间; ns,ne,表示表单提交的预约时间; 只需要(ns,ne)与(s,e)区间没有交集,可…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...

C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...