(2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch

news2024/11/18 2:36:04

Eagle and Finch: RWKV withMatrix-Valued States and Dynamic Recurrence

公众号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群)

目录

0. 摘要

3. Eagle/Finch 架构

4. 方法

4.1 Eagle

4.1.1 Eagle token 移位

4.1.2 Eagle 时间混合

4.1.3 通道混合

4.2 Finch

4.2.1 Finch token 移位

4.2.2 Finch 时间混合

5. RWKV World Tokenizer

6. RWKV World v2 数据集

7. 预训练模型

8. 语言建模实验

9. 速度和存储 Benchmark 

10. 多模态实验 

11. 结论

附录

B. 额外架构细节 

F. 额外评估


0. 摘要

我们介绍了 Eagle(RWKV-5)和 Finch(RWKV-6),这是在 RWKV(RWKV-4)(Peng 等,2023年)架构的基础上改进的序列模型。我们的架构设计进步包括多头矩阵值状态(multi-headed matrix-valued states)和动态循环机制(dynamic recurrence mechanism),这些改进提高了表达能力,同时保持了 RNN 的推断效率特性。我们引入了一个新的多语言语料库,拥有 1120B 个 token,并基于贪婪匹配(greedy matching)设计了一个快速的分词器(tokenizer),以增强多语言性能。我们训练了四个 Eagle 模型,参数范围从 0.46 到 75 亿,以及两个 Finch 模型,参数分别为 16 亿和 31 亿,并发现它们在各种基准测试中取得了竞争性能。我们在 HuggingFace 上以 Apache 2.0 许可证发布了我们的所有模型。

模型位于:https://huggingface.co/RWKV
训练代码位于:https://github.com/RWKV/RWKV-LM
推理代码位于:https://github.com/RWKV/ChatRWKV
时间并行训练代码位于:https://github.com/RWKV/RWKV-infctx-trainer 

(2023|EMNLP,RWKV,Transformer,RNN,AFT,时间依赖 Softmax,线性复杂度) 

3. Eagle/Finch 架构

我们通过两个步骤对 RWKV 架构进行了优化,并观察到每一步都有显著的建模改进。与基线 RWKV-4 相比,Eagle 增加了矩阵值注意力状态、注意力头上的 LayerNorm、SiLU 注意力门控和改进的初始化。它还取消了接受(receptance)的 Sigmoid 激活。Finch 进一步将数据依赖性应用于衰减调度和 token 移位(shift)。

核心架构与 RWKV-4 类似,由一系列堆叠的残差块组成,形状类似于传统的 Transformer。根据(Tolstikhin 等,2021年)的符号表示,每个块包含一个 Pre-LayerNorm 时间混合子层,后跟一个 Pre-LayerNorm 通道混合子层,如图 1 左侧所示。这些对应于 Transformer 的传统注意力和前馈网络子层。有关我们的训练实现及与 RWKV-4 的差异的更多细节,请参见附录 B,有关速度和内存基准测试,请参见第 9 节。

4. 方法

在本节中,我们使用 D 来表示模型维度,除非明确说明,本节中出现的所有向量都是维度 D/h,其中 h 表示注意力头的数量,属于 R^(D/h)。为了简洁和简便起见,我们以每个头的方式显示计算,省略头索引。我们使用的约定是,除非明确转置,所有向量都是行向量,因此所有矩阵都在右侧操作。

4.1 Eagle

4.1.1 Eagle token 移位

我们采用了前一版 RWKV 中的 token 移位 (shift) 技术,类似于大小为 2 的一维因果卷积,如图 1 中下部所示。为了更好地介绍 token 移位技术,我们定义一些符号。在 RWKV-4 和 Eagle token 移位中使用的 xt 和 x_(t−1) 之间的线性插值(lerp)定义为:

其中每个 μ□ ∈ R^D 是一个可学习的向量。 token 移位允许模型独立且独特地为每个头每个时间步的接受(receptance)、键、值和门向量(r、k、v 和 g)的每个通道分配新旧信息的数量。这使得在单个层内可以形成归纳头(induction heads)(Elhage 等人,2021年),因为即使是单个头也可以直接将过去和当前的 token 数据分别累积到这些向量的不同子空间中。

4.1.2 Eagle 时间混合

Eagle 时间混合的公式可以写成如下形式:

其中 LayerNorm 分别作用于 h 个头的每一个,这也等价于在 h 个组上进行的 Group-Norm(Wu & He (2018))操作。值得注意的是,w 是从 w = exp(−exp(ω)) 获得的,其中 ω ∈ R^(D/h) 是实际的按头(headwise)可训练参数。这确保 w 落在区间 (0,1) 内,保证了 diag(w) 是一个收缩矩阵。

wkvt 注意力计算也可以用循环形式来写成:

RWKV 的 wkv 项可以被视为线性注意力中归一化的 k^T·v 项的基于衰减的等效项。值得注意的是,对于给定的头 j,循环状态 s 是 k^T·v 的总和,其中每个 s 通道在每个时间步都会由 w 的相应通道进行衰减。在应用接收向量 r、门控 g 和输出权重 w 之前,会将每个通道学习的增益 u 与当前 token 的 k^T·v 相乘,并与状态求和,如图 1 右上方所示。这使得当前 token 相对于包含在衰减状态历史中的过去 token 的总和具有特殊的处理方式。接收向量乘以这个总和,就像在 Linear Attention 中的 query 项一样。

4.1.3 通道混合

在 Eagle 和 Finch 中,通道混合模块与之前的 RWKV-4 架构相同,只是隐藏维度从 4D 降低到了3.5D。这个降维考虑到了在 Eagle 时间混合中的新门控权重,以确保与先前模型在相同层数和嵌入维度上具有等参数关系。尽管在 Finch 中添加了一小部分新的 LoRA 权重参数,但我们并没有进一步降低隐藏维度。通道混合的公式与 RWKV-4 相同,但我们在此重新陈述它们以确保符号一致性,使用方程式 3 中的线性插值: 

4.2 Finch

4.2.1 Finch token 移位

在 Finch token 移位(shift)中使用的 xt 和 x_(t−1) 之间的数据依赖线性插值(data-dependent linear interpolation,ddlerp)定义为:

其中 μx 和每个 λ□ 引入了一个维度为 D 的可训练向量,每个 A□ ∈ R^(D×32),B□ ∈ R^(32×D) 引入了新的可训练权重矩阵。对于下面所示的 LoRA_ω 的特殊情况,我们引入了双倍大小的可训练权重矩阵 Aω ∈ R^(D×64),Bω ∈ R^(64×D)。图 1 右下方可以找到示意图。请注意,预期未来的 7B 及更大的雀模型将进一步将这些权重矩阵的大小增加一倍或更多。 这种增强了数据相关性的新 token 移位形式旨在将模型的能力扩展到超出 RWKV-4/Eagle 风格的 token 移位,以便每个通道分配的新旧数据量取决于当前和先前时间步的输入。 

4.2.2 Finch 时间混合

wkv_t 注意力计算也可以用循环的方式来写:

不像在 Eagle 中,wt 在这里不是跨序列静态的(图 1 左边和右上方的虚线箭头)。这是 Finch 中衰减的核心变化,因为现在 wt 的每个通道可以以数据相关的方式随时间变化,而不是以前的固定学习向量。

上述新的 LoRA 机制用于获取学习向量(与 Eagle 中相同),并以低成本的方式用传入的输入确定的额外 offset 对其进行增强。请注意,LoRA 过程本身使用的是 Eagle 风格的 token 移位值作为其输入,而不仅仅是最新的 token。新的时间变化衰减 wt 更进一步,之后再次应用 LoRA。直观地说,这是 token 移位的二阶变体,允许 wt 的每个通道根据当前和先前 token 的混合以及混合本身的方面而变化。 

5. RWKV World Tokenizer

在语言建模中,标记化(Tokenization)很重要,因为它会影响 token 之间的学习关系以及基于这些模式生成新文本。然而,构建单个语义块所需的 token 数量通常在非欧洲和其他代表性较低的语言中分布非常不均匀。基于字节对编码(Byte-pair-encoding,BPE)的 tokenizer 在训练时考虑到这种不平等会导致不仅在代表性较低的语言方面性能较低,而且还会产生不必要的经济成本,例如推理(Ahia等人,2023年)和持续的预训练与扩展的词汇表(Lin等人,2024年;Sasaki等人,2023年)。为了解决这些问题,我们从多个词汇文件中手动选择标记,以确保非欧洲语言得到充分代表。

为了构建标记器的词汇表,我们合并了以下 tokenizer 的词汇表,然后手动选择非欧洲语言的标记。

  • GPT-NeoX-20B (Black等人,2022年): https://huggingface.co/EleutherAI/gpt-neox-20b
  • GPT2 (Radford等人,2019年): https://huggingface.co/openai-community/gpt2
  • tiktoken 的 cl100k_base: https://github.com/openai/tiktoken
  • Llama2 (Touvron等人,2023年): https://huggingface.co/meta-llama/Llama-2-7b-hf
  • Bloom (Workshop等人,2023年): https://huggingface.co/bigscience/bloom

该 tokenizer 的词汇表大小为 V = 65536,编号从 0 到 65535,其中 token 按其字节长度排列。以下是简要概述:

  • token 0: 表示文本文档之间的边界,称为 <EOS> 或 <SOS>。此 token 不编码任何特定内容,仅用于文档分隔。
  • token 1-256: 由字节编码组成(token k 编码字节 k-1),其中 token 1-128 对应于标准 ASCII 字符。
  • token 257-65529: 在 UTF-8 中具有至少 2 字节长度的 token,包括单词、前缀和后缀、重音字母、汉字、韩文字母、平假名、片假名和表情符号。例如,汉字分配从 token 10250 到 18493。
  • token 65530-65535: 保留用于未来使用的 token。

这些指定旨在增强 tokenizer 在多语言语料库以及编程语言源代码上的效率。

该 tokenizer 是通过前缀树(Trie)实现的,以提高速度同时保持简单性。编码是通过从左到右将输入字符串与词汇表中的最长元素匹配来执行的。我们注意到,我们的 tokenizer 词汇表的构建是为了减轻对次要语言造成的不必要负担,而这种负担是朴素 BPE 和相关方法引起的。

6. RWKV World v2 数据集

我们在新的 RWKV World v2 数据集上训练我们的模型,这是一个新的多语言 1120B token 数据集,来自各种手动选择的公开可用数据源。该数据集旨在超越当前广泛用于训练 LLM 的许多数据集对英语的重视。我们这样做是为了支持全球绝大多数非英语母语人士的使用,以提高模型响应中的表现,并使迁移学习成为可能,使我们的模型可以跨文化和地区应用知识。我们非常注重事实知识和代码,但也注重文化作品,包括故事、书籍、字幕和对话。源数据大约有 70% 是英语,15% 是多语言,15% 是代码。我们在附录 D 中详细描述了我们数据集的组成部分。

7. 预训练模型

我们已经预训练并公开发布了六个受 Apache 2.0 许可的 Eagle and Finch 模型:Eagle 0.4B、Eagle 1.5B、Eagle 3B、Eagle 7B、Finch 1.6B 和 Finch 3B。所有模型都是在 1120B token 的 RWKV World v2 多语言语料库上进行训练的。有关详细的参数计数和 FLOPs 计算,请参见附录E。

8. 语言建模实验

9. 速度和存储 Benchmark 

10. 多模态实验 

11. 结论

在本工作中,我们介绍了 Eagle(RWKV-5)和 Finch(RWKV-6),通过整合多头矩阵值状态和动态数据驱动的递归机制,取得了基于 RNN 的语言模型的实质性进展。这些模型在 MQAR 和各种语言基准测试中表现出色,挑战了传统 Transformer 架构的主导地位,同时保留了关键的 RNN 优势。通过在 Apache 2.0 许可下公开提供模型并在广泛的多语言语料库上进行训练,我们的工作不仅推动了语言模型的能力发展,还强调了社区的可访问性和在各个领域的适用性。尽管我们意识到未来存在计算和伦理挑战,但我们希望 Eagle 和 Finch 的高效新架构和广泛可用性将有助于推动语言建模的边界,并为未来的创新铺平道路。

限制:Eagle 和 Finch 模型在某些方面存在不足,可以在未来的工作中得到缓解和解决。

我们尝试将 Eagle 用作大规模文本嵌入基准测试(theMassive Text Embedding Benchmark,MTEB)(Muennighoff等人,2023年)的嵌入模型,但未能获得强大的嵌入性能。我们认为它的状态是上下文的高质量嵌入,但需要适当的方法来聚合信息内容。我们将这留给未来的工作。

由于我们的训练语料库包含来自 GPT-3.5 和 ChatGPT 的一些合成数据,我们发布的模型表现出与 ChatGPT 类似的行为,并将模仿 ChatGPT 的对话风格和语调。例如,模型偶尔会声称它是由 OpenAI 训练的。然而,这不是 RWKV 架构的一般特性,而是数据和训练过程的特定结果。

未来工作:我们的 1120B token 的多语言训练语料库远远小于当今模型(如 LLaMA2)的训练数据规模,扩展我们的训练语料库以使其更加多样化和广泛化是提高模型性能的关键优先事项。我们还计划训练和发布更大的 Finch 版本,如 7B 和 14B 参数,并通过专家混合(Mixture of Experts)进一步降低推理和训练成本来扩展其性能。 

附录

B. 额外架构细节 

F. 额外评估

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

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

相关文章

基于Pytorch框架的深度学习RegNet神经网络二十五种宝石识别分类系统源码

第一步&#xff1a;准备数据 25种宝石数据&#xff0c;总共800张&#xff1a; { "0": "Alexandrite","1": "Almandine","2": "Benitoite","3": "Beryl Golden","4": "Carne…

ctfshow web入门 黑盒测试

web380 这里文章看的我好有感触 但是影响做题 扫描一下 访问flag.php啥也没有再访问page.php page.php?idflagweb381 扫出来page.php但是没啥用哇&#xff0c;查看源代码 这些文件挨个试发现啥也没&#xff0c;最后仔细对比发现其实都是layui&#xff0c;然后尝试着访问…

神经网络的工程基础(零)——PyTorch基础

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下&#xff1a;regression2chatgpt/ch06_optimizer/gradient_descent.ipynb 本文将介绍PyTorch的基础。…

Centos安装,window、ubuntus双系统基础上安装Centos安装

文章目录 前言一、准备工作二、开始安装1、2、首先选择DATE&TIME2、选择最小安装3、 选择安装位置 总结 前言 因工作需要&#xff0c;我需要在工控机上额外装Centos7系统&#xff0c;不过我是装在机械硬盘上了不知道对性能是否有影响&#xff0c;若有影响&#xff0c;后面…

MyBatis系统学习篇 - MyBatis逆向工程

MyBatis的逆向工程是指根据数据库表结构自动生成对应的Java实体类、Mapper接口和XML映射文件的过程。逆向工程可以帮助开发人员快速生成与数据库表对应的代码&#xff0c;减少手动编写重复代码的工作量。 我们在MyBatis中通过逆向工具来帮我简化繁琐的搭建框架&#xff0c;减少…

macOS上用Qt creator编译并跑shotcut

1 简介 Shotcut是一个开源的跨平台的视频编辑软件&#xff0c;支持WIN/MACOS/LINUX等平台&#xff0c;由于该项目的编译较为麻烦&#xff0c;踩坑几许&#xff0c;因此写此文章记录完整编译构建过程&#xff0c;后续按此法编译&#xff0c;可减少走弯路&#xff0c;提高生产力。…

vue+antd实践:在输入框光标处插入内容

今天来看一个很简单的需求。 需求描述&#xff1a;在输入框光标处&#xff0c;插入指定的内容。 效果如下&#xff1a; 实现思路&#xff1a;刚开始还在想怎么获取光标的位置&#xff0c;但是发现所做的项目是基于vue3antd组件&#xff0c;那么不简单了嘛&#xff0c;只要调…

SpringBoot Redis 扩展高级功能

环境&#xff1a;SpringBoot2.7.16 Redis6.2.1 1. Redis消息发布订阅 Spring Data 为 Redis 提供了专用的消息传递集成&#xff0c;其功能和命名与 Spring Framework 中的 JMS 集成类似。Redis 消息传递大致可分为两个功能区域&#xff1a; 信息发布 信息订阅 这是一个通常…

[XYCTF新生赛]-Reverse:你是真的大学生吗?解析(汇编异或逆向)

无壳 查看ida 没有办法反汇编&#xff0c;只能直接看汇编了。 这里提示有输入&#xff0c;输入到2F地址后&#xff0c;然后从后往前异或&#xff0c;其中先最后一个字符与第一个字符异或。这里其实也有字符串的长度&#xff0c;推测应该是cx自身异或之后传给了cx 完整exp&am…

三分钟轻松搞定内容,2024视频号最新AI自动生成影视解说,,百分之百过原创, 月入1万+

在这个数字时代&#xff0c;我们有幸见证了AI技术对创新的推动。现如今&#xff0c;一个崭新的平台出现了&#xff0c;它能让你用AI软件在短短3分钟内制作完成一段影视解说&#xff0c;而且由于这个平台尚属于新兴&#xff0c;竞争者稀少&#xff0c;提供了一个广阔的机遇天地。…

如何将云服务器上操作系统由centos切换为ubuntu

本文将介绍如何将我们购买的云服务器上之前装的centos切换为ubuntu&#xff0c;云服务器以华为云为例&#xff0c;要切换的ubuntu版本为ubuntu20.04。 参考官方文档&#xff1a;切换操作系统_弹性云服务器 ECS (huaweicloud.com) 首先打开华为云官网&#xff0c;登录后点击右…

多模态MLLM都是怎么实现的(9)-时序LLM是怎么个事儿?

时序预测这东西大家一般不陌生,随便举几个例子 1- 金融,比如预测股票(股市有风险,入市需谨慎),纯用K线做,我个人不太推荐 2- 天气,比如预测云图,天气预报啥的 3- 交通,早晚高峰,堵车啥的,车啥时候加油,啥时候充电之类的 4- 医疗,看你病史和喝酒的剂量建模,看你会…

斯坦福大学ALOHA家务机器人团队发布了最新研究成果—YAY Robot语言交互式操作系统

ALOHA YAY 演示视频-智能佳 斯坦福的ALOHA家务机器人团队&#xff0c;发布了最新研究成果—Yell At Your Robot&#xff08;简称YAY&#xff09;&#xff0c;有了它&#xff0c;机器人的“翻车”动作&#xff0c;只要喊句话就能纠正了&#xff01; 标ALOHA2协作平台题 而且机器…

Shell脚本基本命令

文件名后缀.sh 编写shell脚本一定要说明一下在#&#xff01;/bin/bash在进行编写。命令选项空格隔开。Shell脚本是解释的语言&#xff0c;bash 文件名即可打印出编写的脚本。chmod给权限命令。如 chmod 0777 文件名意思是给最高权限。 注意:count赋值不能加空格。取消变量可在变…

基于Spring 框架中的@Async 注解实现异步任务

Async 是 Spring 框架中的一个注解&#xff0c;用于实现方法级别的异步执行。使用 Async 可以让你的代码在非当前线程中执行&#xff0c;从而提高应用的并发性能。 1、 启用异步支持 在 Spring 应用的主配置类或任何其他配置类上添加 EnableAsync 注解来开启异步任务的支持 …

13.Redis之数据库管理redis客户端JAVA客户端

1.数据库管理 mysql 中有一个重要的概念,database 1个 mysql 服务器上可以有很多个 database1个 database 上可以有很多个 表mysql 上可以随心所欲的 创建/删除 数据库~~ Redis 提供了⼏个⾯向 Redis 数据库的操作&#xff0c;分别是 dbsize、select、flushdb、flushall 命令…

2024年中国金融行业网络安全市场全景图

网络安全一直是国家安全的核心组成部分&#xff0c;特别是在金融行业&#xff0c;金融机构拥有大量的敏感数据&#xff0c;包括个人信息、交易记录、财务报告等&#xff0c;这些数据的安全直接关系到消费者的利益和金融市场的稳定&#xff0c;因此金融行业在网络安全建设领域一…

Java—选择排序

选择排序是一种简单但高效的排序算法。它的基本思想是从未排序的部分中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;并将其放置在已排序部分的末尾。 实现步骤 具体实现选择排序的步骤如下&#xff1a; 遍历数组&#xff1a;从数组的第一个元素开始&#xff0…

cesium绘制区域编辑

npm 安装也是可以的 #默认安装最新的 yarn add cesium#卸载插件 yarn remove cesium#安装指定版本的 yarn add cesium1.96.0#安装指定版本到测试环境 yarn add cesium1.96.0 -D yarn install turf/turf <template><div id"cesiumContainer"></div&…

从零开始学React--环境搭建

React官网 快速入门 – React 中文文档 1.搭建环境 下载nodejs,双击安装 nodejs下载地址 更新npm npm install -g npm 设置npm源&#xff0c;加快下载速度 npm config set registry https://registry.npmmirror.com 创建一个react应用 npx create-react-app react-ba…