社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

图解深度学习中的激活函数

数据派THU • 6 月前 • 106 次点击  

本文约1900字,建议阅读8分钟

尽管已有多种激活函数可供选择,研究和优化新型激活函数仍是深度学习领域的重要方向。


神经网络作为深度学习的核心工具,在很多实际问题中表现出色。而激活函数是神经网络中重要的组成部分,它为网络引入非线性能力,从而能够处理复杂的模式和数据。本文参考《机器学习漫画小抄》一书,盘点神经网络中常用的激活函数,探讨其数学表达式、特点以及适用场景。

1. 激活函数的作用

神经网络中的激活函数用于将输入信号映射到输出信号,赋予网络非线性变换能力。具体来说,激活函数有以下作用:

  1. 引入非线性:如果网络中仅包含线性运算,其输出仍是输入的线性组合,无法逼近复杂函数。
  2. 数据归一化:某些激活函数(如 sigmoid)会将输出限制在特定区间内,方便后续处理。
  3. 梯度传播:激活函数的选择影响反向传播中的梯度计算,从而影响网络的训练效率。

2. 常见的激活函数

2.1 Sigmoid 函数

Sigmoid 函数是最早期使用的激活函数之一,其定义为:

特点:

  • 输出范围为 
  • 平滑、连续,可导。
  • 适用于二分类问题的概率输出。

缺点:

  • 梯度消失问题:在输入绝对值较大时,梯度趋近于零。

  • 输出不以零为中心,可能导致梯度更新效率较低。

2.2 Tanh 函数

Tanh 函数是 Sigmoid 的变种,其定义为:

特点:

  • 输出范围为 
  • 以零为中心,有助于加速梯度下降。
  • 在深层网络中仍可能遇到梯度消失问题。

2.3 ReLU 函数

ReLU(Rectified Linear Unit)是目前最常用的激活函数之一,定义为:

特点:

  • 简单高效,计算成本低。

  • 避免了 Sigmoid 和 Tanh 的梯度消失问题。

  • 在输入为正数时,梯度恒为 1,便于梯度更新。

缺点:

  • 存在 "死亡 ReLU" 问题,即某些神经元可能永远输出 0,无法恢复。

2.4 Leaky ReLU 函数

为了解决 ReLU 的 "死亡问题",提出了 Leaky ReLU,定义为:

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

特点:

  • 允许负值输入的神经元有非零输出,避免了死亡问题。

  • 在许多场景下性能优于标准 ReLU。

2.5 Exponential Linear Unit (ELU)

ELU(指数线性单元)通过在输入为负时使用指数函数改善了 ReLU 的性能,其定义为:

其中, 是一个超参数(通常为 1)。

特点:

  • 负值范围平滑过渡,避免了 ReLU 的死亡问题。

  • 输出接近零时,梯度更稳定,便于优化。

缺点:

  • 计算量比 ReLU 稍大。

2.6 Noisy ReLU

Noisy ReLU 是一种在标准 ReLU 的基础上加入随机噪声的变体,其定义为:


其中, 是从某个分布中抽样的随机噪声(如高斯分布)。

特点:

  • 随机噪声有助于减少过拟合,增强模型的鲁棒性。

  • 适用于需要对抗噪声或增强模型泛化能力的场景。

缺点:

  • 可能引入额外的计算开销。

  • 噪声分布的选择对性能有一定影响。

2.7 Softmax 函数

Softmax 函数通常用于分类问题的输出层,其定义为:

特点:

  • 将输入转化为概率分布,输出总和为 1。

  • 适用于多分类问题的最后一层。

2.8 Swish 函数

Swish 函数由 Google 提出,定义为:


特点:

  • 平滑可导,自适应学习。

  • 在深层网络中性能优于 ReLU。

  • 更强的表达能力,适合复杂任务。

3. 激活函数的比较

激活函数优势劣势
Sigmoid平滑,可导,适合概率输出梯度消失,不以零为中心
Tanh零中心,平滑可导梯度消失
ReLU简单高效,避免梯度消失死亡 ReLU
Leaky ReLU 避免死亡 ReLU存在负值输出的不对称性
ELU平滑过渡,梯度稳定计算开销稍高
Noisy ReLU增强鲁棒性,减少过拟合依赖噪声分布
Softmax概率分布输出,多分类任务不适合隐藏层
Swish强大非线性能力计算复杂性稍高

4. 如何选择激活函数

激活函数的选择依赖于具体任务和数据分布。以下是一些通用建议。

隐藏层:

  • ReLU 和其变种(如 Leaky ReLU、Swish、ELU)通常是首选。

  • 如果数据分布特殊,可以尝试 Tanh。

输出层:

  • 二分类问题:Sigmoid。

  • 多分类问题:Softmax。

  • 回归问题:可以使用线性激活函数(如恒等函数)或者 ReLU。


深度网络:

  • Swish 和 ELU 在深层网络中表现较好,适合处理复杂任务。

  • 对于非常深的网络,可结合 Batch Normalization 使用,进一步稳定梯度。


抗噪性和泛化能力:

  • 如果数据中包含较多噪声,Noisy ReLU 可以提高模型的鲁棒性。

  • Dropout 和随机噪声结合使用效果更佳。


5. 未来的发展方向

尽管已有多种激活函数可供选择,研究和优化新型激活函数仍是深度学习领域的重要方向。未来的研究可能集中在设计自适应激活函数,如 Parametric ReLU (PReLU),以自动调节参数并适应不同层次和数据分布;开发针对特定任务需求的定制化激活函数,如信号处理或图像增强领域;优化理论以更深入地分析激活函数对梯度消失或爆炸问题的影响;结合不同激活函数的优点,采用分段或混合策略提升模型表现;以及为适应专用硬件(如 TPU 和 GPU)特点,设计高效易算的硬件加速友好型激活函数。

激活函数是神经网络的重要组成部分,其选择对模型的性能和训练效率有重要影响。每种激活函数都有其独特的优势与局限。理解并合理使用激活函数,是构建高效深度学习模型的关键。(作者:王海华)

编辑:黄继彦



关于我们

数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。



新浪微博:@数据派THU

微信视频号:数据派THU

今日头条:数据派THU

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/176945
 
106 次点击