第07章:FFN——Transformer的”知识存储”藏在哪?

0 阅读6分钟

第07章:FFN——Transformer的”知识存储”藏在哪?

论文链接:Attention Is All You Need (Vaswani et al., NIPS 2017) 本章对应:Section 3.3, Table 3 row © 由于掘金格式识别错误,所以有些公式会显示错误或者消失,看完整内容可移步其他平台或GitHub,github.com/Yunzenn/blo…

核心困惑

FFN在Transformer中扮演什么角色?为什么dff=4×dmodel?

前面六章讲了Attention、残差连接、位置编码,但Transformer的每一层还有一个关键组件:Feed-Forward Network (FFN)。

FFN的结构很简单:

FFN(x)=max(0,xW1+b1)W2+b2

两层全连接网络,中间用ReLU激活。但这个简单的结构占据了Transformer 2/3的参数量。

原论文设置dff=2048=4×dmodel,为什么是4倍?FFN到底在做什么?

前置知识补给站

1. 全连接层(Fully Connected Layer)

全连接层是最基本的神经网络层:

y=Wx+b

参数量:din×dout+dout

2. ReLU激活函数

ReLU(x)=max(0,x)

特点:

  • 非线性
  • 计算简单
  • 梯度不饱和(x>0时梯度为1)

3. Position-wise的含义

“Position-wise”是指FFN对每个位置独立应用,不同位置之间不共享信息。

数学表达:

每个位置的计算是独立的。

论文精读:FFN的设计

原论文的公式

Section 3.3:

“In addition to attention sub-layers, each of the layers in our encoder and decoder contains a fully connected feed-forward network, which is applied to each position separately and identically. This consists of two linear transformations with a ReLU activation in between.”

FFN公式:

参数设置:

  • :输入和输出维度
  • :中间层维度

FFN的参数量

单层FFN的参数量:

  • 总计:M参数

对比Multi-Head Attention的参数量:

  • 总计:M参数

结论:FFN的参数量是Attention的2倍。

关键点:FFN占据了Transformer 2/3的参数量。

推导:

为什么是Position-wise?

Position-wise的含义:

  • FFN对每个位置独立应用
  • 不同位置之间不共享信息
  • 相当于kernel size=1的1D卷积

为什么这样设计:

  • Attention已经负责位置之间的信息交互
  • FFN负责对每个位置的表示进行非线性变换
  • 分工明确:Attention做”通信”,FFN做”计算”

第一性原理推导:FFN作为Key-Value Memory

视角1:非线性变换

最直观的理解:FFN提供非线性变换能力。

Attention是线性的(加权求和),如果没有FFN,整个Transformer就是线性模型。

数学表达:

这是线性的(softmax的输入是线性的,输出是加权求和)。

FFN的ReLU提供了非线性:

为什么非线性是必须的:如果没有ReLU,两层全连接等价于一层:

仍然是一个线性变换。整个Transformer就变成线性模型,表达能力大幅下降。

视角2:Key-Value Memory(Geva et al., EMNLP 2021)

核心洞察:FFN可以看作是一个Key-Value存储系统。

数学推导:

将FFN展开:

为什么的列是key:是矩阵,的第个分量是输入与第列的内积。因此的每一列可以理解为一个”key”——它定义了输入匹配什么模式时该神经元会被激活。

设的第列为,的第行为,则:

直观理解:

  • :第个”key”(查询模式)
  • :输入与key的匹配度
  • :激活强度
  • :第个”value”(存储的知识)
  • 输出:所有被激活的value的加权和

类比:

  • Attention:从输入序列中检索信息
  • FFN:从参数中检索知识

视角3:专家系统

每个神经元可以看作一个”专家”:

  • 当输入匹配某个模式时,对应的专家被激活
  • 不同专家存储不同的知识
  • 最终输出是所有激活专家的组合

消融实验解读:Table 3 row ©

原论文Table 3 row ©:同时变化了层数、模型维度和FFN维度。

关键数据(的变化):

d_{ff}PPL (dev)BLEU (dev)解读
10245.1225.42 \times d_{model},效果不如base
2048 (base)4.9225.8原论文选择,4 \times d_{model}
40964.7526.28 \times d_{model},效果最好

关键发现:

  • ()时效果最好,PPL=4.75,BLEU=26.2
  • 原论文选择()是在性能和参数量之间的权衡
  • 更大的提升效果,但参数量也显著增加(4096时参数量90M vs base的65M)
  • 这说明不是理论最优,而是经验选择

2026年的批判性视角

1. FFN的作用直到2021年才被理论化

原论文的局限:

  • 只说FFN是”fully connected feed-forward network”
  • 没有深入分析FFN的作用
  • 这个比例是经验选择,缺乏理论依据

后续研究的发现(Geva et al., EMNLP 2021):

  • FFN作为Key-Value Memory的理论
  • 从理论上解释为什么FFN存储知识

2. GeLU替代ReLU

原论文用ReLU:

现代模型用GeLU(Gaussian Error Linear Unit):

其中是标准正态分布的累积分布函数。

实践中常用近似公式:

为什么GeLU更好:

  • 更平滑(可微)
  • 在负值区域有小的梯度(不是完全截断)
  • BERT、GPT等模型使用

3. SwiGLU:GLU的变体

GLU(Gated Linear Unit):

SwiGLU(Shazeer, 2020):

其中。

优势:

  • 效果比ReLU和GeLU更好
  • LLaMA、PaLM等模型使用

4. MoE:稀疏FFN

标准FFN的问题:

  • 所有神经元都参与计算
  • 计算量大

MoE(Mixture of Experts):

  • 将FFN分成多个”专家”
  • 每次只激活部分专家
  • 用更少的计算量撬动更大的参数量

详见第10章。

FFN在Encoder和Decoder中的位置

添加图片注释,不超过 140 字(可选)

关键点:

  • FFN在每个Attention子层之后
  • Encoder每层有1个FFN
  • Decoder每层有1个FFN
  • FFN占据了模型参数的2/3

面试追问清单

⭐ 基础必会

  1. FFN的公式是什么?
  • 提示:两层全连接,中间ReLU
  1. 为什么FFN是Position-wise的?
  • 提示:对每个位置独立应用
  1. FFN的参数量占Transformer的多少?
  • 提示:约2/3

⭐⭐ 进阶思考

  1. 为什么?
  • 提示:经验选择,Table 3显示可能更好
  1. FFN在Transformer中扮演什么角色?
  • 提示:非线性变换、Key-Value Memory
  1. 如果去掉FFN,只保留Attention,会怎样?
  • 提示:模型变成线性的,表达能力大幅下降

⭐⭐⭐ 专家领域

  1. 如何从Key-Value Memory的角度理解FFN?
  • 提示:的列是key,的行是value
  1. GeLU和ReLU有什么区别?为什么现代模型用GeLU?
  • 提示:平滑性、负值区域的梯度
  1. 如何用MoE来扩展FFN的容量?
  • 提示:稀疏激活、专家路由

下一章预告:第08章将深入拆解训练技巧,回答”为什么Transformer需要学习率warmup?Label Smoothing为什么有效?”

论文原文传送门: