为什么要使用激活函数,激活函数的作用

目录

1.如果没有激活函数会怎么样?

2.所以需要对线性输出做非线变换

激活函数的作用:激活函数是用来加入非线性因素的,因为线性模型的表达能力不够。

3.常见的激活函数 

3.1.Sigmoid函数

3.2.tanh函数

3.3.Relu函数

 总结:


1.如果没有激活函数会怎么样?

1. 对于y=ax+b 这样的函数,当x的输入很大时,y的输出也是无限大小的,经过多层网络叠加后,值更加膨胀的没边了,这显然不符合我们的预期,很多情况下我们希望的输出是一个概率

2. 线性的表达能力太有限了,即使经过多层网络的叠加,y=ax+b无论叠加多少层最后仍然是线性的,增加网络的深度根本没有意义。线性回归连下面这个最简单的“异或”x1 XOR x2,都无法拟合:

2.所以需要对线性输出做非线变换

激活函数的作用:激活函数是用来加入非线性因素的,因为线性模型的表达能力不够。

这个变换要满足什么条件?

  1. 非线性,这样增加网络的深度才有意义

  2. 可导的,不然怎么做梯度下降

  3. 易于计算的

  4. 输出空间最好是有限的,这条好像也不是必须的,Relu就没有遵循这条

基于这些限制,专家们发掘出了好多个激活函数,这就是一个先有实践再总结理论的过程。一个函数在实际应用中发现效果很好时,再反过来去推导它为什么会有道理

3.常见的激活函数 

3.1.Sigmoid函数

特点:

它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.

缺点:

缺点1:在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大

缺点2:Sigmoid 的 output 不是0均值(即zero-centered)。这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 产生的一个结果就是:如x>0, x>0, f=w^{T}x+b ,那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。 当然了,如果按batch去训练,那么那个batch可能得到不同的信号,所以这个问题还是可以缓解一下的。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的梯度消失问题相比还是要好很多的。

缺点3:其解析式中含有幂运算,计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。

3.2.tanh函数

tanh(x)åå¶å¯¼æ°çå ä½å¾å

特点:

1.tahn解决了Sigmoid函数的不是zero-centered输出问题,

2.然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在

3.3.Relu函数

è¿éåå¾çæè¿°
 

ReLU函数其实就是一个取最大值函数,注意这并不是全区间可导的,但是我们可以取sub-gradient

有以下几大优点

1) 解决了gradient vanishing问题 (在正区间)

2)计算速度非常快,只需要判断输入是否大于0

3)收敛速度远快于sigmoid和tanh

ReLU问题:

1)ReLU的输出不是zero-centered

2)Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。

 总结:

激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问

猜你喜欢

转载自blog.csdn.net/qq_35290785/article/details/89349635