| 第89行: |
第89行: |
| | 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架构|Transformer]] 一样高效并行训练,又不会打破因果结构。Token-Shift 的引入使 RWKV 在保持低延迟推理优势的同时,兼顾了训练阶段的速度与效率,是其架构设计中的一项关键创新。 |
| | [[文件:Tokenshift.png|缩略图|居中|rwkv-architecture-for-language-modeling<ref name=":1" />]] | | [[文件:Tokenshift.png|缩略图|居中|rwkv-architecture-for-language-modeling<ref name=":1" />]] |
| | *'''注意力层简化表达''' | | *'''注意力层简化表达''' |
| 第100行: |
第100行: |
| | *σ(Rxt):Receptance 门控函数,控制信息是否更新,相当于 LSTM 的门结构; | | *σ(Rxt):Receptance 门控函数,控制信息是否更新,相当于 LSTM 的门结构; |
| | *分数部分(分子/分母):模拟了注意力加权求和的效果,只不过是用递推形式累积,而非对整段序列做自注意力计算。 | | *分数部分(分子/分母):模拟了注意力加权求和的效果,只不过是用递推形式累积,而非对整段序列做自注意力计算。 |
| − | 这个表达式体现的是 '''RWKV 用递推的方式模拟注意力机制'''。不同于 Transformer 的全局注意力(需要对所有 token 做乘积和归一化),RWKV 在每一个时间步只更新当前与历史的加权平均值,用指数衰减模拟注意力分布,极大地提高了推理效率。 | + | 这个表达式体现的是 '''RWKV 用递推的方式模拟注意力机制'''。不同于 [[Transformer架构|Transformer]] 的全局注意力(需要对所有 token 做乘积和归一化),RWKV 在每一个时间步只更新当前与历史的加权平均值,用指数衰减模拟注意力分布,极大地提高了推理效率。 |
| | * '''核心机制代码''' | | * '''核心机制代码''' |
| | <syntaxhighlight lang="python3"> | | <syntaxhighlight lang="python3"> |
| 第151行: |
第151行: |
| | RWKV 架构由一系列堆叠的残差块组成,每个残差块由具有循环结构的时间混合(time-mixing)和通道混合(channel-mixing)子块组成,该循环通过将当前输入和上一时间步的输入之间进行线性插值来实现(在 RWKV-4 架构论文中,这一过程被称为 token shift)。RWKV 6 通过借鉴 LoRA 技术优化了 token shift 过程,使其 RWKV4/5 的简单线性插值(linear interpolation)变成了数据依赖的、动态的线性插值(data-dependent linear interpolation,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架构|Transformer]] 的时间复杂度为:O (T^2)、空间复杂度为:O (T^2),因此推理速度将会越来越慢,也越来越耗内存。而 RWKV 的时间复杂度为:O(T)、空间复杂度为 O(1)。RWKV 大模型通过对计算流程的优化,实现了恒定的推理速度,极大地减少了推理过程中的时间消耗。 |
| | | | |
| | 此外,RWKV 架构设计显著降低了显存占用,使得模型即使在标准配置的 CPU 或非专业级的 GPU上也能高效运行,无需依赖昂贵或高端的计算硬件。这一突破性的进展使得大规模深度学习模型不再受限于特定的硬件平台,拓宽了应用范围。 | | 此外,RWKV 架构设计显著降低了显存占用,使得模型即使在标准配置的 CPU 或非专业级的 GPU上也能高效运行,无需依赖昂贵或高端的计算硬件。这一突破性的进展使得大规模深度学习模型不再受限于特定的硬件平台,拓宽了应用范围。 |
| 第942行: |
第942行: |
| | * 运行和训练时资源使用更低(VRAM、CPU、GPU 等)。 | | * 运行和训练时资源使用更低(VRAM、CPU、GPU 等)。 |
| | * 与较大上下文的 [[Transformer架构|Transformer]] 相比,计算需求低 10 倍到 100 倍。 | | * 与较大上下文的 [[Transformer架构|Transformer]] 相比,计算需求低 10 倍到 100 倍。 |
| − | * 支持以线性方式扩展到任何上下文长度(Transformer 以二次方扩展)。 | + | * 支持以线性方式扩展到任何上下文长度([[Transformer架构|Transformer]] 以二次方扩展)。 |
| − | * 在答案质量和泛化能力方面的表现与 Transformer 架构一样好。 | + | * 在答案质量和泛化能力方面的表现与 [[Transformer架构|Transformer]] 架构一样好。 |
| | * RWKV 模型的训练数据包括英文以外的其他语言(例如中文、日文等),多语言能力比大多数现有的开源模型要好。 | | * RWKV 模型的训练数据包括英文以外的其他语言(例如中文、日文等),多语言能力比大多数现有的开源模型要好。 |
| | | | |
| | ==== 不足 ==== | | ==== 不足 ==== |
| | | | |
| − | * RWKV 基底模型对提示词(prompt)的格式非常敏感,提示词的格式对生成结果影响较大。 | + | * RWKV 基底模型对[[提示词]](prompt)的格式非常敏感,提示词的格式对生成结果影响较大。 |
| | * 出于架构设计,RWKV 模型在需要回顾的任务上较弱,因此需要恰当地对提示词进行排序。比如先给模型提供任务指令,再提供需要执行任务的材料文本。 | | * 出于架构设计,RWKV 模型在需要回顾的任务上较弱,因此需要恰当地对提示词进行排序。比如先给模型提供任务指令,再提供需要执行任务的材料文本。 |
| | ---- | | ---- |
| 第969行: |
第969行: |
| | === 优势 === | | === 优势 === |
| | | | |
| − | *推理效率高:RWKV 在推理阶段采用类 RNN 的结构,具备常数时间和常数内存开销,尤其适合流式生成和边缘设备部署。 | + | *推理效率高:RWKV 在推理阶段采用类 [[RNN]] 的结构,具备常数时间和常数内存开销,尤其适合流式生成和边缘设备部署。 |
| | | | |
| − | *训练可并行:通过 Token-Shift 和 Time-Mix 等机制,RWKV 训练过程可以并行处理整个序列,性能接近 Transformer。 | + | *训练可并行:通过 Token-Shift 和 Time-Mix 等机制,RWKV 训练过程可以并行处理整个序列,性能接近 [[Transformer架构|Transformer]]。 |
| | | | |
| − | *轻量部署友好:相比传统 Transformer,RWKV 对显存和计算资源的需求更低,可在低功耗设备上运行较大规模模型。 | + | *轻量部署友好:相比传统 [[Transformer架构|Transformer]],RWKV 对显存和计算资源的需求更低,可在低功耗设备上运行较大规模模型。 |
| | | | |
| | *开源生态活跃:RWKV 模型和工具链全面开源,已有多个版本和社区维护的微调模型,便于研究与实际应用。 | | *开源生态活跃:RWKV 模型和工具链全面开源,已有多个版本和社区维护的微调模型,便于研究与实际应用。 |
| | | | |
| − | *语言建模能力强:实验证明 RWKV 在多项语言任务中表现接近主流 Transformer 模型,具备良好泛化能力。 | + | *语言建模能力强:实验证明 RWKV 在多项语言任务中表现接近主流 [[Transformer架构|Transformer]] 模型,具备良好泛化能力。 |
| | | | |
| | === 不足 === | | === 不足 === |
| | | | |
| − | *架构新颖,生态相对较小:尽管发展迅速,RWKV 仍处于相对早期阶段,社区资源、教程、微调工具等不如 Transformer 丰富。 | + | *架构新颖,生态相对较小:尽管发展迅速,RWKV 仍处于相对早期阶段,社区资源、教程、微调工具等不如 [[Transformer架构|Transformer]] 丰富。 |
| | | | |
| | *缺乏广泛工业验证:RWKV 在学术与开源社区取得一定成果,但在大规模商业应用中的成熟度尚需验证。 | | *缺乏广泛工业验证:RWKV 在学术与开源社区取得一定成果,但在大规模商业应用中的成熟度尚需验证。 |
| | | | |
| − | *模型兼容性问题:由于架构与 Transformer 存在根本差异,某些专为 Transformer 优化的技术(如 Attention 可视化)不再适用。 | + | *模型兼容性问题:由于架构与 [[Transformer架构|Transformer]] 存在根本差异,某些专为 [[Transformer架构|Transformer]] 优化的技术(如 Attention 可视化)不再适用。 |
| | | | |
| | *调参和训练技巧不够成熟:RWKV 的训练过程对时间混合系数、初始化方式等较为敏感,目前仍在不断优化与摸索中。 | | *调参和训练技巧不够成熟:RWKV 的训练过程对时间混合系数、初始化方式等较为敏感,目前仍在不断优化与摸索中。 |