【大模型】一文讲透 Transformer 中的 FFN:被忽视的「思考引擎」,才是参数量的大头

📅 2026/8/9 5:32:50
【大模型】一文讲透 Transformer 中的 FFN:被忽视的「思考引擎」,才是参数量的大头
前馈网络Feed-Forward Network, FFN是 Transformer 每个层中与注意力并列的两大核心组件之一负责对每个 token 的特征进行非线性变换与信息加工。注意力负责「token 之间的信息交流」FFN负责「每个 token 内部的信息加工」参数量占比Transformer 中70%~85% 的参数都在 FFN 里标准 FFN 约 70%SwiGLU 等门控变体可达 85%注意力只占小部分标准结构升维 → 非线性激活 → 降维的瓶颈结构通过扩大中间维度提升表达能力激活函数从 ReLU 演进到 GELU、SiLU、SwiGLU核心都是引入非线性让模型能学习复杂模式一、FFN 是什么标准结构与伪代码FFN 是作用在每个 token 独立维度上的两层全连接网络对序列中的每个 token 做完全相同的变换不做 token 之间的信息交互。标准 FFN 结构原始 Transformer 论文中的 FFN 公式FFN(x)max⁡(0,xW1b1)W2b2 FFN(x) \max(0, xW_1 b_1)W_2 b_2FFN(x)max(0,xW1​b1​)W2​b2​拆解为三步升维第一层线性层把特征维度从d_model扩大到d_ff通常是 4 倍如 d_model512 → d_ff2048激活经过非线性激活函数原始论文用 ReLU现代大模型多用 GELU/SiLU降维第二层线性层把维度从d_ff压缩回d_model对应伪代码deffeed_forward(x,d_ff2048): x: [B, seq_len, d_model] return: [B, seq_len, d_model] # 第一步升维xlinear_1(x)# [B, seq_len, d_ff]# 第二步非线性激活xgelu(x)# 第三步降维回原维度xlinear_2(x)# [B, seq_len, d_model]returnx关键点FFN 对每个 token 独立处理序列长度维度不发生任何计算token 之间没有信息交换。这也是为什么 FFN 可以和注意力完美互补注意力负责「横向」的 token 间交流FFN 负责「纵向」的单 token 特征深度加工。二、为什么需要 FFN注意力不够吗这是最高频的疑问既然注意力这么强大为什么还要加 FFN答案是注意力本质上是在做“信息的选择性搬运”无法对特征进行深度加工。FFN 引入的逐元素非线性变换才是模型表达能力的核心来源。1. 注意力的本质是“加权求和”缺乏特征加工能力自注意力的核心计算是用 Q 和 K 的相似度作为权重对 V 加权求和。虽然 Softmax 本身是非线性操作但这种非线性只作用于权重分配让权重之和为 1并放大差异并不对特征向量本身做逐元素的非线性映射。因此注意力层本质上是在做“信息的选择性搬运”——从其他 token 那里收集有用的信息但不对收集到的信息进行深度加工。如果 Transformer 只有注意力层无论叠多少层本质上都只是加权求和与残差连接的组合表达能力上限很低无法拟合复杂的语义映射。2. FFN 引入逐元素非线性提升模型表达能力FFN 的核心价值就是引入逐元素非线性变换让模型能拟合复杂的函数关系。没有 FFN模型只能做线性的信息重组相当于“只会 rearrange 信息不会加工信息”有了 FFN模型能对每个位置的特征做复杂的非线性变换相当于“每个 token 都有一个独立的思考单元”3. 一个直观的类比注意力层就像全体会议——每个人把自己的信息分享给其他人大家互相交流更新各自的信息FFN 层就像会后自习——每个人开完会后自己独立思考消化把刚听到的信息进行深度加工、整理、内化Transformer 的每一层都是「先开会交流信息再各自消化思考」交替进行层层递进最终形成对输入的深度理解。三、为什么是「升维 → 激活 → 降维」的瓶颈结构FFN 最反直觉的设计就是先把维度扩大 4 倍再压缩回去。为什么不直接用两个相同维度的线性层1. 核心原因高维投影机制提升表达能力两个相同维度的线性层d→d→d如果中间没有激活函数等价于一个线性层因为线性变换的复合还是线性变换。即使中间有激活函数如果中间维度等于输入维度非线性的“作用空间”也很有限。升维到 4 倍相当于在高维空间中做非线性变换再将结果投影回原空间——这个“高维投影”机制是 FFN 表达能力的核心。更大的中间维度给了非线性变换更广阔的“工作空间”能容纳更多的特征模式和知识。2. 为什么还要降维回去如果一直保持高维度计算量和参数量都会爆炸。升维只是为了在中间做非线性变换最终还是要把维度降回d_model才能和残差连接、下一层的注意力对齐。3. 瓶颈结构的性价比「升维-激活-降维」的瓶颈结构本质是用较少的额外参数量换取大幅提升的非线性表达能力。参数量d_model × d_ff d_ff × d_model 2 × d_model × d_ff当 d_ff 4 × d_model 时FFN 参数量 8 × d_model²注意力参数量QKV 输出投影4 × d_model²FFN 参数量是注意力的 2 倍这也是为什么 Transformer 大部分参数都在 FFN 里业界经验d_ff 通常取 d_model 的 4 倍这是效果和算力的经验最优解。也有研究用 8 倍、3 倍等不同比例4 倍是最常用的标准配置。四、常见激活函数对比激活函数是 FFN 的灵魂决定了非线性的形式。大模型发展过程中激活函数也在不断演进。1. ReLURectified Linear Unit公式f(x) max(0, x)优点计算极简单速度快缓解梯度消失问题缺点存在「神经元死亡」问题——输入为负时梯度为 0部分神经元永远不更新输出不是零均值应用原始 Transformer 论文、早期 BERT 等模型使用2. GELUGaussian Error Linear Unit公式f(x) x × Φ(x)Φ(x) 是标准正态分布的累积分布函数优点平滑的非线性兼具正则化效果在预训练中表现更稳定泛化能力更强缺点计算比 ReLU 略复杂但近似实现开销已很低应用GPT 系列、BERT 后续版本、绝大多数现代大模型的标准配置3. SiLU / Swish公式f(x) x × σ(x)σ 是 Sigmoid 函数优点和 GELU 非常相似曲线接近计算更简单更容易实现缺点和 GELU 差异不大各有优劣应用LLaMA 系列、部分开源大模型使用4. SwiGLU / GLU 变体结构把 FFN 的第一层拆成两路一路做线性变换一路做门控两者逐元素相乘后再降维⚠️重要SwiGLU 的参数量是标准 FFN 的1.5 倍3 个权重矩阵 vs 2 个计算开销的增加主要来自额外的线性投影而非激活函数本身。优点表达能力更强效果普遍优于标准 FFN门控机制能动态控制信息流动缺点参数量和计算量显著增加应用LLaMA 2/3、PaLM、Qwen 等现代大模型广泛使用是当前主流最优方案5. ReGLU / GeGLU分别是 ReLU GLU、GELU GLU 的组合属于 GLU 家族的不同变体效果和适用场景各有侧重。五、激活函数对比表激活函数计算复杂度表达能力训练稳定性典型应用ReLU极低一般一般有死亡神经元早期 Transformer、BERT 原始版GELU中等较好好GPT 系列、BERT 改进版、通用大模型SiLU/Swish中等较好好LLaMA 系列、部分开源模型SwiGLU较高主要来自额外线性投影最好好LLaMA 2/3、PaLM、现代主流大模型GeGLU较高很好好部分大模型变体注SwiGLU 的计算复杂度“较高”是因为它使用了 3 个线性投影标准 FFN 只有 2 个而非激活函数本身复杂。SiLU 激活函数的计算开销与 GELU 相近。六、FFN 的优缺点优点提供非线性是 Transformer 表达能力的核心来源没有 FFN 模型退化为线性变换结构简单两层全连接 激活实现简单易于优化计算高效可高度并行化GPU 上计算效率高灵活可调通过调整 d_ff 大小可以灵活控制模型容量和计算量缺点参数量大占模型总参数的 70%~85%是大模型显存占用的主要来源计算开销高推理时 FFN 的计算量占比很高是推理速度的瓶颈之一参数利用率低研究表明FFN 中大量神经元是稀疏激活的很多参数实际利用率不高FFN 与 KV Cache 的关系FFN 的计算量与序列长度无关逐 token 独立而注意力的计算量与序列长度相关O(N²)。因此短序列 1KFFN 是主要计算瓶颈长序列 8K注意力逐渐成为主要瓶颈这也是 KV Cache 主要优化注意力缓存 K/V 避免重复计算而 FFN 无法通过缓存加速的原因。七、选型指南1. 激活函数选型场景推荐理由快速原型 / 极低算力ReLU计算极简但注意神经元死亡问题通用小模型GELU当前最稳妥的选择效果稳定与主流对齐中大型模型 / 追求 SOTASwiGLU当前业界主流最优方案效果收益显著LLaMA 系生态对齐SiLU SwiGLU保持架构一致性便于复用开源权重2. d_ff 维度选型标准配置d_ff 4 × d_model业界经验最优解无脑选这个基本不会错轻量小模型可降到 2~3 倍牺牲少量效果换速度追求极致效果可升到 8 倍但收益递减参数量和计算量会大幅增加3. FFN 变体选型标准 FFN通用场景实现简单调试方便SwiGLU 等门控 FFN追求效果优先的大模型是当前主流选择MoE混合专家超大规模模型把 FFN 拆成多个专家每次只激活部分用少量计算量换取超大参数量八、常见误区澄清1. 误区注意力是 Transformer 的核心FFN 只是配角事实FFN 才是参数量的大头也是模型表达能力的核心来源。注意力负责信息流动FFN 负责信息加工两者缺一不可同等重要。没有 FFN 的 Transformer叠再多层也只是线性变换的组合无法逼近复杂函数。2. 误区FFN 是在序列维度做计算事实FFN 完全在特征维度上作用对每个 token 独立做相同的变换token 之间没有信息交互。token 之间的信息交换完全由注意力层负责。3. 误区激活函数影响不大随便选就行事实激活函数的选择对训练稳定性、收敛速度、最终效果都有显著影响。从 ReLU 到 GELU 再到 SwiGLU每一次激活函数的演进都带来了可观测的效果提升。一句话收束如果说注意力是 Transformer 的「交流系统」负责让 token 之间互通信息那 FFN 就是 Transformer 的「加工系统」负责对每个 token 的信息做深度非线性变换。两者交替堆叠、互相配合才构成了 Transformer 强大的表达能力。