CNN卷积层:ReLU函数

时间:2022-01-31 00:08:44

卷积层的非线性部分

一、ReLU定义

ReLU:全称 Rectified Linear Units)激活函数

定义

def relu(x):

  return x if x >0 else 0

CNN卷积层:ReLU函数

#Softplus为ReLU的平滑版

二、传统sigmoid系激活函数

CNN卷积层:ReLU函数

Sigmoid与人的神经反应很相似,在很多浅层模型上发挥巨大作用

传统神经网络中最常用的两个激活函数,Sigmoid系(Logistic-Sigmoid、Tanh-Sigmoid)被视为神经网络的核心所在。

从数学上来看,非线性的Sigmoid函数对*区的信号增益较大,对两侧区的信号增益小,在信号的特征空间映射上,有很好的效果。

从神经科学上来看,*区酷似神经元的兴奋态,两侧区酷似神经元的抑制态,因而在神经网络学习方面,可以将重点特征推向*区,将非重点特征推向两侧区。

无论是哪种解释,看起来都比早期的线性激活函数(y=x),阶跃激活函数(-1/1,0/1)高明了不少。

梯度消失问题

sigmoid导数值的范围(0,  0.25)

tanh的导数值范围(0, 1)

可以看出sigmoid的弱点:对于深度网络,sigmoid在最好的情况下也会把传递的导数数值缩小至0.25倍,下层网络得到的梯度值明显小很多。这会导致模型训练效果很差。

对于浅层网络这种影响不明显,但对于深度网络,反向传导逐渐变成了一个“漫长累积”的过程。

从训练效果看,以不同激活函数的LeNet模型,训练迭代数与Loss的关系——

sigmoid明显弱一些,tanh与ReLU相近

ReLU的优点:没有出现梯度消失问题

三、ReLU的线性性质

作为一个非线性函数,它还具备线性性质

1 0 0

[ 0 1 0 ]  x 向量 = 结果

0 0 0

对线性部分的输出,结果等效于左乘一个非0即1的对角阵(向量负数位置对应对角阵位置上为0),仍可以被看作是一个线性操作

这一性质会使模型的理论分析变得简单

四、ReLU的不足

1:过于宽广的接受域,在接受较大数据时出现不稳定

可以对输入数据上界进行限制,比如ReLU6

2:负数方向

输入数据的负数部分,ReLU会把它置为0,那么梯度也为0,训练过程中负数部分不会更新

解决:一系列的改进函数,比如 Leaky ReLU