深度学习_神经网络激活函数
🚀 激活函数全解析:从基础到高阶
🧩 一、激活函数的核心作用回顾
激活函数的作用是:
- 引入非线性 → 使神经网络能拟合复杂映射
- 控制梯度传播 → 避免梯度爆炸或消失
- 影响训练速度、收敛性与性能
⚙️ 二、基础激活函数
1️⃣ Sigmoid 激活函数
定义公式
σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}}σ(x)=1+e−x1
输出范围: (0,1)(0, 1)(0,1)
导数公式
σ′(x)=σ(x)⋅(1−σ(x))\sigma'(x) = \sigma(x) \cdot (1 - \sigma(x))σ′(x)=σ(x)⋅(1−σ(x))
最大导数值出现在 x=0x=0x=0,此时:
σ′(0)=0.25\sigma'(0) = 0.25σ′(0)=0.25
特点与理解
- 将输入"压缩"到 (0,1)(0, 1)(0,1),像是概率映射器
- 中间区域(约 −2∼2-2 \sim 2−2∼2)变化最显著,两侧快速进入饱和区
优缺点
| 优点 | 缺点 |
|---|---|
| 平滑可导,输出连续 | 容易梯度消失(导数 ≤0.25\le 0.25≤0.25) |
| 输出有界,便于概率建模 | 输出非零均值 (>0)(>0)(>0),会造成梯度偏移 |
| 常用于输出层(二分类) | 不适合深层网络(梯度衰减严重) |
应用场景
- 二分类输出层(如 logistic 回归、二分类神经网络)
- 中间层中几乎被 ReLU 完全替代
2️⃣ Softmax 激活函数
定义公式
对于一个向量 z=[z1,z2,…,zk]\mathbf{z} = [z_1, z_2, \ldots, z_k]z=[z1,z2,…,zk],第 iii 个分量的 Softmax 输出为:
Softmax(zi)=ezi∑j=1kezj\text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{k} e^{z_j}}Softmax(zi)=∑j=1kezjezi
特征与性质
- 将实数向量映射为一个概率分布(所有分量相加 =1= 1=1)
- 强调最大值,使得模型学会"选择"
- 对数稳定版本(避免数值溢出):
Softmax(zi)=ezi−max(z)∑jezj−max(z)\text{Softmax}(z_i) = \frac{e^{z_i - \max(\mathbf{z})}}{\sum_j e^{z_j - \max(\mathbf{z})}}Softmax(zi)=∑jezj−max(z)ezi−max(z)
优缺点
| 优点 | 缺点 |
|---|---|
| 输出概率分布,便于多分类 | 对大值敏感,可能过度"确定" |
| 可与交叉熵自然结合 | 容易数值溢出(需 log-sum-exp\log\text{-sum}\text{-}\explog-sum-exp 稳定化) |
应用场景
- 多分类输出层
- NLP 模型的 注意力机制中的 attention weights\text{attention weights}attention weights
3️⃣ ReLU(Rectified Linear Unit)
定义公式
ReLU(x)=max(0,x)\text{ReLU}(x) = \max(0, x)ReLU(x)=max(0,x)
导数:
ReLU′(x)={1,x>00,x≤0\text{ReLU}'(x) = \begin{cases} 1, & x > 0 \\ 0, & x \leq 0 \end{cases}ReLU′(x)={1,0,x>0x≤0
特点
- 保留正值,抑制负值
- 计算简单,只有比较和赋值操作
- 稀疏激活(很多神经元输出 000)
优缺点
| 优点 | 缺点 |
|---|---|
| 计算高效,收敛快 | 负区间梯度为 000,易导致"神经元死亡" |
| 缓解梯度消失问题 | 不可导点在 000(但影响可忽略) |
| 保持非线性 | 输出非零均值(有偏移) |
应用场景
- 几乎所有深度网络(CNN、MLP、Transformer)
- 特别是卷积层后的默认选择
4️⃣ Leaky ReLU(带泄露的 ReLU)
为了解决 ReLU "死亡"问题,提出了 Leaky ReLU。
定义公式
LeakyReLU(x)={x,x>0αx,x≤0\text{LeakyReLU}(x) = \begin{cases} x, & x > 0 \\ \alpha x, & x \leq 0 \end{cases}LeakyReLU(x)={x,αx,x>0x≤0
其中 α\alphaα 通常取 0.010.010.01 或一个小的正值。
导数
LeakyReLU′(x)={1,x>0α,x≤0\text{LeakyReLU}'(x) = \begin{cases} 1, & x > 0 \\ \alpha, & x \leq 0 \end{cases}LeakyReLU′(x)={1,α,x>0x≤0
特点与优缺点
| 优点 | 缺点 |
|---|---|
| 避免神经元死亡(负梯度不会为 000) | α\alphaα 需调参 |
| 简单高效,梯度连续 | 若 α\alphaα 太大,会破坏稀疏性 |
应用场景
- 深层 CNN
- 对训练稳定性要求高的场景
- GANs(生成对抗网络)中广泛使用
⚙️ 三、高阶激活函数
1️⃣ GELU(Gaussian Error Linear Unit)
GELU 激活函数通过将输入 xxx 乘以标准正态分布的累积分布函数 Φ(x)\Phi(x)Φ(x) 来实现"概率门控"。
定义公式
GELU(x)=x⋅Φ(x)\text{GELU}(x) = x \cdot \Phi(x)GELU(x)=x⋅Φ(x)
其中 Φ(x)\Phi(x)Φ(x) 是标准正态分布的累积分布函数(CDF):
Φ(x)=12[1+erf(x2)]\Phi(x) = \frac{1}{2}\left[1 + \text{erf}\left(\frac{x}{\sqrt{2}}\right)\right]Φ(x)=21[1+erf(2x)]
📘 近似形式(方便计算):
GELU(x)≈0.5x[1+tanh(2π(x+0.044715x3))]\text{GELU}(x) \approx 0.5x \left[1 + \tanh\left(\sqrt{\frac{2}{\pi}} (x + 0.044715x^3)\right)\right]GELU(x)≈0.5x[1+tanh(π2(x+0.044715x3))]
直观理解
ReLU 是简单地将负数"砍掉";GELU 则是按概率"软裁剪":
- 当 xxx 越大,Φ(x)\Phi(x)Φ(x) 越接近 111(输出接近 xxx)
- 当 xxx 越小,Φ(x)\Phi(x)Φ(x) 越接近 000(输出接近 000)
因此,它提供了一个平滑的、概率驱动的非线性变换。
公式曲线对比
| 函数 | 特征 | 是否平滑 | 是否非线性 |
|---|---|---|---|
| ReLU\text{ReLU}ReLU | max(0,x)\max(0, x)max(0,x) | 否(拐点不光滑) | 是 |
| GELU\text{GELU}GELU | x⋅Φ(x)x \cdot \Phi(x)x⋅Φ(x) | ✅ 是 | ✅ 是 |
📈 GELU\text{GELU}GELU 比 ReLU\text{ReLU}ReLU 平滑得多,因此在反向传播时梯度不会突变。
优缺点
| 优点 | 缺点 |
|---|---|
| 平滑可导,梯度传播更稳定 | 计算量比 ReLU\text{ReLU}ReLU 大(涉及 tanh\tanhtanh / erf\text{erf}erf) |
| 对小输入保留部分信息(不完全"砍掉") | 理论分析复杂 |
| 在 BERT、Transformer 中显著提升效果 |
典型应用场景
- BERT / GPT / Transformer 系列 默认使用 GELU\text{GELU}GELU
- Vision Transformer (ViT)
- 任何希望提升模型平滑性与表达能力的深层网络
2️⃣ Swish 激活函数
Swish 是一种"自门控"激活函数,由 Google 提出,并在 EfficientNet\text{EfficientNet}EfficientNet 中得到广泛应用。
定义公式
Swish(x)=x⋅σ(βx)\text{Swish}(x) = x \cdot \sigma(\beta x)Swish(x)=x⋅σ(βx)
其中 σ(x)\sigma(x)σ(x) 是 Sigmoid 函数:
σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}}σ(x)=1+e−x1
若 β=1\beta = 1β=1,则简写为:
Swish(x)=x⋅σ(x)\text{Swish}(x) = x \cdot \sigma(x)Swish(x)=x⋅σ(x)
直观理解
Swish\text{Swish}Swish 的行为也是由自身输入 xxx 决定的:
- 小输入会被抑制(因为 σ(x)\sigma(x)σ(x) 小于 0.50.50.5)
- 大输入接近线性输出(因为 σ(x)→1\sigma(x) \to 1σ(x)→1)
- 中间区域平滑过渡
特点与优势
| 特性 | 描述 |
|---|---|
| 平滑且非单调 | 比 ReLU\text{ReLU}ReLU 更柔和,对小负值也保留部分信息 |
| 自适应门控机制 | 输出由自身决定,具有轻微"记忆"特征 |
| 可微分 | 反向传播时梯度连续稳定 |
优缺点
| 优点 | 缺点 |
|---|---|
| 连续可导,梯度稳定 | 计算量大于 ReLU\text{ReLU}ReLU |
| 对负值保留部分激活 | 理论解释相对复杂 |
| 实验性能强于 ReLU\text{ReLU}ReLU(如 EfficientNet\text{EfficientNet}EfficientNet) |
应用场景
- EfficientNet\text{EfficientNet}EfficientNet、MobileNetV3\text{MobileNetV3}MobileNetV3
- Transformer 变体
- 深层或轻量网络中需要平滑激活的场景
🔬 四、GELU vs Swish 对比总结
| 特性 | GELU\text{GELU}GELU | Swish\text{Swish}Swish |
|---|---|---|
| 定义 | x⋅Φ(x)x \cdot \Phi(x)x⋅Φ(x) | x⋅σ(x)x \cdot \sigma(x)x⋅σ(x) |
| 平滑性 | ✅ 高 | ✅ 高 |
| 计算复杂度 | 较高 (erf/tanh\text{erf}/\tanherf/tanh) | 中等 (sigmoid\text{sigmoid}sigmoid) |
| 理论基础 | 源于概率论(正态分布) | 经验发现 |
| 单调性 | 非单调 | 非单调 |
| 应用 | Transformer、BERT | EfficientNet、MobileNetV3 |
| 性能 | 稍优于 Swish\text{Swish}Swish | 稍低但计算更快 |
📊 五、激活函数对比总结表
| 激活函数 | 公式 | 输出范围 | 导数范围 | 优点 | 缺点 | 常用场景 |
|---|---|---|---|---|---|---|
| Sigmoid | 1/(1+e−x)1/(1+e^{-x})1/(1+e−x) | (0,1)(0,1)(0,1) | (0,0.25](0, 0.25](0,0.25] | 平滑,概率输出 | 梯度消失 | 二分类输出层 |
| Softmax | ezi/∑ezje^{z_i} / \sum e^{z_j}ezi/∑ezj | (0,1),∑=1(0,1), \sum=1(0,1),∑=1 | — | 概率分布 | 数值不稳定 | 多分类输出层 |
| ReLU | max(0,x)\max(0,x)max(0,x) | [0,∞)[0,\infty)[0,∞) | {0,1}\{0,1\}{0,1} | 高效不饱和 | 死亡神经元 | 主流 CNN\text{CNN}CNN 激活 |
| Leaky ReLU | x(x>0),αx(x≤0)x\ (x>0), \alpha x\ (x\leq 0)x (x>0),αx (x≤0) | (−∞,∞)(-\infty,\infty)(−∞,∞) | {α,1}\{\alpha,1\}{α,1} | 防死区 | 需调 α\alphaα | GAN、CNN |
| Swish | x⋅σ(x)x \cdot \sigma(x)x⋅σ(x) | (−∞,∞)(-\infty,\infty)(−∞,∞) | — | 平滑梯度稳定 | 慢 | EfficientNet\text{EfficientNet}EfficientNet |
| GELU | x⋅Φ(x)x \cdot \Phi(x)x⋅Φ(x) | (−∞,∞)(-\infty,\infty)(−∞,∞) | — | 平滑表现最优 | 复杂 | Transformer\text{Transformer}Transformer |
💡 六、形象口诀总结
🔹 Sigmoid:压成概率线
🔹 Softmax:多选一概率
🔹 ReLU:负的砍掉
🔹 Leaky ReLU:留一点负梯度
🔹 Swish:小负留一线
🔹 GELU:概率来决定
🔹 Soft 平滑不突变,梯度流得远
🎯 七、选择指南
基础选择原则:
- 输出层:分类用 Sigmoid/Softmax,回归用线性
- 隐藏层:ReLU 系列是默认起点
- 高级场景:Transformer 用 GELU,轻量网络考虑 Swish
- 问题网络:梯度消失尝试 Leaky ReLU,不稳定尝试 Swish/GELU
现代推荐:
- 默认选择:ReLU(简单高效)
- 进阶选择:GELU(Transformer 系列)
- 轻量网络:Swish(EfficientNet 系列)
- 特殊场景:Leaky ReLU(GANs、深层 CNN)

