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

news/2024/7/22 4:27:56/文章来源:https://blog.csdn.net/qq_44681809/article/details/139274480

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.luyixian.cn/news_show_1053329.aspx

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

相关文章

UE5 像素流web 交互2

进来点个关注不迷路谢谢&#xff01; ue 像素流交互多参数匹配 主要运用像素流的解析json 状态&#xff1a; 测试结果&#xff1a; 浏览器控制台&#xff1a; 接下来编写事件传递 关注下吧&#xff01;

Android 逆向学习【1】——版本/体系结构/代码学习

#Android 历史版本 参考链接&#xff1a;一篇文章让你了解Android各个版本的历程 - 知乎 (zhihu.com) 三个部分&#xff1a;api等级、版本号、代号&#xff08;这三个东西都是指的同一个系统&#xff09; API等级&#xff1a;在APP开发的时候写在清单列表里面的 版本号&…

OrangePi AIpro初识及使用大模型GPT-Neo-1.3B测试

OrangePi AIpro介绍 1.1. 开发板简介 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能AI 开发板&#xff0c;其搭 载了昇腾AI 处理器&#xff0c;可提供8TOPS INT8 的计算能力&#xff0c;内存提供了8GB 和16GB 两种版本。可以实现图像、视频等多种数据分析与推理…

vue3快速入门(局部使用)

目录 前置知识JavaScript-导入导出 入门操作 变量渲染页面 局部使用vue的实现步骤 vue指令 v-for v-bind v-if v-show v-on v-model 生命周期 前置知识JavaScript-导入导出 正常情况在html导入js文件是全部导入&#xff0c;这样会导致性能上的损失 。 JS提供的…

SpringSecurity登录和校验流程简述

认证&#xff1a; 验证当前访问系统的是不是本系统的用户&#xff0c;并且要确认具体是哪个用户 授权&#xff1a; 经过认证后判断当前用户是否有权限进行某个操作 一、入门案例实现 搭建springboot工程后&#xff0c;创建启动类和Controller&#xff0c;引入SpringSecurity依…

基于高通公司AI Hub Models的On-Device AI学习:Introduction to On-Device AI

Introduction to On-Device AI 本文是学习 https://www.deeplearning.ai/short-courses/introduction-to-on-device-ai/这门课的学习笔记。 What you’ll learn in this course As AI moves beyond the cloud, on-device inference is rapidly expanding to smartphones, IoT…

详解Spring MVC

目录 1.什么是Spring Web MVC MVC定义 2.学习Spring MVC 建立连接 RequestMapping 注解介绍及使用 获取单个参数 获取多个参数 获取普通对象 获取JSON对象 获取基础URL参数 获取上传文件 获取Header 获取Cookie 获取Session 总结 1.什么是Spring Web MVC 官⽅对于…

基于.NetCore和ABP.VNext的项目实战二:Swagger

Mag.Blog.Swagger层添加Volo.Abp.AspNetCore和Swashbuckle.AspNetCore包,引用实体层.Domain 添加模块类MagBlogSwaggerModule.cs,依赖MagBlogDomainModule模块,并且重写ConfigureServices和OnApplicationInitialization方法 namespace Mag.Blog.Swagger {[DependsOn(typeof…

【教学类-58-06】黑白三角拼图06(1页3张彩色黑点卡片,一种宫格36张,适合一个班级一次操作)

作品展示 背景需求 【教学类-58-05】黑白三角拼图05&#xff08;2-10宫格&#xff0c;每个宫格随机1张-6张&#xff0c;带空格纸&#xff0c;1页3张黑白3张白卡&#xff09;-CSDN博客文章浏览阅读343次&#xff0c;点赞10次&#xff0c;收藏6次。【教学类-58-05】黑白三角拼图…

vue contextPath的思考

先说我这边的情况&#xff0c;目前项目都是前后端分离开发的&#xff0c;上线有种部署方式&#xff0c;常见的就是前后端分开部署&#xff0c;这是比较常见的&#xff0c;我这边因客户原因&#xff0c;打包一起进行部署比较简单&#xff0c;交付技术运维部方便后期其他现场部署…

5 分钟快速上手图形验证码,防止接口被恶意刷量!

5 分钟快速上手图形验证码&#xff0c;防止接口被恶意刷量&#xff01; 大家好&#xff0c;我是程序员小白条&#xff0c;今天来给大家介绍一个快速实现图形验证码的优秀框架 AJ-Captcha。 需求分析 如果注册接口没有验证码这种类型的限制&#xff0c;很容易会被刷量&#x…

python练习题-反转一个只有三位数的整数

【问题描述】&#xff1a;反转一个只有三位数的整数 [示例]&#xff1a;123 321 完整代码如下&#xff1a; nint(input()) if n<100 or n>999: print("请输入三位数&#xff01;") else: gen%10 shin//10%10 bain//100 m100*ge10*shibai…

电脑同时配置两个版本mysql数据库常见问题

1.配置时&#xff0c;要把bin中的mysql.exe和mysqld.exe 改个名字&#xff0c;不然两个版本会重复&#xff0c;当然&#xff0c;在初始化数据库的时候&#xff0c;如果时57版本的&#xff0c;就用mysql57(已经改名的)和mysqld57 代替 mysql 和 mysqld 例如 mysql -u root -p …

VLDB ’25 最后 6 天截稿,58 个顶会信息纵览;ISPRS 城市分割数据集上线

「顶会」板块上线 hyper.ai 官网啦&#xff01;该板块为大家提供最新最全的 CCF A 类计算机顶会信息&#xff0c;包含会议简介、截稿倒计时、投稿链接等。 你是不是已经注册了顶会&#xff0c;但对截稿时间较为模糊&#xff0c;老是在临近 ddl 时才匆忙提交&#xff1b;又或者…

Linux基础知识点总结!超详细

Linux 的学习对于一个IT工程师的重要性是不言而喻的&#xff0c;学好它是工程师必备修养之一。 Linux 基础 操作系统 操作系统Operating System简称OS&#xff0c;是软件的一部分&#xff0c;它是硬件基础上的第一层软件&#xff0c;是硬件和其它软件沟通的桥梁。 操作系统…

2024-05-28 服务器开发-不同vs版本的std::string的访问出错问题-记录

摘要: 有一个dll库是使用vs2010编译的, 使用这个dll动态库的工程是vs2019. 这个dll动态库返回一个结构体&#xff0c;其中有个成员使用了std::string。但是遇到了std::string的成员显示被赋值为NULL的情况。 本文对进行分析, 重点在于追踪问题的思路。 问题描述: dll使用vs20…

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

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

架构师系列---RPC通信原理

RPC通信原理 基于网络的调用 问题&#xff1a;谁来解决这个跨进程调用的问题&#xff1f; RPC&#xff1a;Remote Percedure Call 远程过程调用 定义了一台主机上的程序通过网络调用另外一台主机上的程序的子程序这一行为。 RPC符合CS模型&#xff0c;可以实现进程间的通信&a…

超详细的前后端实战项目(Spring系列加上vue3)前端篇(二)(一步步实现+源码)

好了&#xff0c;兄弟们&#xff0c;继昨天的项目之后&#xff0c;开始继续敲前端代码&#xff0c;完成前端部分 昨天完成了全局页面的代码&#xff0c;和登录页面的代码&#xff0c;不过昨天的代码还有一些需要补充的&#xff0c;这里添加一下 内容补充&#xff1a;在调用登…

vxe-form-design 表单设计器的使用

vxe-form-design 在 vue3 中表单设计器的使用 查看官网 https://vxeui.com 安装 npm install vxe-pc-ui // ... import VxeUI from vxe-pc-ui import vxe-pc-ui/lib/style.css // ...// ... createApp(App).use(VxeUI).mount(#app) // ...使用 github vxe-form-design 用…