激活函数
1.Why
激活函数的作用: 用来加入非线性因素的,因为线性模型的表达能力不够。 如下一个单层感知机:
![](https://pic2.zhimg.com/2e83b4403f21654cd9147f13ecfaf799_b.png)
如果用多个感知机组合,能够获得更强的分类能力,:
![](https://pic2.zhimg.com/ef7eb0f56730058e1100dd6605eb2a25_b.png)
![](https://images2015.cnblogs.com/blog/536097/201706/536097-20170621183906835-42141094.png)
因此,提出了激活函数,在每层叠加完后,加一个激活函数,就变为非线性函数。。。
![](https://pic4.zhimg.com/3e4d3aabb90f51f467437a17861d3bf7_b.png)
2. what
常用激活函数:(选取时保证可微)
1)tanh(双切正切函数)
![](http://upload-images.jianshu.io/upload_images/1667471-805a73120a9e74ec.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/1667471-d75d69fc01b55d2a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。
- 与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好。然而,tanh函数也存在梯度饱和问题,导致训练效率低下。
2)sigmoid(s型函数)
![](https://images2015.cnblogs.com/blog/536097/201706/536097-20170621184907491-687644895.png)
- 它可以将一个实数映射到(0,1)的区间,可以用来做二分类。
- 梯度饱和:当函数激活值接近于0或者1时,函数的梯度接近于0。当每层残差接近于0,计算出的梯度也不可避免地接近于0。这样在参数微调过程中,会引起参数弥散问题,传到前几层的梯度已经非常靠近0了
- 激活函数计算量大,反向传播求误差梯度时,求导涉及除法反向传播。
sigmoid 的导数表达式为:
![](http://upload-images.jianshu.io/upload_images/1667471-041515709eb4de87.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](https://images2015.cnblogs.com/blog/536097/201706/536097-20170621185108288-1044505830.png)
- 很容易就会出现梯度消失的情况,从而无法完成深层网络的训练
3)ReLU (简单,大于0的留下,否则为0) 用于隐层神经元输出
![](http://upload-images.jianshu.io/upload_images/1667471-776c7cf54955c1fd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/1667471-1c28e1ec951c8b05.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
ReLU 的导数:
![](https://images2015.cnblogs.com/blog/536097/201706/536097-20170621185522820-1101360796.png)
- 与sigmoid对比:
1)单侧抑制
2)相对宽阔的兴奋边界
3)稀疏激活性。
梯度不饱和:梯度计算公式为:1{x>0},因此在反向传播过程中,减轻了梯度弥散的问题,神经网络前几层的参数也可以很快的更新。
计算速度快。正向传播过程中,sigmoid和tanh函数计算激活值时需要计算指数,而Relu函数仅需要设置阈值。如果x<0,f(x)=0,如果x>0,f(x)=x。加快了正向传播的计算速度。
- ReLU 的优点:
- 缺点:
训练的时候很”脆弱”,举个例子:由于ReLU在x<0时梯度为0,这样就导致负的梯度在这个ReLU被置零,而且这个神经元有可能再也不会被任何数据激活。如果这个情况发生了,那么这个神经元之后的梯度就永远是0了,也就是ReLU神经元坏死了,不再对任何数据有所响应。
4)Softmax - 用于多分类神经网络输出
![](http://upload-images.jianshu.io/upload_images/1667471-c798481b7b366cb2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
为什么要取指数,第一个原因是要模拟 max 的行为,所以要让大的更大。
第二个原因是需要一个可导的函数。
第二个原因是需要一个可导的函数。