深度学习常见激活函数

85 阅读2分钟

直观"理解"常见激活函数。


0. 为什么需要激活函数?

如果神经网络只有线性运算 y = Wx + b,无论叠多少层,最终都等价于一层线性变换

W2(W1x+b1)+b2=(W2W1)x+(W2b1+b2)W_2(W_1 x + b_1) + b_2 = (W_2 W_1)\, x + (W_2 b_1 + b_2)

也就是说——没有激活函数的深度网络 = 一个普通的线性回归,无法拟合非线性关系(比如异或、图像识别)。

激活函数的核心作用:引入非线性,让网络真正"深"起来。

本文重点介绍四个最经典的激活函数:

名称公式用一句话概括
Step 阶跃f(x)={1,x>00,x0f(x)=\begin{cases}1, & x>0\\0, & x\le 0\end{cases}开关,非黑即白
Sigmoidσ(x)=11+ex\sigma(x)=\dfrac{1}{1+e^{-x}}把任意数压到 (0,1)
Tanhtanh(x)=exexex+ex\tanh(x)=\dfrac{e^x-e^{-x}}{e^x+e^{-x}}零中心版 Sigmoid
ReLUReLU(x)=max(0,x)\mathrm{ReLU}(x)=\max(0, x)负数清零,正数直通

1. Step 阶跃函数

1.1 定义

f(x)={1,x>00,x0f(x)=\begin{cases}1, & x>0\\0, & x\le 0\end{cases}

1.2 函数图像

step.png

1.3 求导分析

阶跃函数在 x0x \ne 0 处导数处处为 0;在 x=0x = 0不连续,严格意义上不可导

x=0x=0 处,函数值从 0 瞬间跳到 1,斜率为无穷大,但只在这一点上。因此无法进行梯度下降,工程中不使用。

1.4 导数图像

step_deriv.png

1.5 特点

优点缺点
形式极简,运算快几乎处处导数为 0,无法用梯度下降训练
输出非黑即白,易理解x=0x=0 处不连续,不光滑

1.6 应用场景

  • 感知机(Perceptron):1958 年 Rosenblatt 提出感知机时使用的激活函数。
  • 理论教学:解释二分类决策边界、神经元最早形态。
  • 现代深度学习中基本不再使用:因为不可导,反向传播无从下手。

2. Sigmoid 函数

2.1 定义

σ(x)=11+ex\sigma(x) = \frac{1}{1+e^{-x}}

输出范围 (0,1)(0, 1),恰好可解释为"概率"。

2.2 函数图像

sigmoid.png

2.3 求导推导(完整链式法则)

σ(x)=11+ex\sigma(x) = \dfrac{1}{1+e^{-x}},令 u=1+exu = 1+e^{-x},则 σ=u1\sigma = u^{-1}

第 1 步:对 uu 求导

dudx=ddx(1+ex)=ex\frac{du}{dx} = \frac{d}{dx}(1+e^{-x}) = -e^{-x}

第 2 步:链式法则

dσdx=ddu(u1)dudx=u2(ex)=ex(1+ex)2\frac{d\sigma}{dx} = \frac{d}{du}(u^{-1}) \cdot \frac{du}{dx} = -u^{-2} \cdot (-e^{-x}) = \frac{e^{-x}}{(1+e^{-x})^2}

第 3 步:化简为 σ\sigma 自身的表达式(这是关键技巧)

把分子的 exe^{-x} 拆成 (1+ex)1(1+e^{-x}) - 1

ex(1+ex)2=(1+ex)1(1+ex)2=11+ex1(1+ex)2=σ(x)σ(x)2\begin{aligned} \frac{e^{-x}}{(1+e^{-x})^2} &= \frac{(1+e^{-x})-1}{(1+e^{-x})^2} \\ &= \frac{1}{1+e^{-x}} - \frac{1}{(1+e^{-x})^2} \\ &= \sigma(x) - \sigma(x)^2 \end{aligned}

最终结果:

σ(x)=σ(x)(1σ(x))\boxed{\sigma'(x) = \sigma(x)\bigl(1 - \sigma(x)\bigr)}

💡 为何这个形式重要:反向传播时,前向传播已经算出了 σ(x)\sigma(x),求导只需一次乘法和一次减法,无需重新指数运算,效率极高。

2.4 导数图像

sigmoid_deriv.png

注意纵轴最大值只到 0.25(在 x=0x=0 处取得):

σ(0)=σ(0)(1σ(0))=0.5×0.5=0.25\sigma'(0) = \sigma(0)(1-\sigma(0)) = 0.5 \times 0.5 = 0.25

2.5 特点

优点缺点
输出 (0,1)\in (0,1),可作概率梯度消失:两端导数趋近 0,多层叠加梯度近乎归零
光滑可导输出非零中心(恒正),导致后层权重更新方向受限
导数形式优雅 σ(1σ)\sigma(1-\sigma)含指数运算,计算开销大于 ReLU

⚠️ 梯度消失的直观计算:若 5 层全用 Sigmoid,反向传播时梯度最多被乘上 0.2550.0010.25^5 \approx 0.001,前几层几乎学不到东西。

2.6 应用场景

  • 二分类输出层:将 logits 压到 (0,1)(0,1) 作为正类概率。
  • 门控机制:LSTM/GRU 的遗忘门、输入门、输出门都用 Sigmoid 控制信息流通比例。
  • 现代隐藏层基本不用:被 ReLU 取代。

3. Tanh 函数

3.1 定义

tanh(x)=exexex+ex\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}

输出范围 (1,1)(-1, 1)零中心

Tanh 与 Sigmoid 的关系:anh(x)=2σ(2x)1 anh(x) = 2\sigma(2x) - 1

几何变换三步

步骤公式几何效果
原始σ(x)\sigma(x)值域 (0,1)(0, 1)
横向压缩σ(2x)\sigma(2x)曲线变陡 2 倍,值域不变
纵向拉伸2σ(2x)2\sigma(2x)值域 (0,2)(0, 2)缩放
向下平移2σ(2x)12\sigma(2x) - 1值域 (1,1)(-1, 1)平移

直观图解

sigmoid_to_tanh.png

代数推导:从 σ(2x)=11+e2x\sigma(2x) = \frac{1}{1+e^{-2x}} 出发,两边乘 2 减 1:

2σ(2x)1=21+e2x1=1e2x1+e2x2\sigma(2x) - 1 = \frac{2}{1+e^{-2x}} - 1 = \frac{1-e^{-2x}}{1+e^{-2x}}

分子分母同乘 exe^x

(1e2x)ex(1+e2x)ex=exexex+ex=tanh(x)\frac{(1-e^{-2x})e^x}{(1+e^{-2x})e^x} = \frac{e^x - e^{-x}}{e^x + e^{-x}} = \tanh(x)

3.2 函数图像

tanh.png

3.3 求导推导(商法则)

u=exexu = e^x - e^{-x}v=ex+exv = e^x + e^{-x},则 tanh(x)=u/v\tanh(x) = u/v

第 1 步:求 u,vu', v'

u=ex+ex=v,v=exex=uu' = e^x + e^{-x} = v, \qquad v' = e^x - e^{-x} = u

第 2 步:商法则

tanh(x)=uvuvv2=vvuuv2=v2u2v2=1u2v2=1tanh2(x)\begin{aligned} \tanh'(x) &= \frac{u'v - uv'}{v^2} \\ &= \frac{v \cdot v - u \cdot u}{v^2} \\ &= \frac{v^2 - u^2}{v^2} \\ &= 1 - \frac{u^2}{v^2} \\ &= 1 - \tanh^2(x) \end{aligned}

最终结果:

tanh(x)=1tanh2(x)\boxed{\tanh'(x) = 1 - \tanh^2(x)}

💡 同样的复用技巧:反向传播时,前向已有 tanh(x)\tanh(x),求导只需 1tanh(x)21 - \tanh(x)^2

3.4 导数图像

tanh_deriv.png

最大值为 1(在 x=0x=0 处取得):

tanh(0)=10=1\tanh'(0) = 1 - 0 = 1

这比 Sigmoid 的 0.25 大 4 倍,所以Tanh 比 Sigmoid 收敛快

3.5 特点

优点缺点
零中心输出,梯度方向更均衡两端依旧饱和(x\lvert x \rvert 大时导数→0),仍有梯度消失
导数最大值 1,比 Sigmoid 快含指数运算,比 ReLU 慢
公式优美 1tanh21 - \tanh^2

3.6 应用场景

  • RNN/LSTM 的候选状态:LSTM 中候选记忆 C~t\tilde{C}_t 用 Tanh 把值压到 (1,1)(-1, 1)
  • 需要零均值输出的场景:比如 GAN 的生成器最后一层(输出 [1,1][-1, 1] 的图像像素)。
  • 浅层网络的隐藏层:在 ReLU 出现前是隐藏层的主流选择。

4. ReLU 函数

4.1 定义

ReLU(x)=max(0,x)={x,x>00,x0\mathrm{ReLU}(x) = \max(0, x) = \begin{cases} x, & x>0 \\ 0, & x\le 0 \end{cases}

4.2 函数图像

relu.png

4.3 求导分析

ReLU 是分段线性函数,分两段求导即可:

  • x>0x > 0f(x)=xf(x) = x,所以 f(x)=1f'(x) = 1
  • x<0x < 0f(x)=0f(x) = 0,所以 f(x)=0f'(x) = 0
  • x=0x = 0:左导数 0、右导数 1,不可导

但在工程实践中,由于 x=0x=0 的概率为零(浮点数精确为 0 极其罕见),通常约定:

f(x)={1,x>00,x0\boxed{f'(x) = \begin{cases} 1, & x>0 \\ 0, & x\le 0 \end{cases}}

4.4 导数图像

relu_deriv.png

4.5 特点

优点缺点
运算极简(一次比较),比 exp 快 6-10 倍Dying ReLU:若神经元长期输出 0,权重再也更新不了
正数区域导数恒为 1,梯度不消失输出非零中心
实践证明能让网络收敛快 6 倍以上(AlexNet 2012)负数区域信息完全丢失
隐式稀疏化(部分输出为 0),类似生物神经元-

Dying ReLU 现象

若 ReLU 神经元持续输出负数 → 前向输出 0 + 反向导数 0 → 权重不再更新 → 神经元永久死亡

为什么会发生?

  • 学习率太大,权重被一步更新到让输入始终为负的区域
  • 权重初始化不好,初始就偏向负区
  • 一旦进入负区,梯度为 0,权重再也无法调整回来(恶性循环)

后果

  • 网络中一部分神经元永久失效,模型容量下降
  • 极端情况 40%+ 神经元死亡,表达能力大幅削弱
  • 训练后期损失不再下降,网络“学不动了”

解决方案

  • Leaky ReLUf(x)=max(0.01x,x)f(x) = \max(0.01x, x),负区给个小斜率
  • PReLU:负区斜率作为可学习参数
  • ELU / GELU / Swish:现代改进版

直观对比

dying_relu_solutions.png

4.6 应用场景

  • CNN/MLP 隐藏层的默认选择(2012 年 AlexNet 后成为业界标准)。
  • Transformer 的 FFN 层(虽然现在更多用 GELU,但 ReLU 仍很常见)。
  • 几乎所有现代深度网络的隐藏层

5. 四函数对比总览

5.1 函数图像总览

activations_all.png

5.2 导数图像总览(为何 ReLU 不梯度消失)

activations_deriv_all.png

一眼看出关键差异:

  • Sigmoid':最大 0.25,两端塌陷
  • Tanh':最大 1.0,两端塌陷
  • ReLU':正数区恒为 1,不衰减 ✅

5.3 速查表

维度StepSigmoidTanhReLU
输出范围{0,1}\{0,1\}(0,1)(0,1)(1,1)(-1,1)[0,+)[0,+\infty)
零中心
可导⚠️ (x=0x=0 不可导)
导数公式δ(x)\delta(x)σ(1σ)\sigma(1-\sigma)1tanh21-\tanh^21x>0\mathbf{1}_{x>0}
导数最大值\infty0.251.01.0
梯度消失严重严重否(正区)
计算复杂度极低高(exp)高(exp)极低
隐藏层推荐度⚠️⚠️

5.4 实战选择指南

任务类型           推荐激活函数
─────────────────────────────────────
隐藏层(默认)  →  ReLU
隐藏层(防 dying) → Leaky ReLU / GELU
二分类输出层    →  Sigmoid
多分类输出层    →  Softmax
回归输出层      →  Linear(不加激活)
RNN/LSTM 内部   →  Tanh + Sigmoid(门控)
GAN 生成器输出  →  Tanh(输出图像 [-1,1]

6. 核心知识点总结

  1. 激活函数的本质:引入非线性,让深度网络区别于普通线性回归。
  2. 求导技巧的共性:Sigmoid 和 Tanh 的导数都能用自身的函数值表达,是工程上反向传播的关键优化。
  3. 梯度消失的根源:Sigmoid/Tanh 在两端饱和导致导数趋零,深层网络反向传播时梯度连乘 → 指数级衰减。
  4. ReLU 成为主流的核心原因:正区导数恒为 1 不衰减 + 运算极简,二者缺一不可。
  5. 没有"最好"的激活函数:要结合任务类型和网络结构选择,输出层尤其要看任务性质。

7. 延伸阅读

  • Leaky ReLU / PReLU:缓解 Dying ReLU 问题
  • ELU:负区平滑过渡,鲁棒性更强
  • GELU:Transformer 时代的新宠(GPT、BERT 均使用)
  • Swish / SiLUxσ(x)x \cdot \sigma(x),Google 通过 NAS 搜索发现
  • Softmax:多分类输出层专用,本质是多元 Sigmoid(非隐藏层激活函数)