深度学习激活函数详解:类型、特点及选择指南

详解深度学习激活函数:Sigmoid、ReLU、Tanh等类型特点及选择指南,助你构建高效深度学习模型。

原文标题:图解深度学习中的激活函数

原文作者:数据派THU

冷月清谈:

激活函数是神经网络的关键组成部分,赋予网络非线性能力,使其能够处理复杂数据。本文梳理了常用的激活函数,包括Sigmoid、Tanh、ReLU及其变体、ELU、Swish和Softmax等,并分析了它们的特点、优势和劣势。

Sigmoid和Tanh函数由于梯度消失问题,在深层网络中效果不佳。ReLU函数及其变体(如Leaky ReLU、ELU等)解决了梯度消失问题,是隐藏层的常用选择。其中,Leaky ReLU和ELU通过引入非零负值输出,避免了ReLU的“死亡”问题。Swish函数在深层网络中表现优于ReLU,但计算复杂度更高。Softmax函数通常用于多分类问题的输出层。

选择激活函数需要根据具体任务和数据分布。ReLU及其变体通常是隐藏层的首选,而输出层则根据任务类型选择Sigmoid或Softmax。对于深层网络,Swish和ELU是不错的选择,并建议结合Batch Normalization使用。此外,Noisy ReLU可用于增强模型的抗噪性和泛化能力。

文章最后指出,激活函数的研究仍是深度学习领域的重要方向,未来的研究可能集中在自适应激活函数、定制化激活函数、理论优化、混合策略以及硬件加速等方面。

怜星夜思:

1、除了文章提到的激活函数,还有哪些比较新颖或不常见的激活函数,它们有什么特点和应用场景?
2、激活函数的选择对模型的性能影响有多大?有没有一些经验法则或指导原则可以帮助我们选择合适的激活函数?
3、未来激活函数的研究方向有哪些?如何设计更高效、更具表达能力的激活函数?

原文内容

图片

本文约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

楼上说的都挺好,我再补充一个,叫做SELU (Scaled Exponential Linear Unit),据说是专门为自归一化网络设计的,可以避免梯度爆炸和消失问题,不过我还没在实际项目中用过,不知道效果如何。

选择合适的激活函数确实很重要,它直接影响模型的训练速度和最终性能。一般来说,ReLU及其变体是比较通用的选择,适合大多数情况。但具体问题还是要具体分析,比如对于图像分类任务,ReLU通常比Sigmoid效果更好;而对于需要输出概率的二元分类问题,Sigmoid则是更合适的选择。

未来激活函数的研究方向有很多,比如设计自适应的激活函数,让它可以根据数据自动调整参数;或者结合不同激活函数的优点,创造新的混合激活函数。此外,还可以探索更高效的激活函数,以降低计算成本,并提升模型的训练速度。 或者针对特定硬件例如GPU,设计更适配的激活函数。

我觉得可以从理论上更深入地研究激活函数对梯度传播的影响,从而指导新激活函数的设计。还可以借鉴其他领域的思想,比如生物神经科学或物理学,或许能找到新的灵感。

可以参考一些经验法则,比如:对于隐藏层,优先考虑ReLU及其变体;对于输出层,根据任务类型选择Sigmoid或Softmax。另外,也可以根据具体数据集和模型结构进行实验,比较不同激活函数的性能。

这个问题问得好!除了常见的激活函数,还有一些改进的版本,比如Mish、GELU等,它们在一些特定任务上表现更好。Mish函数平滑性更好,据说比ReLU收敛更快;GELU则结合了ReLU和dropout的思想,效果也不错。这些新兴的激活函数还在不断发展中,具体的应用场景还需要更多研究。

现在很多研究都集中在设计更具表达能力的激活函数上,比如可以更好地捕捉非线性关系的函数。当然,这也要考虑到计算成本,不能为了提升性能而牺牲效率。

我补充一下,还有一些基于参数化方法的激活函数,比如PReLU和RReLU。它们可以根据数据学习参数,从而更灵活地适应不同任务。另外,还有一些自适应的激活函数,例如Maxout,它可以学习分段线性函数,拟合能力更强。

我一般先用ReLU,如果效果不好再尝试其他的。其实现在很多深度学习框架都有自动调参的功能,可以帮你找到最优的激活函数。当然,理解不同激活函数的特性还是很有必要的,这样才能更好地进行调参。