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

发布时间:2026/9/24 6:38:55

【大模型】一文讲透 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 强大的表达能力。
延伸阅读

更多相关文章

2026/9/19 21:26:40

Godot游戏资源解包全攻略:从.pck文件提取素材的两种实用方案

1. 项目概述:为什么我们需要解包Godot游戏资源?在游戏开发或者游戏模组制作的圈子里,你肯定遇到过这种情况:看到一个用Godot引擎做的游戏,里面的美术素材、音效、字体或者脚本设计得特别棒,想学习一下&…

2026/9/23 17:38:36

解决Blender CUDA渲染错误:Failed to retain CUDA context

1. 问题现象与背景分析 当你在Blender中尝试使用CUDA加速进行渲染时,突然弹出一条错误提示:"Failed to retain CUDA context (Illegal instruction)"。这个错误通常发生在使用NVIDIA显卡进行GPU渲染的过程中,表明CUDA运行时环境出…

2026/9/19 21:26:44

2026年市面上口碑好的HDMI矩阵工厂,哪家更专业?

在视听系统集成项目中,HDMI矩阵的价值往往容易被低估——很多项目交付后,用户最终抱怨不是屏幕不清晰,而是信号切换卡顿、黑屏、不兼容这些“小毛病”。一套功能完备、稳定可靠的矩阵,往往才是整个系统能否“好交付”的关键。今天…

2026/9/24 6:35:39

DSP56800实时控制开发实战:CodeWarrior环境搭建与硬核调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:35:39

嵌入式作业2

STM32F103C8T6 流水灯实验报告 一、实验目的 掌握 STM32F103C8T6 最小系统核心板的 GPIO 端口寄存器结构与地址映射。学会使用 C 语言直接操作寄存器的方式配置 GPIO 端口为推挽输出模式。理解 GPIO 端口时钟使能、端口配置寄存器(CRL/CRH)、输出数据寄存…

2026/9/24 6:35:39

软文自动化投放场景下,媒体发稿API对接平台哪家更合适

自动化投放的合适与否,不取决于接口数量,而取决于异常路径有没有被设计。 审核驳回、媒体排期冲突、稿件被改,这三类情形在自动化链路里早晚会出现,差别只在于它们有一套标准处理动作,还是每一次都要临时找人协调。接口…

2026/9/24 6:35:39

Java Swing+MySQL实现孕妇母婴知识社区系统实战详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:30:39

OpenHarmony上Flutter底部导航实现:从环境搭建到状态保持与避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/24 0:00:21

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:21

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:21

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码