趣谈深度学习核心----激活函数
作者:詹晓辉
编辑:王抒伟
当你在苦扒图像处理方法得时候
他在用深度学习
当你在干瞪切片像素得时候
他在用深度学习
当你在愁思小偷是谁得时候
他在用深度学习
当你拥堵在北二环得时候
。。。
现在来扒扒深度学习网络心脏
激活函数
深度学习在训练的过程中常常要用到激活函数
“说,目的是啥?”
“目的是为了让多层网络之间进行非线性变换”
“如果不用呢?”
“不用的话,多层的线性网络的表达能力与单层网络的表达能力是一样的,要不就没意思了”
TA 说:
在使用tensorflow的过程中我发现它提供了以下几个函数: sigmoid、tanh、elu、relu等。
“还等啥啊,赶紧给我讲”
听老衲给施主絮絮叨叨、
咱竹板这么一打啊,别的咱不夸,夸一夸激活函数呐!
函数一: sigmoid
分析:
从图像中我们可以看出当我们输入的数据非常小或非常大时它的值是0或者1那么它的梯度很小趋近于0。
在反向传播中,这个局部梯度会与整个代价函数关于该单元输出的梯度相乘,结果会接近为 0。此时相当于没有信号传到神经元,权重不会更新。
还有一个问题是:sigmoid的值总是为正值。
如果输入都是正值那么梯度总为正或负这会导致训练的时候呈现Z字形梯度下降。
双曲正切tanh读作/tæntʃ/
有着对比精神,可以看到tanh函数其实是sigmoid函数的变形
同样的tanh函数也存在饱和的问题,不过tanh函数的值经过原点
并且函数值在(-1,1)之间的不同于sigmoid值总是为正值或负值
Relu(Rectified Linear Units)读 /'relju/
f(u) = max ( 0, u )
可以看到反向传播的时候梯度要么是0要么不变,所以梯度衰减很小,经过很多层也不会减弱.收敛的速度会比tanh和sigmoid快。
不过有个缺点是当x<0时 f '(x)=0 (z) (这里是导函数为零)所有负梯度到这都变成0,且这个神经元有可能再也不被激活,神经元的梯度永远都是0.
函数四:Elu
Elu函数是sigmoid和relu的结合体。
当x<0时,跟relu不一样的函数值趋近于-1,使elu能够对输入具有更强的鲁棒性
当下x>0时线性部分能够缓解梯度消失,Elu的输出均值是接近于0的,因此它的收敛会更快。
本文函数都是深度学习常用的激活函数当然还有其它的,大家可以维基百科!大家有其他看法,或者这里有漏洞都可以在群中探讨,欢迎留言或赞赏。
扫描燕哥微信号,
拉你进机器学习大牛群。
福利满满,名额已不多…
群里目前包括:
清华张长水教授,
清华顾险峰教授,
北大黄铁军教授,
西安电子科技大学焦李成教授,
新加坡南洋理工大学黄广斌教授,
北交李清勇教授
等等……