常见激活函数的用法

常见激活函数的用法

1.为什么要使用激活函数
如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

2.常用的激活函数

2.1 Sigmoid函数
sigmoid函数也叫 Logistic 函数,用于隐层神经元输出,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。
f ( x ) = 1 1 + e x \mathcal f(x) = \frac{1}{1+e^{-x}}
sigmoid函数
优点:特征相差比较复杂或是相差不是特别大时效果比较好。
缺点:

  • sigmoid函数要进行指数运算,收敛较慢。
  • 当输入稍微远离了坐标原点,函数的梯度就变得很小了,几乎为零。在神经网络反向传播的过程中,我们都是通过微分的链式法则来计算各个权重w的微分的。当反向传播经过了sigmoid函数,这个链条上的微分就很小很小了,况且还可能经过很多个sigmoid函数,最后会导致权重w对损失函数几乎没影响,这样不利于权重的优化,这个问题叫做梯度饱和,也可以叫梯度弥散。
  • 函数输出不是以0为中心的,这样会使权重更新效率降低。

2.2 Tanh函数
也称为双曲切正切函数,取值范围为[-1,1],tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。其大致效果与sigmoid函数一致,不过其输出中心为0,实际应用中 tanh 会比 sigmoid 更好。
一般二分类问题中,隐藏层用tanh函数,输出层用sigmod函数,不过还得特殊情况特殊分析。
f ( x ) = e x e x e x + e x \mathcal f(x) = \frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}

tanh函数

2.3 Relu函数

f ( x ) = max ( 0 , x ) \mathcal f(x) = \max(0,x)
Relu函数
优点:

  • 输入值为正时,不存在梯度饱和问题。
  • 计算速度快。Relu函数只有线性关系,不管是前向传播还是反向传播,都比sigmoid和tanh要快很多。(sigmoid和tanh要计算指数,计算速度会比较慢)

缺点:

  • 输出也不是以0为中心的函数。
  • 在使用Relu函数时,对于learning rate的速率要谨慎设置。
  • 当输入是负数的时候,Relu是完全不被激活的,这就表明一旦输入到了负数,Relu就会死掉,在反向传播过程中,输入负数,梯度就会完全到0,这个和sigmoid函数、tanh函数有一样的问题。例如,一个非常大的梯度流过一个 Relu神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0。

2.4 PReLU函数
f ( x ) = max ( α x , x ) \mathcal f(x) = \max(\alpha x,x) PReLU
PReLU也是针对ReLU的一个改进型,在负数区域内,PReLU有一个很小的斜率,这样也可以避免ReLU死掉的问题。相比于ELU,PReLU在负数区域内是线性运算,斜率虽然小,但是不会趋于0,其中α为参数,取值范围为0~1,当α=0.01时,我们叫PReLU为Leaky ReLU。

2.5 softmax函数
Softmax - 用于多分类神经网络输出
f ( x ) j = e x j i = 1 n e z i \mathcal f(x)_j = \frac{e^{x_j}}{\sum_{i=1}^{n}e^{z_i}}

猜你喜欢

转载自blog.csdn.net/JustKian/article/details/82775545
今日推荐