卷积神经网络激活函数为什么要有激活函数,为什么relu 能够防止...

基于卷积神经网络的智能冰箱果蔬图像识别的研究
基于卷积神经网络的智能冰箱果蔬图像识别的研究
金华科技圈
曾维亮1,林志贤1,陈永洒2(1.福州大学 物理与信息工程学院,福建 福州 .TCL集团工业研究院,广东 深圳 518055):智能冰箱物体识别主要涉及对水果和蔬菜的识别,冰箱中果蔬数量繁多,光照不均,环境复杂,对此提出了一种用于处理该类识别问题的卷积神经网络。网络采用ReLU作为激活函数,它比传统的Sigmoid函数具有更强的稀疏能力和更大的梯度值,能够极大地加速网络收敛。隐含层中引入随机Dropout,使得某些节点不工作,减少节点间的“共同适应”,降低网络对某一局部特征的过拟合,可减少网络计算复杂度并有效提升识别率。网络采用带动量项的基于梯度下降的反向传播算法,避免网络陷入局部极小值,提高识别率。最后通过用Supermarket Produce Dataset数据集模拟冰箱果蔬图像进行实验,验证了本文方法的有效性。:卷积神经网络;果蔬识别; Dropout;梯度下降:TP391.4文献标识码:ADOI: 10.19358/j.issn.17.08.018引用格式:曾维亮,林志贤,陈永洒.基于卷积神经网络的智能冰箱果蔬图像识别的研究[J].微型机与应用,):56-59.0引言*基金项目:国家重点研发计划课题(2016YFB0401503);福建省科技重大专项( 1);广东省科技重大专项(01);福建省资助省属高校专项课题(JK2014002)智能冰箱的果蔬识别可收集用户果蔬产品的消耗情况,利用该数据分析出用户喜好,商家可通过终端APP适时向用户做出果蔬产品推荐,或提醒用户尽快食用即将过期的食品。目前智能冰箱的物体识别方法主要有:用户手动输入或语音输入食物种类、无线射频识别扫描[1]、条形码或二维码扫描[2]等技术。针对果蔬图像识别,BOLLE R M等人[3]等通过提取图像的颜色、纹理统计特征,首次实现了随意摆放农产品的识别与分类。ROCHA A等人[4]比较了和差直方图(Unser)、颜色聚合向量(Color Coherence Vector,CCV)、内外点颜色直方图(Border/Interior pixel Classfication,BIC)等纹理、颜色特征,采用K means与自底向上聚类(Bottom up Clustering Procedure)方法对这几类特征进行识别,同时指出采用特征融合的办法可以取得更好的效果,但是该方法不能很好地表现果蔬纹理的差异性,且对外界光照较敏感。Zhang Yudong等人提出利用Unser、RGB颜色直方图、外形等作为识别特征,采用多核SVM进行果蔬产品识别[5],取得了较好的识别效果,但是多核支持向量机训练时间长,成本较大。ROCHA A等人[6]后期继续采用特征融合的方法对果蔬识别技术进行了优化。陶华伟等人[7]提出一种基于颜色完全局部二值模式来提取物体纹理特征的方法,提高了智能果蔬系统的识别率。以上对果蔬图像识别的研究均属于人工提取特征的范畴。LECUN Y等人[8]提出的LeNet 5卷积神经网络在数字识别中取得了巨大的成功,随后以该模型为代表的卷积神经网络被应用到车牌识别、手写数字识别、视频人体动作识别[9]、人脸特征点的检测[10]等众多领域。KRIZHEVSKY A等人[11]提出的网络模型在ImageNet数据集上达到了83.6%的识别率,更是引起了广泛的关注。李思雯等人[12]利用集成的卷积神经网络识别智能冰箱果蔬种类,但是融合多个模型的方法比较复杂、参数较多,容易出现“过拟合”。本文提出一种用于识别冰箱果蔬种类的卷积神经网络,网络采用ReLU做为激活函数,避免出现饱和状态,加速网络收敛。而在隐含层加入随机Dropout,使得网络结构更加“稀疏”,减少了神经元的相互依赖性。卷积神经网络对特定的遮挡、光照、平移、旋转、缩放及其他形式的扭曲都具有良好的鲁棒性,非常适合用于处理该类果蔬识别问题,因此成为了近年该方向的研究热点。1卷积神经网络卷积神经网络是可以直接以2D图像作为输入的深度神经网络,它主要包括特征提取和分类器两部分。特征提取模块由卷积层和降采样层交替组成,卷积层通过卷积滤波的方式获取图像的有用特征,降采样层通过对卷积层的数据采样降维,减少了数据处理量。这种从隐含层逐层地自主选取图像由边、颜色等低层到角点、形状等高层特征的方式,避免了人工提取特征的繁琐与片面,使网络具有自主选取特征并进行学习与识别的能力。最后利用分类器对提取到的特征进行识别分类,分类器通常使用一层或两层的全连接神经网络实现。1.1LeNet-5网络模型经典的LeNet 5模型由输入层、两层卷积层、两层降采样层、两层全连接网络以及输出层组成,LeNet 5网络模型结构如图1所示。在卷积层中,输入图像通过j个不同的卷积核卷积,生成j个不同的特征图,运算过程如式(1)所示。式中,xlj表示在l层(卷积层)的第j个特征图,f(·)表示激活函数,Mj代表输入图像的集合,b代表偏置因子。降采样层的运算过程如式(2)所示。式中:down(·)表示mean pooling降采样,即输入图像中每个不同的n×n区域求和再求平均作为输出图像的一个点,使得输出图像在不同维度都缩小为原来的1/n。每个输出图像都有不同的乘积因子β以及偏置因子b。分类器的第一层是与上层降采样层的所有特征图全连接的卷积层,因输入大小为5×5,而卷积核的大小也为5×5,故可以看作是全连接层。分类器第二层计算输入向量和权重之间的点积,然后通过激活函数最终产生输出层单元的一个状态,决定识别结果。1.2基于ReLU激活函数的卷积神经网络卷积神经网络中常见的激活函数包括Sigmoid函数f(x)=(1+e-x)-1和双曲正切函数f(x)=tanh(x),这两种函数均属于饱和非线性函数,收敛速度较慢。本文采用非饱和线性修正单元(Rectified Linear Units,ReLU),即f(x)=max(x),该函数通过线性修正的方式,强制某些数据为零,使得模型具有适度的稀疏表达。ReLU函数梯度值大,在反向传播阶段,能够防止梯度传播到前几层网络时弥散消失,性能比传统的激活函数优良,并且ReLU的单边抑制更符合生物学的观点,其连接网络的过程如图2所示。1.3基于随机Dropout的CNN网络卷积神经网络模型在训练阶段受样本库容量影响大,在样本数量有限的情况下要防止模型出现“过拟合”。本文网络结构引入随机Dropout,即随机“冻结”某些神经元,在网络训练过程中保留其当前的权值,同时将输出设定为0,而这些被选择的神经元在下次训练过程中又会恢复之前保留的取值,并再次随机选择部分神经元重复此过程。随机Dropout可以避免每两个神经元同时产生作用,从而使权值的更新不再依赖于有固定关系隐含节点的共同作图3加入Dropout的隐含层示意图用,即神经网络的结构在每次训练过程中都发生变化。这种方式降低了神经元之间的依赖,有效提高了神经网络的泛化能力,因此能学习到鲁棒性更强的特征。本文随机设定两个卷积层的30%的神经元输出为零,如图3所示。1.4带动量因子的梯度下降反向传播算法本文训练过程中网络的权值更新基于带动量因子的梯度下降反向传播算法,权重更新规则如式(3)、(4)所示。vi+1=αvi-ληωi-η( L ω│ωi)Di(3)ωi+1=ωi+vi+1(4)式中:i为迭代次数;η为学习率;λ为权重衰减因子;ω表示权重向量;α为动量项,增加动量项的目的是为了避免网络训练陷于较浅的局部极小值点,并且能够加快网络收敛的速度;η( L ω│ωi)Di为第i批训练样本Di的损失函数在权值为ωi时关于ω的导数的平均值。1.5本文的卷积神经网络模型本文卷积神经网络结构如图4所示,分别为输入层、两层卷积层、两层降采样层、全连接层、输出层。卷积:输入图像经过一个可训练的滤波器进行卷积,得到卷积层的特征图。降采样:对卷积层的特征图中每个2×2的邻域求平均得到降采样层的一个值,因此降采样层的特征图在各个维度都缩小为卷积层特征图的1/2。全连接:将最后一层降采样层的特征图展开成一个向量,乘上加权并通过激活函数得到输出层神经元。网络模型各层采用的参数如表1所示。2实验及结果分析2.1数据集冰箱中果蔬种类、数量繁多,摆放无规则,果蔬视角多变,光照不均,情况十分复杂。采用Supermarket Produce Dataset[10]数据集模拟冰箱获取的图像进行实验,该数据集共有15类、2 633张冰箱中常见果蔬的图像,每类果蔬图像数量为75~264张不等,图像尺寸为1 024×768。为了使各类图像数据整齐并相对均衡,采取随机复制的方式使得数据集的几类果蔬增加了167张图像,并在这些图像中加入高斯白噪声。因此修正的数据集共有15类、2 800张果蔬图像,分别为土豆(黄)、土豆(红)、腰果、小毛桃、富士苹果、青苹果、香瓜、猕猴桃、油桃、洋葱、橘、李子、梨、青桔、西瓜。2.2实验方法本文构建了如图4所示的卷积神经网络模型,各层的参数如表1所示。输入图像尺寸为28×28,因此应先将图像裁剪并等宽高地缩小为1∶1的尺寸,等宽高地缩小是为了防止图像畸变而丢失重要特征信息。采用批量随机梯度下降法(Mini batch Stochastic Gradient Descend,Mini batch SGD)迭代200次(200 epochs),对每次epoch,每输入10个样本训练后,进行反向传播并更新一次权值。本文设定学习率η的初始值为0.1,待识别率没有显著上升或者上升趋势变慢时,将学习率η变为原来的1/2;动量项α设值为0.6;权重衰减因子λ设为0.000 5;实验采用留出法(hold out)划分数据集,随机选取2 240张图像作为训练集,其余的560张作为测试集。2.3实验结果与分析2.3.1各类果蔬识别的混淆矩阵图5为本文方法测试各类果蔬识别正确率的混淆矩阵。矩阵对角线位置颜色较深方块中的数据为Y轴对应果蔬的识别率,其余较淡色方块的数据为Y轴对应果蔬被错误识别为X轴对应的果蔬的识别率。从混淆矩阵中可以看出猕猴桃易被误识别为青苹果,梨易被误识别为土豆(黄)。从数据集图像中可发现这几类水果客观上外形比较相似;其余腰果、洋葱、富士苹果,香瓜、洋葱、橘、李子、青桔等识别率较高,特别地香瓜和橘能够达到100%的正确率。即本文的卷积神经网络模型和参数对该类果蔬识别问题能达到一个较好的识别效果。2.3.2采用Sigmoid和ReLU做为激活函数的识别率对比图图6为网络采用Sigmoid函数和ReLU函数迭代200次的收敛速度对比图,其中实线为ReLU激活函数的识别率曲线,点实线为Sigmoid激活函数的识别率曲线。从图中可以发现采用ReLU函数前期收敛速度更快;网络趋于稳定时,采用ReLU激活函数的整体识别率约为83.4%,远高于Sigmoid函数的识别率67.7%,因其能够有效地防止网络出现“过拟合”,故能够在较大程度上提高果蔬的识别率。2.3.3网络加入随机Dropout与否的识别率对比图图7分别为网络加入随机Dropout与否的200次迭代后的识别率曲线图,其中实线为加入随机Dropout比例为30%时得到的识别率曲线,点实线为未加入Dropout的识别率曲线。网络趋于稳定时,加入随机Dropout的整体识别率约为83.4%,未加入随机Dropout的整体识别率约为79.3%,识别率提高了4.1%。引入一定比例的随机Dropout可以使得网络更加稀疏,减少了神经元之间的共同作用,在一定程度上能够提高果蔬的识别率,并且网络“抖动”更小,鲁棒性更强。3结论本文通过构建卷积神经网络模型对果蔬图像进行识别,网络采用ReLU线性函数作为神经元的激活函数,加快了网络的收敛,提高了训练效率及识别率。而在隐含层引入一定比例的Dropout,使网络具有更好的泛化能力。今后将研究输入较大的图像尺寸,使得特征信息更加丰富,并将颜色信息加入到网络中,研究颜色对果蔬图像识别的影响以及在现有网络结构上继续改进达到提高识别率的效果,从而有效地处理该类识别问题。参考文献[1] Gu Hanshen,Wang Dong. A content-aware fridge based on RFID in smart home for home healthcare[C].Proceedings of the 11th International Conference on Advanced Communications Technology,Beijing,IEEE,0.[2] 戴杨,于盛林.二维条形码编码与译码的计算机实现[J].数据采集与处理,):356 360.[3] BOLLE R M,CONNELL J H,HASS N,et al. Veggievison:a produce recognition system[P].United States:US 5546475A, .[4] ROCHA A,HAUAGGE D C,WAINER J,et al. Automatic produce classification from images using color,texture and appearance cues[C]. 21st Brazilian Symposium on Computer Graphics and Image Processing, CampoGrande,Brazil,IEEE,.[5] Zhang Yudong,Wu Lenan. Classification of fruits using computer vision and multiclass support vector machine[J].Sensors,):.[6] FARIA F A,dos SANTOS J A, ROCHA A,et al. Automatic classifier fusion for produce recognition[C].25th SIBGRAPI on Graphics,Patterns and Images,OuroPreto,Brazil,IEEE,.[7] 陶华伟,赵力,奚吉,等.基于颜色及纹理特征的果蔬种类识别方法[J]. 农业工程学报,):305-311.[8] LECUN Y,BOTTOU L,BENGIO Y,et al.Gradient based learning applied to document recognition[C].Proceedings of the IEEE 86,24.[9] Ji Shuiwang,Xu Wei,Yang Ming,et al.3D convolutional neural networks for human action recognition [J].IEEE Transactions on Pattern Analysis and Machine Intelligence,):221-231.[10] Sun Yi, Wang Xiaogang,Tang Xiaoou. Deep convolutional network cascade for facial point detection[C].2013 IEEE Conference on Computer Vision and Patten Recognition(CVPR),IEEE,-3483.[11] KRIZHEVSKY A,SUTSKEVER I,HINTON G E.ImageNet classification with deep convolutional neural networks[C].Advances in Neural Information Processing System 25:Proceeding of the 26th Annual Conference on Neural Information Processing Systems,Lake Tahoe,USA,-1105.[12] 李思雯,吕建成,倪胜巧.集成的卷积神经网络在智能冰箱果蔬识别中的应用[J].数据采集与处理,):205-212.
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
金华科技圈
百家号 最近更新:
简介: 科技共享,科技信息传递。
作者最新文章18957人阅读
【机器学习&深度学习】(14)
神经网络之激活函数(Activation Function)
本博客仅为作者记录笔记之用,不免有很多细节不对之处。
还望各位看官能够见谅,欢迎批评指正。
更多相关博客请猛戳:
如需转载,请附上本文链接:
日常 coding 中,我们会很自然的使用一些激活函数,比如:sigmoid、ReLU等等。不过好像忘了问自己一(n)件事:
为什么需要激活函数?
激活函数都有哪些?都长什么样?有哪些优缺点?
怎么选用激活函数?
本文正是基于这些问题展开的,欢迎批评指正!
(此图并没有什么卵用,纯属为了装x …)
Why use activation functions?
激活函数通常有如下一些性质:
非线性: 当激活函数是线性的时候,一个两层的神经网络就可以逼近基本上所有的函数了。但是,如果激活函数是恒等激活函数的时候(即f(x)=x),就不满足这个性质了,而且如果MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的。
可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。
f(x)≈x: 当激活函数满足这个性质的时候,如果参数的初始化是random的很小的值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要很用心的去设置初始值。
输出值的范围: 当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate.
这些性质,也正是我们使用激活函数的原因!
Activation Functions.
Sigmoid 是常用的非线性的激活函数,它的数学形式如下:
f(x)=11+e-x
正如前一节提到的,它能够把输入的连续实值“压缩”到0和1之间。
特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.
sigmoid 函数曾经被使用的很多,不过近年来,用它的人越来越少了。主要是因为它的一些 缺点:
Sigmoids saturate and kill gradients. (saturate 这个词怎么翻译?饱和?)sigmoid 有一个非常致命的缺点,当输入非常大或者非常小的时候(saturation),这些神经元的梯度是接近于0的,从图中可以看出梯度的趋势。所以,你需要尤其注意参数的初始值来尽量避免saturation的情况。如果你的初始值很大的话,大部分神经元可能都会处在saturation的状态而把gradient kill掉,这会导致网络变的很难学习。
Sigmoid 的 output 不是0均值. 这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。
产生的一个结果就是:如果数据进入神经元的时候是正的(e.g. x&0 elementwise in f=wTx+b),那么 w 计算出的梯度也会始终都是正的。
当然了,如果你是按batch去训练,那么那个batch可能得到不同的信号,所以这个问题还是可以缓解一下的。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的 kill gradients 问题相比还是要好很多的。
tanh 是上图中的右图,可以看出,tanh 跟sigmoid还是很像的,实际上,tanh 是sigmoid的变形:
tanh(x)=2sigmoid(2x)-1
与 sigmoid 不同的是,tanh 是0均值的。因此,实际应用中,tanh 会比 sigmoid 更好(毕竟去粗取精了嘛)。
近年来,ReLU 变的越来越受欢迎。它的数学表达式如下:
f(x)=max(0,x)
很显然,从图左可以看出,输入信号&0时,输出都是0,&0 的情况下,输出等于输入。w 是二维的情况下,使用ReLU之后的效果如下:
ReLU 的优点:
发现使用 ReLU 得到的SGD的收敛速度会比 sigmoid/tanh 快很多(看右图)。有人说这是因为它是linear,而且 non-saturating
相比于 sigmoid/tanh,ReLU 只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的运算。
ReLU 的缺点: 当然 ReLU 也有缺点,就是训练的时候很”脆弱”,很容易就”die”了. 什么意思呢?
举个例子:一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。
如果这个情况发生了,那么这个神经元的梯度就永远都会是0.
实际操作中,如果你的learning rate 很大,那么很有可能你网络中的40%的神经元都”dead”了。
当然,如果你设置了一个合适的较小的learning rate,这个问题发生的情况其实也不会太频繁。
Leaky-ReLU、P-ReLU、R-ReLU
Leaky ReLUs: 就是用来解决这个 “dying ReLU” 的问题的。与 ReLU 不同的是:
f(x)=αx,(x&0)
f(x)=x,(x&=0)
这里的 α 是一个很小的常数。这样,即修正了数据分布,又保留了一些负轴的值,使得负轴信息不会全部丢失。
关于Leaky ReLU 的效果,众说纷纭,没有清晰的定论。有些人做了实验发现 Leaky ReLU 表现的很好;有些实验则证明并不是这样。
Parametric ReLU: 对于 Leaky ReLU 中的α,通常都是通过先验知识人工赋值的。
然而可以观察到,损失函数对α的导数我们是可以求得的,可不可以将它作为一个参数进行训练呢?
Kaiming He的论文《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》指出,不仅可以训练,而且效果更好。
公式非常简单,反向传播至未激活前的神经元的公式就不写了,很容易就能得到。对α的导数如下:
δyiδα=0,(ifyi&0),else=yi
原文说使用了Parametric ReLU后,最终效果比不用提高了1.03%.
Randomized ReLU:
Randomized Leaky ReLU 是 leaky ReLU 的random 版本 (α 是random的).
它首次试在 kaggle 的NDSB 比赛中被提出的。
核心思想就是,在训练过程中,α 是从一个高斯分布 U(l,u) 中 随机出来的,然后再测试过程中进行修正(有点像dropout的用法)。
数学表示如下:
在测试阶段,把训练过程中所有的 αij 取个平均值。NDSB 冠军的 α 是从 U(3,8) 中随机出来的。那么,在测试阶段,激活函数就是就是:
yij=xijl+u2
看看 cifar-100 中的实验结果:
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 和 Leaky ReLU 都是它的一个变形(比如,w1,b1=0 的时候,就是 ReLU).
Maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。作者从数学的角度上也证明了这个结论,即只需2个maxout节点就可以拟合任意的凸函数了(相减),前提是”隐隐含层”节点的个数可以任意多.
所以,Maxout 具有 ReLU 的优点(如:计算简单,不会 saturation),同时又没有 ReLU 的一些缺点 (如:容易 go die)。不过呢,还是有一些缺点的嘛:就是把参数double了。
还有其他一些激活函数,请看下表:
How to choose a activation function?
怎么选择激活函数呢?
我觉得这种问题不可能有定论的吧,只能说是个人建议。
如果你使用 ReLU,那么一定要小心设置 learning rate,而且要注意不要让你的网络出现很多 “dead” 神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU、PReLU 或者 Maxout.
友情提醒:最好不要用 sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout.
还有,通常来说,很少会把各种激活函数串起来在一个网络中使用的。
Please feel free to contract me if you have any questions.
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:273137次
积分:3130
积分:3130
排名:第10847名
原创:51篇
评论:167条
北京航空航天大学 - 研三
关注:计算机视觉、机器学习等
知乎专栏:
邮箱:cyh@
(3)(2)(2)(2)(4)(2)(4)(2)(3)(1)(1)(2)(1)(3)(5)(7)(3)(8)用户名:stock0991
文章数:330
访问量:95548
注册日期:
阅读量:1297
阅读量:3317
阅读量:443492
阅读量:1129345
51CTO推荐博文
& & & ICML 2016 的文章[Noisy Activation Functions]中给出了激活函数的定义:激活函数是映射 h:R→R,且几乎处处可导。& &神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数。假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。加入(非线性)激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。1、Sigmoid函数& & &Sigmoid 是使用范围最广的一类激活函数,具有指数函数形状 。正式定义为:代码:x=-10:0.001:10;&
%sigmoid和它的导数
sigmoid=1./(1+exp(-x));
sigmoidDer=exp(-x)./((1+exp(-x)).^2);
plot(x,sigmoid,'r',x,sigmoidDer,'b--');
axis([-10&10&-1&1]);
title('Sigmoid函数(实线)及其导数(虚线)');
legend('Sigmoid原函数','Sigmid导数');
set(gcf,'NumberTitle','off');
set(gcf,'Name','Sigmoid函数(实线)及其导数(虚线)');输出:& &可见,sigmoid 在定义域内处处可导,且两侧导数逐渐趋近于0,即:& & Bengio 教授等将具有这类性质的激活函数定义为软饱和激活函数。与极限的定义类似,饱和也分为左侧软饱和与右侧软饱和:左侧软饱和:右侧软饱和:& & 与软饱和相对的是硬饱和激活函数,即:f'(x)=0,当 |x| & c,其中 c 为常数。& & 同理,硬饱和也分为左侧硬饱和和右侧硬饱和。常见的ReLU 就是一类左侧硬饱和激活函数。Sigmoid 的软饱和性,使得深度神经网络在二三十年里一直难以有效的训练,是阻碍神经网络发展的重要原因。具体来说,由于在后向传递过程中,sigmoid向下传导的梯度包含了一个f'(x) 因子(sigmoid关于输入的导数),因此一旦输入落入饱和区,f'(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象[Understanding the difficulty of training deep feedforward neural networks]。梯度消失问题至今仍然存在,但被新的优化方法有效缓解了,例如DBN中的分层预训练,Batch Normalization的逐层归一化,Xavier和MSRA权重初始化等代表性技术。& & Sigmoid 的饱和性虽然会导致梯度消失,但也有其有利的一面。例如它在物理意义上最为接近生物神经元。(0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数2、tanh函数代码:x=-10:0.001:10;
tanh=(exp(x)-exp(-x))./(exp(x)+exp(-x));
tanhDer=1-tanh.^2;
plot(x,tanh,'r',x,tanhDer,'b--');
title('tanh函数(实线)及其导数(虚线)');
legend('tanh原函数','tanh导数');
set(gcf,'NumberTitle','off');
set(gcf,'Name','tanh函数(实线)及其导数(虚线)');输出:& & tanh也具有软饱和性。[Backpropagation applied to handwritten zip code recognition]中提到tanh网络的收敛速度要比sigmoid快。因为tanh的输出均值比sigmoid更接近0,SGD会更接近 natural gradient[Natural gradient works efficiently in learning](一种二次优化技术),从而降低所需的迭代次数。3、Softsign函数代码:x=-10:0.001:10;
softsign=x./(1+abs(x));
%分段函数的表示方法如下
%y=sqrt(x).*(x&=0&x&4)+2*(x&=4&x&6)+(5-x/2).*(x&=6&x&8)+1*(x&=8);
softsignDer=(1./(1+x).^2).*(x&=0)+(1./(1-x).^2).*(x&0);
plot(x,softsign,'r',x,softsignDer,'b--');
axis([-10&10&-1&1]);%加在第一个plot后面
title('softsign函数&x/(1+|x|)(实线)及其导数(虚线)');
legend('softsign原函数','softsign导数');
set(gcf,'NumberTitle','off');
set(gcf,'Name','softsign函数&x/(1+|x|)(实线)及其导数(虚线)');输出:4、RELU定义为:代码:x=-10:0.001:10;
relu=max(0,x);
%分段函数的表示方法如下
%y=sqrt(x).*(x&=0&x&4)+2*(x&=4&x&6)+(5-x/2).*(x&=6&x&8)+1*(x&=8);
reluDer=0.*(x&0)+1.*(x&=0);
plot(x,relu,'r',x,reluDer,'b--');
title('Relu函数max(0,x)(实线)及其导数0,1(虚线)');
legend('Relu原函数','Relu导数');
set(gcf,'NumberTitle','off');
set(gcf,'Name','Relu函数(实线)及其导数(虚线)');输出:& & &可见,ReLU 在x&0 时硬饱和。由于 x&0时导数为 1,所以,ReLU 能够在x&0时保持梯度不衰减,从而缓解梯度消失问题。但随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为“神经元死亡”。& & &ReLU还经常被“诟病”的一个问题是输出具有偏移现象[7],即输出均值恒大于零。偏移现象和 神经元死亡会共同影响网络的收敛性。& & 还有其他一些激活函数,如下表:
本文出自 “” 博客,谢绝转载!
了这篇文章
类别:┆阅读(0)┆评论(0)

我要回帖

更多关于 神经网络激活函数选择 的文章

 

随机推荐