深度学习_神经网络激活函数

🚀 激活函数全解析:从基础到高阶


🧩 一、激活函数的核心作用回顾

激活函数的作用是:

  • 引入非线性 → 使神经网络能拟合复杂映射
  • 控制梯度传播 → 避免梯度爆炸或消失
  • 影响训练速度、收敛性与性能

⚙️ 二、基础激活函数

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(2 x)]

📘 近似形式(方便计算):
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)
相关推荐
core5125 小时前
神经网络 (Neural Networks):模仿大脑的超级机器
人工智能·深度学习·神经网络
GitCode官方6 小时前
Qwen-Image-Edit-2509 正式上线 AtomGit AI:重新定义 AI 图像编辑体验!
人工智能·计算机视觉·atomgit
SCBAiotAigc6 小时前
Chrome的cookie编辑插件EditThisCookie
人工智能·chrome·python·ubuntu
啊阿狸不会拉杆6 小时前
《数字图像处理》实验6-图像分割方法
图像处理·人工智能·算法·计算机视觉·数字图像处理
不惑_6 小时前
通俗理解什么是神经网络
人工智能·深度学习·神经网络
愚公搬代码6 小时前
【愚公系列】《扣子开发 AI Agent 智能体应用》014-基于大模型的企业知识库(知识库的理论基础 RAG)
人工智能
Nwiliuyw6 小时前
Isaac Gym的WARNING: Forcing cpu pipeline. GPU pipeline disabled无法启用问题可能是个幌子骗了你
人工智能·经验分享·学习
GAOJ_K6 小时前
旋转花键如何保障精密设备长期运行高精度?
人工智能·科技·自动化·制造
神算大模型APi--天枢6466 小时前
合规落地加速期,大模型后端开发与部署的实战指南
大数据·前端·人工智能·架构·硬件架构
CaiGuoHui16 小时前
利用大型语言模型(LLM)实现Verilog设计中的功能缺陷定位
人工智能·深度学习·语言模型·自然语言处理