神经网络之激活函数(Sigmoid, Tanh, ReLU, Leaky ReLU, Softmax)

1、激活函数

激活函数是神经网络中输出值处理的一个函数。通过激活函数,神经网络能训练更为复杂的数据。
神经网络之激活函数(Sigmoid, Tanh, ReLU, Leaky ReLU, Softmax)_第1张图片
上图所示为神经网络的一个神经元,若 n e t = ∑ i = 0 n w i x i net=\sum_{i=0}^{n}w_ix_i net=i=0nwixi没有经过激活函数的处理,则神经网络只能训练线性关系的数据,若使用激活函数处理,则可以根据激活函数的不同训练不同类型的数据。

激活函数分为两种类型:线性激活函数和非线性激活函数,神经网络使用的激活函数一般都是非线性激活函数。因为非线性激活函数能帮助神经网络训练复杂数据,计算和学习几乎表达问题的任何函数并提供精准的预测。同时他们具有导数可以反向传播。

2、常用激活函数
  1. Sigmoid函数
    Sigmoid函数是非线性函数,其输出值在区间(0,1)。函数表达式: y = 1 1 + e − z ⟹ y ′ = y ( 1 − y ) y=\frac{1}{1+e^{-z}} \Longrightarrow y'=y(1-y) y=1+ez1y=y(1y)神经网络之激活函数(Sigmoid, Tanh, ReLU, Leaky ReLU, Softmax)_第2张图片
    Sigmoid函数优点:
    1、简单、非常适用分类任务;
    Sigmoid函数缺点:
    1、反向传播训练时有梯度消失的问题;
    2、输出值区间为(0,1),不关于0对称;
    3、梯度更新在不同方向走得太远,使得优化难度增大,训练耗时;

  2. Tanh函数
    Tanh函数是非线性函数,其输出值在区间[-1,1]。函数表达式: y = e z − e − z e z + e − z ⟹ y ′ = 1 − y 2 y=\frac{e^z-e^{-z}}{e^z+e^{-z}} \Longrightarrow y'=1-y^2 y=ez+ezezezy=1y2神经网络之激活函数(Sigmoid, Tanh, ReLU, Leaky ReLU, Softmax)_第3张图片
    Tanh函数优点:
    1、解决了Sigmoid函数输出值非0对称的问题
    2、训练比Sigmoid函数快,更容易收敛;
    Tanh函数缺点:
    1、反向传播训练时有梯度消失的问题;
    Tanh函数和Sigmoid函数非常相似。
    神经网络之激活函数(Sigmoid, Tanh, ReLU, Leaky ReLU, Softmax)_第4张图片

  3. ReLU函数
    ReLU函数是目前在神经网络使用最流行的激活函数。其表达式非常简单: y = { z if  z > 0 0 if  z < = 0 ⟹ y ′ = { 1 if  z > 0 0 if  z < = 0 y=\begin{cases} z &\text{if } z>0 \\ 0 &\text{if } z<=0 \end{cases}\Longrightarrow y'=\begin{cases} 1 &\text{if } z>0 \\ 0 &\text{if } z<=0 \end{cases} y={z0if z>0if z<=0y={10if z>0if z<=0神经网络之激活函数(Sigmoid, Tanh, ReLU, Leaky ReLU, Softmax)_第5张图片
    ReLU函数优点:
    1、解决了梯度消失的问题;
    2、计算更为简单,没有Sigmoid函数和Tanh函数的指数运算;
    3、稀疏性激活
    ReLU函数缺点:
    1、训练时可能出现神经元死亡;

  4. Leaky ReLU函数
    LReLU函数是ReLU函数的变体。其表达式: y = { z if  z > 0 a z if  z < = 0 ⟹ y ′ = { 1 if  z > 0 a if  z < = 0 y=\begin{cases} z &\text{if } z>0 \\ az &\text{if } z<=0 \end{cases}\Longrightarrow y'=\begin{cases} 1 &\text{if } z>0 \\ a &\text{if } z<=0 \end{cases} y={zazif z>0if z<=0y={1aif z>0if z<=0神经网络之激活函数(Sigmoid, Tanh, ReLU, Leaky ReLU, Softmax)_第6张图片
    LReLU函数优点:
    1、解决了ReLU的神经元死亡问题;
    LReLU函数缺点:
    1、无法为正负输入值提供一致的关系预测(不同区间函数不同)

  5. SoftMax激活函数
    SoftMax函数通常被用在多分类网络模型中。其表达式: y i = e z i ∑ j e z j ⟹ y i ′ = y i ( 1 − y i ) y_i=\frac{e^{z_i}}{\sum_{j}e^{z_j}} \Longrightarrow y_i'=y_i(1-y_i) yi=jezjeziyi=yi(1yi)
    神经网络之激活函数(Sigmoid, Tanh, ReLU, Leaky ReLU, Softmax)_第7张图片
    把结果映射到[0,1],且所有结果的值之和为1。

  6. ELU(Exponential Linear Unit)激活函数
    没有梯度消失和爆炸的问题,同时也没有神经元死亡的问题。被证明比ReLU及其变种好。 y = { e x − 1 if  x < 0 x if  x ≥ 0 ⟹ y ′ = { e x if  x < 0 1 if  x ≥ 0 y=\begin{cases} e^x-1 &\text{if } x<0 \\ x &\text{if } x \ge 0 \end{cases}\Longrightarrow y'=\begin{cases} e^x &\text{if } x<0 \\ 1 &\text{if } x \ge0 \end{cases} y={ex1xif x<0if x0y={ex1if x<0if x0
    神经网络之激活函数(Sigmoid, Tanh, ReLU, Leaky ReLU, Softmax)_第8张图片
    优点:
    1、elu在所有点上都连续且可导。
    2、比其他线性非饱和激活函数(如ReLU及其变种)训练速度快。
    3、没有神经元死亡的问题,因为对于所有的点,其梯度都是非零的。
    4、是一个非饱和函数,没有梯度消失和爆炸的问题。
    5、对比其他的激活函数可以获得更高的准确率。
    缺点:
    1、由于非饱和函数涉及到负值输入,导致它的计算比ReLU函数慢。然而,在训练时由于elu激活函数的快速收敛,可以弥补这一缺点,但是在测试时则要比ReLU及其变种慢。

3、常见问题

Sigmoid、Tanh主要应用在二分类任务输出层、模型隐藏层
ReLU、Leaky ReLU主要应用在回归任务、卷积神经网络隐藏层
SoftMax主要应用在多分类任务输出层

  1. 为什么输出值要关于0对称?
    由于权重更新公式: w ← w + η ( y − y ˉ ) x w\gets w+\eta(y-\bar y)x ww+η(yyˉ)x假设有两个权重 w 0 , w 1 w_0,w_1 w0,w1且最优解 w 0 ∗ , w 1 ∗ w_0^*,w_1^* w0,w1满足条件 { w 0 < w 0 ∗ w 1 ⩾ w 1 ∗ \begin{cases} w_0 < w_0^*\\ w_1 \geqslant w_1^* \end{cases} {w0<w0w1w1这也就是说,我们希望 w 0 w_0 w0适当增大,但希望 w 1 w_1 w1 适当减小。因此,在一次更新权重训练中, x 0 x_0 x0 x 1 x_1 x1的符号必须相反。对于Sigmoid函数输出值在[0,1]的这种非0对称输出其收敛就如同下图的红折线,直接导致模型的收敛速度。而使用Tanh这样的输出值关于0对称的激活函数,其 x 0 x_0 x0 x 1 x_1 x1有正有负,模型的收敛就如同下图的绿线,达到快速收敛。
    神经网络之激活函数(Sigmoid, Tanh, ReLU, Leaky ReLU, Softmax)_第9张图片
  2. 为什么Sigmoid和Tanh激活函数会导致梯度消失?
    上一节我们知道,Sigmoid函数的导数值域为 ( 0 , 1 4 ) (0,\frac{1}{4}) (0,41)和Tanh函数的导数值域为 ( 0 , 1 ) (0,1) (0,1)。都小于1,从而导致模型的梯度消失。虽然说ReLU函数解决了梯度消失的问题,但是在ReLU函数的左侧导数是0,引起了另一个问题:神经元死亡。故出现了其变体Leaky ReLU和Parametric ReLU。
  3. ReLU函数稀疏性激活
    注意:我们在这里讨论模型稀疏性。数据稀疏性(缺少信息)是不同的,通常是不好的。
    为什么模型稀疏性好?如果我们考虑一下人工神经网络试图模仿的生物神经网络,这在直觉上是有意义的。尽管我们体内有数十亿个神经元,但并非所有时间都为我们所做的所有事情激发。相反,它们具有不同的作用,并由不同的信号激活。
    稀疏性导致简洁的模型,这些模型通常具有更好的预测能力更少的过拟合。在稀疏网络中,神经元更有可能实际上正在处理问题的有意义的方面。例如,在检测图像中猫的模型中,可能存在可以识别耳朵的神经元,如果图像是关于建筑物的,则显然不应激活该神经元。
    最后,稀疏网络比密集网络更快,因为要计算的东西更少。

你可能感兴趣的:(人工智能,神经网络,深度学习,人工智能)