[控场AI]
· 8 分钟阅读· 4,181 字

神经网络激活函数全解析:Sigmoid、Tanh、ReLU、GELU

神经网络激活函数全解析:Sigmoid、Tanh、ReLU、GELU

激活函数为神经网络引入非线性,是深度模型能学习复杂模式的关键,选对函数决定训练成败。

本文用通俗语言解释了神经网络激活函数的作用与选择。激活函数是每个神经元在加权求和后执行的一步非线性变换。没有它,无论堆叠多少层,网络都只能做线性变换,等价于单层。文章依次介绍了 Sigmoid、Tanh、ReLU、Leaky ReLU、GELU/Swish 和 Softmax:Sigmoid 输出 0 到 1 适合二分类末层但有梯度消失;Tanh 以零为中心稍好但同样会消失;ReLU 计算简单、梯度不衰减,成为隐藏层默认选择,但有死亡神经元问题;Leaky ReLU 用微小负斜率缓解;GELU/Swish 平滑,适合 Transformer 大模型;Softmax 用于多分类输出层。文末给出选择法则:隐藏层用 ReLU,二分类用 Sigmoid,多分类用 Softmax,回归不用激活。

神经网络激活函数对比

神经网络激活函数全解析:Sigmoid、Tanh、ReLU、GELU

TL;DR: 为什么神经网络需要激活函数?本文用通俗语言解释 Sigmoid、Tanh、ReLU、GELU 和 Softmax,附对比表和选择法则。

一个反直觉的事实:你可以堆叠 100 层神经网络,但它和单层网络的能力完全一样。听起来像是骗局?如果不是因为一个叫"激活函数"的小东西,这确实就是骗局。

如果你曾在深度学习教程里看到 ReLU、Sigmoid 或 Softmax 这些词一闪而过,这篇文章就是为你准备的。没有复杂数学,不用害怕。读完你将清楚激活函数到底做什么、为什么存在,以及该选哪个——再也不用慌张地 Google。

激活函数到底是什么?

每个人工神经元做两件事。第一,接收输入,将每个输入乘以权重后求和。第二,把这个总和通过一个小函数,决定神经元应该以多强的程度"激活"。第二步就是激活函数。

想象俱乐部门口的保安。神经元的总和是门外的嘈杂声。保安(激活函数)来决定:太安静,别进;够大声,进来;吵翻天了,也还是一次只放一个人进。不同的保安,不同的规则。

为什么不能跳过它?100 层的秘密

乘法和加法被称为线性运算。线性运算的尴尬之处在于:把它们组合在一起……还是另一个线性运算。两条直线规则叠在一起,仍然只是一条直线规则。所以没有激活函数的网络,无论多深,都只能在你的数据中画直线。

现实问题不是直线的。识别猫、印地语翻译成英语、预测发动机磨损,都涉及曲线和转折。激活函数在每一层添加一个弯折,这些弯折叠加在一起,让网络能够描绘几乎任何形状。这就是全部秘密。

层赋予网络深度。激活函数赋予它使用这种深度的能力。

什么是反向传播? 反向传播(Backpropagation)是训练神经网络的核心算法,也是理解梯度消失问题的前提。简单来说,它分两步走:前向传播时,输入数据逐层计算得到预测输出;然后计算预测与真实标签之间的误差(损失)。接下来是关键的"反向"部分——算法利用微积分的链式法则,从输出层开始逐层往回计算每个权重对误差的"责任大小",也就是梯度。每个权重再按梯度方向微调一点点,让下次预测更准。问题在于,链式法则意味着梯度是各层导数连乘的结果:如果每层导数都小于 1,连乘之后梯度会指数级缩小,这正是 Sigmoid 深层网络早期层"学不动"的根本原因。

主要角色登场

1. Sigmoid:经典但已老去

Sigmoid 把任何数字压缩到 0 到 1 之间,让它看起来像概率。大的正输入给出接近 1,大的负输入给出接近 0。它是早期神经网络的主角,因为它粗略模仿了生物神经元的"要么激活要么安静"。

问题在于: 在两端曲线几乎变平。平意味着斜率接近零,而网络是通过跟随斜率来学习的。即使在最陡的地方,Sigmoid 的斜率也只有 0.25。把这个数字乘以很多层,学习信号会缩小到几乎为零。这就是著名的梯度消失问题。早期层基本停止学习,就像传话游戏,消息还没传到第一个人就已经模糊了。

它仍然发光的地方: 二分类预测(垃圾邮件或非垃圾邮件)的最后一层。

2. Tanh:Sigmoid 更平衡的兄弟

Tanh(读作"tanch")把数字压缩到 -1 到 1 之间。因为输出以零为中心,学习通常比 Sigmoid 更平滑。它在两端仍然会变平,所以同样有梯度消失的头痛问题,只是稍微好一点。你仍然会在 LSTM 等较老的循环网络中遇到它。

3. ReLU:改变一切的"无聊"函数

ReLU 全称 Rectified Linear Unit(修正线性单元),一个非常宏大的名字对应一条非常简单的规则:如果数字是负数,输出 0;否则原样通过。 就这样。代码里就是 max(0, x)。

为什么这么朴素的规则能统治深度学习?两个原因。计算极其廉价(只需比较,没有指数运算)。对于正输入,斜率恰好是 1,所以学习信号在反向传播时不会衰减。ReLU 在 AlexNet 图像模型赢得 ImageNet 竞赛后成为默认选择,开启了现代深度学习热潮。

问题在于: 一个持续接收负输入的神经元会永远输出零,而斜率为零意味着它永远无法恢复。人们称之为"死亡"神经元,或 ReLU 死亡问题。可怜的家伙。

AlexNet 与 ImageNet 的历史意义: 2012 年,Alex Krizhevsky 等人提出的 AlexNet 在 ImageNet 大规模图像识别竞赛中,将 top-5 错误率从前一年的约 26% 骤降到 15% 左右,领先第二名超过 10 个百分点。这一成绩震惊了整个计算机视觉界,被视为深度学习复兴的标志性事件。AlexNet 成功的关键因素之一,正是首次在大规模深层卷积网络中系统性地使用 ReLU 替代 Sigmoid/Tanh。ReLU 让训练深层网络变得可行,训练速度提升数倍。此后,ReLU 迅速成为隐藏层的默认选择,深度学习热潮由此全面爆发。

4. Leaky ReLU:给死者一个脉搏

Leaky ReLU 用一个小改动修复了死亡神经元问题:不是对负数输出精确的 0,而是让一小部分通过(通常是输入的 1%)。神经元始终有斜率,所以总能恢复。

5. GELU 和 Swish:平滑的现代派

ReLU 在零点有一个尖锐的拐角。GELU 和 Swish(也叫 SiLU)把这个拐角磨圆成平缓曲线,这在非常大的模型中通常训练得更好。GELU 被用于 BERT 和 GPT 系列等知名语言模型。一个有趣的冷知识:Swish 是研究人员用自动化搜索尝试许多候选函数时发现的,而不是有人坐下来推导出来的。

Transformer 架构为什么偏爱平滑激活函数: Transformer 是 BERT、GPT 等现代大语言模型的底层架构,其核心是自注意力机制加前馈网络。相比传统 CNN,Transformer 层数更深、参数量更大,对梯度的稳定性要求更高。GELU(高斯误差线性单元)通过引入高斯分布的累积分布函数来平滑地"门控"输入,在负值区域不会像 ReLU 那样硬性归零,而是保留一部分微小信号,让梯度更连续。Swish 则用 sigmoid 乘以输入实现类似效果。这种平滑性在大规模预训练中能显著改善收敛速度和最终性能,因此几乎成为 Transformer 系列模型前馈层的标准配置。

6. Softmax:计票员

Softmax 不同。它不是一次处理一个神经元,而是看一整组输出,把它们变成加起来等于 100% 的百分比。如果模型要在猫、狗和鸟之间做决定,Softmax 可能输出 85%、10% 和 5%。它属于多分类器的最后一层,绝不在中间层。

快速对比

函数输出范围最适合注意
Sigmoid0 到 1最终层,二分类输出梯度消失
Tanh-1 到 1较老的循环网络梯度消失
ReLU0 到无穷隐藏层,默认选择死亡神经元
Leaky ReLU略低于 0 到无穷ReLU 神经元死亡时多一个参数要选
GELU / Swish平滑,主要为正Transformer,大模型计算量略大
Softmax0 到 1,和为 1最终层,多分类不用于隐藏层

所以该选哪个?

一个有经验的安全配方,适用于惊人多的项目:

  1. 隐藏层: 从 ReLU 开始。如果很多神经元似乎死了,试试 Leaky ReLU。
  2. 二分类输出: Sigmoid。
  3. 多分类输出: Softmax。
  4. 回归输出(如预测温度):不用激活函数,直接输出原始值。
  5. 构建 Transformer: 参考类似模型的做法,通常是 GELU 或 Swish 类函数。

30 秒自己试试

import numpy as np

x = np.array([-3, -1, 0, 1, 3])

sigmoid = 1 / (1 + np.exp(-x))
relu = np.maximum(0, x)
tanh = np.tanh(x)

print("sigmoid:", sigmoid.round(2))
print("tanh :", tanh.round(2))
print("relu :", relu)

运行并比较。注意 Sigmoid 在 3 和 100 之间几乎不变,而 ReLU 持续增长。这个差异正是为什么一个在深度上挣扎,而另一个不会。

常见问题

可以在不同层使用不同的激活函数吗?

可以。隐藏层通常用一种函数(如 ReLU),输出层用另一种(如 Softmax)来匹配任务。

ReLU 总是最好的吗?

不是。它是最好的起点。更新的平滑函数在非常大的模型中可能胜出,但对大多数入门项目来说,ReLU 快速、简单、难以超越。

一句话解释什么是梯度消失?

就是学习信号在反向传播穿过各层时不断缩小,直到早期层几乎得不到反馈,停止改进。

最后思考

激活函数是一个微小的弯折,把一堆直线数学变成能识别面孔、翻译语言、预测故障的东西。小开关,大效果。哪个最让你惊讶:100 层技巧,还是 ReLU 只是 max(0, x)?在评论区告诉我。

如果你觉得有帮助,点❤️并关注获取更多通俗易懂的机器学习和工程指南。新文章每周二和周五发布,这篇属于机器学习基础系列。

本文最初发布于 ML AI Insights Hub。

#激活函数#神经网络#Sigmoid#Tanh#ReLU#GELU#深度学习#Softmax
分享:

相关推荐