← 返回题目列表

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

高频 中等 第 3 / 25 题 更新于 2026/09/25
深度学习激活函数ReLUSigmoid
学习 AI 实战项目

简化版

激活函数 给神经网络引入非线性——没有它,多层网络会塌缩成一层线性模型、深度毫无意义。常见的:Sigmoid(压到 (0,1),可作概率,但两端饱和导致梯度消失、输出非零中心,隐藏层已少用);Tanh(压到 (-1,1),零中心比 sigmoid 好,但仍会饱和梯度消失);ReLU(max(0,x),正区间导数恒为 1、计算快,能缓解部分激活路径的梯度消失,常作为隐藏层基线,缺点是负区间输出恒 0 可能「神经元死亡」);改进版 Leaky ReLU / PReLU / ELU / GELU 解决死亡问题。选择:隐藏层可先用 ReLU,并按架构考虑其变体或 GELU,输出层按任务定(二分类 sigmoid、多分类 softmax、回归无激活)。

详细版

常见激活函数对比:

函数公式值域优点缺点
Sigmoid1/(1+e⁻ˣ)(0,1)可作概率、平滑饱和梯度消失、非零中心、有 exp 慢
Tanh(eˣ-e⁻ˣ)/(eˣ+e⁻ˣ)(-1,1)零中心仍饱和梯度消失
ReLUmax(0,x)[0,∞)正半轴不饱和、快负半轴梯度为零、非零中心
Leaky ReLUmax(0.01x, x)(-∞,∞)降低死亡风险需选择负斜率
ELU/GELU平滑变体—更平滑、效果好计算稍贵

关键作用: 引入非线性——无激活则多层等价单层线性变换(见神经网络基础)。

ReLU 为什么成主流:

  • 正区间导数=1,不引入饱和小导数;但整网梯度仍受权重与其他层影响。
  • 计算简单(只比较取大),收敛快。
  • 负区间输出 0 → 稀疏激活。

完整版教学

一、激活函数的根本作用:引入非线性

激活函数最核心的作用是给网络引入非线性。如果每层只做 z = Wx+b 的线性变换、不加非线性激活,那么无论堆多少层,整个网络都等价于一个线性变换(多个线性变换的复合还是线性),表达能力和逻辑回归一样,深度完全白费(详见神经网络基础)。

激活函数在每层的线性变换后插入一个非线性操作,打破这种塌缩,让网络能层层组合出复杂的非线性函数——这是神经网络成为「万能近似器」的前提。所以「为什么需要激活函数」的标准答案就是:没有它深度网络失去意义。

二、Sigmoid:能当概率,但有硬伤

σ(x) = 1 / (1 + e⁻ˣ)     值域 (0,1)
  • 优点:输出在 (0,1),可解释为概率,平滑可导。
  • 缺点(导致隐藏层弃用):
    1. 饱和导致梯度消失:x 很大或很小时,sigmoid 曲线变平,导数趋近 0。反向传播梯度逐层连乘这些接近 0 的导数,会指数衰减,前面的层几乎学不动(详见梯度消失专题)。
    2. 输出非零中心(恒正):会让下一层梯度同号,权重更新呈「Z 字形」低效。
    3. 含指数运算,计算较慢。

现在 sigmoid 主要用在二分类的输出层(输出概率),隐藏层很少用。

三、Tanh:零中心,但仍会饱和

tanh(x) = (eˣ - e⁻ˣ)/(eˣ + e⁻ˣ)     值域 (-1,1)
  • 优点:输出零中心((-1,1)),比 sigmoid 的收敛性质好(解决了非零中心问题)。
  • 缺点:两端仍然饱和、仍会梯度消失——本质和 sigmoid 一样是 S 形曲线,只是范围不同。

Tanh 比 sigmoid 好用一点(尤其早期 RNN 常用),但同样受饱和梯度消失困扰。

四、ReLU:常用基线,缓解部分路径的梯度消失

ReLU(x) = max(0, x)     值域 [0, ∞)

ReLU 常作为隐藏层基线,因为它缓解了 sigmoid/tanh 的饱和问题:

  • 正区间局部导数恒为 1:不会像饱和 sigmoid 那样再乘一个很小的激活导数,但整条路径仍受权重雅可比影响,大幅缓解梯度消失——这是 ReLU 让深层网络能训练起来的关键。
  • 计算极快:只是「和 0 比大小取较大者」,没有指数运算。
  • 稀疏激活:负输入输出 0,让网络中一部分神经元不激活,带来稀疏性。
  • 收敛通常比 sigmoid/tanh 快得多。

ReLU 的缺点——神经元死亡(Dying ReLU):如果一个神经元的输入总是负的(如学习率过大导致权重更新过猛),它的输出恒为 0、梯度也恒为 0,从此再也无法更新——这个神经元「死了」,永久失效。

五、ReLU 的改进版:修复神经元死亡

为解决死亡问题,出现了一系列变体,共同思路是给负区间也留一点梯度:

  • Leaky ReLU:max(0.01x, x)——负区间给一个小斜率(如 0.01),负输入也有非零梯度,神经元不会彻底死。
  • PReLU:负区间的斜率变成可学习的参数。
  • ELU:负区间用平滑的指数曲线,输出可为负(更接近零中心),更平滑但计算稍贵。
  • GELU / Swish:更平滑的现代激活,GELU 在 BERT、GPT-2 等 Transformer 中常见,其他模型也可能采用 SiLU/SwiGLU;效果需由架构和任务验证。

六、怎么选——按位置和任务

隐藏层:

  • 可先用 ReLU——简单、快、有效;Transformer 等架构常按原论文使用 GELU、SiLU 或门控激活。
  • 担心神经元死亡 → Leaky ReLU / ELU。
  • Transformer → 优先遵循架构配置,常见 GELU / SiLU / SwiGLU。

输出层(按任务定):

  • 互斥二分类 → 单 logit 配 sigmoid/BCE;工程实现通常直接使用 BCE-with-logits。
  • 互斥多分类 → logits 配 softmax 交叉熵;多标签分类则通常每类独立 sigmoid。
  • 无约束实数回归 → 线性输出;非负、区间或概率参数预测应按输出约束选 Softplus、Sigmoid 等。

七、用数值比较饱和、死亡与平滑激活

激活函数的差异最终体现在输出和局部导数。Sigmoid 在 x=0 时导数为 0.25;在 x=10 时输出约 0.99995、导数约 4.54×10⁻⁵,已经接近饱和。ReLU 在 x=2 时导数为 1,但在 x=-2 时输出与常用次梯度都取 0,因此既能保住正区间梯度,也可能产生死亡单元。

输入Sigmoid 输出/导数Tanh 输出/导数ReLU 输出/导数
00.5 / 0.250 / 10 / 约定值
20.881 / 0.1050.964 / 0.0712 / 1
100.99995 / 0.000045约1 / 近010 / 1

输出层还必须和损失函数配套:二分类常把 logits 直接交给数值稳定的 BCE-with-logits,而不是先手算 sigmoid;多分类交叉熵同理常直接接 logits。回归也不总是无激活,例如预测非负尺度时可用 Softplus,但这属于任务约束而非默认规则。

易错点:ReLU 的局部导数为 1,不代表整条网络梯度恒为 1;权重、归一化和其他层仍会改变梯度尺度。

八、常见误区与追问

  • 误区:ReLU 彻底解决了深层网络的梯度消失。 它只去掉正区间的饱和导数,整条雅可比乘积仍可能收缩。
  • 误区:Sigmoid 不能出现在任何隐藏结构中。 门控网络和 LSTM 仍用它控制 0 到 1 的门值,只是不适合作为普通深层主激活。
  • 追问:ReLU 在 0 点不可导怎么办? 训练框架选定一个次梯度,通常取 0;单点不可导一般不妨碍随机优化。
  • 追问:为什么分类实现常接收 logits? 融合实现可用 log-sum-exp 技巧避免概率接近 0 或 1 时的溢出和下溢。
  • 追问:如何选择 GELU、SiLU 与 ReLU? 先遵循成熟架构,再以验证指标、吞吐和部署算子支持做消融。

九、加强记忆

激活函数的根本作用是引入非线性;没有它,多层仿射变换仍可合并为一层。Sigmoid 与 Tanh 在大绝对值处饱和,普通隐藏层中容易带来小梯度,但门控结构仍会使用 Sigmoid。ReLU 正半轴导数为 1、计算简单,负半轴却可能形成死亡单元;Leaky ReLU、ELU 等保留负区间梯度,GELU、SiLU 与门控激活则常见于现代架构。输出层必须按标签结构和约束选择:互斥分类、多标签分类与受约束回归并非同一种配置,训练实现优先直接接收 logits 的数值稳定损失。