原文 : http://www.cnblogs.com/neopenx/p/4453161.html#undefinedhtml
传统神经网络中最经常使用的两个激活函数,Sigmoid系(Logistic-Sigmoid、Tanh-Sigmoid)被视为神经网络的核心所在。前端
从数学上来看,非线性的Sigmoid函数对中央区的信号增益较大,对两侧区的信号增益小,在信号的特征空间映射上,有很好的效果。网络
从神经科学上来看,中央区酷似神经元的兴奋态,两侧区酷似神经元的抑制态,于是在神经网络学习方面,能够将重点特征推向中央区,将非重点特征推向两侧区。数据结构
不管是哪一种解释,看起来都比早期的线性激活函数(y=x),阶跃激活函数(-1/1,0/1)高明了很多。机器学习
2001年,神经科学家Dayan、Abott从生物学角度,模拟出了脑神经元接受信号更精确的激活模型,该模型如左图所示:分布式
这个模型对比Sigmoid系主要变化有三点:①单侧抑制 ②相对宽阔的兴奋边界 ③稀疏激活性(重点,能够看到红框里前端状态彻底没有激活)函数
同年,Charles Dugas等人在作正数回归预测论文中偶然使用了Softplus函数,Softplus函数是Logistic-Sigmoid函数原函数。post
Softplus(x)=log(1+ex)学习
按照论文的说法,一开始想要使用一个指数函数(自然正数)做为激活函数来回归,可是到后期梯度实在太大,难以训练,因而加了一个log来减缓上升趋势。测试
加了1是为了保证非负性。同年,Charles Dugas等人在NIPS会议论文中又调侃了一句,Softplus能够看做是强制非负校订函数max(0,x)平滑版本。
偶然的是,同是2001年,ML领域的Softplus/Rectifier激活函数与神经科学领域的提出脑神经元激活频率函数有神似的地方,这促成了新的激活函数的研究。
在神经科学方面,除了新的激活频率函数以外,神经科学家还发现了神经元的稀疏激活性。
仍是2001年,Attwell等人基于大脑能量消耗的观察学习上,推测神经元编码工做方式具备稀疏性和分布性。
2003年Lennie等人估测大脑同时被激活的神经元只有1~4%,进一步代表神经元工做的稀疏性。
从信号方面来看,即神经元同时只对输入信号的少部分选择性响应,大量信号被刻意的屏蔽了,这样能够提升学习的精度,更好更快地提取稀疏特征。
从这个角度来看,在经验规则的初始化W以后,传统的Sigmoid系函数同时近乎有一半的神经元被激活,这不符合神经科学的研究,并且会给深度网络训练带来巨大问题。
Softplus照顾到了新模型的前两点,却没有稀疏激活性。于是,校订函数max(0,x)成了近似符合该模型的最大赢家。
Machine Learning中的颠覆性研究是稀疏特征,基于数据的稀疏特征研究上,派生了Deep Learning这一分支。
稀疏性概念最先由Olshausen、Field在1997年对信号数据稀疏编码的研究中引入,并最先在卷积神经网络中得以大施拳脚。
近年来,稀疏性研究不只在计算神经科学、机器学习领域活跃,甚至信号处理、统计学也在借鉴。
总结起来稀疏性大概有如下三方面的贡献:
当前,深度学习一个明确的目标是从数据变量中解离出关键因子。原始数据(以天然数据为主)中一般缠绕着高度密集的特征。缘由
是这些特征向量是相互关联的,一个小小的关键因子可能牵扰着一堆特征,有点像蝴蝶效应,牵一发而动全身。
基于数学原理的传统机器学习手段在解离这些关联特征方面具备致命弱点。
然而,若是可以解开特征间缠绕的复杂关系,转换为稀疏特征,那么特征就有了鲁棒性(去掉了无关的噪声)。
稀疏特征有更大可能线性可分,或者对非线性映射机制有更小的依赖。由于稀疏特征处于高维的特征空间上(被自动映射了)
从流形学习观点来看(参见降噪自动编码器),稀疏特征被移到了一个较为纯净的低维流形面上。
线性可分性亦可参照自然稀疏的文本型数据,即使没有隐层结构,仍然能够被分离的很好。
稠密缠绕分布着的特征是信息最富集的特征,从潜在性角度,每每比局部少数点携带的特征成倍的有效。
而稀疏特征,正是从稠密缠绕区解离出来的,潜在价值巨大。
不一样的输入可能包含着大小不一样关键特征,使用大小可变的数据结构去作容器,则更加灵活。
假如神经元激活具备稀疏性,那么不一样激活路径上:不一样数量(选择性不激活)、不一样功能(分布式激活),
两种可优化的结构生成的激活路径,能够更好地从有效的数据的维度上,学习到相对稀疏的特征,起到自动化解离效果。
撇开稀疏激活不谈,校订激活函数max(0,x),与Softplus函数在兴奋端的差别较大(线性和非线性)。
几十年的机器学习发展中,咱们造成了这样一个概念:非线性激活函数要比线性激活函数更加先进。
尤为是在布满Sigmoid函数的BP神经网络,布满径向基函数的SVM神经网络中,每每有这样的幻觉,非线性函数对非线性网络贡献巨大。
该幻觉在SVM中更加严重。核函数的形式并不是彻底是SVM可以处理非线性数据的主力功臣(支持向量充当着隐层角色)。
那么在深度网络中,对非线性的依赖程度就能够缩一缩。另外,在上一部分提到,稀疏特征并不须要网络具备很强的处理线性不可分机制。
综合以上两点,在深度学习模型中,使用简单、速度快的线性激活函数可能更为合适。
如图,一旦神经元与神经元之间改成线性激活,网络的非线性部分仅仅来自于神经元部分选择性激活。
更倾向于使用线性神经激活函数的另一个缘由是,减轻梯度法训练深度网络时的Vanishing Gradient Problem。
看过BP推导的人都知道,偏差从输出层反向传播算梯度时,在各层都要乘当前层的输入神经元值,激活函数的一阶导数。
即Grad=Error⋅Sigmoid′(x)⋅x。使用双端饱和(即值域被限制)Sigmoid系函数会有两个问题:
①Sigmoid'(x)∈(0,1) 导数缩放
②x∈(0,1)或x∈(-1,1) 饱和值缩放
这样,通过每一层时,Error都是成倍的衰减,一旦进行递推式的多层的反向传播,梯度就会不停的衰减,消失,使得网络学习变慢。
而校订激活函数的梯度是1,且只有一端饱和,梯度很好的在反向传播中流动,训练速度获得了很大的提升。
Softplus函数则稍微慢点,Softplus'(x)=Sigmoid(x)∈(0,1) ,可是也是单端饱和,于是速度仍然会比Sigmoid系函数快。
诚然,稀疏性有不少优点。可是,过度的强制稀疏处理,会减小模型的有效容量。即特征屏蔽太多,致使模型没法学习到有效特征。
论文中对稀疏性的引入度作了实验,理想稀疏性(强制置0)比率是70%~85%。超过85%,网络就容量就成了问题,致使错误率极高。
对比大脑工做的95%稀疏性来看,现有的计算神经网络和生物神经网络仍是有很大差距的。
庆幸的是,ReLu只有负值才会被稀疏掉,即引入的稀疏性是能够训练调节的,是动态变化的。
只要进行梯度训练,网络能够向偏差减小的方向,自动调控稀疏比率,保证激活链上存在着合理数量的非零值。
ReLu的使用,使得网络能够自行引入稀疏性。这一作法,等效于无监督学习的预训练。
固然,效果确定没预训练好。论文中给出的数据显示,没作预训练状况下,ReLu激活网络遥遥领先其它激活函数。
甚至出现了比普通激活函数预训练后更好的奇葩状况。固然,在预训练后,ReLu仍然有提高空间。
从这一层面来讲,ReLu缩小了非监督学习和监督学习之间的代沟。固然,还有更快的训练速度。
在MNIST+LeNet4中,ReLu+Tanh的组合在epoch 50左右就能把验证集错误率降到1.05%
可是,全Tanh在epoch 150时,仍是1.37%,这个结果ReLu+Tanh在epoch 17时就能达到了。
该图来自AlexNet的论文对ReLu和普通Sigmoid系函数作的对比测试,能够看到,ReLu的使用,使得学习周期
大大缩短。综合速率和效率,DL中大部分激活函数应该选择ReLu。
ReLu能够直接用T.maximum(0,x)实现,用T.max(0,x)不能求导.