4.0 - 激活函数
1. 激活函数背景
1.1 激活函数作用
全连接层或CNN只是对数据做线性变换,即使添加再多的layer,本质依旧是一个单层神经网络。对此,引入非线性变换,对线性层的输出采用 Pointwise 类型的非线性变换作为下一层的输入,以此解决线性网络表达能力不足的问题。其中的 非线性函数称为 activation function。
2. 常见激活函数
2.1 S型
1)Sigmoid:具有双向饱和性;导数最大0.25,易产生梯度消失现象;训练过程梯度计算量大。
2)tanh:导数范围[0, 1], 略微减缓sigmoid梯度消失问题;也存在双向饱和性问题;训练过程梯度计算量也很高。
2.2 Relu系列(Rectified Linear Unit)
斜坡函数:f = max{0, x} 及其一系列变种。
1)ReLU:优势:不会梯度消失;x<0时输出为0,造成网络稀疏性;计算简单。 缺点:不做数据幅度压缩,没有上界,训练时易梯度爆炸;由于x<0时输出为0,训练时可能会导致某些神经元一直不被激活而永久坏死。
2)ReLU6:解决正半轴梯度爆炸问题。
3)Leaky ReLU、PReLU、RReLU:解决负半轴神经元坏死问题。
4)ELU、SELU(exponential Linear Units): 正半轴一致,负半轴采用软饱和的策略,由 线性函数 变为 指数函数。
2.3 GeLu(Gaussian Error Linear Unit)
思想:当x<0时,随着x的降低,其激活值被归为0的概率越大。广泛用于NLP领域。 起初采用高斯概率公式的积分作为激活值被归为0的概率,为了方便计算,采用简化的高斯概率公式的近似值 作为激活被归为0的概率。
2.4 Swish、Hardswish
旨在寻求最好的激活,略。
3. 好的激活函数的性质
1)非线性以及可微性
2)能解决 梯度消失和梯度爆炸 的问题
3)有一定的稀疏性,且能解决神经元坏死问题
4)计算复杂度低。