| 第1行: |
第1行: |
| − | '''RWKV'''(Receptance Weighted Key Value)是一种创新性的语言模型架构,旨在'''结合 [[Transformer架构|Transformer]] 和 [[循环神经⽹络]](Recurrent Neural Network, [[RNN]])的优势''',解决传统模型在推理效率和扩展性上的瓶颈。RWKV 的核心思想是将注意力机制中的 Key-Value <ref>Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30.</ref>操作以时间步的方式分解,借助类 RNN 的顺序结构,实现 Transformer 水平的建模能力,同时显著降低计算复杂度和内存占用。与传统 Transformer 在每一步生成中都需要处理整个上下文不同,RWKV 模型以类似 RNN 的方式逐步处理序列,每一步的计算依赖于前一步的状态,因此在推理阶段具有常数时间和常数内存的优势。 | + | '''RWKV'''(Receptance Weighted Key Value)是一种创新性的语言模型架构,旨在'''结合 [[Transformer架构|Transformer]] 和 [[循环神经⽹络]](Recurrent Neural Network, RNN)的优势''',解决传统模型在推理效率和扩展性上的瓶颈。RWKV 的核心思想是将注意力机制中的 Key-Value <ref>Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30.</ref>操作以时间步的方式分解,借助类 RNN 的顺序结构,实现 Transformer 水平的建模能力,同时显著降低计算复杂度和内存占用。与传统 Transformer 在每一步生成中都需要处理整个上下文不同,RWKV 模型以类似 RNN 的方式逐步处理序列,每一步的计算依赖于前一步的状态,因此在推理阶段具有常数时间和常数内存的优势。 |
| | | | |
| | RWKV 支持并行训练,兼容 Transformer 的预训练范式,但在推理过程中具备近乎 RNN 的低延迟特性,使其'''特别适合部署在资源受限设备上''',例如边缘计算设备或移动终端。RWKV 模型的设计还充分考虑了可扩展性,已发展出多个版本(如 RWKV-6、RWKV-7),在多个自然语言处理任务中展现出与主流 Transformer 模型相媲美的性能。由于其开源、轻量、高效的特性,RWKV 也正在成为一种受开发者社区关注的替代性语言模型架构。 | | RWKV 支持并行训练,兼容 Transformer 的预训练范式,但在推理过程中具备近乎 RNN 的低延迟特性,使其'''特别适合部署在资源受限设备上''',例如边缘计算设备或移动终端。RWKV 模型的设计还充分考虑了可扩展性,已发展出多个版本(如 RWKV-6、RWKV-7),在多个自然语言处理任务中展现出与主流 Transformer 模型相媲美的性能。由于其开源、轻量、高效的特性,RWKV 也正在成为一种受开发者社区关注的替代性语言模型架构。 |
| 第22行: |
第22行: |
| | | | |
| | *线性推理效率: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 的训练范式:RWKV 可无缝使用 Transformer 社区常见的预训练与微调方法(如语言建模、指令微调、LoRA 等),便于迁移与应用。 | | *兼容 Transformer 的训练范式:RWKV 可无缝使用 Transformer 社区常见的预训练与微调方法(如语言建模、指令微调、LoRA 等),便于迁移与应用。 |
| | *更低的部署成本:推理过程中不需要全序列缓存和大规模注意力计算,相比传统 Transformer 更轻量,适合部署在边缘设备或移动端。 | | *更低的部署成本:推理过程中不需要全序列缓存和大规模注意力计算,相比传统 Transformer 更轻量,适合部署在边缘设备或移动端。 |
| 第55行: |
第55行: |
| | | | |
| | * '''TimeMix''' | | * '''TimeMix''' |
| | + | TimeMix 的核心计算过程如下: |
| | + | |
| | + | :<math>k_t = W_k \cdot \left(x_t \cdot (1 - w_{\text{mixk}}) + x_{t-1} \cdot w_{\text{mixk}}\right)</math> |
| | + | :<math>v_t = W_v \cdot \left(x_t \cdot (1 - w_{\text{mixv}}) + x_{t-1} \cdot w_{\text{mixv}}\right)</math> |
| | + | :<math>r_t = \sigma\left(W_r \cdot \left(x_t \cdot (1 - w_{\text{mixr}}) + x_{t-1} \cdot w_{\text{mixr}}\right)\right)</math> |
| | + | :<math>s_t = \sum_{i=0}^{t} \exp\left(-\lambda (t - i)\right) \cdot k_i \odot v_i</math> |
| | + | :<math>y_t = r_t \odot s_t</math> |
| | + | |
| | + | 其中: |
| | + | |
| | + | <math>W_k, W_v, W_r</math>:线性变换矩阵 |
| | + | |
| | + | <math>w_{\text{mixk}}, w_{\text{mixv}}, w_{\text{mixr}}</math>:混合比例向量 |
| | + | |
| | + | <math>\sigma</math>:Sigmoid 函数,用于门控控制 |
| | + | |
| | + | <math>\odot</math>:表示逐元素乘法(Hadamard 积) |
| | + | |
| | + | <math>\lambda</math>:时间衰减参数 |
| | + | '''作用:''' 融合当前时刻和上一个时刻的信息,引入时间动态权重。 |
| | + | |
| | + | TimeMix 模块通过对当前输入和上一时刻输入进行线性加权融合,并引入时间衰减因子,实现了模拟 Transformer 注意力中“历史上下文影响”的能力。这种设计既保证了 RWKV 在推理时能保持序列的因果性,又能在训练时支持并行计算,是 RWKV 能够兼顾效率与表现力的关键。 |
| | <syntaxhighlight lang="python"> | | <syntaxhighlight lang="python"> |
| | decay = exp(-exp(time_decay)) | | decay = exp(-exp(time_decay)) |
| | k = x_k * time_mix_k + x_k_prev * (1 - time_mix_k) | | k = x_k * time_mix_k + x_k_prev * (1 - time_mix_k) |
| − | </syntaxhighlight>
| |
| − | * 输入:<code>x</code>
| |
| − | ** 拆分为:<math>x_k, x_v, x_r</math>
| |
| − | ** 加入时间加权参数(Python代码):
| |
| − | ** xk:用于 Key;
| |
| − | ** xv:用于 Value;
| |
| − | ** xr:用于 Receptance(门控);
| |
| − | ** <code>time_decay</code> 是一个可学习的参数,用于控制历史信息的衰减;
| |
| − | ** <code>time_mix_k</code> 是控制当前和前一个 token 特征混合比例的系数(同样是可学习的);
| |
| − | ** <code>x_k_prev</code> 表示前一个 token 的特征;
| |
| − | ** <code>k</code> 是融合后的 Key 值,用于参与后续注意力(递推)计算。
| |
| − | '''作用:''' 融合当前时刻和上一个时刻的信息,引入时间动态权重。
| |
| − |
| |
| − | TimeMix 模块通过对当前输入和上一时刻输入进行线性加权融合,并引入时间衰减因子,实现了模拟 Transformer 注意力中“历史上下文影响”的能力。这种设计既保证了 RWKV 在推理时能保持序列的因果性,又能在训练时支持并行计算,是 RWKV 能够兼顾效率与表现力的关键。
| |
| | * '''数学公式形式''': | | * '''数学公式形式''': |
| | :Decay定义: | | :Decay定义: |