本文已获授权转载。 原文链接: https://zhuanlan.zhihu.com/p/1915054612559426430 作者 PENG Bo 是 RWKV 创始人。摘要:本文已获授权转载。 原文链接: https://zhuanlan.zhihu.com/p/1915054612559426430 作者 PENG Bo 是 RWKV 创始人。
第一幕:从X到微信群
前不久,我在 X 刷到 DeltaNet 作者 Songlin 的这条消息:
其中的 RWKV-7 数据颇为诡异,因为 RWKV-7 论文的结果是:
这代码在
https://github.com/Triang-jyed-driung/zoology-rwkv。如果同样计算平均 MQAR acc,RWKV-7 在 state dim 8k 是 0.94+,在 state dim 16k 就已是 0.99+。这与图中的数据点是天与地的差距。原图无疑有错,于是我在下面回复,建议用 RWKV-LM 的官方实现(因为zoology用的FLA库的RWKV-7有许多细节仍未对齐):
然后我打开微信,发现 Songlin 在 FLA 微信群(500人群)炸了,我发个截图确认,更炸:
Su 抓紧时机补刀,Songlin 总结,牛逼!
随后 Songlin 直接在全群置顶这句【恶心人是吗】,置顶了几天,牛逼plus!(这个我没截图,在群的人都可以看到)
请问,测其它人的方法,先按其它人给出的细节做(而且其它人愿意详细说明),是不是基本的研究伦理?
对于 Songlin 和 Su,不是。
而且 DeltaNet 也有对应 token-shift 的 shortconv,这种 trick 是我最早在新型 RNN 加的(而且我最早就说了这是做后来被称为 induction head 的事情),之后全部人都加。
那么,如果 Su 测 DeltaNet,是否会加 shortconv?
而这个群,就在几天之前,还在讨论 RWKV-8 的 DeepEmbed。所以,只在问我的时候才友善?牛逼。
完全没必要在群里回复。我开始看 HazyResearch/zoology 项目,看它有哪些问题。
第二幕:看代码,做实验
毫无悬念,zoology 充满问题。第一个错误最离谱,它直接算错了 RWKV-7 的 state size。
在 d_model=128 时,它算成了4倍。在 d_model=256 时,它算成了16倍。
正确的 state size 公式是 num_heads * head_k_dim * head_v_dim。这公式对于 RWKV-7 和 DeltaNet 都一样。
但 zoology 的 DeltaNet 代码用了正确公式,RWKV-7 用了错误公式 num_heads * k_dim * v_dim。
我非常,非常难以理解,他们为何能写错这个最基本的公式。
我提出后,过了几天,zoology 终于修了这个错误:
修正后,RWKV-7 的两个黄点往左移动n倍,离谱程度降低了些:
这个 zoology 的问题存在了几个月,我看到已有论文用了它的错误计算,例如 ATLAS (2505.23735) 。下图的黑箭头仅为示意,因为不知道 ATLAS 具体测的什么维度。
第二大问题是,zoology 给测的所有架构都加了 shortconv length=4,因为这对于超浅模型跑 MQAR 的 grokking 特别有用。如果不加,效果没眼看。
下面是 zoology README:
但是,唯独没给 RWKV-7 加。它的 RWKV-7 还是用 token-shift,类似于 shortconv length=2。
跑正常语言模型用 length=2 合适。但超浅模型跑 MQAR,需要更长 length 才收敛快。
所以,标准 RWKV-7 在此会吃亏,需要用同样的 shortconv length=4 才对齐其它架构。
【其实还有细节,RWKV 在 FFN 也加了 token-shift(从最早 RWKV-1 就是这样做),正是为了造出更长的 conv length。而 zoology 的测试当然没用 RWKV 的特殊 FFN】
我也不去对齐了,我直接做一件最有说服力的事情。
我们看各个架构的核心算子(只看单个头,简化公式)。
这是 DeltaNet 算子,其中 βt 是标量:
这是 GatedDeltaNet 算子,其中 αt βt 都是标量:
这是 RWKV-7 算子,其中 w a b v k 都是矢量:
显见 RWKV-7 算子的表达力严格更强,这个算子可以包含许多其它架构。
顺带一提,这个形式是我在 2024 年 9 月公开公布的:
当时 Songlin 在 discord 私聊问我,RWKV-7 的 w 梯度怎么算,我发了链接:
而在此前 2024 年 6 月,我也在私聊发了我算其它梯度的方法:
包括我用 Mathematica 的验算:
那么,是怎样的事物,将一种正常人,变成了另一种正常人(或许更普遍)?我们可以思考。
言归正传,观察这三个公式:
可见,如果我们允许 β 是矢量,然后在 RWKV-7 设置 w = 1, a = -βk, b = k, v = βv, k = k 就能得到一个 BetterDeltaNet。
我在
https://github.com/BlinkDL/zoology提供了修改后的代码。实测 zoology 最难的 MQAR 任务,8192 state size,256 kv pairs,黑色是 BetterDeltaNet,彩色是 DeltaNet。
14.31 ± 0.07% vs 13.09 ± 0.67%,使用 RWKV-7 kernel 的 BetterDeltaNet,赢。
在此显示,不加任何 trick,只将 DeltaNet kernel 替换为 RWKV-7 kernel,几行代码,就可以提升效果。
由于 RWKV-7 还有巨多 trick,听说有人会怀疑,RWKV-7 是靠 trick 才 work 吗?
当然不是,如前所述 RWKV-7 是在数学上更通用的形式,严格包括许多其它架构,表达力严格更强。
同时,加更多 RWKV-7 的 trick 会更好。后续我会再写一篇,列出 RWKV-7 的 trick 列表。
欢迎测试
的 DeltaNet(已改为 BetterDeltaNet)对比https://github.com/HazyResearch/zoology的 DeltaNet。测试只需一张 16G 显存的显卡。总结:
做好 baseline 是细致的工作,也涉及学术伦理。
然而,太多 AI 论文,会有意无意压其它人的 baseline。
恐怕,这往往是“有意的无意”(我称为 deliberate carelessness),其它人问起来,就说是自己不小心,真是进退自如。
其实,不仅是 RWKV-4/5/6/7 长年被各种论文黑,许多新架构论文也会故意用很弱的 transformer baseline. This is only discrediting the whole research area.
其实,为什么 RWKV-7 加这么多 trick?
因为我真炼模型。我必须真和满血 transformer 比(而且是用强数据的 transformer,所幸开源数据也在进步)。我洗 HuggingFace 数据集就洗了几百个。
现在 RWKV7-G1 的 2.9B/1.5B 是全世界所有纯血 RNN 架构模型中 token 炼得最多的,10+ T tokens。它的 data scaling 经过了验证,是有竞争力的基底模型,这可以用它对于全新数据的压缩能力去证明:
这里是测2025年4月的数据(所有模型都没见过),测字节压缩率(和tokenizer无关):
欢迎大家试训 RWKV-7,方法见
https://github.com/BlinkDL/RWKV-LM,默认配置在 8G 显存的单卡(需支持bf16)就行。遇到任何问题,都欢迎问。也可以看官网https://rwkv.cn/其中已有 93 篇使用 RWKV 的论文。第三幕:欢迎对线
请大家想象:
一个【从前问过你问题的人】,在【你在几天前刚分享过新技巧(DeepEmbed)后】,基于【纰漏百出的谬论】,使用【粗鄙的骂街和威胁你】,并在【500人大群置顶恶言(置顶了几天)】,这是一种什么形态?
欢迎讨论。
其实,这真的特别正常。因为我们人类社会的结构,就是鼓励和培养这种形态。这不分国籍和种族,都一样。
他们难以想象,在这世界上,竟然,有人真没兴趣玩他们的这个臭水沟游戏。
我认为,这不是我有多高尚,而是,很抱歉,这个臭水沟游戏的气味,真有点冲。
不过,观察这个臭水沟游戏,差可消遣,例如,这个 FLA 群,热衷于排各种 X神 X少 X佬(这真的特别正常),最近还开始排 东X西X南X北X(这同样特别正常,但是,我真的,我笑死)。
我做 AI 有些目标,列几个目标:
一、我看不下去,怎么某些人可以这样蠢(坏的本质是蠢,一切恐惧来自于火力不足)。希望以后 AI 帮人长点脑子。教育恐没用,需要生物,吃药也好,基因改造也好,来点效果。
二、我得尽快做完事情,然后就不用陪这群人玩,他们自己继续玩,谢谢。
南方有鸟,其名为鹓鶵,子知之乎?夫鹓鶵发于南海,而飞于北海,非梧桐不止,非练实不食,非醴泉不饮。于是鸱得腐鼠,鹓鶵过之,仰而视之,曰:'吓!'原本在调 RWKV-8,来这么一出,花了几天时间,希望正本清源。
谈点正事。
最近很多论文卷 TTT,用超大 state size,这是走回 transformer 老路,丑陋。
TTT 适合由 AI 做 NAS 去卷。各种迭代公式,AI 写 kernel,可以试到吐。
真正重要的问题是:如果 RNN 不解决长文本,就永远清不了 attention。
所以 RWKV-8 的目标是,在保持 state size 不变的前提下,提升长文本性能。
这看似不可能,但我有方法。
目前调到 3x RWKV-7 性能,希望调到 10x 以上,把下图做成全绿:
与此同时,有趣的是,在 FLA 群,现在还时而有人想我说说 RWKV-8。
现在人的记忆力只有七秒,看来,长文本以后会变成伪需求。
不妨做个调查,如果你是我,你会怎样做?
下面开始直播,本文发出后,几分钟内:
解决不了问题,就解决提出问题的人?
让我们观察,你还准备玩什么招数?
DeltaNet和RWKV均为中国团队创建的 LLM 架构:
DeltaNet 是结合线性 Transformer 和非线性 Transformer 架构的模型,通过特定方法将非线性 Transformer 转换为线性 DeltaNet 形式,从而在保持性能的同时提高计算效率,经实验验证,在特定数据集上能取得与原始非线性模型相当的性能。 https://sustcsonglin.github.io/blog/2024/deltanet-1/RWKV(是一种具有 GPT 级大型语言模型(LLM)性能的 RNN,也可以像 GPT Transformer 一样直接训练(可并行化)。 RWKV 结合了 RNN 和 Transformer 的最佳特性:出色的性能、恒定的显存占用、恒定的推理生成速度、"无限" ctxlen 和免费的句嵌入,而且 100% 不含自注意力机制。 https://rwkv.cn/docs/RWKV-Wiki/Introduction来源:爱哭的小跳蛙