修正线性单元(ReLU)是一种用于人工神经网络的激活函数,在深度学习中尤其常见。其定义为 :负输入变为零,正输入则保持不变。虽然它的两个分支都是线性的,但整个函数是非线性的。这种组合为构建能够学习非线性关系的网络提供了一种简单机制,同时使激活分支上的计算和求导保持简便。(deeplearningbook.org)
数学定义
对于实数输入 ,有
其值域为 。应用于张量时,ReLU 对每个元素分别运算,不改变张量的形状。例如,它将 映射为 。名称中的“修正”指的是抑制负值,而不是对负值取绝对值。(tensorflow.org)
由此定义可直接得出,ReLU 是连续函数、凸函数,且单调不减。它满足常数为 1 的利普希茨连续性:
它还具有正齐次性:当 时,。然而,它并不是线性映射,因为它一般不保持加法运算,也不保持负标量乘法运算。这些性质都源于它的双分支结构。(tensorflow.org)
当 时,导数为零;当 时,导数为 1。在零点处,左右导数不同,因此通常意义下的导数不存在。不过,训练实现仍会在传播梯度时为该点指定一个值;这种计算约定并不意味着数学上的函数在该点可导。孤立切换点处的不可导性通常不会妨碍基于梯度的训练。(deeplearningbook.org)
在神经网络中的作用
典型的网络层先进行仿射映射,再对输出应用修正线性函数:
其中, 是权重矩阵, 是偏置向量。如果各层之间没有非线性运算,一系列仿射层可以合并为一个仿射映射。ReLU 通过引入由输入决定的单元激活与非激活状态切换,改变了这一情况。(deeplearningbook.org)
对于由仿射层和 ReLU 构成的网络,一旦固定激活模式,每个 ReLU 就相当于恒等运算或置零运算。因此,网络在每个这样的区域内都是仿射的,整体上则是连续的分段仿射函数。单个单元虽然简单,但它们的组合能够支持复杂的表征学习。Glorot、Bordes 和 Bengio 在 2011 年的实验还强调了激活的稀疏性:许多隐藏层输出严格等于零,而不只是数值很小。(proceedings.mlr.press)
梯度传播与局限性
在反向传播过程中,链式法则将传入的梯度乘以局部导数。处于激活状态的 ReLU 会原样传递该梯度,处于非激活状态的 ReLU 则会阻断它。相比之下,逻辑斯蒂函数和双曲正切函数在某些区域趋于饱和,其导数随之变小。ReLU 的正值分支避免了由这一特定原因引起的梯度消失问题,但这并不保证整个网络中的梯度始终保持良好状态。(deeplearningbook.org)
它的零梯度分支会造成 ReLU 死亡现象。如果某个单元对所有相关训练输入的激活前值都为负,那么该单元既不产生激活输出,也无法通过该分支直接接收梯度。这类单元可能在初始化时出现,也可能在训练过程中出现。暂时未激活的单元不一定会永久死亡:上游表征发生变化,可能改变该单元接收到的输入。问题的关键在于单元在相关输入分布上持续不激活,而不是偶尔输出零。(arxiv.org)
ReLU 的输出没有上界,也不以零为中心。因此,权重尺度仍然很重要。2015 年,He 及其同事推导出了一种考虑修正线性运算影响的初始化方案。在他们所采用的独立性和对称性假设下,前向传播中常用的一种选择是
其中, 是输入连接数。这一方差设置补偿了抑制负输入所造成的二阶矩下降,但并不能无条件保证训练稳定。(cv-foundation.org)
历史发展
2011 年的论文《深度稀疏修正线性神经网络》(Deep Sparse Rectifier Neural Networks)表明,深度修正线性网络无需无监督预训练,也能在监督学习任务中取得有竞争力的表现。这些发现推动修正线性函数成为可训练深度网络中的实用组件,而不再仅仅是平滑激活函数的一种数学替代方案。(proceedings.mlr.press)
2012 年,AlexNet 在用于图像分类的大型卷积神经网络中采用了 ReLU。其作者报告,在受控比较中,使用 ReLU 的训练速度明显快于使用双曲正切单元的训练速度。该架构在 ImageNet 数据集上取得的成绩涉及多个相互作用的组件,包括 GPU 计算、数据增强和 dropout,不能仅归因于激活函数。(cave.cs.toronto.edu)
相关激活函数
一些变体修改了负值分支,或用其他形式替代突变的转折:
- **泄漏修正线性单元**对正输入使用 ,其余情况下使用 ,其中斜率为固定的较小正数。
- 参数化修正线性单元,简称 PReLU,将负值分支的斜率作为模型参数进行学习。这两种变体都允许梯度在输入为负时传播。(cv-foundation.org)
- **Softplus 函数**的定义为 ,它以平滑方式近似修正线性函数,但对于有限输入不会产生严格为零的输出。(proceedings.mlr.press)
- 高斯误差线性单元,简称 GELU,计算 ,其中 是标准正态分布的累积分布函数。它对输入进行连续加权,而不是像 ReLU 那样根据输入的正负进行二元门控。(arxiv.org)
参考来源
- Deep Feedforward Networksdeeplearningbook.org
- tf.nn.relutensorflow.org
- Deep Sparse Rectifier Neural Networksproceedings.mlr.press
- Deep Sparse Rectifier Neural Networksproceedings.mlr.press
- ImageNet Classification with Deep Convolutional Neural Networkscave.cs.toronto.edu
- Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classificationcv-foundation.org
- Dying ReLU and Initialization: Theory and Numerical Examplesarxiv.org
- Gaussian Error Linear Units (GELUs)arxiv.org