Advertisement

激活函数 sigmoid、tanh、ReLu、Leaky ReLu、ELU、Maxout

阅读量:

1. sigmoid

sigmoid 是逻辑函数,常见的 sigmoid 函数定义为:
S(x)=\frac{1}{1+e^{-x}}

根据上述公式,
我们可以得出:

\begin{aligned} \frac{\mathrm d S(\omega)}{\mathrm d \omega} &= \frac{\mathrm e^{-(\omega)}}{(1+\mathrm e^{-(\omega)})^{2}} \\ &= \left( \frac{(1+\mathrm e^{-(\omega)}) - 1}{(1+\mathrm e^{-(\omega)})} \right) \cdot \left( \frac{\mathrm e^{-(\omega)}}{(1+\mathrm e^{-(\omega)})} \right) \\ &= (1 - S(\omega)) \cdot S(\omega) \end{aligned}

广义逻辑函数:
f(x)=\left(1+e^{-x}\right)^{-\alpha}, \quad \alpha>0

1、两端取值饱和导致梯度趋近于零;
2、Sigmoid函数输出并非围绕零点对称。
其导数值始终偏向同一方向;
3、指数运算具有较高的计算开销。

2. 双曲正切函数 tanh

\tanh x=\frac{\sinh x}{\cosh x}=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}

特点:
1、压缩值在[-1,1];
2、以0为中心;
3、但存在值饱和,梯度为0情况。

3. 修正线性单元ReLu

relu(x) = max(x, 0)
特性:
1、无饱和特性;
2、计算效率较高;
3、相较于sigmoid和tanh函数而言具有更快的收敛性;
4、在生物科学领域中具有更好的解释性;
5、其输出并非以零为中心,并由此可能导致ReLU神经元坏死问题:

ReLU在负数区域发生消失现象被称为dead relu。在网络训练过程中非常敏感。当输入值小于零时(即x < 0),其导数值始终为零。这些神经元及其后续神经元的导数值始终保持为零。因此,在这种情况下(即当输入值小于零时),这些神经元不会对任何输入产生反应,并且相应的权重参数将无法进行优化和调整。

造成这种现象的主要原因有两个:一是参数初始化不当的问题;二是learning rates过高导致在训练过程中参数更新幅度过大。

4. Leaky ReLu

LRelu(x) = max(0.01x, x)

5. PReLu

参数化的修正器Parametric Rectifier(PReLu).

f(y_i) = \begin{cases} y_i, & \text{when } y_i > 0 \\ a_i y_i, & \text{otherwise} \end{cases}

该优化策略:\frac{\partial \mathcal{E}}{\partial a_i} = \sum_y^{} \frac{{\partial {\mathcal{E}}} } {{\,\,\, {\ partial f(y)}}} } } }\cdot }\dfrac{{\ partial f(y)}}{{\ partial a_i}

The partial derivative of f with respect to a_{i} equals zero when y_{i} is greater than zero, and is equal to y_{i} when y_{i} is less than or equal to zero.

我们采用符号\mathcal{E}来表示目标函数。动量法用于更新:\Delta a_{i} := \mu \Delta a_{i} + \epsilon \frac{\partial \mathcal{E}}{\partial a_{i}}

激活函数能够根据需求自动调整参数以纠正线性单元的输出,并不仅能在增加可忽略计算开销的同时还能保持较高的分类精度

6. Exponential Linear Units (ELU)

f(x)=\left\{\begin{array}{ll} x & \text { if } x>0 \\ \alpha(\exp (x)-1) & \text { if } x \leq 0 \end{array}\right.

特点:
1、和Leaky ReLu相比,在负区有一点的鲁棒性。

7. Maxout

\max \left(w_{1}^{T} x+b_{1}, w_{2}^{T} x+b_{2}\right)

特点:
1、泛化的Relu 和Leaky ReLu;
2、但是引入了更多的参数。

总结:

  • 建议采用 ReLu 激活函数时,请特别关注学习率的设置。
  • 可以考虑实验 Leaky ReLU、Maxout 或 ELU 等变体。
  • 然而 tanh 激活函数可能会导致收敛速度较慢。
  • 避免使用 sigmoid 激活函数。

8. 比较sigmoid,tanh

复制代码
    import matplotlib.pyplot as plt
    import numpy as np
    exp = np.exp 
    
    def sigmoid(x):
    return exp(x)/(1 + exp(x))
    
    def tanh(x):
    return (exp(x) - exp(-x))/(exp(x) + exp(-x))
    
    plt.subplot(2,1,1)
    x = np.linspace(-10, 10, 1000)
    sigmoid_x = sigmoid(x)
    plt.plot(x, sigmoid_x)
    plt.title("sigmoid")
    plt.grid()
    
    plt.subplot(2,1,2)
    tanh_x = tanh(x)
    plt.plot(x, tanh_x)
    plt.title("tanh")
    plt.grid()
    plt.show()
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

结果:

在这里插入图片描述

对比而言:
tanh函数确实存在负值输出,在需要避免负值的情况下通常建议优先选择sigmoid函数;从梯度的角度来看,tanh函数在两端区域接近零,其梯度明显低于sigmoid函数。


参考:

比较tanh与sigmoid函数的特性;
深入探讨rectifiers的行为:超越人类水平的表现;
CS231n课程的第6讲PPT;
常见激活函数性能对比及dead ReLU问题解析

全部评论 (0)

还没有任何评论哟~