对,这个就是被吹上天的什么颠覆transformer的nested learning网络。
我们今天就讲它。
我们先考虑一个问题,transformer被诟病的点是什么?
1- 狂吃显存(这个其实不在这里解决)
2- 狂吃算力(这个其实也不在这里解决)
3- 灾难遗忘(这里能解决一部分)
4- 不存在一个中间记忆(是的今天我们主要讲这部分)
那么什么叫不存在一个中间记忆
这篇论文就炒作了一个很有趣的概念
什么叫中间记忆,我们先从传统transformer谈起。
对于传统transformer来讲(不考虑归一化和残差网络的话)
我们其实就2层,一个attention层,一个是MLP(FFN)层
不了解transformer的可以看我之前的文章小周带你读论文-2之"草履虫都能看懂的Transformer老活儿新整"Attention is all you need(1)

对于传统的深度学习理论来讲:
attention层是干嘛的?
找到词元之间的关系:比如“我爱中国”, 这里会分成“我”。“爱”,“中国”,3个词元,他们之间是有相互关系,attention层用attention计算公式来完成这个工作

分别能求出“我”对于“我,爱,中国”这三个字的亲和度,进而把这个被qkv编码和计算了句子带着关联度的逻辑送到后面的。
这里多插一句,什么叫“MLP层去深度学习语义去了”?
看起来有点虚
如果看不懂那我们就引用更简单的逻辑来解释
在 2020 年的经典论文《Transformer Feed-Forward Layers Are Key-Value Memories》中,研究者打开了 MLP 的黑盒,发现它其实是由无数个键值对(Key-Value Pairs)组成的
这是什么意思呢?
MLP 的公式通常是 FFN(x) = ReLU(xW1)W2。我们可以把它看作两步:
-
第一步(W1 层):模式识别(Pattern Matching)
-
W1的每一行都是一个 Key。
-
它在探测输入 x里有没有某种特定的模式。
-
举例:某一个神经元可能专门探测“是否出现了【科技公司】+【发布会】”这种模式。如果探测到了,这个神经元就被激活(ReLU 输出 > 0)(激活多了,占显存就多了所以后来给大MLP拆小了训,就有了MOE

)。
-
-
第二步(W2 层):知识输出(Content Retrieval)
-
W2 的每一列都是一个 Value。
-
一旦第一步的神经元被激活,第二步就会输出对应的 Value。
-
举例:对应的 Value 可能就是一个向量,代表“股价上涨”或者“新产品”的语义。
-
所以在传统理论里,MLP 就是一个巨大的、静态的“知识库”。
-
输入:“苹果” + “发布会”。
-
MLP(W1 检测):检测到“科技巨头开发布会”模式。
-
MLP(W2输出):输出“iPhone”、“iOS”、“昂贵”等关联语义,它不会给你整到“苹果发布会发布了红富士又脆又甜一类的句子出来”。
这个逻辑运行的其实一直还成,现在的例如gemini,gpt,claude,qwen啥的也都是按着这个套路,小修小补的在现网上服务的都挺好,而且还时不时得不断刷新各种benchmark
那么你们在用大模型最烦的是什么?
其实就是幻觉,乱答
幻觉的产生我们以前讲过好多次了,本次说一下rootcause就是MLP里的知识不对(如果你用推理的tokennizer都错了,这类的无聊问题就算了,这种问题就别在这讨论了)
MLP的知识咋来的 , 其实就是pretrain,至于Fine-tuning和RL并没有改变模型的知识,只是改变了回答的pattern和优选答案
那么pretrain结束了以后呢,MLP的w1和w2这两层就的权重就fix了,也不会改变了,所以这篇论文管这个叫参数化,参数化的东西就改不了了,除非你重训(其实圈梁tunning和RL也修改了MLP)
如同我们刚才讲的MLP实际上是让模型有了公序良俗,和世界观,换到这个论文的概念就是它掌握的就是长期记忆,我们人类对于长期记忆的定义基本上也存在于历史上真实发生的事件,科学定理,这一类的东西。
如果你的大模型没有这方面的知识(恰巧你的tunning调的也不成,temperature这些采样又底线灵活)它就乱答,比如你问你一个你们企业里面的术语,它给你一顿乱答。
那现在解决幻觉的或者新知识体系输入的情况最好的是rag(说tunning的人叉出去)
rag的逻辑就不说了,我们单谈它啥能行,是因为它用了in-context-learning ICL的概念,那它为啥能呢?因为attention层在推理阶段处理你的prefill的时候kv是随着q不断变化的,用论文里的概念,就是attention层是非参数化的,可以随时当成一个短期记忆系统来使用!!!
还是假设我们有一个序列:["我", "爱", "中国"]
首先:处理第1个token "我":
输入序列:["我"]
K = [k_我]
V = [v_我]
Q = [q_我]
Attention输出 = softmax(q_我 · k_我^T) · v_我
= 1.0 · v_我(1.0是因为”我“肯定离”我“最近,所以概率是百分之百也就是1)
= v_我
"记忆内容" = {我: v_我} ← 只有1个token的信息
然后:处理第2个token "爱":
输入序列:["我", "爱"] ← 序列变长了!
K = [k_我, k_爱] ← K矩阵变大了!
V = [v_我, v_爱] ← V矩阵变大了!
Q = [q_爱]
Attention输出 = softmax([q_爱·k_我^T, q_爱·k_爱^T]) · [v_我, v_爱]
= [w1, w2] · [v_我, v_爱]
= w1·v_我 + w2·v_爱
"记忆内容" = {我: v_我, 爱: v_爱} ← 现在有2个token的信息!
最后处理:第3个token "中国":
输入序列:["我", "爱", "中国"] ← 序列又变长了!
K = [k_我, k_爱, k_中国] ← K矩阵又变大了!
V = [v_我, v_爱, v_中国] ← V矩阵又变大了!
Q = [q_中国]
Attention输出 = softmax([...]) · [v_我, v_爱, v_中国]
"记忆内容" = {我: v_我, 爱: v_爱, 中国: v_中国} ← 3个token!
所以现在大家理解了吗?
虽然说在你训练完了以后attention层也和mlp层一样,权重被fix住了,但是你再推理的时候,你的KV是随着你的q 一直再改变的。
你的kv变了行程了我上面讲的所谓记忆内容,例如这个: {我: v_我, 爱: v_爱, 中国: v_中国},这就使模型有了新知识的能力。
所以如果我们严谨一点,补充给模型新知识和ICL是rag的能力吗?
那显然不是啊,是模型的attention层级的能力,是不是rag能怎么样,难道你跟他诉说着人生的经历,一句一句的写,最后随着context里一起进到模型推理,就不是补充新知识和ICL了吗?
刚才说了MLP可以推理公序良俗,可以推理科学原理,历史事件
但是有没有它没有的,肯定有啊,那这部分谁来推理呢,就靠着attention层的所谓这个kv变化产生的“记忆”来进行推理和分析,常见的场景就是比如让LLM基于文章写个观后感,或者让他OCR抽出字符舔到报销单的里这种的任务。
现在看起来很完美了(实际LLM或者VLM啥的也都是这么运行的)
1-如果模型掉电了呢?
那你现在再聊就还得重新输入一遍(别考虑什么外部存储自动load之类的solution,我们今天不谈这个)
2-模型context都是有上限的,你可能一直输入信息吗,这个是永远不可能的(别谈周期性信息压缩,因为不只你能想到,信息压缩的同时,信息精确度也会打折扣),而且信息输入的越多,越会碰到大海捞针的逻辑,同时因为标准transformer的推理消耗算力是O^2(也别跟我谈linerattion,因为linerattention也不代表没上限),最后你的钱包也受不了(大多数推理模型虽然标识1个M2个M的上下文窗口,但是你超过200K 以后收费直接加倍甚至更高)
综上所属,传统的transfomer走了两个极端
1- 一个是MLP层的fix参数化的记忆
2- 另一个是可以实现动态记忆的attention层的非参数化记忆
也就引出了nested learning要普及的中不溜记忆

今天先写到这吧,本来想写完的,有点累了,转连载吧,我个人觉得即使这个换角度考虑transoformer,文章大家也需要消化一下,所以过几天再给他写完。
285



被折叠的 条评论
为什么被折叠?



