激活函数有什么用?Sigmoid、Tanh、ReLU 到底怎么选?

激活函数有什么用?Sigmoid、Tanh、ReLU 到底怎么选?
上篇文章我们把神经网络拆成了一颗颗"积木"——神经元。
你知道了加权求和是怎么回事,知道了信息是怎么一层层往前传的。
但有个问题一直悬着:每层神经元算完数字之后,是直接原封不动地传给下一层吗?
当然不是。
神经元的输出前,还要过一道"安检门"。这道门,决定了信号是放大、缩小,还是直接掐掉。
这个"安检门",就是激活函数。
它才是让神经网络真正"活"起来的东西。
激活函数是什么?——神经网络的"决策阀门"
先来看一颗神经元长什么样。

你给它一堆输入 x1、x2、x3... 每个输入带个权重 w1、w2、w3...
神经元先把所有输入加权求和:z = w1×x1 + w2×x2 + w3×x3 + b
然后呢?
然后就完了吗?
如果就这样直接传出去,那神经网络跟一个计算器没什么区别。
三层堆在一起,也不过是做了更多次加法和乘法。
这东西学不了复杂规律,因为它本质上是线性的。
那怎么才能让它"非线性"呢?
加个激活函数。
激活函数把加权求和的结果 z 扔进去,吐出来一个非线性变换后的值 a。
a = f(z)
这个 a 才是神经元的真正输出。
你可能觉得这也没多玄乎。但就是这个小小的非线性函数,彻底改变了神经网络的能力边界。
没有它,十层网络等于一层。
有了它,神经网络能拟合任意复杂的关系——图片识别、自然语言处理、下棋、开车,统统拿下。
想象一个投票站。
神经元收到一堆意见,每条意见影响力不同(权重),最后汇总成一股声音。
但汇总完了还不能直接定结论——得看看这声音够不够响。
激活函数就是那个门槛:声音太小,直接淘汰;声音够大,才能影响最终决策。
这就是神经网络的"决策阀门"。
三个经典激活函数——Sigmoid、Tanh、ReLU的个性特征
神经网络发展了几十年,科学家们发明了一堆激活函数。
但真正被广泛使用的,就那么几个。
先看最经典的三剑客。

Sigmoid:谨慎的"翻译官"
Sigmoid 的公式长这样:
σ(x) = 1 / (1 + e^(-x))
它把任意输入压缩到 0 到 1 之间。
x 越小,输出越接近 0;x 越大,输出越接近 1。
这像什么?
像一个谨慎的翻译官。
不管你说什么,它都给你翻译成"可能性"。
这件事发生的概率是多少?0.7。
那件事呢?0.2。
0 到 1 之间,天生适合表示概率。
所以 Sigmoid 长期被用在二分类问题的输出层。
但它有个致命缺陷。
当 x 很大或很小的时候,Sigmoid 的输出基本不动了——要么接近 0,要么接近 1。
这时候梯度也几乎变成了零。
梯度是反向传播的关键。梯度为零,权重就更新不了。
这叫"梯度消失"。
这个问题,我们后面会重点讲。
Tanh:双向"翻译官"
Tanh 的公式:
tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))
它的输出范围是 -1 到 1。
跟 Sigmoid 比,它是以 0 为中心的。
什么意思?
输出可以是正的,也可以是负的。
正负代表两种"态度":正的是"支持",负的是"反对"。
这种特性让它在隐藏层比 Sigmoid 更好用。
收敛速度更快,训练更稳定。
但 Tanh 也没逃过梯度消失的命运。
当 x 绝对值很大时,曲线又变平了,梯度又没了。
ReLU:简单粗暴的"直通道"
ReLU 的公式简单到离谱:
f(x) = max(0, x)
就一行。
x 大于 0,直接输出 x;x 小于等于 0,输出 0。
像什么?
像一个直通道。
正向信号畅通无阻,负向信号直接砍掉。
ReLU 牛在哪里?
第一,计算极快。
不用算指数,不用算复杂函数,就一个比较操作。
第二,x 大于 0 时,梯度恒为 1。
反向传播时,梯度原封不动地往前传。
梯度消失?不存在的。
2012 年 AlexNet 用 ReLU 炸场之后,这玩意儿就成了隐藏层的默认选择。
但 ReLU 有个问题,而且挺严重。
梯度消失——深度学习的第一道坎
先搞清楚什么是梯度。
训练神经网络,本质上是不断调整权重,让输出越来越准。
怎么调整?
先算一个"误差"——预测值和真实值差多少。
然后把这个误差往回传,看看每个权重该往哪个方向改、改多少。
这个"该往哪个方向改"的信息,就是梯度。
梯度乘以学习率,就是权重的更新量。
现在问题来了。
Sigmoid 和 Tanh 这类函数,在 x 很大或很小的时候,输出几乎不变。
曲线两头是平的。
平的意味着什么?
斜率为零,梯度为零。
梯度为零,权重就更新了个寂寞。
而且这事儿是一层层传导的。
误差从输出层往输入层传,每传一层,梯度就要乘以激活函数的导数。
Sigmoid 的导数最大值才 0.25。
传 5 层,梯度就只剩下 0.25^5 ≈ 0.0003。
传 10 层,基本归零了。

越靠近输入层,权重越难更新。
前面的层几乎学不到东西,后面的层倒是很努力。
但前面的层是打基础的呀!
底子打不好,后面再努力也白搭。
这就是深度学习的"第一道坎"——梯度消失。
它直接限制了神经网络的深度。
2006 年之前,神经网络都不敢做太深,就是这个原因。
后来 ReLU 出现,直接把这个问题解决了大半。
但 ReLU 带来了新问题。
ReLU的"死亡陷阱"——一半是天使,一半是魔鬼
ReLU 解决了梯度消失。
但它自己也有缺陷。
我们看 ReLU 的图像。

x > 0 时,曲线是斜率为 1 的直线,没问题。
x ≤ 0 时,输出恒为 0。
问题就出在这里。
假设有个神经元,因为各种原因,输出的值一直是负的。
经过 ReLU 之后,它永远输出 0。
一旦输出 0,后面就再也收不到任何信号了。
这个神经元"死"了。
而且是永久性的。
你可能觉得这个神经元反正也不干活,死了就死了呗。
但问题是,它的"死"是不可逆的。
梯度是 0,学习率再小、训练时间再长,它也活不过来。
更扎心的是,这事儿还挺容易发生。
权重初始化不好,可能死一片。
学习率设太大,也可能死一片。
数据分布不好,还可能死一片。
有研究说,用 ReLU 的网络中,有 20%~50% 的神经元是死的。
一半是天使,一半是魔鬼。
这话形容 ReLU 太准确了。
那怎么办?
LeakyReLU:给条活路
LeakyReLU 来了。
公式:
f(x) = max(0.01x, x)
x > 0 时,跟 ReLU 一样。
x < 0 时,不是输出 0,而是输出 0.01x。
一条很小很小的斜率。
这就好比给被判处"死刑"的神经元,留了一条缝。
不是完全畅通,但至少有信号透进来。
梯度不为零,神经元还有可能被救活。
0.01 这个数字可以调,叫 alpha。
还有 Parametric ReLU(PReLU),让网络自己学习这个斜率。
还有一个更狠的——ELU。
负值不是线性衰减,而是指数衰减。
曲线更平滑,训练更稳定。
但计算量大了点。
总结一下:
ReLU 是主流选择,够快够简单,小问题忍了。
想更稳妥?试试 LeakyReLU。
不差那点计算力?试试 ELU。
实战指南——不同任务如何选择激活函数
原理讲完了,该上实战了。

隐藏层:无脑选 ReLU
2012 年 AlexNet 之后,ReLU 就成了隐藏层的默认配置。
计算快、梯度不消失、稀疏激活——优点一箩筐。
死神经元问题?靠其他手段解决:初始化方法、Batch Normalization、合适的学习率。
别想太多,ReLU 就对了。
二分类输出层:Sigmoid
二分类问题,输出就两个选项:是或否。
需要输出一个概率值。
0 到 1 之间,Sigmoid 天生适合。
直接接个 sigmoid,输出就是"正类的概率"。
大于 0.5 就判正类,简单粗暴。
多分类输出层:Softmax
多分类不一样。
输出不是"是猫的概率",而是"是猫、是狗、是兔子的概率分别是多少"。
所有概率加起来得等于 1。
Softmax 干的就是这个活:
把 logits 转换成概率分布。
e^x 的特性让大的更大、小的更小,最终归一化。
回归任务:不用激活函数
回归问题输出的是一个连续值。
房价是多少?温度是多少?股票涨多少?
这些不需要压缩到 0-1 或 -1 到 1。
直接线性输出就行。
加激活函数反而画蛇添足。
RNN:Tanh 或门控机制
循环神经网络处理序列数据,有特殊要求。
Tanh 的 -1 到 1 范围适合循环计算,状态可以累加也可以抵消。
所以 LSTM 和 GRU 的核心门控,用的都是 Tanh。
Transformer:GELU
BERT、GPT 这些模型,用的是 Transformer 架构。
它们用的激活函数叫 GELU。
Gaussian Error Linear Unit。
比 ReLU 更平滑,比 Tanh 收敛更快。
公式稍微复杂一点,但效果确实好。
说白了:有钱(算力)的时候,选更好的。
一张表总结——三大激活函数核心对比
说了这么多,上表。

| 维度 | Sigmoid | Tanh | ReLU |
|---|---|---|---|
| 值域 | (0, 1) | (-1, 1) | [0, +∞) |
| 零中心 | 否 | 是 | 否 |
| 梯度消失 | 严重 | 较严重 | 无 |
| 计算复杂度 | 高(指数运算) | 高(指数运算) | 低(比较运算) |
| 稀疏激活 | 否 | 否 | 是 |
| 死神经元 | 无 | 无 | 有 |
这张表就是你的"激活函数体检报告"。
用的时候扫一眼,哪项不满足换哪个。
好了,激活函数的故事讲完了。
你知道了它为什么是神经网络的"决策阀门"。
知道了 Sigmoid、Tanh、ReLU 各自的脾气。
知道了梯度消失是怎么回事,也知道了 ReLU 的"死亡陷阱"。
下次搭网络的时候,你就能说出"这一层用 ReLU 是因为..."了。
但等等。
数据往前传叫"前向传播",误差往回传叫"反向传播"。
我们讲了激活函数怎么影响前向传播的输出,也讲了梯度消失和反向传播的关联。
那反向传播具体是怎么算的?权重是怎么一步步调整的?
这就是下一篇文章要聊的了。
等你回来,我们一起把神经网络训练的全流程走一遍。
