神经网络中非线性激活函数相关解析

来源:互联网 发布:dnf安图恩组队网络冲突 编辑:程序博客网 时间:2024/05/22 04:33

引入非线性激活函数的作用

引入非线性激活函数的主要目的是增加神经网络的非线性性。因为如果没有非线性激活函数的话,每一层输出都是上层输入的线性函数,因此,无论神经网络有多少层,得到的输出都是线性函数,这就是原始的感知机模型,这种线性性不利于发挥神经网络的优势。

非线性激活函数的类别

非线性函数在历史的长河中有多种,主要讲以下两类:

有界激活函数

有界激活函数用得相对较多的是sigmoid函数和tanh(双曲正切函数),他们都带有同步正则化的效果,将激活函数的输出限定在[-1,1]之间,同时可以满足非线性性特征。

无上界激活函数

用得比较多的无上界激活函数是ReLU, 是随着AlexNet火起来的,这一函数当输入为非负时,输出不变,当输入为负数时,输出为0。

当前使用较多的是ReLU函数及其变体(如 PReLU, random ReLU)。

广泛使用ReLU函数的原因

计算量较小

由于上述提到的有界激活函数一方面反向传播的时候计算量都较大,而ReLu函数在大于零以及小于零的部分具有很好的线性性质,便于求导;另外一方面ReLU函数结构简单,也有利于做正向的inference。因而无论是训练过程还是测试过程计算量得到了大大降低。

不易出现梯度丢失问题

当网络层数较深时,上述两种有界激活函数在接近饱和区时,变化减缓,导数趋近于0,这种情况导致了梯度(信息)的丢失,不利于反向传播。而由于ReLu函数的正区间不饱和,因此减缓了梯度丢失问题的发生(我们更加关心正向样本)。

缓解过拟合现象的发生

由于ReLU函数使一部分神经元的输出为零,这样就导致了网络的稀疏化,减轻了参数之间的依赖关系,缓解了过拟合问题的产生。

前沿发展

当前基于ReLU函数有着许多使用性的改进,在训练速度以及准确率上得到了提升。入上述的PReLU, random ReLU等。后续会继续对ReLU函数的变种及其效果进行分析。

原创粉丝点击