FFN(前馈网络)

Transformer中每个Block内的两层全连接网络,对每个token独立做非线性变换。如果说注意力层负责token间的"信息交换",FFN就负责每个token自身的"信息加工",两者分工互补。

FFN(前馈网络)

一句话理解

Transformer 中的 FFN 是一个两层全连接网络,对每个 token 独立做非线性变换——注意力层管"交换信息",FFN 管"加工信息"。

结构

FFN(x)=W2activation(W1x+b1)+b2\text{FFN}(x) = W_2 \cdot \text{activation}(W_1 \cdot x + b_1) + b_2FFN(x)=W2activation(W1x+b1)+b2
  1. 第一层线性变换:维度从 dmodeld_{model}dmodel 扩展到 dffd_{ff}dff(通常 4 倍,如 768 → 3072)
  2. 激活函数:原始论文用 ReLU,现代模型常用 GELU 或 SwiGLU
  3. 第二层线性变换:维度从 dffd_{ff}dff 压缩回 dmodeld_{model}dmodel

先扩展再压缩的设计("瓶颈"结构),让模型在高维空间中做非线性变换,再映射回原始维度。

关键特征:token 独立

FFN 对每个 token 独立处理,不涉及 token 之间的交互。这与 Self-Attention 形成互补:

组件作用域职责
Self-Attentiontoken 之间信息交换——"谁跟谁有关"
FFN单个 token信息加工——非线性特征变换

参数占比

在 Transformer 中,FFN 的参数量通常占总参数的 2/3 左右。虽然结构简单,但它是模型存储知识的主要场所——研究表明,FFN 的权重矩阵实质上在做"键值记忆",类似于一个巨大的查找表。

引用本术语的文章