欢迎关注”生信修炼手册”!
人工神经网络由多层神经元构成,对于单个神经元而言,首先对接收到的输入信号进行线性组合,示意如下
但是在输出信号时,会使用一个称之为激活函数的函数对线性组合的信号进一步处理。激活函数是一种非线性函数,由多种具体的函数表达式。
为何一定需要激活函数呢?如果没有激活函数的话,神经元的信号处理本质上就是一个线性组合,即使叠加再多层的神经元,整个神经网络也还是线性组合,这样就不能解决非线性的问题,所以激活函数的作用,是为神经网络引入非线性组合的能力,使其可以适用于复杂的应用场景。
激活函数由多种,下面介绍几种常用的激活函数
1. Sigmod
就是逻辑回归中的sigmod函数,函数图像如下
取值范围为0到1,sigmod是最常用的激活函数之一,作为最早使用的激活函数,在神经网络发展的早期最为常用,但是该函数存在着以下两个缺点。
神经网络通过基于梯度下降的反向传播算法来训练参数,在反向的过程中,需要借助链式法则来计算梯度
对于sigmod函数而言,其导函数的取值都很小,导函数的图像如下
最大值0.25,这样在链式法则的连乘过程中,会使得梯度很快趋近于0,这种现象称之为梯度消失kill gradients。研究表明,对于5层以上的神经网络,特别容易出现梯度消失,所以sigmod函数对于层数很多的深度神经网络效果不太好。
其次,sigmod函数的输出值恒大于0,即not zero-centered, 这样在梯度下降的过程中只能按照下图所示的路径来收敛
收敛速度较慢,神经网络参数非常多,收敛速度慢会大大增加模型的训练时长。
2. Tanh
Tanh函数的图像如下
相比sigmod函数,tanh函数输出范围为-1到1,是zero-centered, 所以收敛速度有所提高。
但是本质上该函数其实是sigmod的变体
所以与sigmod函数一样,该函数也会出现梯度消失的问题。
3. ReLU
ReLU是Rectified Linear Unit的缩写,简称修正线性单元,函数表达式如下
函数图像如下
ReLU函数的求导很简单
而且在x>0的区间,不会梯度消失的现象,使得其性能比sigmod和tanh好很多,收敛速度更快,但是ReLU函数也有一个缺点。
ReLU函数对于负数,