当GPT-4被问到"法国的首都是哪里"时,它能准确回答"巴黎"。这个看似简单的过程背后,隐藏着一个深刻的问题:大模型是如何"记住"这些事实的?是参数随机分布,还是有组织的存储?

2021年,特拉维夫大学的研究团队在EMNLP上发表了一篇里程碑式的论文,揭示了一个令人惊讶的发现:Transformer中的前馈神经网络(FFN)层,本质上是一个键值存储器(Key-Value Memory)。这个发现不仅改变了我们对大模型的理解,更催生了"知识编辑"这一全新研究方向。

本文将深入剖析FFN如何存储知识、为什么中间层最重要、以及知识编辑技术如何修改大模型的记忆。

FFN在Transformer中的位置

在理解FFN如何存储知识之前,我们需要先看清它在Transformer架构中的位置。每个Transformer层由两个核心组件构成:多头注意力机制和前馈神经网络。

flowchart TB
    subgraph Transformer层
        A[输入] --> B[多头注意力]
        B --> C[残差连接 + LayerNorm]
        C --> D[FFN]
        D --> E[残差连接 + LayerNorm]
        E --> F[输出]
    end
    
    subgraph FFN内部结构
        D --> D1[升维投影 W1]
        D1 --> D2[激活函数]
        D2 --> D3[降维投影 W2]
    end
    
    style D fill:#ffcdd2
    style B fill:#bbdefb

FFN占据了模型参数的约2/3。以GPT-3为例,其175B参数中,FFN层贡献了超过100B的参数量。理解FFN,就是理解大模型存储知识的核心机制。

FFN的内部结构:升维与降维的舞蹈

FFN由三个关键部分组成,形成一个"升维-非线性-降维"的处理流程:

flowchart LR
    A[输入 x<br/>维度: d] --> B[Up-Projection<br/>W1: d × 4d]
    B --> C[激活函数<br/>ReLU/GELU/SwiGLU]
    C --> D[Down-Projection<br/>W2: 4d × d]
    D --> E[输出<br/>维度: d]
    
    style A fill:#e1f5fe
    style E fill:#e8f5e9
    style B fill:#fff3e0
    style D fill:#fff3e0

数学上,FFN的计算过程可以表示为:

$$\text{FFN}(x) = \sigma(xW_1)W_2$$

其中:

  • $W_1 \in \mathbb{R}^{d \times 4d}$ 是升维矩阵
  • $W_2 \in \mathbb{R}^{4d \times d}$ 是降维矩阵
  • $\sigma$ 是激活函数(如ReLU或GELU)

为什么是4倍升维? 这不是一个随意的选择。当使用ReLU激活函数时,大约50%的神经元会被置零。经过两层FFN后,信息损失约为 $\frac{1}{2} \times \frac{1}{2} = \frac{1}{4}$。为了补偿这个损失,升维4倍成为了一个合理的设计选择。

现代大模型(如LLaMA、Qwen)使用SwiGLU激活函数,它比ReLU更复杂,但核心思想相同:通过非线性变换引入表达能力,同时控制信息流动。

键值存储:Geva等人的关键发现

2021年,Geva、Cohen-Karlik和Globerson在论文《Transformer Feed-Forward Layers Are Key-Value Memories》中提出了一个革命性的观点:FFN可以被理解为一个键值存储器。

注意力机制 vs FFN:数学上的相似性

让我们对比一下注意力机制和FFN的计算公式:

注意力机制:

$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$

FFN:

$$\text{FFN}(x) = \sigma(xW_1)W_2$$

如果我们将$W_1$的每一列看作一个"键"(Key),$W_2$的每一行看作一个"值"(Value),那么:

$$\text{FFN}(x) = \sum_{i=1}^{4d} \sigma(x \cdot k_i) \cdot v_i$$

这个过程与注意力机制惊人地相似。下面的图示展示了FFN作为键值存储的工作原理:

flowchart TB
    subgraph FFN作为键值存储
        X[输入向量 x] --> K1[键向量 k1]
        X --> K2[键向量 k2]
        X --> K3[键向量 k3]
        X --> Kn[键向量 kn...]
        
        K1 --> |相似度计算| M1[m1 = σ·k1]
        K2 --> |相似度计算| M2[m2 = σ·k2]
        K3 --> |相似度计算| M3[m3 = σ·k3]
        Kn --> |相似度计算| Mn[mn = σ·kn]
        
        M1 --> V1[值向量 v1]
        M2 --> V2[值向量 v2]
        M3 --> V3[值向量 v3]
        Mn --> Vn[值向量 vn]
        
        V1 --> S[加权求和]
        V2 --> S
        V3 --> S
        Vn --> S
        
        S --> O[输出]
    end
    
    style X fill:#e3f2fd
    style O fill:#e8f5e9

两者的本质区别

尽管形式相似,FFN与注意力机制存在关键差异:

特性 注意力机制 FFN
键值来源 来自输入序列 固定的可学习参数
非线性 Softmax(归一化) ReLU/GELU(非归一化)
功能 上下文信息聚合 知识存储与检索
处理方式 位置间交互 位置独立处理

用一个比喻来理解:注意力机制像是"邮递员",负责在不同位置之间传递信息;FFN像是"大脑皮层",存储着从训练数据中学到的知识模式。

实验验证:FFN确实在"回忆"知识

Geva等人的实验进一步验证了这个假设。他们发现:

  1. 键向量捕获文本模式:$W_1$中的某些列会对特定类型的输入产生强烈响应。例如,某些键向量专门响应"国家"类词汇,另一些响应"时间"类词汇。

  2. 值向量编码输出分布:$W_2$中对应的行编码了在给定模式下的输出概率分布。当输入是"法国"时,对应的值向量会指向"巴黎"这个词。

这个发现解释了一个长期困扰研究者的现象:为什么有限上下文窗口的模型能"记住"训练语料中的事实? 答案是:这些事实被压缩存储在FFN的参数中,而不是依赖于上下文。

知识神经元:更细粒度的理解

2022年,Dai等人在ACL上发表了《Knowledge Neurons in Pretrained Transformers》,将FFN知识存储的理解推向了更细的粒度。

flowchart TB
    subgraph 知识神经元定位
        A[事实: 法国-首都-巴黎] --> B[输入模型]
        B --> C[因果追踪]
        C --> D[识别关键神经元]
        D --> E[验证神经元作用]
    end
    
    subgraph 知识存储示意
        F[神经元A: 存储"法国-巴黎"]
        G[神经元B: 存储"德国-柏林"]
        H[神经元C: 存储"意大利-罗马"]
        I[神经元...: 存储其他事实]
    end
    
    style A fill:#fff3e0
    style D fill:#e8f5e9
    style F fill:#ffcdd2
    style G fill:#c8e6c9
    style H fill:#bbdefb

研究发现,FFN中的某些特定神经元对特定事实有高度选择性。例如:

  • 某个神经元专门响应"巴黎是法国首都"这个事实
  • 另一个神经元专门响应"水在100°C沸腾"

这些神经元被称为"知识神经元"。研究者通过因果追踪方法定位这些神经元,并证明修改它们的值可以直接改变模型对特定事实的回答。

ROME:知识编辑的突破性方法

基于FFN存储知识的发现,2022年Meng等人在NeurIPS上提出了ROME(Rank-One Model Editing)方法,首次实现了精确的"知识编辑"。

flowchart TB
    subgraph ROME知识编辑流程
        A[原始知识: 法国-首都-巴黎] --> B[因果追踪定位]
        B --> C[找到关键FFN层和神经元]
        C --> D[计算新知识的向量表示]
        D --> E[秩一更新修改W2]
        E --> F[验证: 法国-首都-马赛]
    end
    
    subgraph 数学表示
        G["优化目标: min ||ΔW||_F"]
        H["约束: x*W2 + ΔW = v_new"]
    end
    
    style A fill:#ffcdd2
    style F fill:#c8e6c9
    style E fill:#fff9c4

ROME的核心步骤

  1. 定位层:通过因果追踪,找到存储特定事实的关键FFN层。研究发现,中间层的FFN对知识存储最为重要

  2. 计算目标向量:对于新的事实,计算其在FFN输出空间的目标向量表示。

  3. 秩一更新:通过闭式解,计算对$W_2$矩阵的最优修改,使得新知识被正确存储,同时尽量不影响其他知识。

ROME的成功证明了FFN确实是知识存储的主要场所,知识可以被精确定位和修改。后续的MEMIT方法扩展了ROME,支持批量知识编辑。

知识容量:每个参数能存多少知识?

一个自然的问题是:大模型到底能存储多少知识?2025年,ICLR上发表的论文《Physics of Language Models: Part 3.3, Knowledge Capacity Scaling Laws》给出了答案。

flowchart LR
    subgraph 知识容量缩放定律
        A[模型参数量] --> B[知识容量]
        B --> C["约2比特/参数"]
    end
    
    subgraph 具体例子
        D["7B参数模型"] --> E["~14B比特知识"]
        F["70B参数模型"] --> G["~140B比特知识"]
    end
    
    style C fill:#ffcdd2
    style E fill:#c8e6c9
    style G fill:#c8e6c9

关键发现

研究者通过精心设计的实验发现:

每个参数大约可以存储2比特的事实知识。

这意味着:

  • 7B参数模型可存储约14B比特的知识
  • 70B参数模型可存储约140B比特的知识

为什么是2比特?

这个数字背后有深刻的信息论解释:

  1. 信息压缩效率:事实知识经过训练后被压缩存储在参数中。每个参数作为一个存储单元,其有效容量受限于数值精度和表示能力。

  2. 冗余编码:为了提高鲁棒性,知识往往以分布式方式存储,存在一定冗余。

  3. 量化极限:即使模型被量化到int8,知识容量也不会显著下降,说明存储效率已经接近理论极限。

这个发现对大模型设计有重要启示:增加参数量是提高知识容量的最直接方式。这也是为什么MoE(混合专家)模型在不增加计算成本的情况下,通过扩大总参数量来提高知识容量。

层重要性:为什么中间层最关键?

2025年的一项研究《Layerwise Importance Analysis of Feed-Forward Networks in Transformer-based Language Models》系统地分析了不同层FFN的重要性。

flowchart TB
    subgraph 12层模型的FFN重要性分布
        L1[Layer 1] --> |低重要性| I1[●○○○○○]
        L2[Layer 2] --> |低重要性| I2[●●○○○○]
        L3[Layer 3] --> |中等| I3[●●●○○○]
        L4[Layer 4] --> |高重要性| I4[●●●●●●]
        L5[Layer 5] --> |高重要性| I5[●●●●●●]
        L6[Layer 6] --> |高重要性| I6[●●●●●●]
        L7[Layer 7] --> |高重要性| I7[●●●●●●]
        L8[Layer 8] --> |高重要性| I8[●●●●●●]
        L9[Layer 9] --> |中等| I9[●●●●○○]
        L10[Layer 10] --> |低重要性| I10[●●●○○○]
        L11[Layer 11] --> |低重要性| I11[●●○○○○]
        L12[Layer 12] --> |低重要性| I12[●○○○○○]
    end
    
    style L4 fill:#c8e6c9
    style L5 fill:#c8e6c9
    style L6 fill:#c8e6c9
    style L7 fill:#c8e6c9
    style L8 fill:#c8e6c9

核心发现

研究者设计了一个巧妙的实验:从某些层完全移除FFN,将移除的参数分配到其他层,保持总参数量不变,然后比较不同配置的性能。

  1. 中间层最重要:FFN集中在中间70%层的配置,在几乎所有任务上都优于标准配置。

  2. 早期和晚期层不那么重要:移除早期和晚期层的FFN对性能影响较小。

  3. 位置比数量更关键:在参数预算有限的情况下,将FFN放在正确的位置比均匀分布更有效。

为什么中间层最关键?

这个现象可以从信息处理的角度理解:

  • 早期层:主要负责低级特征提取(如词法、句法),注意力机制已经足够。

  • 中间层:开始处理语义和知识相关问题,需要FFN提供丰富的知识支持。

  • 晚期层:主要负责整合信息并生成输出,知识检索已经在前面的层完成。

用一个比喻:早期层是"眼睛",中间层是"大脑",晚期层是"嘴巴"。知识存储主要发生在"大脑"阶段。

FFN与注意力的分工

现在我们可以更清晰地理解FFN和注意力机制在Transformer中的分工:

flowchart LR
    subgraph 注意力机制 - 信息传递
        A1[位置间信息传递]
        A2[上下文聚合]
        A3[关系建模]
        A4[序列依赖捕获]
    end
    
    subgraph FFN - 知识存储
        F1[事实知识存储]
        F2[特征非线性变换]
        F3[模式检索]
        F4[输出信号生成]
    end
    
    A1 -.-> |传递上下文信息| F1
    A2 -.-> |聚合表示| F3
    F4 -.-> |知识信号| A4
    
    style 注意力机制 - 信息传递 fill:#e3f2fd
    style FFN - 知识存储 fill:#fff8e1

协作机制:一个具体的例子

当模型处理"法国的首都是___“时:

  1. 注意力阶段:将"法国”、“首都"等词的表示聚合到目标位置,建立语义联系。

  2. FFN阶段:根据聚合的表示,检索存储的知识,生成指向"巴黎"的信号。

  3. 迭代处理:经过多层处理后,最终输出正确答案。

为什么两者缺一不可?

  • 只有注意力:模型可以进行信息传递,但没有存储的知识,无法回答超出上下文的问题。

  • 只有FFN:模型存储了大量知识,但无法正确理解输入的语义关系。

这正是Transformer设计的精妙之处:注意力机制和FFN各司其职,协同工作。

局限性与未来方向

尽管我们对FFN知识存储的理解已经相当深入,但仍存在诸多挑战:

知识冲突与干扰

当修改一个知识时,可能影响其他相关知识的存储。这是当前知识编辑方法的主要瓶颈。

知识的层次性

某些知识可能跨越多个神经元或层存储,单一位置的编辑难以完全修改。

动态更新

如何在不重新训练的情况下,让模型持续学习新知识,同时避免灾难性遗忘?

可解释性

虽然我们知道FFN存储知识,但如何精确定位和理解每一个知识仍然是一个开放问题。

结语

从Geva等人的键值存储发现,到ROME的知识编辑方法,再到知识容量缩放定律,我们对FFN的理解正在不断深化。这些研究不仅揭示了Transformer的内部工作原理,更为模型调试、知识更新和安全控制提供了技术基础。

核心要点回顾:

  1. FFN本质上是一个键值存储器,$W_1$存储"键”(文本模式),$W_2$存储"值"(知识表示)。

  2. 注意力机制负责信息传递,FFN负责知识存储——两者分工明确,缺一不可。

  3. 知识神经元研究表明,特定知识高度集中在少数神经元中。

  4. ROME等方法证明,知识可以被精确定位和编辑。

  5. 每个参数大约存储2比特的事实知识。

  6. 中间层的FFN对知识存储最为重要。

理解FFN如何存储知识,是理解大模型行为的关键一步。随着研究的深入,我们期待更多关于大模型内部机制的发现,以及基于这些发现的应用创新。


参考文献

  1. Geva, M., Cohen-Karlik, T., & Globerson, A. (2021). Transformer Feed-Forward Layers Are Key-Value Memories. EMNLP 2021.

  2. Dai, D., et al. (2022). Knowledge Neurons in Pretrained Transformers. ACL 2022.

  3. Meng, K., et al. (2022). Locating and Editing Factual Associations in GPT. NeurIPS 2022.

  4. Allen-Zhu, Z., & Li, Y. (2025). Physics of Language Models: Part 3.3, Knowledge Capacity Scaling Laws. ICLR 2025.

  5. Kobayashi, S., et al. (2025). Layerwise Importance Analysis of Feed-Forward Networks in Transformer-based Language Models. arXiv:2508.17734.

  6. Shazeer, N. (2020). GLU Variants Improve Transformer. arXiv:2002.05202.

  7. Vaswani, A., et al. (2017). Attention Is All You Need. NeurIPS 2017.

  8. Touvron, H., et al. (2023). LLaMA: Open and Efficient Foundation Language Models. arXiv:2302.13971.

  9. Yang, A., et al. (2025). Qwen Technical Report. arXiv preprint.

  10. Meng, K., et al. (2023). Mass-Editing Memory in a Transformer. ICLR 2023.

  11. Stanford Hazy Research Lab. (2025). Stuffing MLPs Full of Facts. Blog post.

  12. Xiong, R., et al. (2020). On Layer Normalization in the Transformer Architecture. ICML 2020.

  13. Mitchell, E., et al. (2022). Fast Model Editing at Scale. ICLR 2022.

  14. De Cao, N., et al. (2021). Editing Factual Knowledge in Language Models. EMNLP 2021.