使用Relu的原因及好处

前言

为什么要使用这种非线性激活函数?

实质上就是大部分的生活实际问题都是非线性的,而单单的线性组合往往不足以解决我们生活中的实际问题,也就是我们在利用Machine Learning来学习输出与输入之间的映射关系y=f(x)时,f(x)大部分都是非线性的。具体来说,如果使用线性激活函数或者非线性激活函数,那么无论神经网络的层数有多少还是在解决线性函数问题,因为两个线性函数的组合还是线性的。下面使用来两个图示来直观的解释一下非线性激活函数的好处。
引用下吴老师的图

常见的非线性激活函数有sigmoid、tanh和relu等等,那么为什么要使用非线性激活函数呢?

优点

  1. 对于深度神经网络,sigmoid函数反向传播时,很容易就出现梯度消失的情况(比如sigmoid函数接近饱和区时,变换太缓慢,导数趋于0,这种情况就会造成信息消失),从而无法完成深层网络的训练。

在这里插入图片描述

  1. 使用Relu会使部分神经元为0,这样就造成了网络的稀疏性,并且减少了参数之间的相互依赖关系,缓解了过拟合问题的发生【因为早期的机器学习主要是神经网络方面演化的,是想用机器模拟人类大脑的工作,而大脑参与某一件事的运算时,是由一些基本的神经元发挥作用,就是由一些基本的特征组合就可以拼接出高阶的特征表达,所以稀疏一些比较好。】
  1. 采用sigmoid等函数,算激活函数(进行指数运算时),计算量大。反向传播误差传递时,求导涉及除法,计算量非常大,而采用Relu激活函数,整个过程的计算量就会节省很多。

延伸

然而,Relu也存在一些弊端,就比如说在值为负数的时候,会使得很多神经元为0,也就是神经元死掉。而这个时候就提出了一些对Relu的改进,如ELU、PRelu等,从某种程度上避免了使部分神经元死掉的问题。

在这里插入图片描述

参考文章:
[1] https://blog.csdn.net/wangkun1340378/article/details/74517252?tdsourcetag=s_pcqq_aiomsg
[2] https://blog.csdn.net/kangyi411/article/details/78969642