激活函数(Activation Function)
AI TERM术语词条Activation Function
术语释义
神经网络中施加在神经元输出前的非线性变换,决定了多层网络能否表达复杂模式;ReLU、GELU 与 SwiGLU 是当前的主流选择。
激活函数(Activation Function)是神经网络中每个神经元输出前施加的非线性变换:它接收输入的加权和,输出一个激活值。这个不起眼的零件决定了网络能否表达复杂模式——如果去掉所有激活函数,无论叠多少层,整体仍等价于一个线性模型。
为什么必须是非线性
现实问题很少是线性的,识别图像、理解语言都涉及大量条件判断与特征交互。线性层叠加后仍然是线性变换,只有插入非线性函数,多层结构才真正扩展了表达能力,理论上可以逼近任意连续函数。激活函数就是这个弯折点,它让网络能拟合曲线、划出复杂边界,并逐层组合出层次化的特征。
代表函数
- ReLU:负数归零、正数原样保留,计算极快且缓解梯度消失,是深度学习普及的关键。
- GELU:更平滑的变体,在大规模 Transformer 模型中广泛使用。
- SwiGLU:带门控的变体,当前主流大模型的前馈层普遍采用,效果通常略优。
- Sigmoid 与 Tanh:输出被压到固定区间,早期常用,深层网络中容易梯度消失,现在多用于输出层或门控结构。
它出现在哪里
在 Transformer 结构里,激活函数主要出现在前馈网络(Feed-Forward Network,FFN)子层,也就是注意力之后的逐位置变换部分。注意力机制本身靠 softmax 做归一化,不属于这类逐元素非线性激活。
卷积网络里则通常接在每个卷积层之后,循环网络里放在每个时间步的隐状态计算中。位置不同,作用相同:为堆叠的线性运算注入非线性。
正因为注意力与前馈网络的分工不同,前馈层的参数量往往占了整个模型的大头,而激活函数的选择直接决定了这部分容量的利用效率,也影响推理时的显存占用与吞吐。
实践要点
- 默认先用 ReLU 或 GELU:没有特殊理由时它们是稳妥选择,收敛行为经过大量验证。
- 注意死亡神经元:ReLU 在负区间梯度为零,学习率过大时部分神经元可能永久失活,可换用平滑变体或调小学习率。
- 门控变体换性能:SwiGLU 一类结构效果更好,但参数与计算量更高,需要权衡显存与吞吐。
- 输出层按任务选:二分类常用 Sigmoid,多分类用 softmax,回归任务通常不加激活。
常见误区
- 以为激活函数可有可无:去掉之后深层网络退化为线性模型,加深度就失去了意义。
- 把 softmax 当普通激活:它作用在整个向量上做归一化,与逐元素激活不是一回事。
- 盲目替换成最新函数:收益常被训练配置与数据差异淹没,改动前要固定其他变量对比。
- 忽视数值稳定性:Sigmoid 与 Tanh 在饱和区梯度接近零,深网络中会明显拖慢收敛。