RWKV解读:在Transformer的时代的新RNN

2023-10-27

转载地址:RWKV解读:在Transformer的时代的新RNN - 知乎作者:徐传飞 在Transformer时代,介绍一个非Transformer架构的新网络——RWKV,RWKV是一种创新的深度学习网络架构,它将Transformer与RNN各自的优点相结合,同时实现高度并行化训练与高效推理,时间复杂度为线性…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/656323242

作者:徐传飞

在Transformer时代,介绍一个非Transformer架构的新网络——RWKV,RWKV是一种创新的深度学习网络架构,它将Transformer与RNN各自的优点相结合,同时实现高度并行化训练与高效推理,时间复杂度为线性复杂度,在长序列推理场景下具有优于Transformer的性能潜力。

一、RWKV简介

最开始自然语言使用RNN来建模,它是一种基于循环层的特征提取网络结构,循环层可以将前一个时间步的隐藏状态传递到下一个时间步,从而实现对自然语言的建模。

RNN由于存在循环结构(如下图所示),每个时间步的计算都要依赖上一个时间步的隐藏状态,导致计算复杂度较高,而且容易出现梯度消失或梯度爆炸的问题,导致训练效率低下,因此RNN网络扩展性不好。

RNN结构

Transformer在2017年由谷歌提出,是一种基于自注意力机制的特征提取网络结构,主要用于自然语言处理领域。自注意力机制可以对输入序列中的每个位置进行注意力计算,从而获取全局上下文信息。Transformer中的编码器和解码器可以实现机器翻译、文本生成等任务。Transformer核心是self-attention机制(如下图所示)。它是整句处理自然语言,因此它的训练效率较高,可并行化处理。Transformer缺点是计算复杂度高,O(N^2*d),其中N是序列长度、d为token嵌入的维度,它的时间复杂度对长序列不友好。

Self-attention机制

二、基本原理

基于RNN和Transformer问题,提出RWKV改进线性注意力机制,解决RNN难并行化的问题,并有RNN相似的时间复杂度以及与Transformer相近的效果。接下来,我们依次介绍线性Transformer和Attention Free Transformer引出RWKV的基本原理。

1、线性Transformer

线性Transformer(Linear Transformer)解决的问题是将Transformer中self-attention的计算复杂度由O(N^2)降低为O(N) ,其中N是序列长度。这对加快Transformer整体的加速非常重要。

Transformer中self-attention的典型计算如下:

公式(1)

其中矩阵Q、K、V是由输入 x 经线性变化得到的query、key、value。如果用下标i来表示矩阵的第i行(如 Qi 表示矩阵 Q 的第i行),那么可以将公式(1)中的计算用如下形式抽象出来:

公式(2)

其中sim() 为抽象出的计算Query和Key相似度的函数。Linear Transformer采用了kernel来定义sim():

公式(3)

其中 ϕ 是一个特征映射函数,可根据情况自行设计。self-attention转化为:

公式(4)

原始Transformer的计算复杂度随序列长N呈二次方增长,这是因为attention的计算包含两层for循环,外层是对于每一个Query,我们需要计算它对应token的新表征;内层for循环是为了计算每一个Query对应的新表征,需要让该Query与每一个Key进行计算。 所以外层是 for q in Queries,内层是 for k in Keys。Queries数量和Keys数量都是N,所以复杂度是 O(N^2) 。而Linear Transformer,它只有外层for q in Queries这个循环了。因为求和项的计算与i无关,所以所有的 Qi 可以共享求和项的值。换言之,求和项的值可以只计算一次,然后存在内存中供所有 Qi 去使用。所以Linear Transformer的计算复杂度是O(N) 。引入以下两个新符号:

稍作变换,可以将Si 和Zi 写作递归形式:

公式(5)

因此,在inference阶段,当需要计算第i时刻的输出时,Linear Transformer可以复用之前的状态 Si−1 和 Zi−1 ,再额外加上一个与当前时刻相关的计算量即可。而Transformer在计算第i时刻的输出时,它在第i-1个时刻的所有计算都无法被i时刻所复用。因此,Linear Transformer更加高效。

总结一下:

  • Linear Transformer的计算复杂度为 O(N) (不考虑embedding的维度的情况下)。
  • 如上述公式所示,因为Si可由Si−1计算得到(Zi同理),所以它可实现Sequential Decoding(先算S1,由S1算S2,以此类推)。能Sequential Decoding是让这类Transformer看起来像RNN的核心原因。

2、Attention Free Transformer

Attention Free Transformer (AFT) 是Apple公司提出的一种新型的神经网络模型,它在传统的 Transformer 模型的基础上,通过使用像Residual Connection之类的技术来消除注意力机制,从而减少计算量和提升性能。AFT的Decoder形式:

公式(6)

其中σ是sigmoid函数;⊙是逐元素相乘(element-wise product); wi,j是待训练的参数。AFT采用的形式和上面的Linear Transformer不一样。 首先是attention score,Linear Transformer仍然是同Transformer一样,为每一个Value赋予一个weight。而AFT会为每个dimension赋予weight。换言之,在Linear Transformer中,同一个Value中不同dimension的weight是一致的;而AFT同一Value中不同dimension的weight不同。此外,attention score的计算也变得格外简单,用K去加一个可训练的bias。Q的用法很像一个gate。

可以很容易仿照公式(5)把AFT也写成递归形式,这样容易看出,AFT也可以像Linear Transformer,在inference阶段复用前面时刻的计算结果,表现如RNN形式,从而相比于Transformer变得更加高效。

3、RWKV的网络架构

RWKV的特点如下:

  • 改造AFT,通过Liner Transformer变换将self-attention复杂度由O(N^2)降为 O(N) 。
  • 保留AFT简单的“attention”形式和Sequential Decoding,具有RNN表现形式。

RWKV网络整体架构如下:

RWKV网络架构

首先看time-mixing block。time-mixing的目的是“global interaction”,对应于Transformer中的self-attention。

  • R 表示过去的信息,用 Sigmoid 激活,遗忘机制。
  • W 和相对位置有关,且 Channel Wise d 维。 U 对当前位置信号的补偿。
  • WKV 类似 Attention 功能,对位置 t ,表达了过去可学习的加权和。

其中使用到的R、K、V对应于AFT(或Transformer)中的Q、K、V。也就是说,K、V的含义可以强行看作一致,把R当做Q来处理就行。

只是RKV的计算方法有点变化:

公式(7)

R、K、V的计算和Transformer的区别是,作为计算RKV(QKV)的输入的x不再是当前token的embedding,而是当前token与上一个token embedding的加权和。

然后是最重要的"attention"用了如下方法计算:

公式(8)

需要拿着这个公式和AFT的公式()去仔细对比。容易发现,改动是两点:

  • 原来的依靠绝对位置的偏置wi,j没有了,改成了相对位置,并且只有一个参数w向量需要训练。
  • 对当前位置单独处理,增加了参数u。

公式(8)也可以写成递归形式,这就让RWKV兼顾了Linear Transformer的O(N)以及AFT的简洁。time-mixing block的最终输出:

公式(9)

channel-mixing block根据time-mixing block的输出重新使用公式(7)去计算了一组新的R和K。然后再计算最终输出如下:

公式(10)

RWKV架构被设计为Transformer和RNN的融合体,与传统的RNN相比,它具有稳定的梯度和Transformer更深的架构的优势,同时在推理中也会比较高效。

三、实验效果

RWKV网络与不同类型的Transformer性能的实验结果对比如下图所示。RWKV时间消耗随序列长度是线性增加,且时间消耗远小于各种类型的Transformer。

性能对比

RWKV与Transformer预训练模型(BLOOM、OPT、Pythia)效果对比测试如下图所示。在六个基准测试中(Winogrande、PIQA、ARC-C、ARC-E、LAMBADA 和 SciQ),RWKV 与开源二次复杂度 transformer 模型 Pythia、OPT 和 BLOOM 具有相当的竞争力。RWKV 甚至在四个任务(PIQA、OBQA、ARC-E 和 COPA)中胜过了 Pythia 和 GPT-Neo。

效果对比

下图显示,增加上下文长度会导致 Pile 上的测试损失降低,这表明 RWKV 能够有效利用较长的上下文信息。

四、总结与展望

Transformer网络的内存和计算复杂性随序列长度二次方缩放,而循环神经网络RNN只需线性缩放。但RNN在并行化和可扩展性方面存在限制从而难以达到Transformer的能力。RWKV-LM/ChatRWKV是基于RWKV预训练的非Transformer架构的百亿级参数语言基础模型/对话模型,具有与Transformer架构LLM相当的能力并且计算效率更高(计算快,资源占用小)。

由于过去信息保存在一个历史向量中,因此对长依赖关系的能力会比原始 Attention 差。同样的,对Prompt的鲁棒性比Transformer架构差。线性attention 用element wise计算替代原始Transformer的矩阵乘计算,计算复杂度的理论优势,针对昇腾架构并非优势,而线性attention的空间复杂度会受到 flash attention。

相比于Transformer网络,RWKV生态差距较大,如针对的加速库及算法等,RWKV能否发展为主流的神经网络还有待观察。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RWKV解读:在Transformer的时代的新RNN 的相关文章

随机推荐

  • LayUI中的内置模块之 常用元素操作 - layui.element

    前言 最近在准备找工作的事项 但是作为一个后台也是需要了解一些前端框架的 就目前的来说有大火的VUE 但是VUE还是存在一定的学习成本 所以决定先从对后台友好的LayUI开始入手先做一些小项目练练手 后面会考虑使用VUE ElementUI
  • 字符串压缩(小知识点)

    当对字符串进行修改的时候 需要使用 StringBuffer 和 StringBuilder 类 和 String 类不同的是 StringBuffer 和 StringBuilder 类 的对象能够被多次的修改 并且不产生新的未使用对象
  • Maven 项目的配置与程序的运行

    Maven 是一个 Java 包管理工具 需要下载和安装 通过配置 Maven 以后建立项目时就不需要再创建 lib 目录并导入相关的包 只需要在它的配置文件 pom xml 文件中进行包的配置 这样的配置方法提供了便利 大大节约了资源 在
  • Zookeeper入门

    Zookeeper概念 Zookeeper是一个开源的 分布式的项目 是apache的一个项目 从设计模式的角度理解 Zookeeper是基于观察者模式的 它负责存储大家都关心的数据 然后接受观察者的注册 一旦这些数据发生变化 则会通知已注
  • 华为OD机试 - 区块链文件转储系统(Java)

    题目描述 区块链底层存储是一个链式文件系统 由顺序的N个文件组成 每个文件的大小不一 依次为F1 F2 Fn 随着时间的推移 所占存储会越来越大 云平台考虑将区块链按文件转储到廉价的SATA盘 只有连续的区块链文件才能转储到SATA盘上 且
  • Unity Animation ---Unity中录制某个物体的运动到AnimationClip(一)

    在某些情况下 我们需要把物体的运动状态 材质变化等信息录制下来存储到Clip中 比如说 用到ITween DoTween等插件控制物体运动 然后想把运动的过程记录下来 就需要在Editor Runtime下进行一些操作来达到我们的目的 所幸
  • VsCode远程调试c++

    1 WSL安装 ubuntu18 04 或者直接连接远程的ubuntu服务器 windows10 安装WSL 参考文档 Install WSL Microsoft Docs 开始使用 WSL VS Code Microsoft Docs i
  • jq单击button修改input的value

    HTML代码 div 内容来源 div
  • 【深度学习】基于卷积神经网络(tensorflow)的人脸识别项目(二)

    活动地址 CSDN21天学习挑战赛 目录 前言 基本思路 关于环境 通过anaconda导入配置 数据集 训练集 验证机与测试集 划分规则 预处理 从指定路径读取训练数据 设置标签 按照指定图像大小调整尺寸 数据归一化 最值归一化 norm
  • 用户分享|当我升级了 CloudQuery 2.2.0 后......

    导读 7 月 13 日 CloudQuery 下文简称 CQ 2 2 0 版本正式发布 在看到官方文档对新版本的介绍后 马上进行安装测试 本文主要为大家介绍从 CQ 1 4 2 升级到 2 2 的考量因素 测试情况 分享一些实践经验 给大家
  • 十六种炫酷纯css加载动画(一)

    一个好的开篇 会给你这个项目增加不少分值 有没有遇到过打开页面加载一段时间 页面内容才加载出来 在等待加载的过程中页面却是空白页 给用户的体验特别不好 会让项目降一个档次 下面的十六种炫酷炸裂的css加载动画 会让你在等待的过程中 体验视觉
  • ISM解释结构模型法

    ISM解释结构模型法 并不知道是个啥 是风险分析方向的同学毕业要用到的 感觉不是很难 但是有着自己对应的原理 对于没有编程基础的同学来说可能有点难度 我也忘了数据从哪来的了 不过计算的过程是没错的 导入原始矩阵B B 0 0 0 0 0 1
  • 片上网络(1)概述

    前言 NoC On Chip Networks 片上网络 由于多核乃至众核时代的到来 用于连接它们的可扩展 低延迟 大带宽的通信结构变得至关重要 在核心较少时 总线Bus和矩阵 交叉开关Crossbar是主要的互联结构 总线可以提供较低的传
  • 【mktime】mktime函数使用

    函数原型 time t mktime struct tm 其中的 tm 结构体定义如下 struct tm int tm sec 秒 取值区间为 0 59 int tm min 分 取值区间为 0 59 int tm hour 时 取值区间
  • Toolchain的安装与验证(有图 ,超详细)

    安装包 链接 https pan baidu com s 1d1ihSB2LFzITyinVM m02A 提取码 1234 安装步骤 1解压安装包 2将解压后的文件放到与CMake同样的文件夹中 不放也可以 只要记住文件的位置 后续要用到
  • 01-Chrome架构:仅仅打开了1个页面,为什么有4个进程

    在开始之前 我们一起看下 Chrome打开一个页面需要启动多少进程 你可以点击Chrome浏览器右上角的 选项 菜单 选择 更多工具 子菜单 点击 任务管理器 这将打开Chrome的任务管理器的窗口 如下图 和Windows任务管理器一样
  • 服务的数据

    服务独立后 剩下的就是如何处理数据 1 规范化数据模型的问题 传统关系型数据库通过三大范式来约束数据存储 会使得查询涉及多关联 JOIN 时 查询性能严重低下 大量数据存储在一起 这种中心化思想 会造成访问瓶颈 可用性低 2 数据去中心化
  • physx转换矩阵终于正确了,哈哈,就是TMD太累

    从5月28日到8月27日晚上21 52 终于正确转换矩阵了 当然这只是个开端 恨不得吐槽 PHYSX太坑爹了 资料真TMD少 还得看文档 让爷过着苦逼的日子 这个苦逼日子只是开始不久 还远远没有结束 不过看到亮光了 上周连接后 发现不对 老
  • 湖南理工学院图像处理与计算机视觉,信息与通信工程一级学科硕士研究生培养方案...

    一 学科代码 0810 二 培养目标 适应社会主义现代化建设需要 培养德 智 体全面发展的高级专门人才 要求本学科硕士学位获得者达到如下目标 1 较好地掌握马克思主义基本理论 坚持四项基本原则 热爱祖国 遵纪守法 品德良好 学风严谨 具有较
  • RWKV解读:在Transformer的时代的新RNN

    转载地址 RWKV解读 在Transformer的时代的新RNN 知乎作者 徐传飞 在Transformer时代 介绍一个非Transformer架构的新网络 RWKV RWKV是一种创新的深度学习网络架构 它将Transformer与RN