RWKV元始智能 09月15日
揭示RNN升级的常见技术路线
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了循环神经网络(RNN)在技术发展中的常见升级路线,旨在为相关研究提供指导。文章细致地梳理了四种核心的升级策略:扩大State、缩小State、混合State以及复杂演化。通过对State的维度(如向量、矩阵、张量等)进行分析,并结合批次大小(bsz)、上下文长度(ctxlen)、头数(H)、头大小(N)、层数(L)以及字节数(Q)等关键参数,文章提出了多种创新的优化方法,如稀疏化、结构化、共享、压缩和量化等,并指出这些方法在KV Cache等领域已有应用。此外,文章还探讨了跨层和跨头的State混合以及模型内部复杂度的演化等高级策略,并提及了作者在位置编码等领域的早期贡献。整体而言,文章为理解和改进RNN模型提供了详实的理论框架和实践思路。

📈 **扩大State**:通过增加State的维度(如从向量到矩阵、张量甚至函数状态)来提升模型性能,但需注意可能受限于批次大小(bsz),并在混合模型和特定头中使用Tensor State可能具有性价比。

📉 **缩小State**:利用稀疏化、结构化、共享、压缩、量化等多种技术来优化RNN的状态表示,以提高效率。这可以通过调整批次大小、上下文长度、头数、头大小、层数和字节数等维度实现,例如在Head维度上使用Router,或在Layer维度上进行State共享和稀疏化。

🔄 **混合State**:结合不同头之间或不同层之间的State信息,提升模型能力。这种混合可以在模型的高层(readout)进行,成本相对较低,也可以通过打通当前Token的最后层与下一个Token的最早层来实现层循环。

🚀 **复杂演化**:探索更复杂的数学模型来演化State,例如使用泰勒级数展开(exp(sA)-1)或分数阶微分方程等,同时也可以考虑改变内部优化器。这类方法可能带来性能提升,但需要权衡模型深度与演化复杂度。

原创 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 循环神经网络 模型升级 State AI 深度学习 技术路线 RNN Upgrade Paths Recurrent Neural Networks State Management Artificial Intelligence Deep Learning
相关文章