神经网络激活函数.docx
- 文档编号:15165877
- 上传时间:2023-07-01
- 格式:DOCX
- 页数:15
- 大小:832.03KB
神经网络激活函数.docx
《神经网络激活函数.docx》由会员分享,可在线阅读,更多相关《神经网络激活函数.docx(15页珍藏版)》请在冰点文库上搜索。
神经网络激活函数
激活函数是用来加入非线性因素的,因为线性模型的表达能力不够。
1.S形函数 (SigmoidFunction)
该函数的导函数:
2.双极S形函数
该函数的导函数:
S形函数与双极S形函数的图像如下:
双极S形函数与S形函数主要区别在于函数的值域,双极S形函数值域是(-1,1),而S形函数值域是(0,1)。
由于S形函数与双极S形函数都是可导的(导函数是连续函数),因此适合用在BP神经网络中。
(BP算法要求激活函数可导)
3.双曲正切函数
该函数的导函数:
4.ReLu(Rectified Linear Units)函数
ReLU:
g(x)=max(0,x)
该函数的导函数:
g(x)'=0或1
RELU取代sigmoid和tanh函数的原因是在求解梯度下降时RELU的速度更快,在大数集下会节省训练的时间
在这里指出sigmoid和tanh是饱和非线性函数,而RELU是非饱和非线性函数。
5.PRELU激活函数
PReLU(ParametricRectifiedLinearUnit),顾名思义:
带参数的ReLU。
二者的定义和区别如下图:
如果ai=0,那么PReLU退化为ReLU;如果ai是一个很小的固定值(如ai=0.01),则PReLU退化为LeakyReLU(LReLU)。
有实验证明,与ReLU相比,LReLU对最终的结果几乎没什么影响。
激活函数通常有如下一些性质:
∙非线性:
当激活函数是线性的时候,一个两层的神经网络就可以逼近基本上所有的函数了。
但是,如果激活函数是恒等激活函数的时候(即f(x)=x),就不满足这个性质了,而且如果MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的。
∙可微性:
当优化方法是基于梯度的时候,这个性质是必须的。
∙单调性:
当激活函数是单调的时候,单层网络能够保证是凸函数。
∙f(x)≈x:
当激活函数满足这个性质的时候,如果参数的初始化是random的很小的值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要很用心的去设置初始值。
∙输出值的范围:
当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learningrate.
Sigmoid
sigmoid函数曾经被使用的很多,不过近年来,用它的人越来越少了。
主要是因为它的一些 缺点:
∙Sigmoidssaturateandkillgradients. (saturate这个词怎么翻译?
饱和?
)sigmoid有一个非常致命的缺点,当输入非常大或者非常小的时候(saturation),这些神经元的梯度是接近于0的,从图中可以看出梯度的趋势。
所以,你需要尤其注意参数的初始值来尽量避免saturation的情况。
如果你的初始值很大的话,大部分神经元可能都会处在saturation的状态而把gradientkill掉,这会导致网络变的很难学习。
∙Sigmoid的output不是0均值. 这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。
产生的一个结果就是:
如果数据进入神经元的时候是正的(e.g. x>0 elementwisein f=wTx+b),那么 w 计算出的梯度也会始终都是正的。
当然了,如果你是按batch去训练,那么那个batch可能得到不同的信号,所以这个问题还是可以缓解一下的。
因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的killgradients问题相比还是要好很多的。
tanh
tanh是上图中的右图,可以看出,tanh跟sigmoid还是很像的,实际上,tanh是sigmoid的变形:
tanh(x)=2sigmoid(2x)−1
与sigmoid不同的是,tanh是0均值的。
因此,实际应用中,tanh会比sigmoid更好(毕竟去粗取精了嘛)。
ReLU
近年来,ReLU变的越来越受欢迎。
它的数学表达式如下:
f(x)=max(0,x)
很显然,从图左可以看出,输入信号<0时,输出都是0,>0 的情况下,输出等于输入。
w 是二维的情况下,使用ReLU之后的效果如下:
ReLU的优点:
∙Krizhevskyetal. 发现使用ReLU得到的SGD的收敛速度会比sigmoid/tanh快很多(看右图)。
有人说这是因为它是linear,而且non-saturating
∙相比于sigmoid/tanh,ReLU只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的运算。
ReLU的缺点:
当然ReLU也有缺点,就是训练的时候很”脆弱”,很容易就”die”了.什么意思呢?
举个例子:
一个非常大的梯度流过一个ReLU神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。
如果这个情况发生了,那么这个神经元的梯度就永远都会是0.
实际操作中,如果你的learningrate很大,那么很有可能你网络中的40%的神经元都”dead”了。
当然,如果你设置了一个合适的较小的learningrate,这个问题发生的情况其实也不会太频繁。
Leaky-ReLU、P-ReLU、R-ReLU
LeakyReLUs:
就是用来解决这个 “dyingReLU” 的问题的。
与ReLU不同的是:
f(x)=αx,(x<0)
f(x)=x,(x>=0)
这里的 α 是一个很小的常数。
这样,即修正了数据分布,又保留了一些负轴的值,使得负轴信息不会全部丢失。
关于LeakyReLU的效果,众说纷纭,没有清晰的定论。
有些人做了实验发现LeakyReLU表现的很好;有些实验则证明并不是这样。
ParametricReLU:
对于LeakyReLU中的α,通常都是通过先验知识人工赋值的。
然而可以观察到,损失函数对α的导数我们是可以求得的,可不可以将它作为一个参数进行训练呢?
KaimingHe的论文《DelvingDeepintoRectifiers:
SurpassingHuman-LevelPerformanceonImageNetClassification》指出,不仅可以训练,而且效果更好。
公式非常简单,反向传播至未激活前的神经元的公式就不写了,很容易就能得到。
对α的导数如下:
δyi/δα=0,(ifyi>0),else=yi
原文说使用了ParametricReLU后,最终效果比不用提高了1.03%.
RandomizedReLU:
RandomizedLeakyReLU是leakyReLU的random版本(α 是random的).
它首次试在kaggle的NDSB比赛中被提出的。
核心思想就是,在训练过程中,α 是从一个高斯分布 U(l,u) 中随机出来的,然后再测试过程中进行修正(有点像dropout的用法)。
数学表示如下:
在测试阶段,把训练过程中所有的 αij 取个平均值。
Maxout
Maxout出现在ICML2013上,作者Goodfellow将maxout和dropout结合后,号称在MNIST,CIFAR-10,CIFAR-100,SVHN这4个数据上都取得了start-of-art的识别率。
Maxout公式如下:
fi(x)=maxj∈[1,k]zij
假设 w 是2维,那么有:
f(x)=max(wT1x+b1,wT2x+b2)
可以注意到,ReLU和LeakyReLU都是它的一个变形(比如,w1,b1=0 的时候,就是ReLU).
Maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。
作者从数学的角度上也证明了这个结论,即只需2个maxout节点就可以拟合任意的凸函数了(相减),前提是”隐隐含层”节点的个数可以任意多.
所以,Maxout具有ReLU的优点(如:
计算简单,不会saturation),同时又没有ReLU的一些缺点(如:
容易Godie)。
不过呢,还是有一些缺点的嘛:
就是把参数double了。
怎么选择激活函数呢?
我觉得这种问题不可能有定论的吧,只能说是个人建议。
如果你使用ReLU,那么一定要小心设置learningrate,而且要注意不要让你的网络出现很多“dead”神经元,如果这个问题不好解决,那么可以试试LeakyReLU、PReLU或者Maxout.
友情提醒:
最好不要用sigmoid,你可以试试tanh,不过可以预期它的效果会比不上ReLU和Maxout.
还有,通常来说,很少会把各种激活函数串起来在一个网络中使用的。
Fortheoutputunits,youshouldchooseanactivationfunctionsuitedtothe
distributionofthetargetvalues:
ØForbinary(0/1)targets,thelogisticfunctionisanexcellentchoice
(Jordan,1995).
ØForcategoricaltargetsusing1-of-Ccoding,thesoftmaxactivation
functionisthelogicalextensionofthelogisticfunction.
ØForcontinuous-valuedtargetswithaboundedrange,thelogisticandtanh
functionscanbeused,providedyoueitherscaletheoutputstotherange
ofthetargetsorscalethetargetstotherangeoftheoutputactivation
function("scaling"meansmultiplyingbyandaddingappropriate
constants).
ØIfthetargetvaluesarepositivebuthavenoknownupperbound,youcan
useanexponentialoutputactivationfunction,butbewareofoverflow.
ØForcontinuous-valuedtargetswithnoknownbounds,usetheidentityor
"linear"activationfunction(whichamountstonoactivationfunction)
unlessyouhaveaverygoodreasontodootherwise.
Namingconventions.NoticethatwhenwesayN-layerneuralnetwork,wedonotcounttheinputlayer.Therefore,asingle-layerneuralnetworkdescribesanetworkwithnohiddenlayers(inputdirectlymappedtooutput).Inthatsense,youcansometimeshearpeoplesaythatlogisticregressionorSVMsaresimplyaspecialcaseofsingle-layerNeuralNetworks.Youmayalsohearthesenetworksinterchangeablyreferredtoas“ArtificialNeuralNetworks”(ANN)or“Multi-LayerPerceptrons”(MLP).ManypeopledonotliketheanalogiesbetweenNeuralNetworksandrealbrainsandprefertorefertoneuronsasunits.
Maxout算法流程
1、算法概述
开始前我们先讲解什么叫maxoutnetworks,等我们明白了什么叫maxout网络后,再对maxout的相理论意义做出解释。
Maxout是深度学习网络中的一层网络,就像池化层、卷积层一样等,我们可以把maxout看成是网络的激活函数层,这个后面再讲解,本部分我们要先知道什么是maxout。
我们假设网络某一层的输入特征向量为:
X=(x1,x2,……xd),也就是我们输入是d个神经元。
Maxout隐藏层每个神经元的计算公式如下:
上面的公式就是maxout隐藏层神经元i的计算公式。
其中,k就是maxout层所需要的参数了,由我们人为设定大小。
就像dropout一样,也有自己的参数p(每个神经元dropout概率),maxout的参数是k。
公式中Z的计算公式为:
权重w是一个大小为(d,m,k)三维矩阵,b是一个大小为(m,k)的二维矩阵,这两个就是我们需要学习的参数。
如果我们设定参数k=1,那么这个时候,网络就类似于以前我们所学普通的MLP网络。
我们可以这么理解,本来传统的MLP算法在第i层到第i+1层,参数只有一组,然而现在我们不怎么干了,我们在这一层同时训练n组参数,然后选择激活值最大的作为下一层神经元的激活值。
下面还是用一个例子进行讲解,比较容易搞懂。
为了简单起见,假设我们网络第i层有2个神经元x1、x2,第i+1层的神经元个数为1个,如下图所示:
(1)以前MLP的方法。
我们要计算第i+1层,那个神经元的激活值的时候,传统的MLP计算公式就是:
z=W*X+b
out=f(z)
其中f就是我们所谓的激活函数,比如Sigmod、Relu、Tanh等。
(2)Maxout的方法。
如果我们设置maxout的参数k=5,maxout层就如下所示:
相当于在每个输出神经元前面又多了一层。
这一层有5个神经元,此时maxout网络的输出计算公式为:
z1=w1*x+b1
z2=w2*x+b2
z3=w3*x+b3
z4=w4*x+b4
z5=w5*x+b5
out=max(z1,z2,z3,z4,z5)
所以这就是为什么采用maxout的时候,参数个数成k倍增加的原因。
本来我们只需要一组参数就够了,采用maxout后,就需要有k组参数。
maxout激活函数,它具有如下性质:
1、maxout激活函数并不是一个固定的函数,不像Sigmod、Relu、Tanh等函数,是一个固定的函数方程
2、它是一个可学习的激活函数,因为我们W参数是学习变化的。
3、它是一个分段线性函数:
然而任何一个凸函数,都可以由线性分段函数进行逼近近似。
其实我们可以把以前所学到的激活函数:
relu、abs激活函数,看成是分成两段的线性函数,如下示意图所示:
maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。
最直观的解释就是任意的凸函数都可以由分段线性函数以任意精度拟合(学过高等数学应该能明白),而maxout又是取k个隐隐含层节点的最大值,这些”隐隐含层"节点也是线性的,所以在不同的取值范围下,最大值也可以看做是分段线性的(分段的个数与k值有关)
maxout是一个函数逼近器,对于一个标准的MLP网络来说,如果隐藏层的神经元足够多,那么理论上我们是可以逼近任意的函数的。
类似的,对于maxout网络也是一个函数逼近器。
定理1:
对于任意的一个连续分段线性函数g(v),我们可以找到两个凸的分段线性函数h1(v)、h2(v),使得这两个凸函数的差值为g(v):
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 神经网络 激活 函数