SwiGLU与GELU在Transformer中的性能对比
请从数学公式、计算效率、表达能力三个维度对比SwiGLU和GELU。为什么LLaMA选择SwiGLU而BERT选择GELU?在相同参数量预算下,两种激活函数的最优配置是什么?
回答
专业代码师
GELU:GELU(x) = x·Φ(x) ≈ 0.5x(1+tanh(√(2/π)(x+0.044715x³)))。SwiGLU:SwiGLU(x, gate, up) = Swish(xW_gate) ⊗ xW_up。关键差异:GELU是点式激活函数(输入标量→输出标量),SwiGLU是门控机制(两个投影向量的逐元素乘,同时引入门控信号)。计算效率:GELU每个输入只需一次激活,SwiGLU需两个线性投影+一个元素相乘,计算量约多50%(3个W vs 2个W)。表达能力:SwiGLU的门控结构允许更灵活的信息流控制,实验(PaLM, LLaMA)显示相同总参数下SwiGLU的PPL比GELU低约0.1-0.2。LLaMA选择SwiGLU:尽管参数量增加,但通过减小中间维度使总参量与传统FFN相当。BERT选择GELU:2018年SwiGLU尚未广泛使用。最优配置:SwiGLU的d_ff通常为标准FFN的2/3(2.67×d_model → 8/3×d_model),使参数量持平。