激活函数---Sigmoid、Tanh、ReLu、softplus、softmax

激活函数定义: 就是在神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。

常见的激活函数包括:

  • Sigmoid
  • TanHyperbolic(tanh)
  • ReLu
  • softplus
  • softmax

  这些函数有一个共同的特点那就是他们都是非线性的函数。那么我们为什么要在神经网络中引入非线性的激活函数呢?

  如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。 正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入(以及一些人的生物解释balabala)。

1.Sigmoid函数

  Sigmoid函数的表达式为 

                                                         

  导数为:

                                                      

  函数曲线如下图所示:

                                           

   Sigmoid函数是传统神经网络中最常用的激活函数,一度被视为神经网络的核心所在。 

  从数学上来看,Sigmoid函数对中央区的信号增益较大,对两侧区的信号增益小,在信号的特征空间映射上,有很好的效果。从神经科学上来看,中央区酷似神经元的兴奋态,两侧区酷似神经元的抑制态,因而在神经网络学习方面,可以将重点特征推向中央区,将非重点特征推向两侧区。 

 

对比sigmoid类函数主要变化是:
  1)单侧抑制
  2)相对宽阔的兴奋边界
  3)稀疏激活性

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.TanHyperbolic(tanh)函数

  TanHyperbolic(tanh)函数又称作双曲正切函数,数学表达式为

                                                   

  导数为:

                                                     

 

  图像为:

               

 

   在具体应用中,tanh函数相比于Sigmoid函数往往更具有优越性,这主要是因为Sigmoid函数在输入处于[-1,1]之间时,函数值变化敏感,一旦接近或者超出区间就失去敏感性,处于饱和状态,影响神经网络预测的精度值。而tanh的输出和输入能够保持非线性单调上升和下降关系,符合BP网络的梯度求解,容错性好,有界,渐进于0、1,符合人脑神经饱和的规律,但比sigmoid函数延迟了饱和期.tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好。

3.ReLu函数

  ReLu函数的全称为Rectified Linear Units

  函数表达式为:

                                                         

  导数为:

                                                                            

 

                                             

Sigmoid ,tanh与ReLU 比较:

  sigmoid,tanh 会出现梯度消失问题,ReLU 的导数就不存在这样的问题。

优点:

(1)从计算的角度上,Sigmoid和Tanh激活函数均需要计算指数,复杂度高,而ReLU只需要一个阈值即可得到激活值;

(2)ReLU的非饱和性溃疡有效地解决梯度消失的问题,提供相对宽的激活边界;

(3)ReLU的单侧抑制提供了网络的稀疏表达能力

缺点:

训练过程中会导致神经元死亡的问题。这是由于函数f(z)=max(0,z)导致负梯度在经过该ReLU单元时被置为0,且在之后也不被任何数据激活,即流经该神经元的梯度永远为0,不对任何数据产生响应。

在实际训练中,如果学习率设置较大,会导致一定比例的神经元不可逆死亡,进而参数梯度无法更新,整个训练过程失败。

                                 

                                  

 

4.softplus函数

  softplus函数的数学表达式为:

  ReLu和softplus的函数曲线如下:

       可以看到,softplus可以看作是ReLu的平滑。根据神经科学家的相关研究,softplus和ReLu与脑神经元激活频率函数有神似的地方。也就是说,相比于早期的激活函数,softplus和ReLu更加接近脑神经元的激活模型,

而神经网络正是基于脑神经科学发展而来,这两个激活函数的应用促成了神经网络研究的新浪潮。 

 softplus和ReLu相比于Sigmoid的优点在哪里呢?

  • 采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
  • 对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练。
  • Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生(以及一些人的生物解释balabala)。

 

5.softmax函数

  Sigmoid函数如果用来分类的话,只能进行二分类,而这里的softmax函数可以看做是Sigmoid函数的一般化,可以进行多分类。softmax函数的函数表达式为:

                                                              

  从公式中可以看出,就是如果某一个Zj大过其他z,那这个映射的分量就逼近于1,其他就逼近于0,即用于多分类。也可以理解为将K维向量映射为另外一种K维向量。用通信的术语来讲,如果Sigmoid函数是MISO,Softmax就是MIMO的Sigmoid函数。

  二分类和多分类其实没有多少区别。用的公式仍然是y=wx + b。 但有一个非常大的区别是他们用的激活函数是不同的。 逻辑回归用的是sigmoid,这个激活函数的除了给函数增加非线性之外还会把最后的预测值转换成在【0,1】中的数据值。也就是预测值是0<y<1。 我们可以把最后的这个预测值当做是一个预测为正例的概率。在进行模型应用的时候我们会设置一个阈值,当预测值大于这个阈值的时候,我们判定为正例子,反之我们判断为负例。这样我们可以很好的进行二分类问题。 而多分类中我们用的激活函数是softmax。 为了能够比较好的解释它,我们来说一个例子。 假设我们有一个图片识别的4分类的场景。 我们想从图片中识别毛,狗,鸡和其他这4种类别。那么我们的神经网络就变成下面这个样子的。

                                       

  我们最后的一层中使用的激活函数就是softmax。 我们发现跟二分类在输出层之后一个单元不同的是, 使用softmax的输出层拥有多个单元,实际上我们有多少个分类就会有多少个单元,在这个例子中,我们有4个分类,所以也就有4个神经单元,它们代表了这4个分类。在softmax的作用下每个神经单元都会计算出当前样本属于本类的概率。如下:

                                                    

  如上图,该样本属于第一个分类的概率是0.842, 属于第二个分类的概率是0.042,属于第三个分类的概率是0.002,属于第四个分类的概率是0.114. 我们发现这些值相加等于一,因为这些值也是经过归一化的结果。 整个效果图可以参考下面的例子, 这是一个比较直观的图。

                                                   

Softmax的损失函数

  既然softmax的输出变成了多个值,那么我们如何计算它的损失函数呢, 有了损失函数我们才能进行梯度下降迭代并根据前向传播和反向传播进行学习。如下图:

                                            

  还是假设有4个分类,那么实际的预测向量,也会有4个维度。 如上图左边的样子。 如果是属于第二个分类,那么第二个值就是1, 其他值都是0。 假设右边的向量是预测值, 每个分类都有一个预测概率。 那么我们的损失函数就是。

                                                

  由于实际值得向量只有一个是1,其他的都是0. 所以其实到了最后的函数是下面这个样子的

                                                    

  有了损失函数,我们就可以跟以前做逻辑回归一样做梯度下降就可以了。

softmax的梯度求解

                                                

 

   

                                                       

 

 

 参考文献:

【1】softmax的log似然代价函数(公式求导)

【2】https://www.cnblogs.com/nxf-rabbit75/p/9276412.html

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值