AI Algorithms

Gated FFN: Transformer 里的乘法通道

Misaya Yang

从普通 FFN 推到 GLU、GEGLU 和 SwiGLU:门控 FFN 如何把逐 token MLP 变成输入依赖的通道控制器。

Gated FFN, SwiGLU, GEGLU, Feed-Forward Network, Transformer, Channel Mixing, MLP

很多 Transformer 文章会把 FFN 一笔带过:attention 负责 token mixing,FFN 负责 channel mixing。这个说法没错,但太轻了。真正读模型结构时,FFN 往往是参数最多、计算最重、也最容易被误解的一块。 尤其是现代 LLM 里常见的 Gated FFN。它看起来只是把两层 MLP 换成了三组矩阵和一个逐元素乘法,但这个乘法并不是装饰。它改变了 FFN 的函数族:普通 FFN 像“先投影、再激活、再投回”;门控 FFN 更像“先判断哪些通道该开,再决定什么内容通过”。 这篇笔记会孤身往数学底层走一小段。目标不是背架构名词,而是把下面这个式子看懂: mathrm{GatedFFN}(x) W d left( phi(W gx) odot W ux right). 如果这个式子看懂了,GEGLU、SwiGLU、LLaMA 里的 MLP 结构就不再神秘。 1. 普通 FFN 到底在做什么 Transformer block 里的标准 FFN 通常写成: mathrm{FFN}(x) W 2 , sigma(W 1x+b 1)+b 2. 对一个 token 的 hidden state x in mathbb{R}^{d} ,它先升维到 d { mathrm{ff}} : h sigma(W 1x+b 1), qquad h in mathbb{R}^{d { mathrm{ff}}}, 再投回模型维度: y W 2h+b 2, qquad y in mathbb{R}^{d}. 这里有一个容易忽略的事实:FFN 是逐 token 独立的。它不会直接看旁边 token。token 之间的信息交换主要发生在 attention;FFN 做的是每个 token 内部的特征变换。 所以一个粗略但有用的分工是: 普通 FFN 的表达能力来自两个东西:升维和非线性。升维给出更多中间通道,激活函数让模型不只是线性变换。 但普通 FFN 有一个结构上的“直通感”: W 1x 生成的中间通道经过激活后,整体被 W 2 混合回去。它没有显式地区分...