更改

跳到导航 跳到搜索
删除742字节 、 2025年7月20日 (日) 11:47
第19行: 第19行:     
=== 核心特点: ===
 
=== 核心特点: ===
−
RWKV 模型结合了 Transformer 与 RNN 的优点,具备以下几个显著特性:
+
RWKV 模型结合了 [[Transformer架构|Transformer]] 与 [[RNN]] 的优点,具备以下几个显著特性:
   −
*线性推理效率:RWKV 采用类 RNN 的时间递推结构,每一步仅依赖前一状态,推理时无需处理整个上下文,具备常数内存与线性时间复杂度,适合实时和资源受限场景,'''提高线性推理效率'''。
+
*线性推理效率:RWKV 采用类 [[RNN]] 的时间递推结构,每一步仅依赖前一状态,推理时无需处理整个上下文,具备常数内存与线性时间复杂度,适合实时和资源受限场景,'''提高线性推理效率'''。
−
*并行训练能力:尽管具有递归结构,RWKV 引入了 Token-Shift与 Time-Mix<ref name=":1">Peng B, Alcaide E, Anthony Q, et al. Rwkv: Reinventing rnns for the transformer era[J]. arXiv preprint arXiv:2305.13048, 2023.</ref> 等机制,使其训练过程可以像 Transformer 一样实现高度并行,显著提升训练效率。
+
*并行训练能力:尽管具有递归结构,RWKV 引入了 Token-Shift与 Time-Mix<ref name=":1">Peng B, Alcaide E, Anthony Q, et al. Rwkv: Reinventing rnns for the transformer era[J]. arXiv preprint arXiv:2305.13048, 2023.</ref> 等机制,使其训练过程可以像 [[Transformer架构|Transformer]] 一样实现高度并行,显著提升训练效率。
−
*兼容 Transformer 的训练范式:RWKV 可无缝使用 Transformer 社区常见的预训练与微调方法(如语言建模、指令微调、LoRA 等),便于迁移与应用。
+
*兼容 [[Transformer架构|Transformer]] 的训练范式:RWKV 可无缝使用 [[Transformer架构|Transformer]]  社区常见的预训练与微调方法(如语言建模、指令微调、[[LoRA]] 等),便于迁移与应用。
−
*更低的部署成本:推理过程中不需要全序列缓存和大规模注意力计算,相比传统 Transformer 更轻量,适合部署在边缘设备或移动端。
+
*更低的部署成本:推理过程中不需要全序列缓存和大规模注意力计算,相比传统 [[Transformer架构|Transformer]] 更轻量,适合部署在边缘设备或移动端。
 
*良好的开源生态与可扩展性:RWKV 项目高度开源,已有多个版本(如 RWKV-4、RWKV-5)和大规模中文/多语种预训练模型,社区活跃,便于研究与应用拓展。
 
*良好的开源生态与可扩展性:RWKV 项目高度开源,已有多个版本(如 RWKV-4、RWKV-5)和大规模中文/多语种预训练模型,社区活跃,便于研究与应用拓展。
−
这些特点使 RWKV 成为 Transformer 架构的有力替代方案之一,尤其适合需要高效推理与轻量部署的自然语言处理任务。
+
这些特点使 RWKV 成为 [[Transformer架构|Transformer]] 架构的有力替代方案之一,尤其适合需要高效推理与轻量部署的自然语言处理任务。
    
----
 
----
    
== RWKV 模型结构 ==
 
== RWKV 模型结构 ==
−
'''RWKV''' 是 '''[[循环神经网络]]''' 的一个变体。在深入探讨 RWKV 之前,我们有必要先了解 RNN 的基本原理,特别是其 '''隐藏状态(Hidden State)''' 的概念。
+
'''RWKV''' 是 '''[[循环神经网络]]''' 的一个变体。在深入探讨 RWKV 之前,我们有必要先了解 [[RNN]] 的基本原理,特别是其 '''隐藏状态(Hidden State)''' 的概念。
    
=== RNN 架构与隐藏状态 ===
 
=== RNN 架构与隐藏状态 ===
第53行: 第53行:     
* '''LayerNorm'''
 
* '''LayerNorm'''
−
LayerNorm 的标准定义如下:
     −
:<math>\text{LayerNorm}(x) = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} \cdot \gamma + \beta</math>
  −
  −
其中:
  −
  −
<math>x \in \mathbb{R}^d</math>:输入向量
  −
  −
<math>\mu = \frac{1}{d} \sum_{i=1}^{d} x_i</math>:均值
  −
  −
<math>\sigma^2 = \frac{1}{d} \sum_{i=1}^{d} (x_i - \mu)^2</math>:方差
  −
  −
<math>\epsilon</math>:小常数,防止除零
  −
  −
<math>\gamma, \beta</math>:可学习的缩放和平移参数
  −
  −
LayerNorm 通常作用于每个时间步的输入向量 <math>x_t</math>,即:
  −
  −
:<math>\tilde{x}_t = \text{LayerNorm}(x_t)</math>
  −
  −
然后将 <math>\tilde{x}_t</math> 用于后续的 TimeMix 操作,如:
  −
  −
:<math>k_t = W_k \cdot \left(\tilde{x}t \cdot (1 - w{\text{mixk}}) + \tilde{x}{t-1} \cdot w{\text{mixk}}\right)</math>
   
* '''TimeMix'''
 
* '''TimeMix'''
 
TimeMix 的核心计算过程如下:
 
TimeMix 的核心计算过程如下:
第102行: 第80行:     
* '''ChannelMix'''
 
* '''ChannelMix'''
−
类似 Transformer 的 FFN 模块。
+
* <math>\mathrm{output} = \mathrm{ReLU}(W_1 \times x + b_1) \times W_2 + b_2</math>
−
其数学形式如下:
+
** 类似 Transformer 的 FFN 模块。
−
:<math>\mathrm{FFN}(x) = \mathrm{ReLU}(W_1 x + b_1) W_2 + b_2</math>
+
** 激活函数通常使用 ReLU,公式如下:
−
 
+
** x:当前输入向量;
−
其中:
+
** W1​,W2​:权重矩阵;
−
 
+
** b1​,b2​:偏置项;
−
<math>x \in \mathbb{R}^d</math>:当前时间步的输入向量
+
** ReLU:常用的非线性激活函数。
−
 
  −
<math>W_1 \in \mathbb{R}^{d \times d_{ff}},; W_2 \in \mathbb{R}^{d_{ff} \times d}</math>:线性变换的权重矩阵
  −
 
  −
<math>b_1 \in \mathbb{R}^{d_{ff}},; b_2 \in \mathbb{R}^{d}</math>:对应的偏置项
  −
 
  −
<math>\mathrm{ReLU}(z) = \max(0, z)</math>:常用的非线性激活函数 ReLU
   
ChannelMix 模块在 RWKV 中承担的是特征变换的职责,它不涉及时间递推,仅作用于当前 token 的维度方向。通过堆叠多个 RWKV Block(包含 TimeMix 和 ChannelMix),模型可以逐步构建复杂的时间和特征层级信息。该模块的设计让 RWKV 能够在保持推理效率的同时,具备强大的特征建模能力。
 
ChannelMix 模块在 RWKV 中承担的是特征变换的职责,它不涉及时间递推,仅作用于当前 token 的维度方向。通过堆叠多个 RWKV Block(包含 TimeMix 和 ChannelMix),模型可以逐步构建复杂的时间和特征层级信息。该模块的设计让 RWKV 能够在保持推理效率的同时,具备强大的特征建模能力。
 
* '''Token-Shift'''
 
* '''Token-Shift'''
第120行: 第92行:  
[[文件:Tokenshift.png|缩略图|居中|rwkv-architecture-for-language-modeling<ref name=":1" />]]
 
[[文件:Tokenshift.png|缩略图|居中|rwkv-architecture-for-language-modeling<ref name=":1" />]]
 
*'''注意力层简化表达'''
 
*'''注意力层简化表达'''
−
RWKV 模型通过递归方式模拟注意力机制,其注意力层的核心表达式如下:
+
*<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​:当前时间步的输入向量;
−
<math>
+
*xt+1​:下一时间步的输出;
−
x_{t+1} = \sigma(R x_t) \cdot \frac{\exp(K x_t) \cdot a_t + \exp(W) \cdot (V x_t)}{\exp(K x_t) + \exp(W) \cdot b_t}
+
*R,K,V:分别表示 RWKV 中的 '''Receptance(门控)、Key、Value''' 投影矩阵;
−
</math>
+
*W:时间衰减常数,是可学习参数,用于模拟历史的指数衰减;
−
 
+
*at​,bt​:前一时刻累积的加权值与归一化因子,用于递归地保留历史信息;
−
其中:
+
*σ(Rxt​):Receptance 门控函数,控制信息是否更新,相当于 LSTM 的门结构;
−
 
+
*分数部分(分子/分母):模拟了注意力加权求和的效果,只不过是用递推形式累积,而非对整段序列做自注意力计算。
−
<math>x_t</math>:当前时间步的输入向量;
+
这个表达式体现的是 '''RWKV 用递推的方式模拟注意力机制'''。不同于 Transformer 的全局注意力(需要对所有 token 做乘积和归一化),RWKV 在每一个时间步只更新当前与历史的加权平均值,用指数衰减模拟注意力分布,极大地提高了推理效率。
−
 
  −
<math>x_{t+1}</math>:下一时间步的输出向量;
  −
 
  −
<math>R, K, V</math>:分别表示 RWKV 中的 Receptance(门控)、Key、Value 的线性投影矩阵;
  −
 
  −
<math>W</math>:时间衰减常数,是一个可学习参数,用于模拟历史信息的指数衰减;
  −
 
  −
<math>a_t, b_t</math>:前一时刻累积的加权值与归一化因子,用于递归地保留历史状态;
  −
 
  −
<math>\sigma(R x_t)</math>:Receptance 门控函数,控制新信息是否被写入输出,功能类似于 LSTM 中的门控机制;
  −
分数部分(分子/分母):模拟了注意力加权求和的效果,但通过递推方式实现,而非传统 Transformer 中的全局自注意力机制。
  −
该表达式体现了 RWKV 的核心思想:通过递推公式模拟注意力机制 。与 Transformer 中需对整个序列进行自注意力计算不同,RWKV 在每个时间步仅更新当前输入与历史信息的加权平均,利用指数衰减结构模拟注意力分布,从而大幅提升了推理效率,同时保持了长程依赖建模能力。
   
* '''核心机制代码'''
 
* '''核心机制代码'''
 
<syntaxhighlight lang="python3">
 
<syntaxhighlight lang="python3">
第183行: 第143行:     
=== 推理 ===
 
=== 推理 ===
−
* 类似 RNN,每步只依赖上一步状态
+
* 类似 [[RNN]],每步只依赖上一步状态
 
* 推理内存 O(1),不需上下文缓存
 
* 推理内存 O(1),不需上下文缓存
   第935行: 第895行:  
|}
 
|}
   −
=== RWKV与Transformer的差异 ===
+
=== RWKV与[[Transformer架构|Transformer]]的差异 ===
   −
RWKV (Receptance Weighted Key Value) 架构和Transformer架构都是在自然语言处理领域取得成功的深度学习模型,但它们在处理序列数据的方式上有着根本性的区别。以下是它们的详细对比:
+
RWKV (Receptance Weighted Key Value) 架构和[[Transformer架构|Transformer]]架构都是在自然语言处理领域取得成功的深度学习模型,但它们在处理序列数据的方式上有着根本性的区别。以下是它们的详细对比:
   −
==== Transformer 架构 ====
+
==== [[Transformer架构|Transformer]] 架构 ====
−
核心思想: Transformer 架构的核心是自注意力机制(Self-Attention),它允许模型在处理序列中的每个元素时,同时考虑序列中的所有其他元素,并根据它们之间的相关性分配不同的权重。
+
核心思想: [[Transformer架构|Transformer]] 架构的核心是自注意力机制(Self-Attention),它允许模型在处理序列中的每个元素时,同时考虑序列中的所有其他元素,并根据它们之间的相关性分配不同的权重。
   −
Transformer 中的注意力机制可表示为:
+
[[Transformer架构|Transformer]] 中的注意力机制可表示为:
 
:<math>\text{Attention}(Q, K, V) = \text{softmax}\left( \frac{QK^\top}{\sqrt{d_k}} \right) V</math>
 
:<math>\text{Attention}(Q, K, V) = \text{softmax}\left( \frac{QK^\top}{\sqrt{d_k}} \right) V</math>
 
其中:
 
其中:
第951行: 第911行:  
主要特点:
 
主要特点:
   −
*并行性: 自注意力机制允许对序列中的所有位置进行并行计算,这使得Transformer在训练过程中能够充分利用GPU等并行计算硬件,大大缩短了训练时间。
+
*并行性: 自注意力机制允许对序列中的所有位置进行并行计算,这使得[[Transformer架构|Transformer]]在训练过程中能够充分利用GPU等并行计算硬件,大大缩短了训练时间。
−
*长距离依赖: 通过直接计算任意两个位置之间的注意力权重,Transformer能够有效地捕获序列中的长距离依赖关系,克服了传统RNN(循环神经网络)在处理长序列时遇到的梯度消失/爆炸问题。
+
*长距离依赖: 通过直接计算任意两个位置之间的注意力权重,[[Transformer架构|Transformer]]能够有效地捕获序列中的长距离依赖关系,克服了传统[[RNN]](循环神经网络)在处理长序列时遇到的梯度消失/爆炸问题。
 
*位置编码(Positional Encoding): 由于自注意力机制本身不包含序列顺序信息,Transformer通过在输入嵌入中添加位置编码来引入位置信息,通常是使用正弦和余弦函数。
 
*位置编码(Positional Encoding): 由于自注意力机制本身不包含序列顺序信息,Transformer通过在输入嵌入中添加位置编码来引入位置信息,通常是使用正弦和余弦函数。
 
*编码器-解码器结构: 经典的Transformer通常包含一个编码器堆栈和一个解码器堆栈,编码器处理输入序列,解码器生成输出序列。每个编码器和解码器层都包含多头自注意力机制和前馈神经网络。
 
*编码器-解码器结构: 经典的Transformer通常包含一个编码器堆栈和一个解码器堆栈,编码器处理输入序列,解码器生成输出序列。每个编码器和解码器层都包含多头自注意力机制和前馈神经网络。
 
*二次复杂度: 传统的自注意力机制的计算复杂度与序列长度的平方成正比(O(L^2)),这使得处理非常长的序列变得计算密集且内存消耗大。
 
*二次复杂度: 传统的自注意力机制的计算复杂度与序列长度的平方成正比(O(L^2)),这使得处理非常长的序列变得计算密集且内存消耗大。
 
==== RWKV 架构 ====
 
==== RWKV 架构 ====
−
核心思想: RWKV 旨在结合RNN的效率和Transformer的性能,它将Transformer的并行训练能力与RNN的常数时间推理能力相结合,实现了一种“线性的注意力机制”。
+
核心思想: RWKV 旨在结合[[RNN]]的效率和[[Transformer架构|Transformer]]的性能,它将[[Transformer架构|Transformer]]的并行训练能力与[[RNN]]的常数时间推理能力相结合,实现了一种“线性的注意力机制”。
    
RWKV 模拟注意力计算的一种核心结构是 WKV,其计算可简化为如下形式:
 
RWKV 模拟注意力计算的一种核心结构是 WKV,其计算可简化为如下形式:
第972行: 第932行:  
主要特点:
 
主要特点:
   −
*线性注意力(Linear Attention): RWKV的核心创新是其线性的WKV(Weighted Key Value)机制。与Transformer的二次复杂度注意力不同,RWKV的计算复杂度与序列长度呈线性关系(O(L))。它通过维护一个递归的隐藏状态来实现这一点,有效地聚合了历史信息。
+
*线性注意力(Linear Attention): RWKV的核心创新是其线性的WKV(Weighted Key Value)机制。与[[Transformer架构|Transformer]]的二次复杂度注意力不同,RWKV的计算复杂度与序列长度呈线性关系(O(L))。它通过维护一个递归的隐藏状态来实现这一点,有效地聚合了历史信息。
−
*并行训练与序列推理: RWKV在训练时可以像Transformer一样并行计算,但在推理时则以常数时间(O(1))进行,因为它只需要维护一个固定大小的隐藏状态,而不需要重新计算整个序列的注意力。这使得RWKV在长序列推理任务中具有显著的效率优势。
+
*并行训练与序列推理: RWKV在训练时可以像[[Transformer架构|Transformer]]一样并行计算,但在推理时则以常数时间(O(1))进行,因为它只需要维护一个固定大小的隐藏状态,而不需要重新计算整个序列的注意力。这使得RWKV在长序列推理任务中具有显著的效率优势。
 
*时间混合(Time-Mixing)和通道混合(Channel-Mixing): RWKV的每个块由时间混合和通道混合两个主要部分组成。
 
*时间混合(Time-Mixing)和通道混合(Channel-Mixing): RWKV的每个块由时间混合和通道混合两个主要部分组成。
−
*时间混合: 替代了Transformer的自注意力机制,它通过Receptance (R)、Weight (W)、Key (K) 和 Value (V) 向量的巧妙组合,以递归的方式处理序列信息,并引入了时间衰减因子来模拟信息随时间衰减的特性。
+
*时间混合: 替代了[[Transformer架构|Transformer]]的自注意力机制,它通过Receptance (R)、Weight (W)、Key (K) 和 Value (V) 向量的巧妙组合,以递归的方式处理序列信息,并引入了时间衰减因子来模拟信息随时间衰减的特性。
−
*通道混合: 类似于Transformer中的前馈神经网络,对特征维度进行非线性变换,但可能包含额外的门控机制以控制信息流。
+
*通道混合: 类似于[[Transformer架构|Transformer]]中的[[前馈神经网络]],对特征维度进行非线性变换,但可能包含额外的[[门控机制]]以控制信息流。
 
*Token Shifting: RWKV引入了Token Shifting机制,通过线性插值当前和前一个token的嵌入来为每个块提供时间上下文,这有助于模型更好地理解序列中的局部依赖。
 
*Token Shifting: RWKV引入了Token Shifting机制,通过线性插值当前和前一个token的嵌入来为每个块提供时间上下文,这有助于模型更好地理解序列中的局部依赖。
−
*没有位置编码: RWKV的设计使其能够通过其时间混合机制自然地处理序列顺序信息,因此不需要像Transformer那样显式添加位置编码。
+
*没有位置编码: RWKV的设计使其能够通过其时间混合机制自然地处理序列顺序信息,因此不需要像[[Transformer架构|Transforme]]r那样显式添加位置编码。
 
'''优势'''
 
'''优势'''
 
* 运行和训练时资源使用更低(VRAM、CPU、GPU 等)。
 
* 运行和训练时资源使用更低(VRAM、CPU、GPU 等)。
−
* 与较大上下文的 Transformer 相比,计算需求低 10 倍到 100 倍。
+
* 与较大上下文的 [[Transformer架构|Transformer]] 相比,计算需求低 10 倍到 100 倍。
 
* 支持以线性方式扩展到任何上下文长度(Transformer 以二次方扩展)。
 
* 支持以线性方式扩展到任何上下文长度(Transformer 以二次方扩展)。
 
* 在答案质量和泛化能力方面的表现与 Transformer 架构一样好。
 
* 在答案质量和泛化能力方面的表现与 Transformer 架构一样好。
201

个编辑

导航菜单