简述
在多层神经网络中,上一层节点的输出和下一层节点的输入之间具有一个函数关系,这个函数就是激活函数。
意义
如果没有激活函数,再多层数的神经网络也是线性的,这就和原始的感知机一样了。所以激活函数为神经网络引入的非线性,神经网络强大的拟合能力,激活函数起到了举足轻重的作用。这也说明激活函数都是非线性的。
常见激活函数
1. sigmoid函数
数学表达式:
几何图像:
sigmoid
上图中蓝线是sigmoid函数,红线是其导数。
缺点:
- 导致梯度消失的问题。从上面的sigmoid导数可以看出,导数的最大值为0.25,当梯度进行反向传播时,每传递一层梯度值减少到原来的1/4,如果神经网络层数较多时,梯度会变得非常接近0,出现梯度消失的现象。
- sigmoid不是0均值(zero-centered)。非0均值的激活函数,模型为了收敛,不得不Z字形逼近最优解(参考),导致收敛速度慢。
- 解析式中含有幂运算,计算时相对来说更加耗时。
2. tanh函数
数学表达式:
几何图像:
tanh
上图中红线是tanh函数,蓝线是其导数。
特点:
相比sigmoid函数,解决了非 zero-centered 问题。但是梯度消失和和幂运算的问题依然存在。
3. Relu函数
数学表达式:
几何图像:
relu.png
优点:
- 解决了梯度消失的问题
- 收敛速度快
- 计算速度快
缺点:
- 非zero-centered
- Dead Relu Problem。由于负半轴始终为0,导致一些神经元永远不会被激活,相应的参数永远不会更新。
尽管存在两个问题,但是Relu仍是目前最常用的激活函数。
4. Leaky Relu函数
数学表达式:
Leaky Relu激活函数就是针对Relu的Dead Relu Problem提出的。负半轴是而不是0,
通常是一个很小的数。