神经网络中非线性激活函数相关解析
2017-08-25 01:12
1506 查看
引入非线性激活函数的作用
引入非线性激活函数的主要目的是增加神经网络的非线性性。因为如果没有非线性激活函数的话,每一层输出都是上层输入的线性函数,因此,无论神经网络有多少层,得到的输出都是线性函数,这就是原始的感知机模型,这种线性性不利于发挥神经网络的优势。非线性激活函数的类别
非线性函数在历史的长河中有多种,主要讲以下两类:有界激活函数
有界激活函数用得相对较多的是sigmoid函数和tanh(双曲正切函数),他们都带有同步正则化的效果,将激活函数的输出限定在[-1,1]之间,同时可以满足非线性性特征。无上界激活函数
用得比较多的无上界激活函数是ReLU, 是随着AlexNet火起来的,这一函数当输入为非负时,输出不变,当输入为负数时,输出为0。当前使用较多的是ReLU函数及其变体(如 PReLU, random ReLU)。
广泛使用ReLU函数的原因
计算量较小
由于上述提到的有界激活函数一方面反向传播的时候计算量都较大,而ReLu函数在大于零以及小于零的部分具有很好的线性性质,便于求导;另外一方面ReLU函数结构简单,也有利于做正向的inference。因而无论是训练过程还是测试过程计算量得到了大大降低。不易出现梯度丢失问题
当网络层数较深时,上述两种有界激活函数在接近饱和区时,变化减缓,导数趋近于0,这种情况导致了梯度(信息)的丢失,不利于反向传播。而由于ReLu函数的正区间不饱和,因此减缓了梯度丢失问题的发生(我们更加关心正向样本)。缓解过拟合现象的发生
由于ReLU函数使一部分神经元的输出为零,这样就导致了网络的稀疏化,减轻了参数之间的依赖关系,缓解了过拟合问题的产生。前沿发展
当前基于ReLU函数有着许多使用性的改进,在训练速度以及准确率上得到了提升。入上述的PReLU, random ReLU等。后续会继续对ReLU函数的变种及其效果进行分析。相关文章推荐
- 【神经网络】RELU 激活函数及其他相关的函数
- 神经网络中的激活函数——加入一些非线性的激活函数,整个网络中就引入了非线性部分,sigmoid 和 tanh作为激活函数的话,一定要注意一定要对 input 进行归一话,但是 ReLU 并不需要输入归一化
- 神经网络激活函数总结
- 神经网络之激活函数(Activation Function)
- 【theano-windows】学习笔记十一——theano中与神经网络相关函数
- 人工神经网络框架AForge学习(二):Sigmoid激活函数
- 神经网络激活函数--tanh双曲正切函数
- 神经网络中各种激活函数比较
- 机器学习总结(七):基本神经网络、BP算法、常用激活函数对比
- 神经网络-激活函数-Activation
- Linux网络编程[DNS解析原理,了解相关DNS解析的函数]
- 斯坦福大学深度学习公开课cs231n学习笔记(5)神经网络结构与激活函数
- 激活函数在神经网络中的功能
- 神经网络之激活函数 dropout原理解读 BatchNormalization 代码实现
- [置顶] 【机器学习】神经网络-激活函数-面面观(Activation Function)
- python绘制神经网络中的ReLU激活函数图像(附代码)
- 『TensorFlow』函数查询列表_神经网络相关
- 神经网络之激活函数(Activation Function)
- python绘制神经网络中的Sigmoid和Tanh激活函数图像(附代码)
- 神经网络中的激活函数