深度学习篇---FFN
一、什么是 FFNFFNFeed-Forward Network前馈网络是 Transformer 架构中的核心组成部分之一位于多头注意力Multi-Head Attention层之后。它的作用可以这样理解注意力层负责“收集信息”哪里重要、谁和谁相关而 FFN 层负责“处理信息”对收集到的信息进行非线性变换和特征映射。两者分工明确缺一不可。在标准的 Transformer 层中结构为输入 → 多头注意力 → 残差连接 LayerNorm → FFN → 残差连接 LayerNorm → 输出二、FFN 的标准数学形式Transformer 原文中FFN 是一个两层的全连接网络中间有一个非线性激活函数通常为 ReLU 或其变种或者写成分层形式其中直观理解FFN 先把输入向量“升维”到一个更高维的空间让模型有更多“表达自由度”然后非线性激活引入复杂模式最后再“降维”回原来的维度。三、FFN 的核心作用功能详细解释特征非线性变换注意力层是线性的加权求和没有非线性能力FFN 通过激活函数引入非线性让模型能拟合复杂函数特征维度拓展dff 通常设置为 4× dmodel提供更丰富的中间表示空间位置独立处理对每个 token 独立应用相同的 FFN不涉及 token 间的交互这部分由注意力完成知识存储研究表明预训练模型中的大量“知识记忆”实际上存储在 FFN 层中而非注意力层跨 token 信息整合的补充注意力层关注“谁和谁相关”FFN 层则基于相关信息进行推理和变换四、FFN 的各种变体随着大模型的发展研究者提出了多种 FFN 变体各有优劣变体名称公式特点标准 FFN (ReLU)原始 Transformer 设计简单有效GELU FFNGPT、BERT、LLaMA 等常用更平滑SwiGLU FFNLLaMA、PaLM 等使用效果更好GeGLU FFNGLU 系列变体之一GLU 变体系列多种门控线性单元引入门控机制增强表达能力实际应用现状LLaMA 1/2/3使用 SwiGLUSwiGLU 是目前最主流的选择GPT-3使用 GELUBERT / 原始 Transformer使用 ReLU 或 GELUSwiGLU 之所以流行是因为它结合了 Swish 激活和门控机制在不同规模模型上都表现出更稳定的训练和更好的性能。五、FFN 中的关键参数膨胀率膨胀率 模型膨胀率说明原始 Transformer4标准设计BERT-base4 (3072/768)沿用经典比例GPT-34标准比例LLaMA约 2.7~3.5略低于 4更高效小型模型可低至 2为了降低参数量设计权衡更高的膨胀率 → 更多参数 → 更强表达能力 → 更多训练和推理成本更低的膨胀率 → 更高效 → 可能损失容量六、FFN 的参数量与计算占比以BERT-base为例dmodel768,dff3072dmodel768,dff3072组件参数量占比多头注意力~2.36M~25%FFN两层~7.08M~75%LayerNorm、Embedding 等少量少量关键发现FFN 占用了 Transformer 层中约 2/3 到 3/4 的参数这也是为什么 MoE混合专家模型会将专家放在 FFN 位置进行替换。计算量在推理时FFN 的计算占比同样很高约 60%~70%因为需要为每个 token 独立做两次大维度的矩阵乘法。七、FFN 的局限性参数量大占模型总参数的大部分成为存储和传输的瓶颈计算密集是推理延迟的主要来源之一位置无关处理对每个 token 独立应用无法利用 token 间已建立的交互关系这可能也是缺点但本质上是设计选择知识存储过于集中实验发现破坏 FFN 的某些神经元会显著损害模型对特定事实的召回这既有鲁棒性隐患也为“模型编辑”提供了抓手八、优化 FFN 的方式优化方法思路代表工作低秩分解将 W1,W2 分解为低秩矩阵LoRA微调时稀疏 FFN只激活部分神经元MoE 架构、ReLU 等天然稀疏共享 FFN跨层共享 FFN 参数ALBERT剪枝移除不重要的神经元模型压缩结构化压缩减少 dffTinyBERT、DistilBERT替代激活函数降低计算密度GELU、SwiGLU 替代 ReLU九、Mermaid 总结框图十、一句话总结FFN 是 Transformer 中的“计算核心”和“知识仓库”它占据模型大部分参数通过先升维后降维的非线性变换为每个 token 独立地注入推理能力和知识记忆。虽然注意力负责“连接”但真正让模型“思考”并记住事实的很大程度上是 FFN。理解 FFN就抓住了大模型设计的半壁江山。