RWKV (读作 RWaKuV)是一种具有 GPT 级大型语言模型(LLM)性能的 RNN,也可以像 GPT Transformer 一样直接训练(可并行化)。
RWKV 结合了 RNN 和 Transformer 的最佳特性:出色的性能、恒定的显存占用、恒定的推理生成速度、"无限" ctxlen 和免费的句嵌入,而且 100% 不含自注意力机制。
2020 年,BlinkDL 开始研究 Transformer ,立刻发现其有两个明显的改进方向:引入显式 decay 和 Token-shift(或者说短卷积)。在 https://github.com/BlinkDL/minGPT-tuned 上测试后,发现这些技巧对于 Transformer 的性能有显著提升。
随后,他注意到 Apple 的 Attention Free Transformer (AFT)论文并对其进行测试,发现这两种技巧也为 AFT 带来了显著的性能提升。2021 年 8 月,RWKV 架构的初版:RWKV-V1 被提交到 RWKV-LM仓库中。
RWKV 架构演进时间线
| 版本 | 时间 | 核心特性/改进 | 备注 |
|---|---|---|---|
| v1 | 2021 年底 | 初代结构,融合 Attention 和 RNN | 实验性版本,训练不稳定 |
| v2 | 2022 年初 | TimeMix 和 ChannelMix 雏形 初步支持并行训练 |
性能有明显提升 |
| v3 | 2022 年中 | 明确使用 time_decay 机制引入 time_mix_k 等精细控制 |
架构逐渐稳定,接近 Transformer 效果 |
| v4 | 2023 年初 | 优化 ChannelMix(ReLU 替换 SiLU) 更强的泛化能力 |
支持更大规模模型训练 |
| v5 | 2023 底 / 2024 初 | 正式提出 “Transformer as RNN” 理念 可用标准 Transformer 训练器 性能与效率大幅提升 |
当前主力架构,广泛用于 RWKV-LM 系列 |
| v6 | 2024 年初 | 引入动态时间衰减机制(Dynamic Time Decay) 增强对长上下文的记忆能力 |
进一步提升语言建模的表现 |
| v7 | 2024 年中 | 模块化设计 支持多模态任务(文本、图像、音频等) 更高效的推理优化 |
扩展应用场景,迈向通用 AI |
RWKV 模型简介
RWKV:
- 近年来,基于Transformer架构的大规模语言模型在自然语言处理领域取得了显著成功,但其自注意力机制存在内存和计算复杂度随序列长度平方级增长的问题,限制了其在长序列任务中的效率。同时,传统RNN虽然具有线性复杂度,但在训练并行性和长程依赖建模方面存在不足。在此背景下,RWKV(Receptance Weighted Key-Value)架构被BlinkDL提出,旨在结合Transformer的高效训练能力(可并行化)和RNN的推理效率。
- RWKV-7 "Goose"作为该系列的最新进展,通过恒定内存占用和每token恒定推理时间的设计,解决了传统Transformer的长序列处理瓶颈。
- 2023 年 9 月 20 日,RWKV 开源项目正式加入 Linux 开源基金会。如今的 RWKV 项目是一个开源的非盈利组织,隶属于 Linux 基金会,部分算力曾由赞助商支持。
名称含义:
- R:Receptance,作为过去信息的接受程度的接受向量
- W:Weight,位置权重衰减向量,可训练的模型参数
- K & V:类似传统注意力机制中的 Key 和 Value 概念
核心特点:
- 拥有 Transformer 的并行训练能力
- 拥有 RNN 的线性推理效率
RWKV 模型结构
RWKV 是 RNN(循环神经网络) 的一个变体。在深入探讨 RWKV 之前,我们有必要先了解 RNN 的基本原理,特别是其 隐藏状态(Hidden State) 的概念。
RNN 架构与隐藏状态
循环神经网络(RNN, Recurrent Neural Network) 是一种广泛应用于序列数据(如文本、语音、时间序列等)的深度学习模型。
RNN 的核心机制:隐藏状态
RNN 在运行过程中会维护一个 隐藏状态(Hidden State),可以将其类比为 RNN 的“记忆”或“心理状态”。
- 就像人类在思考时,大脑会保留与当前任务最相关的“关键信息”一样,RNN 的隐藏状态存储了网络在处理序列时的上下文信息。
- 每当 RNN 处理一个新的输入(如一个 token),它会结合 当前隐藏状态 计算输出,并更新自身的隐藏状态,以便影响后续的计算。
RNN 的工作流程
- 输入处理:RNN 依次接收序列中的每个 token(如单词或字符)。
- 状态更新:对于每个 token,RNN 结合 当前隐藏状态 计算输出,并生成 新的隐藏状态。
- 循环反馈:更新后的隐藏状态会被传递到下一步,用于处理下一个 token。
- 输出预测(可选):如果有任务需求(如语言建模),RNN 可以在每一步生成预测结果(如下一个可能的 token)。
这一过程不断循环,直到整个序列处理完毕或达到终止条件,如下图所示:
RWKV Block(基本结构)
- LayerNorm
- TimeMix
- 输入:
x - 拆分为:[math]\displaystyle{ x_k, x_v, x_r }[/math]
- 加入时间加权参数(Python代码):
- 输入:
decay = exp(-exp(time_decay))
k = x_k * time_mix_k + x_k_prev * (1 - time_mix_k)
- 数学公式形式:
- Decay定义:
[math]\displaystyle{ \mathrm{decay} = e^{-e^{\mathrm{time\_decay}}} }[/math]
- k计算:
[math]\displaystyle{ k = x_k \times \mathrm{time\_mix\_k} + x_k^{\mathrm{prev}} \times \left(1 - \mathrm{time\_mix\_k}\right) }[/math]
- ChannelMix
- 类似 Transformer 的 FFN 模块。
- 激活函数通常使用 ReLU,公式如下:
[math]\displaystyle{ \mathrm{output} = \mathrm{ReLU}(W_1 \times x + b_1) \times W_2 + b_2 }[/math]
- 注意力层简化表达
[math]\displaystyle{ x_{t+1} = \sigma(Rx_t) \cdot \frac{\exp(Kx_t) \cdot (Vx_t) + \exp(W) \cdot a_t}{\exp(Kx_t) + \exp(W) \cdot b_t} }[/math]
- 核心机制代码
def ref_fwd(r, w, k, v, a, b):
r = r.view(B, T, H, N)
k = k.view(B, T, H, N)
v = v.view(B, T, H, N)
a = a.view(B, T, H, N)
b = b.view(B, T, H, N)
w = torch.exp(-torch.exp(w.view(B, T, H, N)))
out = torch.zeros((B, T, H, N), device=DEVICE)
state = torch.zeros((B, H, N, N), device=DEVICE)
for t in range(T):
kk = k[:, t, :]
rr = r[:, t, :]
vv = v[:, t, :]
aa = a[:, t, :]
bb = b[:, t, :]
sab = torch.einsum('bhik,bhk,bhj->bhij', state, aa, bb)
state = state * w[: , t, :, None, :] + sab + torch.einsum('bhj,bhi->bhij', kk, vv)
out[:, t, :] = torch.einsum('bhj,bhij->bhi', rr, state)
return out.view((B, T, C))
- Delta Rule
RWKV-7 中的 广义 Delta Rule 是其架构的核心创新之一,是对传统神经网络中 Delta Rule 的扩展和优化。以下是其核心要点:
传统 Delta Rule 的基础 Delta Rule 是神经网络中的经典学习规则,通过计算目标输出与实际输出的差异(即误差 delta),调整模型参数以减少误差 。这一规则通常用于监督学习中的梯度下降优化。 广义 Delta Rule 的扩展 RWKV-7 将 Delta Rule 从标量形式推广到向量形式,并引入动态状态演化机制。具体来说: 向量化门控(Vector-Valued State Gating) :原始 Delta Rule 中的衰减系数 a 被定义为向量而非标量,允许每个状态通道独立控制信息的保留与更新,从而增强模型对状态信息的精细操控能力 。 动态状态调整 :通过结合输入序列的历史状态与当前误差信号,广义 Delta Rule 能够更高效地调整状态表示,实现长序列依赖建模 。
RWKV架构特性
推理
- 类似 RNN,每步只依赖上一步状态
- 推理内存 O(1),不需上下文缓存
训练
- 并行训练兼容 Transformer-style 训练器
- 对时间参数稳定性要求高(需梯度裁剪、精调)
RWKV 架构由一系列堆叠的残差块组成,每个残差块由具有循环结构的时间混合(timemixing)和通道混合(channel-mixing)子块组成,该循环通过将当前输入和上一时间步的输入之间进行线性插值来实现(在 RWKV-4 架构论文中,这一过程被称为 token shift)。RWKV 6 通过借鉴 LoRA 技术优化了 token shift 过程,使其 RWKV4/5 的简单线性插值(lerp)变成了数据依赖的、动态的线性插值(ddlerp)。
根据对不同模型的推理复杂度进行比较,Transformer 的时间复杂度为:O (T^2)、空间复杂度为:O (T^2),因此推理速度将会越来越慢,也越来越耗内存。而 RWKV 的时间复杂度为:O(T)、空间复杂度为 O(1)。RWKV 大模型通过对计算流程的优化,实现了恒定的推理速度,极大地减少了推理过程中的时间消耗。
此外,RWKV 架构设计显著降低了显存占用,使得模型即使在标准配置的 CPU 或非专业级的 GPU上也能高效运行,无需依赖昂贵或高端的计算硬件。这一突破性的进展使得大规模深度学习模型不再受限于特定的硬件平台,拓宽了应用范围。
RWKV 的评测数据
以下是 RWKV 和其他模型的 Uncheatable Eval 评分对比:
14B 参数模型
| Name | Params (B) | Average (lower=better) | ao3 english | bbc news | wikipedia english | arxiv computer science | arxiv physics | github cpp | github python |
|---|---|---|---|---|---|---|---|---|---|
| Mistral-Nemo-Base-2407 | 12.248 | 7.107 | 10.07 | 8.081 | 7.954 | 7.419 | 7.656 | 4.203 | 4.368 |
| RWKV-6-14B-v2.1 | 14.069 | 7.609 | 10.188 | 8.518 | 8.343 | 7.916 | 8.04 | 4.93 | 5.33 |
| Llama-2-13b-hf | 13.016 | 7.676 | 10.524 | 8.279 | 8.187 | 8.075 | 8.311 | 4.929 | 5.426 |
| Qwen1.5-14B | 14.167 | 7.697 | 10.88 | 8.884 | 9.102 | 7.752 | 7.862 | 4.665 | 4.736 |
| pythia-12b-v0 | 11.846 | 8.356 | 11.285 | 9.19 | 9.527 | 8.535 | 8.398 | 5.43 | 6.125 |
7B 参数模型
| Name | Params (B) | Average (lower=better) | ao3 english | bbc news | wikipedia english | arxiv computer science | arxiv physics | github cpp | github python |
|---|---|---|---|---|---|---|---|---|---|
| Meta-Llama-3.1-8B | 8.030 | 7.227 | 10.529 | 8.201 | 7.932 | 7.549 | 7.686 | 4.204 | 4.487 |
| Qwen2.5-7B | 7.616 | 7.453 | 10.931 | 8.742 | 8.815 | 7.683 | 7.991 | 3.920 | 4.091 |
| Qwen2-7B | 7.616 | 7.528 | 10.814 | 8.582 | 8.709 | 7.822 | 8.249 | 4.204 | 4.317 |
| Mistral-7B-v0.1 | 7.242 | 7.580 | 10.546 | 8.282 | 8.435 | 7.852 | 8.092 | 4.800 | 5.051 |
| RWKV-6-World-7B-v2.1 | 7.636 | 7.817 | 10.410 | 8.740 | 8.577 | 8.107 | 8.248 | 5.122 | 5.516 |
| Yi-1.5-6B | 6.061 | 7.830 | 10.926 | 8.789 | 8.948 | 8.098 | 8.410 | 4.746 | 4.890 |
| OLMo-1.7-7B-hf | 6.888 | 7.881 | 11.012 | 8.647 | 8.987 | 8.004 | 8.200 | 4.966 | 5.354 |
| RWKV-5-World-7B-v2 | 7.518 | 7.905 | 10.495 | 8.878 | 8.694 | 8.184 | 8.311 | 5.187 | 5.587 |
| Qwen1.5-7B | 7.721 | 7.916 | 11.100 | 9.126 | 9.357 | 7.953 | 8.107 | 4.845 | 4.924 |
| mpt-7b | 6.649 | 7.950 | 11.185 | 8.682 | 8.771 | 8.157 | 8.438 | 4.954 | 5.466 |
| Llama-2-7b-hf | 6.738 | 7.967 | 10.842 | 8.511 | 8.521 | 8.330 | 8.630 | 5.235 | 5.703 |
| Zamba-7B-v1 | 7.232 | 8.089 | 10.846 | 8.520 | 8.639 | 8.060 | 8.290 | 5.938 | 6.328 |
| open_llama_7b_v2 | 6.738 | 8.103 | 11.086 | 8.839 | 9.053 | 8.404 | 8.757 | 4.887 | 5.698 |
| falcon-7b | 6.922 | 8.302 | 10.756 | 8.691 | 9.147 | 8.549 | 9.060 | 5.763 | 6.149 |
| pythia-6.9b-v0 | 6.857 | 8.545 | 11.495 | 9.375 | 9.757 | 8.683 | 8.572 | 5.611 | 6.321 |
| mamba-7b-rw | 6.947 | 9.782 | 10.808 | 8.548 | 8.990 | 8.613 | 9.142 | 11.107 | 11.268 |
3B 参数模型
| Name | Params (B) | Average (lower=better) | ao3 english | bbc news | wikipedia english | arxiv computer science | arxiv physics | github cpp | github python |
|---|---|---|---|---|---|---|---|---|---|
| Llama-3.2-3B | 3.213 | 7.573 | 10.897 | 8.702 | 8.283 | 7.784 | 8.101 | 4.590 | 4.654 |
| Qwen2.5-3B | 3.086 | 7.663 | 11.226 | 9.154 | 8.959 | 7.787 | 8.246 | 4.119 | 4.151 |
| RWKV-x070-World-2.9B-v3-20250211-ctx4096 | 2.948 | 7.737 | 10.481 | 8.919 | 8.470 | 7.904 | 8.337 | 4.882 | 5.164 |
| stablelm-3b-4e1t | 2.795 | 7.856 | 10.887 | 8.818 | 8.509 | 8.153 | 8.500 | 4.847 | 5.281 |
| recurrentgemma-2b | 2.683 | 7.987 | 11.302 | 8.938 | 8.883 | 8.237 | 8.520 | 4.802 | 5.224 |
| RWKV-x060-World-3B-v2.1-20240417-ctx4096 | 3.100 | 8.078 | 10.674 | 9.174 | 8.816 | 8.268 | 8.576 | 5.385 | 5.655 |
| gemma-2-2b | 2.614 | 8.122 | 11.352 | 8.898 | 9.031 | 8.385 | 8.814 | 5.012 | 5.364 |
| mamba2attn-2.7b | 2.698 | 8.183 | 11.126 | 9.279 | 9.263 | 8.325 | 8.287 | 5.223 | 5.780 |
| RWKV-5-World-3B-v2-20231113-ctx4096 | 3.063 | 8.227 | 10.831 | 9.356 | 9.004 | 8.415 | 8.698 | 5.509 | 5.776 |
| mamba2-2.7b | 2.703 | 8.292 | 11.213 | 9.370 | 9.384 | 8.427 | 8.371 | 5.343 | 5.933 |
| Zamba2-2.7B | 2.662 | 8.317 | 10.970 | 8.948 | 8.743 | 8.169 | 8.699 | 6.393 | 6.295 |
| mamba-2.8b-hf | 2.768 | 8.414 | 11.311 | 9.486 | 9.530 | 8.566 | 8.517 | 5.461 | 6.027 |
| RWKV-4-World-3B-v1-20230619-ctx4096 | 3.063 | 8.525 | 10.898 | 9.565 | 9.301 | 8.902 | 9.274 | 5.671 | 6.065 |
| pythia-2.8b-v0 | 2.775 | 8.667 | 11.664 | 9.741 | 9.815 | 8.724 | 8.729 | 5.709 | 6.288 |
| granite-3.2-2b-instruct | 2.534 | 8.800 | 11.961 | 10.119 | 10.309 | 8.997 | 9.254 | 5.502 | 5.460 |
| granite-3.1-2b-instruct | 2.534 | 8.837 | 12.004 | 10.169 | 10.361 | 9.043 | 9.278 | 5.519 | 5.484 |
1.5B 参数模型
| Name | Params (B) | Average (lower=better) | ao3 english | bbc news | wikipedia english | arxiv computer science | arxiv physics | github cpp | github python |
|---|---|---|---|---|---|---|---|---|---|
| Qwen3-1.7B-Base | 1.721 | 7.915 | 11.644 | 9.761 | 9.415 | 7.816 | 8.377 | 4.177 | 4.214 |
| rwkv7-g1-1.5b-20250429-ctx4096 | 1.528 | 7.975 | 10.622 | 9.269 | 8.936 | 8.069 | 8.649 | 4.973 | 5.308 |
| Qwen2.5-1.5B | 1.544 | 8.058 | 11.756 | 9.576 | 9.489 | 8.118 | 8.653 | 4.396 | 4.421 |
| RWKV-x070-World-1.5B-v3-20250127-ctx4096 | 1.528 | 8.160 | 10.932 | 9.337 | 8.972 | 8.250 | 8.770 | 5.288 | 5.571 |
| Llama-3.2-1B | 1.236 | 8.225 | 11.693 | 9.343 | 9.066 | 8.365 | 8.762 | 5.160 | 5.184 |
| SmolLM2-1.7B | 1.711 | 8.227 | 11.204 | 9.396 | 9.459 | 8.382 | 9.041 | 4.937 | 5.172 |
| Index-1.9B | 2.173 | 8.301 | 11.490 | 9.510 | 9.227 | 8.344 | 8.589 | 5.292 | 5.652 |
| stablelm-2-1_6b | 1.645 | 8.338 | 11.423 | 9.243 | 9.057 | 8.579 | 9.076 | 5.450 | 5.535 |
| RWKV-x060-World-1B6-v2.1-20240328-ctx4096 | 1.600 | 8.491 | 11.094 | 9.569 | 9.302 | 8.619 | 8.997 | 5.798 | 6.061 |
| RWKV-5-World-1B5-v2-20231025-ctx4096 | 1.578 | 8.640 | 11.247 | 9.746 | 9.499 | 8.765 | 9.106 | 5.918 | 6.196 |
| mamba2-1.3b | 1.344 | 8.676 | 11.625 | 9.743 | 9.863 | 8.741 | 8.742 | 5.706 | 6.315 |
| MobileLLM-1.5B | 1.562 | 8.733 | 11.588 | 9.145 | 9.215 | 8.816 | 9.292 | 6.293 | 6.785 |
| mamba-1.4b-hf | 1.372 | 8.783 | 11.703 | 9.828 | 9.973 | 8.876 | 8.863 | 5.808 | 6.429 |
| Zamba2-1.2B | 1.215 | 8.830 | 11.392 | 9.382 | 9.263 | 8.571 | 9.209 | 7.082 | 6.914 |
| SmolLM-1.7B | 1.711 | 8.877 | 12.684 | 9.847 | 9.890 | 8.384 | 9.024 | 6.552 | 5.757 |
| gemma-3-1b-pt | 1.000 | 8.903 | 12.188 | 9.364 | 9.597 | 8.874 | 9.559 | 6.591 | 6.150 |
| MobileLLM-1B | 1.005 | 8.972 | 11.863 | 9.349 | 9.432 | 9.028 | 9.566 | 6.531 | 7.033 |
| RWKV-4-World-1.5B-v1-fixed-20230612-ctx4096 | 1.578 | 8.999 | 11.334 | 10.000 | 9.821 | 9.344 | 9.797 | 6.158 | 6.539 |
| Hymba-1.5B-Base | 1.523 | 9.125 | 11.797 | 9.446 | 9.502 | 8.497 | 9.375 | 7.714 | 7.542 |
| pythia-1.4b-v0 | 1.415 | 9.154 | 12.192 | 10.200 | 10.429 | 9.122 | 9.198 | 6.149 | 6.788 |
| Falcon3-1B-Base | 1.669 | 9.445 | 13.039 | 10.448 | 10.750 | 8.604 | 9.200 | 7.155 | 6.919 |
这些雷达图全面展示了RWKV系列模型在不同参数量级别(从1.5B到14B)与其他主流大型语言模型(如Llama、Mistral、Qwen等)在多个评估维度上的性能对比,清晰地表明RWKV模型无论在小规模还是大规模应用中都具备强大竞争力,其不同版本持续演进,在通用文本理解、科学文本分析及编程能力等各类任务中均展现出卓越表现,尤其在特定领域更是突出,有力证明了RWKV作为一种创新架构,在效率和多任务性能上均能与主流模型匹敌,彰显了其在广泛应用场景中的巨大潜力。
RWKV 与其他模型对比
| 特性 | Transformer | RNN | RWKV |
|---|---|---|---|
| 并行训练能力 | ✅ | ❌ | ✅ |
| 推理内存效率 | ❌ (O(n)) | ✅ (O(1)) | ✅ (O(1)) |
| 长序列建模能力 | 中等 | 较弱 | 强 |
| 上下文可控性 | 较强 | 差 | 中-强 |
| 参数共享压缩性 | 中等 | 强 | 强 |
RWKV与Transformer的差异
优势
- 运行和训练时资源使用更低(VRAM、CPU、GPU 等)。
- 与较大上下文的 Transformer 相比,计算需求低 10 倍到 100 倍。
- 支持以线性方式扩展到任何上下文长度(Transformer 以二次方扩展)。
- 在答案质量和泛化能力方面的表现与 Transformer 架构一样好。
- RWKV 模型的训练数据包括英文以外的其他语言(例如中文、日文等),多语言能力比大多数现有的开源模型要好。
不足
- RWKV 基底模型对提示词(prompt)的格式非常敏感,提示词的格式对生成结果影响较大。
- 出于架构设计,RWKV 模型在需要回顾的任务上较弱,因此需要恰当地对提示词进行排序。比如先给模型提供任务指令,再提供需要执行任务的材料文本。
RWKV 社区与生态
主要贡献者
- BlinkDL(中国开发者,RWKV 创始人)
开源项目
- RWKV-LM:主项目
- RWKV.cpp:轻量 C++ 实现,适合本地部署
- RWKV-Runner:便捷部署和体验框架
- RWKV-Vision:拓展到图像、多模态领域
RWKV 架构总结
优势
- 资源效率高:运行和训练时对 VRAM、CPU、GPU 的需求显著低于 Transformer 架构。
- 计算量低:相较于处理较大上下文的 Transformer,RWKV 的计算需求低 10 倍到 100 倍。
- 线性扩展性强:上下文长度可线性扩展,Transformer 则为二次扩展([math]\displaystyle{ O(n^2) }[/math])。
- 答案质量高:在文本生成质量和泛化能力方面可媲美 Transformer 架构。
- 多语言能力优异:训练数据覆盖中文、日文等多种语言,在多语言任务中表现优于多数开源模型。
不足
- 提示词格式敏感:生成效果对 prompt 的格式非常敏感,稍微不同的提示可能导致结果差异很大。
- 任务顺序依赖性强:由于架构本身的递归特性,对于需要回顾历史信息的任务较弱,需要合理组织输入顺序(例如先给任务,再给内容)。