Transformer 中的 FFN 有什么作用,SwiGLU 为什么常见?
先用自己的话答,再看参考说法
60 秒是练习上限,不是必须凑满。原理题讲清因果,设计题讲清约束,项目题只讲真实证据。
别照着背。参考说法只用于对照;直接回答问题,简单题说清楚就收尾。项目题只用自己的经历和数字。
参考内容当前已显示;开始口述后会暂时隐藏。
面试时怎么答
先说明注意力负责 Token 间信息混合,FFN 对每个 Token 独立做通道变换,而且常是参数大头。SwiGLU 用一条 SiLU 门控分支乘内容分支,再投影回隐藏维。比较 GELU 时必须控制总参数或 FLOPs,因为 SwiGLU 多一条投影,不能在相同中间维下直接宣布更好。
可以这样答:
Transformer 的注意力负责不同 Token 之间的信息交互,FFN 则对每个 Token 的隐藏向量独立做非线性通道变换,通常占据大量参数。SwiGLU 将一条经过 SiLU 的门控投影与另一条内容投影逐元素相乘,再映射回隐藏维,比单一 GELU 分支更有表达力。由于它多一条输入投影,公平比较时要调整中间维并控制参数量或 FLOPs。
核心回答
Attention 负责在 token 之间聚合信息,FFN 则对每个位置独立地做非线性特征变换,通常先把隐藏维度扩张,再投影回模型维度。SwiGLU 使用一条带 Swish/SiLU 激活的门控分支与另一条值分支逐元素相乘,再做下投影。门控让网络能按输入调节通过的特征,论文实验表明它在若干 Transformer 设置中优于传统 ReLU/GELU FFN,因此被许多 LLM 采用,但收益仍取决于参数预算和训练配方。
展开说明
经典 FFN 可写成:
\[W_2\operatorname{activation}(W_1x)\]SwiGLU 常写成:
\[W_{\mathrm{down}}\!\left(\operatorname{SiLU}(W_{\mathrm{gate}}x)\odot W_{\mathrm{up}}x\right)\]它多出一条输入投影,因此比较模型时不能只让中间维度与普通 FFN 完全相同,否则参数量和计算量不公平。很多架构会相应缩小 SwiGLU 的中间维度,使总参数接近目标预算。
FFN 往往占 Transformer 参数和计算的大头,也可被 MoE 的稀疏专家层替换。它是逐位置计算,但各位置共享同一组权重;位置之间的信息交换仍由 Attention 完成。
工程实践
优化 FFN 时要同时看矩阵乘吞吐、激活显存、张量并行切分和融合算子。量化后若整体困惑度变化不大,也应回归工具调用、格式遵循等敏感任务,因为门控投影中的异常值可能导致局部能力退化。
常见追问
- 为什么 FFN 通常先升维再降维? 升维提供更大的非线性特征空间和参数容量,降维再把结果投回残差流的固定隐藏维度。
- SwiGLU 与 GELU FFN 的参数量应怎样公平比较? SwiGLU 有两条上投影,应缩小中间维度,使两者总参数或 FLOPs 相近后再比较质量。
- FFN 是逐 token 计算,为什么所有位置仍使用同一组参数? Transformer 对序列位置共享同一个块,位置差异已由注意力和位置编码进入各 token 表示;共享参数也保证长度泛化和效率。
一句话复习
Attention 混合位置,FFN 变换特征;SwiGLU 用输入相关的门控增强 FFN,但比较时要对齐参数和计算预算。
参考资料
评论与补充
评论会直接显示在这道题下面。可以写自己的答法、继续追问或指出错误,不需要 GitHub 账号,也不会跳转到 Issue;内容会公开,请勿填写个人隐私、公司机密或受保密约束的材料。
正在连接站内评论服务…
正在加载评论…
还没有评论,你可以先写下自己的理解或追问。