1、激活函数

激活函数是神经网络中输出值处理的一个函数。通过激活函数,神经网络能训练更为复杂的数据。

神经网络激活函数 relu怎么读 神经网络常用激活函数_人工智能


上图所示为神经网络的一个神经元,若神经网络激活函数 relu怎么读 神经网络常用激活函数_深度学习_02没有经过激活函数的处理,则神经网络只能训练线性关系的数据,若使用激活函数处理,则可以根据激活函数的不同训练不同类型的数据。

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

2、常用激活函数
  1. Sigmoid函数
    Sigmoid函数是非线性函数,其输出值在区间(0,1)。函数表达式:神经网络激活函数 relu怎么读 神经网络常用激活函数_深度学习_03
  2. 神经网络激活函数 relu怎么读 神经网络常用激活函数_人工智能_04

  3. Sigmoid函数优点:
    1、简单、非常适用分类任务;
    Sigmoid函数缺点:
    1、反向传播训练时有梯度消失的问题;
    2、输出值区间为(0,1),不关于0对称;
    3、梯度更新在不同方向走得太远,使得优化难度增大,训练耗时;
  4. Tanh函数
    Tanh函数是非线性函数,其输出值在区间[-1,1]。函数表达式:神经网络激活函数 relu怎么读 神经网络常用激活函数_激活函数_05
  5. 神经网络激活函数 relu怎么读 神经网络常用激活函数_深度学习_06

  6. Tanh函数优点:
    1、解决了Sigmoid函数输出值非0对称的问题
    2、训练比Sigmoid函数快,更容易收敛;
    Tanh函数缺点:
    1、反向传播训练时有梯度消失的问题;
    Tanh函数和Sigmoid函数非常相似。
  7. 神经网络激活函数 relu怎么读 神经网络常用激活函数_神经网络激活函数 relu怎么读_07

  8. ReLU函数
    ReLU函数是目前在神经网络使用最流行的激活函数。其表达式非常简单:神经网络激活函数 relu怎么读 神经网络常用激活函数_神经网络_08
  9. 神经网络激活函数 relu怎么读 神经网络常用激活函数_神经网络激活函数 relu怎么读_09

  10. ReLU函数优点:
    1、解决了梯度消失的问题;
    2、计算更为简单,没有Sigmoid函数和Tanh函数的指数运算;
    3、稀疏性激活
    ReLU函数缺点:
    1、训练时可能出现神经元死亡;
  11. Leaky ReLU函数
    LReLU函数是ReLU函数的变体。其表达式:神经网络激活函数 relu怎么读 神经网络常用激活函数_深度学习_10
  12. 神经网络激活函数 relu怎么读 神经网络常用激活函数_激活函数_11

  13. LReLU函数优点:
    1、解决了ReLU的神经元死亡问题;
    LReLU函数缺点:
    1、无法为正负输入值提供一致的关系预测(不同区间函数不同)
  14. SoftMax激活函数
    SoftMax函数通常被用在多分类网络模型中。其表达式:神经网络激活函数 relu怎么读 神经网络常用激活函数_人工智能_12
  15. 神经网络激活函数 relu怎么读 神经网络常用激活函数_深度学习_13

  16. 把结果映射到[0,1],且所有结果的值之和为1。
  17. ELU(Exponential Linear Unit)激活函数
    没有梯度消失和爆炸的问题,同时也没有神经元死亡的问题。被证明比ReLU及其变种好。神经网络激活函数 relu怎么读 神经网络常用激活函数_激活函数_14
  18. 神经网络激活函数 relu怎么读 神经网络常用激活函数_人工智能_15

  19. 优点:
    1、elu在所有点上都连续且可导。
    2、比其他线性非饱和激活函数(如ReLU及其变种)训练速度快。
    3、没有神经元死亡的问题,因为对于所有的点,其梯度都是非零的。
    4、是一个非饱和函数,没有梯度消失和爆炸的问题。
    5、对比其他的激活函数可以获得更高的准确率。
    缺点:
    1、由于非饱和函数涉及到负值输入,导致它的计算比ReLU函数慢。然而,在训练时由于elu激活函数的快速收敛,可以弥补这一缺点,但是在测试时则要比ReLU及其变种慢。
3、常见问题

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

  1. 为什么输出值要关于0对称?
    由于权重更新公式:神经网络激活函数 relu怎么读 神经网络常用激活函数_神经网络激活函数 relu怎么读_16假设有两个权重神经网络激活函数 relu怎么读 神经网络常用激活函数_神经网络激活函数 relu怎么读_17且最优解神经网络激活函数 relu怎么读 神经网络常用激活函数_激活函数_18满足条件神经网络激活函数 relu怎么读 神经网络常用激活函数_深度学习_19这也就是说,我们希望 神经网络激活函数 relu怎么读 神经网络常用激活函数_激活函数_20适当增大,但希望 神经网络激活函数 relu怎么读 神经网络常用激活函数_激活函数_21 适当减小。因此,在一次更新权重训练中,神经网络激活函数 relu怎么读 神经网络常用激活函数_激活函数_22神经网络激活函数 relu怎么读 神经网络常用激活函数_神经网络激活函数 relu怎么读_23的符号必须相反。对于Sigmoid函数输出值在[0,1]的这种非0对称输出其收敛就如同下图的红折线,直接导致模型的收敛速度。而使用Tanh这样的输出值关于0对称的激活函数,其神经网络激活函数 relu怎么读 神经网络常用激活函数_激活函数_22神经网络激活函数 relu怎么读 神经网络常用激活函数_神经网络激活函数 relu怎么读_23有正有负,模型的收敛就如同下图的绿线,达到快速收敛。
  2. 为什么Sigmoid和Tanh激活函数会导致梯度消失?
    上一节我们知道,Sigmoid函数的导数值域为神经网络激活函数 relu怎么读 神经网络常用激活函数_深度学习_26和Tanh函数的导数值域为神经网络激活函数 relu怎么读 神经网络常用激活函数_激活函数_27。都小于1,从而导致模型的梯度消失。虽然说ReLU函数解决了梯度消失的问题,但是在ReLU函数的左侧导数是0,引起了另一个问题:神经元死亡。故出现了其变体Leaky ReLU和Parametric ReLU。
  3. ReLU函数稀疏性激活
    注意:我们在这里讨论模型稀疏性。数据稀疏性(缺少信息)是不同的,通常是不好的。
    为什么模型稀疏性好?如果我们考虑一下人工神经网络试图模仿的生物神经网络,这在直觉上是有意义的。尽管我们体内有数十亿个神经元,但并非所有时间都为我们所做的所有事情激发。相反,它们具有不同的作用,并由不同的信号激活。
    稀疏性导致简洁的模型,这些模型通常具有更好的预测能力更少的过拟合。在稀疏网络中,神经元更有可能实际上正在处理问题的有意义的方面。例如,在检测图像中猫的模型中,可能存在可以识别耳朵的神经元,如果图像是关于建筑物的,则显然不应激活该神经元。
    最后,稀疏网络比密集网络更快,因为要计算的东西更少。