一、概念
1、激活函数
激活函数是神经网络中每一层输入和输出之间的映射函数。
2、relu激活函数
一种非线性函数,可以表达为
f
(
x
)
=
max
(
0
,
x
)
f(x)=\max (0, x)
f(x)=max(0,x)
二、引入原因
引入relu激活函数的原因从以下三个层次论证
1.为何引入非线性的激活函数?
在神经网络中,每一层输出与输入之间都是线性关系,若不处理这种情况,无论神经网络加深到多少层,
输出和输入都是呈线性关系。而当加入非线性激活函数后,输出与输入不再是线性关系,当层数足够多,就可以逼近任意函数。
2.非线性函数中为何选取ReLu函数?
(1)计算简单,
f
(
x
)
=
max
(
0
,
x
)
f(x)=\max (0, x)
f(x)=max(0,x),只需要比较出x值与0的大小,而对于常见的非线性函数,sigmoid函数
S
(
x
)
=
1
1
+
e
−
x
S(x)=\frac{1}{1+e^{-x}}
S(x)=1+e−x1,计算涉及指数,对于高维数据来说,计算量太过复杂。
(2)避免梯度消失与梯度爆炸,神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,层数间的梯度变化会叠加。在sigmoid接近饱和区时,函数值变化缓慢,梯度趋于0,最后一层网络产生的偏差就乘了很多的远小于1的数而越来越小,导致层数比较浅的权重没有更新。或是大于1的梯度值累计,造成权重大幅更新,网络不稳定。采用relu函数,能够避免这个问题,这也是深度网络能够优化的关键点。
(3)relu函数会使部分神经元输出变为0,使得网络输出更为稀疏,更加符合生物学神经网络原理。
仿生物学原理(维基百科):相关大脑方面的研究表明生物神经元的信息编码通常是比较分散及稀疏的。通常情况下,大脑中在同一时间大概只有1%-4%的神经元处于活跃状态。使用线性修正以及正则化(regularization)可以对机器神经网络中神经元的活跃度(即输出为正值)进行调试;相比之下,逻辑函数在输入为0时达到
1
2
{\displaystyle {\frac {1}{2}}}
21,即已经是半饱和的稳定状态,不够符合实际生物学对模拟神经网络的期望。不过需要指出的是,一般情况下,在一个使用修正线性单元(即线性整流)的神经网络中大概有50%的神经元处于激活态。