说一说激活函数是个啥

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/LEEANG121/article/details/102733945

什么是激活函数
我们知道,在深度学习中,我们训练一个神经网络的过程是,首先输入数据,然后分别对每个输入和输出对分配权值。我们把输入数据和权值相乘并进行累加,再加上一个偏置量,就得到了一个输出的结果。但是这个过程是线性的,而激活函数的作用就是把这些线性信号转化为非线性,而这种非线性使得我们能够学习到输入与输出之间任意复杂的变换关系。
在这里插入图片描述

为什么要用激活函数

在这里插入图片描述
如上图所示是一个典型的XOR函数,当输入为(0,1)、(1,0)时,黄色圆圈输出为1,当输入为(0,0)、(1,1)时,蓝色叉输出为0. 此时我们想要对这个函数的结果进行一个分类,很显然,我们无法用一条笔直的线将他们分开。因此我们需要利用非线性的决策边界来进行图像输出的区分。
激活函数的任务之一就是将线性函数转化为非线性函数,使得函数的拟合性更好。

激活函数的另一个重要特性就是将输出约束在一个范围内,防止结果无线变大。我们知道神经网络的网络结构非常巨大,特别是参数加权求和的值,有时候是很大的一个值,如果将这个值代入到下一步继续计算,会给计算机增加很大的计算负担,因此,我们会用激活函数将输出映射在某一个范围内(例如0-1的区间)。

激活函数的种类

1 Sigmoid激活函数
Sigmoid也被称为逻辑激活函数(Logistic Activation Function)。它将一个实数值压缩到0至1的范围内。当我们的最终目标是预测概率时,它可以被应用到输出层。它使很大的负数向0转变,很大的正数向1转变。在数学上表示为:
α ( x ) = 1 1 + e x \alpha (x)=\frac{1}{1+e^{-x}}
在这里插入图片描述
最早使用的激活函数,将输入映射到0到1之间,现在基本没人使用。
输出均值非0,同时当输入 x x 过大或过小时,容易出现过饱和现象,此时梯度趋近于0,反向传播时,无法进行参数传递。
过饱和现象会导致梯度消失:当 x x 取绝对值很大的正值时,sigmoid会饱和接近于1;当 x x 取绝对值很大的负值时,sigmoid会饱和接近0.这个特性会让基于梯度下降的优化算法变得困难。

sigmoid与softmax的区别
sigmoid将一个real value映射到(0,1)的区间,用来做二分类。而 softmax 把一个 k 维的real value向量(a1,a2,a3,a4….)映射成一个(b1,b2,b3,b4….)其中 bi 是一个 0~1 的常数,输出神经元之和为 1.0,所以相当于概率值,然后可以根据 bi 的概率大小来进行多分类的任务。二分类问题时 sigmoid 和 softmax 是一样的,求的都是 cross entropy loss,而 softmax 可以用于多分类问题多个logistic回归通过叠加也同样可以实现多分类的效果,但是 softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多个logistic回归进行多分类,输出的类别并不是互斥的,即"苹果"这个词语既属于"水果"类也属于"3C"类别。

2 Tanh激活函数
在这里插入图片描述
t a n h ( x ) = s i n h ( x ) c o s h ( x ) = e x e x e x + e x tanh(x)=\frac{sinh(x)}{cosh(x)}=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
Tanh也被称为双曲正切激活函数。类似sigmoid,tanh也是把一个实数值压缩。与sigmoid不同的是,tanh在-1到1的输出范围内是零均值的,因此使用效果比sigmoid要好(思考一下原因)
Tanh的缺点就是,依然会出现梯度消失现象。

3 线性整流函数(ReLU)
在这里插入图片描述
激活函数的导数如图所示,ReLU激活函数从底部进行了半矫正(half-rectified)。在数学上,它可以由这个简单的表达式表达:
f ( z ) = m a x ( 0 , z ) f(z)=max(0,z)
这意味着,当输入z<0时,输出为0。当输入z>0时,输出就是输入z的值。这个激活函数能够使网络更快的收敛。没有饱和意味着至少在正数范围内,能够对梯度消失有抵抗能力,所以神经元至少在一半的输入范围内不会反向传播,全部都是0的结果。ReLU在计算上非常有效率,因为它是使用简单的阈值实现的。

与Sigmoid/tanh函数相比,ReLu激活函数的优点是:
使用梯度下降(GD)法时,收敛速度更快
相比Relu只需要一个门限值,即可以得到激活值,计算速度更快

RELU函数是目前应用比较广泛的激活函数。它计算简单,可以快速收敛,同时杜绝了过饱和现象。缺点就是在小于0时,梯度为0,容易进入死区。
RELU函数是非线性的,效果类似于划分和折叠空间,组合多个(线性操作 + ReLu)就可以任意的划分空间(想一想,这是为什么)。

优化后的RELU函数
4 Leaky ReLU激活函数
该函数是一个想要缓解relu消亡问题的尝试。它的函数表达式如下:
f ( z ) = m a x ( 0.1 z , z ) f(z)=max(0.1z,z)
在这里插入图片描述
从上图可以看出来,为了解决小于0时,梯度为0的尴尬现象,,leak 给所有负值赋予一个非零斜率, leak是一个很小的常数 ,这样保留了一些负轴的值,使得负轴的信息不会全部丢失。

总结

以上是目前几种常见的激活函数,关于他们的具体意义,我们还需要近一步求证,更多关于激活函数的说明大家可以参考
https://blog.csdn.net/qq_30815237/article/details/86700680
https://blog.csdn.net/qq_30815237/article/details/86700680

猜你喜欢

转载自blog.csdn.net/LEEANG121/article/details/102733945