【DL-CV】激活函数及其选择

【DL-CV】反向传播,(随机)梯度降低<前篇---后篇>【DL-CV】神经网络的补充segmentfault

在介绍线性分类器的时候,提到了激活函数,还提到线性分类器的输出要通过激活函数才能做为下一层网络的输入。为何呢?本文将对这一问题进行解疑并介绍多种多种激活函数。网络

引入激活函数

假如神经网络只由多个线性分类组器合而成,那不管怎样组合,他们对数据的操做永远都是线性变换而已,复杂度有限,只能实现线性分类而不能实现非线性分类,但现实中的数据每每不是线性可分的。为了解决这个问题,就要给神经网络引入非线性因素,提升神经网络模型的表达能力(学习更复杂的映射)。激活函数就是用来引入这个非线性因素的,下面介绍几种常见的激活函数及其优缺点(正负号表示)。函数

Sigmoid

其数学公式及其图像以下
clipboard.png学习

它把输入压缩到(0,1)区间内,有两端饱和的特性,对于很大的正数它输出趋近与1,对于绝对值很小的负数它输出趋近于0。
这个函数曾经很是流行,可是因为其缺点(主要是两边饱和)饱受诟病,如今没什么人用了spa

  • (-)梯度消失:当输入过大或太小时,由图可知局部梯度几乎为0,通过链式法则后梯度也几乎为0,你会失去梯度流的反馈,使权重几乎不更新
  • (-)非零中心:sigmoid的输出均大于零(不是零均值),即给下一层神经元的x都大于零,$\sigma(W*x+b)$,假如这里的x全是正数,那么通过反向传播${∂L\over ∂W}会全正或全负$,因而全部权重值都会往一个方向更新,这样训练效率很是低。

tanh

其数学公式及其图像以下(双曲正切)
clipboard.png.net

形状和sigmoid很像,也是两端饱和,不一样的是它把输入压缩到(-1,1)区间内。blog

  • (+)以零为中心
  • (-)梯度消失

比sigmoid好了一点,没有非零中心的问题图片

ReLU

其数学公式及其图像以下
clipboard.pngip

就是个取最大值得函数,当输入为负数,输出为0;当输入为正数,输出仍是这个数get

  • (+)在正区间不会饱和(一个优点):在正区间梯度可传递
  • (+)计算成本低
  • (+)使用ReLU以后,权重收敛速度比sigmoid/tanh快(约6倍)
  • (-)非零中心
  • (-)在负区间梯度消失:某些权重永远不会更新,咱们称这种状况叫“dead ReLU”。致使这种状况频发的缘由主要有权重初始化很差或学习率过高

虽然有“dead ReLU”的状况发生,但这并不阻碍它成为优秀的激活函数,实际应用中其表现不错,是很是经常使用的激活函数

Leaky ReLU(LReLU)

其数学公式及其图像以下
clipboard.png

ReLU的变种,负区间再也不是0,而是给它一个很小的斜率(上图是0.01,也能够是其余常数)

  • (+)ReLU的优势
  • (+)不会出现梯度消失的状况

关于其效果没有清晰的定论,有的实验表现好,有些则很差


其实还能够把那个斜率看成能够反向传播和学习的参数α,而后就变成了Parametric ReLU(PReLU)激活函数
$$f(x)=max(\alpha x,x)$$

ELU

其数学公式及其图像以下
clipboard.png

全名指数线性单元Exponential Linear Units,α是一个可调整的参数,它控制着ELU负值部分在什么时候饱和

  • (+)ReLU的优势
  • (+)输出均值接近零
  • (+)负饱和机制,使模型对噪音有更强的鲁棒性

关于其详细介绍可看此论文,或者看看论文导读

Maxout

这个函数有点奇,我以为它直接改变了原有MLP网络的结构,以致于造成了maxout网络,其自己就集成了激活函数的功能。
$$f(x)=max_{j\in [1,k]}z_{j}$$
k是需人为设定的参数,k=1,网络就类至关于普通的MLP网络;k>1,就变身成maxout网络了。这个函数的原理以下图,笔者文字表达欠佳,需做图才能展现出来。若是想了解更多可上网搜“maxout激活函数”
图片描述

选择

在同一个模型中,激活函数不会混搭使用,选定一个就用一个。通常最好的经验法则是使用ReLU函数,可是要谨慎的调节学习率。像LReLU,PReLU,ELU,Maxout这些函数则实验性强一点(实用性弱一点),但也能够试下。tanh和sigmoid就em....,算了吧。


除了这里介绍的6个外,还有一些其余的激活函数(若有着丧心病狂证实的SeLU),感兴趣的能够去查一下

相关文章
相关标签/搜索