RWKV元始智能 09月25日 18:01
RNN升级路线探讨
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文探讨了升级循环神经网络(RNN)的常见路线,包括扩大、缩小和混合状态,以及复杂的演化方法。作者认为扩大状态是一个误区,而缩小状态和混合状态则更具潜力。此外,作者还提出了将模型内部的小模型做得更复杂的方法,并强调了设计下一代技术的重要性。

🔍扩大State被认为是朴素但错误的思路,增加参数量会导致性能提升但受限于batch size,新型RNN的改进方向是探索从scalar state到tensor state的阶梯式发展。

🧶缩小State的方法多种多样,包括sparse state, structured state, shared state, compressed state, low-rank state, quantized state等,通过与kv cache的玩法相通,可以创造无数种排列组合。

🔄混合State的有效方法包括头间和层间的混合,以及将当前token的最后层与下一个token的最早层打通,实现层循环。

🌀复杂演化包括对现有模型进行指数级或分数级扩展,以及DeltaProduct和换内部优化器等方法,但需要注意数值稳定性。

🚀作者认为深度学习和神经网络已经陷入瓶颈,RNN的升级只是续命,真正需要关注的是设计下一代技术。

原创 PENG Bo 2025-09-14 20:59 广东

本篇接前篇(理解LLM系列:文字vs图像)

💡Tips

转自知乎用户 PENG Bo,原文链接:

https://zhuanlan.zhihu.com/p/1950587212543525767

本篇接前篇(理解LLM系列:文字vs图像)。

三、升级RNN的常见路线

据传,除了已公布的,最近国内还有很多家在做RNN。

各家做了之后,必定就会大吹“创新”以及RNN的优点,一改此前全员黑RNN的态势。

我看,我还是直接写一篇,覆盖各种常见的RNN升级路线,因为都“过于落后,可以公开”。

某些“做研究靠考古”的朋友,这里教你做事,照着做就可以灌n篇。

第1招:扩大State

这是朴素的想法,也是典型的误区。例如,扩大head size,给内部模型加大参数量,当然还有混合模型,等等。

State越大,性能越好,但bsz受限,未来必败。

我先给出一种通用的理解。

我的观点,这里有一个“状态的阶梯”:scalar state => vector state => matrix state(目前新型RNN的位置)=> tensor state(偶尔有论文写) => function state(注意attention实际是一种例子) => functional state => … 后面还能写很多,懂数学就知道。

当然,还可以脱离线性代数,从其它观点看(群,李群,微分几何,泛函,范畴,等等)。以及,新型硬件可改变其中的某些复杂度。一切才刚刚开始。

言归正传,举例,肯定有人搞tensor state,那么,其实我在Discord说过,如果只在部分头用tensor state(例如在衰减很慢的头用),会有一定性价比。

可以用sum_{i,j} a[i] b[j] s[i,j,n](别用落后的 sum_{i,j} a[i] a[j] s[i,j,n]),用64x64x64维state。

由于我这么说,如果真有人这么做(或者在部分层做),或许就想换个做法,那可以组合后续的招数。

此外,RWKV-4的state特别小,其实有显著改进空间。

第2招:缩小State

这里的玩法极多。sparse state, structured state, shared state, compressed state, low-rank state, quantized state等等。这和kv cache的玩法相通,可以灌无数篇。

这里的灌水法,是考察六个维度,若按我的习惯命名,是:

B:batch size,T:ctxlen,H:head,N:head_size,L:layer,Q:bytes。

RNN state size = f(B,H,N,L,Q),Attention state size = f(B,T,H,N,L,Q)。

每个维度,都可以用每种技巧,所以,排列组合就是几十种。

举例,在 H 维度的 sparse,可在外用 router,也可在里用 router:让每个head有多组state,每步只选一组使用。于是,state扩大n倍,存储存取量不变。

举例,在 L 维度的 share,经典例子是 kv cache 的层间共享。那么 RNN state 当然也可以做。

举例,在 L 维度的 sparse,无需永远经过全部层。

举例,在 T 维度的 compress,把序列逐渐压短,token合成super-token,以至于无需 tokenizer,也大有可为。

这完全可以写成一个bingo,看各家会灌多少篇。

第3招:混合State

肯定有效的:头间的state混合,层间的state混合。这个贵,可以偶尔做。也可以在readout做,便宜点。

以及经典的,把这个token的最后层,和下个token的最早层,打通。这是做层循环的方向。

举个例子,一个L层网络,打通一步,就可变成一个2L层的网络,这是完全可训的。

第4招:复杂演化

如果现在是A,那么exp(sA)-1,1/(1-sA)等等级数都可试。这是常识。数值稳定性未知。

这也包括DeltaProduct和换内部优化器。这也包括,在从TTT观点看时,把模型内部的小模型做得更复杂。

都必定有好处。问题只在于【深度为L1的用复杂演化的模型】vs【深度为L2的用简单演化的模型】对齐速度后,两边的胜负。


在这4招之外,还有很多跳出框架的招数,本篇不提。本篇只谈常识。

如果有能力的读者,想知道跳出框架的招数,欢迎加入RWKV,也欢迎实习,可以写很多篇论文。

如果本篇的赞和评论够多,我也考虑再写一些。


题外话。从前有种种事情(包括token-shift/short-conv/induction-head,包括引入decay,包括纯RNN最早scale到14B),是我最早做的,没人给我credit,我认为无妨。

说个趣事。那时我在知乎的文章,标题是《中文语言模型研究:(1) 乘性位置编码》,因为我说,此前其它人的都是“加性位置编码”。我具体提出的是“使用实数的乘性位置编码”。

有人对此念念不忘:

后来,有一天,就出现了“使用复数的乘性位置编码”:

其实【部分“无位置编码”+部分“使用实数的乘性位置编码”】训练效果完全相当于【部分“无位置编码”+部分“使用复数的乘性位置编码”】。复数在此完全没用。

这些事情,我早就知道,我是真懒得说。既然反复挑衅,就送你一程。


总之,后来我就会少说一些我知道的东西。

但是,后来我发现,某些研究者,反而会颠倒黑白,说我抄他们的东西,滑天下之大稽。

这里就略多说点,看看你们还有什么招。

从更长远看,这里的一切,都只有历史价值。

因为深度学习,神经网络,梯度下降,已经就卡在这个位置了。

现在这种RNN也很原始,只是给它续点命。我更关注于设计真正的下一代技术。

关注我们:

阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

RNN 深度学习 神经网络 技术升级 下一代技术
相关文章