Fork me on GitHub

人工智能之深度学习基础——常见的激活函数

激活函数是神经网络中的关键组件,用于引入非线性特性,从而使神经网络能够学习复杂的模式和关系。以下是常见的激活函数及其特点、公式和应用场景:
 

1. Sigmoid(S 型函数)

公式σ(x+ 1  /  (ex)

特点

  • 输出范围:(0,1)
  • 常用于二分类问题的概率输出。

优点

  • 平滑、连续,易于求导。
  • 将输出限制在 0 到 1 之间,便于概率建模。

缺点

  1. 梯度消失问题:在输入值较大或较小时,梯度接近 0。
  2. 输出不为零均值:导致较早层权重更新速度变慢。

应用场景

  • 输出层(特别是二分类问题)。

Sigmoid在逻辑回归里也有用到(LogicRegression)

2. Tanh 激活函数

公式f(x)  =  tanh(x)  =  (exex)  /  (ex+e-x)

特点

  • 输出范围:(−1,1)
  • 相比 Sigmoid,输出值居中在 0 附近。

优点

  • 零均值:加快权重更新速度。
  • 相对 Sigmoid 梯度较大。

缺点

  1. 梯度消失问题:对于极大或极小的输入,梯度趋近 0。
  2. 比较慢的计算速度。

应用场景

  • 隐藏层激活函数(已逐渐被 ReLU 替代)。

​3. ReLU(Rectified Linear Unit)

公式f(x)=max(0,x)

 

特点

  • 输出范围:[0,+∞)
  • 非线性,但计算简单。

优点

  1. 计算效率高:直接截断负值。
  2. 减少梯度消失问题:正区间的梯度为常数 1。

缺点

  1. Dying ReLU 问题:输入为负时,梯度为 0,可能导致神经元“死亡”。
  2. 输出不平衡:仅有正值输出。

应用场景

  • 大多数隐藏层的默认激活函数。

4. Leaky ReLU

公式

其中,α是一个小的正数(如 0.01)。

特点

  • 输出范围:(−∞,+∞)

优点

  1. 缓解 Dying ReLU 问题:为负值提供非零梯度。
  2. 保留了 ReLU 的优点。

缺点

  • 超参数 α\alphaα 需要手动设置。

应用场景

  • 高层网络中,替代 ReLU 使用。

5. Parametric ReLU(PReLU)

公式

 其中 α 是一个可学习参数。

特点

  • 是 Leaky ReLU 的扩展。

优点

  1. 自动调整负值的斜率 α
  2. 提升模型的表现能力。

缺点

  • 增加了模型的参数量。

应用场景

  • 深层神经网络。

6. Exponential Linear Unit(ELU)

公式

 其中 α>0

特点

  • 输出范围:(−α,+∞)

优点

  1. 负值区域平滑,解决 Dying ReLU 问题。
  2. 输出均值接近 0,加速收敛。

缺点

  • 计算复杂度比 ReLU 高。

应用场景

  • 对负值敏感的任务。

7. Softmax 激活函数

公式

特点

  • 输出范围:[0,1]
  • 将输入转换为概率分布(所有输出的和为 1)。

优点

  • 多分类问题中适用。

缺点

  • 输出概率受所有输入值的影响。

应用场景

  • 输出层(多分类问题)。

 8. Swish 激活函数

公式

f(x)  =  xσ(x)  =  ⋅  1/(1+ex)

特点

  • 自然平滑,比 ReLU 更高效。

优点

  1. 非单调:允许负值通过。
  2. 在深层网络中表现优越。

缺点

  • 计算复杂度较高。

应用场景

  • 深度学习中的复杂任务,如图像分类、自然语言处理。

9. GELU(Gaussian Error Linear Unit)

公式f(x)=xΦ(x)

其中 Φ(x) 是标准正态分布的累积分布函数。

特点

  • 结合了 ReLU 和 Sigmoid 的特性。

优点

  1. 性能优于 ReLU 和 Swish。
  2. 平滑过渡。

缺点

  • 计算复杂。

应用场景

  • Transformer 网络,如 BERT 和 GPT。

10. Maxout 激活函数

公式f(x)=max(  w1Tx + b1,  w2Tx + b2  )

特点

  • 可学习多段线性分段函数。

优点

  1. 能拟合更复杂的非线性函数。
  2. 避免 Dying ReLU 问题。

缺点

  1. 参数量增加。
  2. 计算复杂。

应用场景

  • 深层网络,尤其在稀疏数据场景中。

对比总结

激活函数输出范围优点缺点应用场景
Sigmoid (0,1) 简单、连续 梯度消失,非零均值 输出层(二分类问题)
Tanh (−1,1) 零均值,梯度较大 梯度消失 隐藏层(已逐渐被 ReLU 替代)
ReLU [0,+∞) 简单、高效,减轻梯度消失问题 Dying ReLU 问题 默认激活函数
Leaky ReLU (−∞,+∞) 缓解 Dying ReLU 问题 超参数需手动设置 深层网络
PReLU (−∞,+∞) 自动调节负值斜率 增加参数量 深层网络
ELU (−α,+∞) 缓解 Dying ReLU 问题,均值为 0 计算复杂度高 高性能任务
Softmax [0,1] 输出概率分布 敏感于所有输入值 多分类问题的输出层
Swish (−∞,+∞) 非单调,表现优越 计算复杂度高 高性能深度学习任务
GELU (−∞,+∞) 平滑过渡,性能优越 计算复杂度高 Transformer 模型

 

以下是激活函数的选择建议总结:

激活函数选择建议

1. 浅层网络

  • 推荐:ReLU
    • ReLU 简单高效,适合大多数浅层网络任务。
    • 如果遇到 Dying ReLU 问题,可以尝试 Leaky ReLU 或 ELU。

2. 深层网络

  • 推荐:Leaky ReLU 或 PReLU
    • Leaky ReLU 缓解 Dying ReLU 问题。
    • PReLU 通过学习参数自动优化,适合更复杂的网络。

3. 二分类问题的输出层

  • 推荐:Sigmoid
    • 将输出值映射到 [0,1][0, 1][0,1],易于解释为概率。

4. 多分类问题的输出层

  • 推荐:Softmax
    • 适用于多分类任务,输出概率分布(总和为 1)。

5. 对计算性能要求高的任务

  • 推荐:Swish 或 GELU
    • 这类激活函数更平滑且性能优于 ReLU,常用于高性能任务,如 Transformer 网络。

6. 高维稀疏数据

  • 推荐:Maxout
    • 能更好地拟合复杂函数,同时避免 Dying ReLU 问题。

7. 时间序列或负值敏感任务

  • 推荐:Tanh 或 ELU
    • Tanh 能提供零均值输出,适合对对称性敏感的任务。
    • ELU 平滑处理负值,适合时间序列等需要平滑输出的任务。

总表

任务类型/网络结构推荐激活函数备选激活函数
浅层网络 ReLU Leaky ReLU, ELU
深层网络 Leaky ReLU, PReLU Swish, ELU
二分类问题的输出层 Sigmoid Softmax
多分类问题的输出层 Softmax
高性能任务 Swish, GELU ReLU
时间序列或负值敏感任务 Tanh, ELU Leaky ReLU
高维稀疏数据 Maxout ReLU

 

posted @   z_s_s  阅读(309)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示