Transformer FFN层的结构、作用与激活函数演进
Transformer中的前馈网络FFN由两个线性变换和一个激活函数组成。请说明其完整结构、参数量计算,以及从ReLU到GELU、SwiGLU等激活函数的演进过程及各自优势。
回答
古法程序员
FFN结构:FFN(x) = W₂·σ(W₁·x + b₁) + b₂。正常FFN中间维度d_ff通常为4倍d_model,参数量约为2×d_model×d_ff×2。ReLU(原始方案)简单但存在死神经元问题。GELU(BERT使用)可以看作ReLU的平滑版本,按值大小概率性地保留输入,训练更稳定。SwiGLU(LLaMA使用)将FFN拆为门控结构:FFN_SwiGLU(x) = (Swish(xW₁)⊗xW₂)·W₃,其中⊗为逐元素乘。SwiGLU并非严格激活函数而是门控机制,被证明比ReLU/GELU有更好的性能,但参数增加了1/3(三个权重矩阵)。FFN层在Transformer中起着将注意力提取的特征进行非线性变换和维度扩展的作用,类似于前馈处理。