RWKV 语言模型:具有 Transformer 优点的 RNN

RWKV 语言模型,这是一个具有巨大潜力的开源大型语言模型。由于 ChatGPT 和一般的大型语言模型最近受到了很多关注。在这篇文章中,我将尝试解释与大多数语言模型(transformer)相比,RWKV 有何特别之处。

在这里插入图片描述

RWKV 可视化 浅谈outlier 对LLM的影响…
RWKV-LM项目地址
ChatRWKV 聊天项目地址
WebUi-ChatRWKV 项目地址
discord 加入此项目
首先 先解释一下模型为何叫RWKV(作者本人BO哥自己说的)

  • 模型最核心的机制 是RWKV 因为没有使用注意力 而类似注意力的东西叫做WKV
  • SEO 独特些排名靠前

RWKV 模型是一种巧妙的 RNN 架构,使其能够像transformer一样进行训练。所以要解释RWKV,我需要先解释一下RNNs和transformers。

在这里插入图片描述
在这里插入图片描述

RNN 循环神经网络

传统上,用于序列(如文本)处理的神经网络是 RNN(如 LSTM)。RNN 接受两个输入:State和Token。它一次通过输入序列一个Token,每个Token更新状态。例如,我们可以使用 RNN 将文本处理成单个状态向量。然后,这可用于将文本分类为“正面”或“负面”。或者我们可以使用最终状态来预测下一个Token,这就是 RNN 用于生成文本的方式。

Transformer

由于 RNN 的顺序性质,它们很难在多个 GPU 上大规模并行化。这激发了使用“注意力”机制而不是顺序处理的动机,从而产生了一种称为Transformer的架构。Transformer同时处理所有Token,将每个Token与所有先前的Token并行比较。具体来说,注意力为每个Token计算“key”, “value” and “query”向量,然后使用这些计算所有Token对之间的权值。

除了能够通过大规模并行化加速训练之外,大型 Transformer 在基准测试中的得分通常优于 RNN。

然而,注意机制与要处理的序列的长度呈二次方关系。这有效地限制了模型的输入大小(或“上下文长度”)。此外,由于注意力机制,在生成文本时,我们需要在内存中保留所有先前Token的注意力向量。这比只存储单个状态的 RNN 需要更多的内存。

RWKV

RWKV 结合了 RNN 和 Transformer 的最佳特性。在训练期间,我们使用架构的Transformer类型公式,它允许大规模并行化(具有一种与Token数量线性扩展的注意力)。对于推理,我们使用等效的公式,它的工作方式类似于具有状态的 RNN。这使我们能够两全其美。

所以我们基本上有一个像Transformer 一样训练的模型,除了长上下文长度并不昂贵。在推理过程中,我们需要的内存要少得多,并且可以隐式处理“无限”上下文长度(尽管在实践中,模型可能很难泛化到比训练期间看到的上下文长度长得多的上下文长度)。

好的,但是性能呢?由于 RWKV 是 RNN,因此很自然地认为它在基准测试中的表现不如 transformer。此外,这听起来像是线性注意力。许多以前的线性时间注意力Transformer架构(如“Linformer”、“Nystromformer”、“Longformer”、“Performer”)似乎都没有SOTA。

性能

RWKV 似乎可以像 SOTA transformer一样缩放。至少多达140亿个参数。
在这里插入图片描述

大型语言模型的成本估算

当查看 RWKV 14B(140 亿个参数)时,很容易问当我们像 GPT-3 一样扩展到 175B 时会发生什么。但是,训练 175B 模型的成本很高。计算类似 transformer 架构的近似训练成本实际上很简单。

对于每个输入标记,训练的瓶颈本质上是乘以所有参数,然后将其相加。通过自动微分,我们可以用大约另外 2 倍计算梯度,每个标记每个参数总共 6 个 FLOP。因此,在 3000 亿个Token上训练的 14B 模型大约需要14B×300B×6=2.5×1022 FLOPs。我们使用 A100 GPU 进行训练。使用 16 位浮点数,A100 理论上可以达到 312 TFL

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值