神经网络中的非线性激活函数

tb通博信誉

为什么要引入非线性激活函数

如果使用线性激活函数,无论神经网络有多少层,输出都是输入的线性组合,这相当于没有隐藏层的效果。这是最原始的感知器(Perceptron),感知器与最基本的XOR相连。没有问题可以解决,更不用说更复杂的非线性问题了。这种神经网络毫无意义。

常见的非线性激活函数

由于上述原因,我们引入了非线性激活函数,因此神经网络具有实际意义,它不再是输入的线性组合,而是可以非线性地组合成各种任意函数的输出。常见的激活功能包括以下形式:

Sigmoid函数

Sigmoid函数将任何实数映射到范围[0,1],在从负无穷大到0的区间内趋向于0,并且在从0到正无穷大的区间中趋于1。函数原型如下:

ca26d6b35fd747f19a339ad6645ce375

函数:

的导数

43f6b15fa7bc430eb3fa2a04613e0a7a

该函数的图像如下:

720318b8002946999d85809642073264

函数导数的图像如下:

235c3ea63a46420d95a2dc4437b05c13

作为激活功能的缺点

1.梯度消失很容易发生

2.高计算复杂度和相对耗时的计算

渐变消失

反向传播(BP)算法是神经网络的优化算法,首先计算输出层中成本函数的损失,然后以链式推导的方式将损失传递给前向层。深层网络中的Sigmoid函数经常导致导数逐渐变为0,这使得参数无法更新,深度神经网络无法完成训练。

原因如下:1。当x大或小时,函数变化非常缓慢,导致函数的导数相对较小,神经网络较深,而链式导数的多级乘积非常接近到0; 2.Sigmoid的导数是0.25,这意味着神经网络的导数至少随每个附加层而变化。它是原来的1/4,它仍然是上限。在多层传输之后,导数非常接近于0.

计算相对耗时

在Sigmoid中,涉及推导的功率操作和除法操作是耗时的。在大规模深入学习中,这种现象对计算性能提出了更严格的挑战和要求。

Tanh功能

Tanh函数将任何实数映射到(-1,1)的范围。

81cdb71ba3bc426cb2fdc3b35288a2d0

导数定义为:

c26da71dfe5743aea47db9bf81ddcc31

缺点

存在梯度消失和动力操作的问题。

修改后的线性单位(ReLU)

ReLu的数学表达式是:

e53121c5180c4eb9968ebaee6a961c93

功能图像如下:

98f333fd486945a7bb3c35733ff259d1

优点

1.计算速度快;

2. ReLu使部分神经元的输出为零,形成网络的稀疏性,减少参数的相互依赖性,并缓解过度拟合的问题。

缺点

1.死亡某些神经元可能永远不会被激活,导致相应的参数永远不会被更新。导致这种情况发生的原因主要有两个。

1)非常不幸的参数初始化,这很少见;

2)学习速率太高,导致参数更新在训练过程中过大,不幸地导致网络进入该状态。解决方案是使用Xavier初始化方法,并避免使用adagrad设置学习速率过大或自动调整学习速率的算法。