| 第31行: |
第31行: |
| | | | |
| | == RWKV 模型结构 == | | == RWKV 模型结构 == |
| − | '''RWKV''' 是 '''RNN(循环神经网络)''' 的一个变体。在深入探讨 RWKV 之前,我们有必要先了解 '''RNN 的基本原理''',特别是其 '''隐藏状态(Hidden State)''' 的概念。 | + | '''RWKV''' 是 '''RNN(循环神经网络)''' 的一个变体。在深入探讨 RWKV 之前,我们有必要先了解 RNN 的基本原理,特别是其 '''隐藏状态(Hidden State)''' 的概念。 |
| | | | |
| | === RNN 架构与隐藏状态 === | | === RNN 架构与隐藏状态 === |
| − | '''循环神经网络(RNN, Recurrent Neural Network)''' 是一种广泛应用于序列数据(如文本、语音、时间序列等)的深度学习模型。 | + | '''循环神经网络(RNN, Recurrent Neural Network, RNN)''' 是一种广泛应用于序列数据(如文本、语音、时间序列等)的深度学习模型。 |
| | | | |
| | ==== RNN 的核心机制:隐藏状态 ==== | | ==== RNN 的核心机制:隐藏状态 ==== |
| 第80行: |
第80行: |
| | | | |
| | * '''ChannelMix''' | | * '''ChannelMix''' |
| | + | * <math>\mathrm{output} = \mathrm{ReLU}(W_1 \times x + b_1) \times W_2 + b_2</math> |
| | ** 类似 Transformer 的 FFN 模块。 | | ** 类似 Transformer 的 FFN 模块。 |
| | ** 激活函数通常使用 ReLU,公式如下: | | ** 激活函数通常使用 ReLU,公式如下: |
| 第86行: |
第87行: |
| | ** b1,b2:偏置项; | | ** b1,b2:偏置项; |
| | ** ReLU:常用的非线性激活函数。 | | ** ReLU:常用的非线性激活函数。 |
| − | <math>\mathrm{output} = \mathrm{ReLU}(W_1 \times x + b_1) \times W_2 + b_2</math>
| |
| − |
| |
| | ChannelMix 模块在 RWKV 中承担的是特征变换的职责,它不涉及时间递推,仅作用于当前 token 的维度方向。通过堆叠多个 RWKV Block(包含 TimeMix 和 ChannelMix),模型可以逐步构建复杂的时间和特征层级信息。该模块的设计让 RWKV 能够在保持推理效率的同时,具备强大的特征建模能力。 | | ChannelMix 模块在 RWKV 中承担的是特征变换的职责,它不涉及时间递推,仅作用于当前 token 的维度方向。通过堆叠多个 RWKV Block(包含 TimeMix 和 ChannelMix),模型可以逐步构建复杂的时间和特征层级信息。该模块的设计让 RWKV 能够在保持推理效率的同时,具备强大的特征建模能力。 |
| | * '''Token-Shift''' | | * '''Token-Shift''' |
| | Token-Shift 是 RWKV 模型中为解决并行训练效率而引入的关键机制。由于 RWKV 的结构天然具有时间递归特性,严格按时间步依赖前一个 token 的信息,这使得其在推理时效率极高,但也造成训练过程难以并行。为此,Token-Shift 技巧通过将序列输入向右平移一位(即“看到”前一个 token),并对当前 token 和上一个 token 的特征进行加权混合,模拟出时间依赖关系。这个过程通过广播和矩阵操作实现,使得模型可以像 Transformer 一样高效并行训练,又不会打破因果结构。Token-Shift 的引入使 RWKV 在保持低延迟推理优势的同时,兼顾了训练阶段的速度与效率,是其架构设计中的一项关键创新。 | | Token-Shift 是 RWKV 模型中为解决并行训练效率而引入的关键机制。由于 RWKV 的结构天然具有时间递归特性,严格按时间步依赖前一个 token 的信息,这使得其在推理时效率极高,但也造成训练过程难以并行。为此,Token-Shift 技巧通过将序列输入向右平移一位(即“看到”前一个 token),并对当前 token 和上一个 token 的特征进行加权混合,模拟出时间依赖关系。这个过程通过广播和矩阵操作实现,使得模型可以像 Transformer 一样高效并行训练,又不会打破因果结构。Token-Shift 的引入使 RWKV 在保持低延迟推理优势的同时,兼顾了训练阶段的速度与效率,是其架构设计中的一项关键创新。 |
| − | [[文件:Tokenshift.png|缩略图|居中|rwkv-architecture-for-language-modeling]] | + | [[文件:Tokenshift.png|缩略图|居中|rwkv-architecture-for-language-modeling]]<ref>Peng, Bo, Eric Alcaide, Quentin Anthony, Alon Albalak, Samuel Arcadinho, Stella Biderman, Huanqi Cao, 等. 《RWKV: Reinventing RNNs for the Transformer Era》. arXiv, 2023年12⽉11⽇. <nowiki>https://doi.org/10.48550/arXiv.2305.13048</nowiki>.</ref> |
| − | | + | *'''注意力层简化表达''' |
| − | * '''注意力层简化表达''' | + | * <math>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> |
| | **xt:当前时间步的输入向量; | | **xt:当前时间步的输入向量; |
| | **xt+1:下一时间步的输出; | | **xt+1:下一时间步的输出; |
| 第101行: |
第100行: |
| | **σ(Rxt):Receptance 门控函数,控制信息是否更新,相当于 LSTM 的门结构; | | **σ(Rxt):Receptance 门控函数,控制信息是否更新,相当于 LSTM 的门结构; |
| | **分数部分(分子/分母):模拟了注意力加权求和的效果,只不过是用递推形式累积,而非对整段序列做自注意力计算。 | | **分数部分(分子/分母):模拟了注意力加权求和的效果,只不过是用递推形式累积,而非对整段序列做自注意力计算。 |
| − | <math>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>
| |
| − |
| |
| | 这个表达式体现的是 '''RWKV 用递推的方式模拟注意力机制'''。不同于 Transformer 的全局注意力(需要对所有 token 做乘积和归一化),RWKV 在每一个时间步只更新当前与历史的加权平均值,用指数衰减模拟注意力分布,极大地提高了推理效率。 | | 这个表达式体现的是 '''RWKV 用递推的方式模拟注意力机制'''。不同于 Transformer 的全局注意力(需要对所有 token 做乘积和归一化),RWKV 在每一个时间步只更新当前与历史的加权平均值,用指数衰减模拟注意力分布,极大地提高了推理效率。 |
| − |
| |
| − |
| |
| − |
| |
| | * '''核心机制代码''' | | * '''核心机制代码''' |
| | <syntaxhighlight lang="python3"> | | <syntaxhighlight lang="python3"> |
| 第132行: |
第126行: |
| | </syntaxhighlight> | | </syntaxhighlight> |
| | * '''Delta Rule''' | | * '''Delta Rule''' |
| − | RWKV-7 中的 广义 Delta Rule 是其架构的核心创新之一,是对传统神经网络中 Delta Rule 的扩展和优化。以下是其核心要点: | + | RWKV-7 中的 '''⼴义增量规则(Generalized Delta Rule)'''<ref>Rumelhart, D., Hinton, G. & Williams, R. Learning representations by back-propagating errors. Nature 323, 533‒536 (1986). <nowiki>https://doi.org/10.1038/323533a0</nowiki></ref> 是其架构的核心创新之一,是对传统神经网络中 Delta Rule 的扩展和优化。以下是其核心要点: |
| | | | |
| | 传统 Delta Rule 的基础 | | 传统 Delta Rule 的基础 |
| 第139行: |
第133行: |
| | 广义 Delta Rule 的扩展 | | 广义 Delta Rule 的扩展 |
| | RWKV-7 将 Delta Rule 从标量形式推广到向量形式,并引入动态状态演化机制。具体来说: | | RWKV-7 将 Delta Rule 从标量形式推广到向量形式,并引入动态状态演化机制。具体来说: |
| − | 向量化门控(Vector-Valued State Gating) :原始 Delta Rule 中的衰减系数 a 被定义为向量而非标量,允许每个状态通道独立控制信息的保留与更新,从而增强模型对状态信息的精细操控能力 | + | '''向量化门控(Vector-Valued State Gating)'''<ref>Peng, Bo, Ruichong Zhang, Daniel Goldstein, Eric Alcaide, Xingjian Du, Haowen Hou, Jiaju Lin, 等. 《RWKV-7 〈Goose〉 with Expressive Dynamic State Evolution》. arXiv, 2025年3⽉30⽇. <nowiki>https://doi.org/10.48550/arXiv.2503.14456</nowiki>.</ref>:原始 Delta Rule 中的衰减系数 a 被定义为向量而非标量,允许每个状态通道独立控制信息的保留与更新,从而增强模型对状态信息的精细操控能力 |
| | 。 | | 。 |
| − | 动态状态调整 :通过结合输入序列的历史状态与当前误差信号,广义 Delta Rule 能够更高效地调整状态表示,实现长序列依赖建模 | + | '''动态状态调整''' :通过结合输入序列的历史状态与当前误差信号,广义 Delta Rule 能够更高效地调整状态表示,实现长序列依赖建模 |
| | 。 | | 。 |
| | ---- | | ---- |
| 第154行: |
第148行: |
| | * 并行训练兼容 Transformer-style 训练器 | | * 并行训练兼容 Transformer-style 训练器 |
| | * 对时间参数稳定性要求高(需梯度裁剪、精调) | | * 对时间参数稳定性要求高(需梯度裁剪、精调) |
| − | RWKV 架构由一系列堆叠的残差块组成,每个残差块由具有循环结构的时间混合(timemixing)和通道混合(channel-mixing)子块组成,该循环通过将当前输入和上一时间步的输入之间进行线性插值来实现(在 RWKV-4 架构论文中,这一过程被称为 token shift)。RWKV 6 通过借鉴 LoRA 技术优化了 token shift 过程,使其 RWKV4/5 的简单线性插值(lerp)变成了数据依赖的、动态的线性插值(ddlerp)。 | + | RWKV 架构由一系列堆叠的残差块组成,每个残差块由具有循环结构的时间混合(time-mixing)和通道混合(channel-mixing)子块组成,该循环通过将当前输入和上一时间步的输入之间进行线性插值来实现(在 RWKV-4 架构论文中,这一过程被称为 token shift)。RWKV 6 通过借鉴 LoRA 技术优化了 token shift 过程,使其 RWKV4/5 的简单线性插值(linear interpolation)变成了数据依赖的、动态的线性插值(data-dependent linear interpolation,ddlerp)。 |
| | | | |
| | 根据对不同模型的推理复杂度进行比较,Transformer 的时间复杂度为:O (T^2)、空间复杂度为:O (T^2),因此推理速度将会越来越慢,也越来越耗内存。而 RWKV 的时间复杂度为:O(T)、空间复杂度为 O(1)。RWKV 大模型通过对计算流程的优化,实现了恒定的推理速度,极大地减少了推理过程中的时间消耗。 | | 根据对不同模型的推理复杂度进行比较,Transformer 的时间复杂度为:O (T^2)、空间复杂度为:O (T^2),因此推理速度将会越来越慢,也越来越耗内存。而 RWKV 的时间复杂度为:O(T)、空间复杂度为 O(1)。RWKV 大模型通过对计算流程的优化,实现了恒定的推理速度,极大地减少了推理过程中的时间消耗。 |
| 第920行: |
第914行: |
| | *位置编码(Positional Encoding): 由于自注意力机制本身不包含序列顺序信息,Transformer通过在输入嵌入中添加位置编码来引入位置信息,通常是使用正弦和余弦函数。 | | *位置编码(Positional Encoding): 由于自注意力机制本身不包含序列顺序信息,Transformer通过在输入嵌入中添加位置编码来引入位置信息,通常是使用正弦和余弦函数。 |
| | *编码器-解码器结构: 经典的Transformer通常包含一个编码器堆栈和一个解码器堆栈,编码器处理输入序列,解码器生成输出序列。每个编码器和解码器层都包含多头自注意力机制和前馈神经网络。 | | *编码器-解码器结构: 经典的Transformer通常包含一个编码器堆栈和一个解码器堆栈,编码器处理输入序列,解码器生成输出序列。每个编码器和解码器层都包含多头自注意力机制和前馈神经网络。 |
| − | *二次复杂度: 传统的自注意力机制的计算复杂度与序列长度的平方成正比(O(L2)),这使得处理非常长的序列变得计算密集且内存消耗大。 | + | *二次复杂度: 传统的自注意力机制的计算复杂度与序列长度的平方成正比(O(L^2)),这使得处理非常长的序列变得计算密集且内存消耗大。 |
| | ==== RWKV 架构 ==== | | ==== RWKV 架构 ==== |
| | 核心思想: RWKV 旨在结合RNN的效率和Transformer的性能,它将Transformer的并行训练能力与RNN的常数时间推理能力相结合,实现了一种“线性的注意力机制”。 | | 核心思想: RWKV 旨在结合RNN的效率和Transformer的性能,它将Transformer的并行训练能力与RNN的常数时间推理能力相结合,实现了一种“线性的注意力机制”。 |
| | | | |
| − | RWKV 模拟注意力计算的一种核心结构是 WKV(Receptance Weighted Key Value),WKV 计算可简化为如下形式: | + | RWKV 模拟注意力计算的一种核心结构是 WKV,其计算可简化为如下形式: |
| | :<math> | | :<math> |
| | 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} | | 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} |