使用激活函数的原因是因为:如果不使用损失函数再深层次的神经网络都可以直接用一个函数进行替代
Sigmoid函数
由于函数特性如果神经网络层数增多回导致梯度趋近于0,即梯度消失。当网络权值初始化为(1,+∞)区间值时回出现梯度爆炸,而且函数相对复杂,不易于训练。
Tanh函数
解决了Sigmoid不是0中心的问题,但是梯度问题和运算问题仍然存在
ReLU函数
优点:
- 计算速度非常快(只需要一个判断)
- 解决了梯度问题
- 收敛速度远大于Sigmoid和Tanh
缺点:
- ReLU不是0中心函数
- 由于小于0的地方梯度都为0,有可能导致某些神经元永远不会被激活
Leaky ReLU
虽然解决了ReLU小于0的地方梯度都为0的问题,但是实际使用情况时ReLU的效果会优于Leaky ReLU
Swish
Swish使用效果优于ReLU
PReLu
每层输入的数据不一样,当输入数据的分布处于激活函数梯度非常小的地方时会出现参数更新非常缓慢,PReLu可以解决这种问题可以使激活函数动态匹配当前层输入的数据
$$
f(x) = p(s)*s+(1-p(s))*\alpha s \
p(s)=\begin{cases}
1, & \text{s >= E(s)} \
0, & \text{s < E(s))}
\end{cases} \
E(s):为数据的均值,可以控制f(x)曲线横移 \
$$
Dice
对PReLu激活函数进行优化,使函数曲线的转点更加平滑
$$
f(x)=p(s)*s+(1-p(s))*\alpha s \
p(s)=\frac{1}{1-e^{-\frac{s-E(s)}{\sqrt{Var(s)+\epsilon}}}} \
E(s):为数据的均值,可以控制f(x)曲线横移 \
Var(s):为数据的方差,可以控制p(s)的斜率 \
\epsilon:为非常小的常数10^{-8}
$$
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 zoubinbf@163.com