一句话定义
MLP 即键值记忆(FFN as Key-Value Memory)是一种理解 Transformer 内部运作的观点:每层的前馈网络(FFN,也常被叫作 MLP)本质上是一张「软性、可微的查找表」,键(key)和值(value)都写在权重里,模型靠它把训练时记住的事实模糊地检索出来。
它是怎么工作的
Transformer 的每一层大致分两半:注意力子层负责在句子内部搬运信息,前馈子层负责对每个位置单独做变换。前馈子层的结构很朴素——两层线性变换,中间夹一个非线性激活函数。
把这两层矩阵拆开看,事情就清楚了:第一个矩阵的每一行可以看成一个「键向量」,第二个矩阵的每一列是对应的「值向量」。输入向量先和所有键做内积,得到一组匹配分数;激活函数把不相关的分数压到接近零,剩下的分数当作权重,把对应的值加权求和,得到输出。
打个比方,这就像一台图书馆检索系统。每个键是索引卡上的「标签词」,值是卡片上的「内容」。你拿一句话当查询,系统不会只命中一张卡,而是把相似度高的若干张卡一起抽出来,按相似程度混合成答案。更关键的是,整个过程由矩阵乘法完成,处处可导——所以键和值可以一起用梯度下降慢慢调,模型自己学会「哪些标签该配哪些内容」。
和相邻概念的区别
| 对比项 | 注意力里的 KV | 前馈层里的 KV |
|---|---|---|
| 来源 | 从当前输入动态算出 | 训练后固化的权重 |
| 检索方式 | 按上下文相关性 | 按参数相似度 |
| 角色 | 工作记忆,搬运上下文 | 长期记忆,存放事实与模式 |
再对比两种常见联想:传统键值数据库和记忆网络是「硬查找」,索引离散、不可导;前馈层是「软查找」,一次取多条并按权重叠加。嵌入表(embedding table)是一个离散编号取一行;前馈层用连续向量算相似度,取多行组合。
对从业者和普通人的意义
第一,它解释了幻觉的来源。模型召回的是「最像的那张记忆卡」,而不是去真值库里核对,看起来理直气壮,其实是模糊匹配。
第二,它让「知识定位与编辑」成为可能。如果想改掉某个事实,动相关的少量前馈层权重,往往比重新训练划算得多,这也是模型编辑(model editing)类方法的思路基础。
第三,它解释了时效性短板。权重里的记忆是训练数据截止时的快照,要新鲜事实就得外挂检索(RAG),具体效果以官方文档和实测为准。
第四,它给了一个直觉:前馈层的中间维度越宽,可写入的「记忆卡」越多,模型容纳事实性知识的能力大致越强。参数量与知识量是粗略正相关,不是严格等式。
一句话记住
注意力负责「看着上下文说话」,前馈层负责「从参数里翻记忆」,而它翻记忆的方式,就是一次可微的键值查找。
