发布时间:2018-01-12 16:16:17 文章来源:互联网
微博 微信 QQ空间
    不一致。

    设想一个最简单粗暴的激活函数,设定一个阈值,超过阈值就输出1,否则输出0.
 
    好吧,这么简单粗暴的激活函数其实有一个专门的名字,叫阶跃函数。这名字是不是很形象?
 
    阶跃函数
 
    从图像上就可以看出,显然这个函数的表达能力是极差的。两条水平线,意味着神经网络的训练,也就是权重的调整,会长时间处于停滞的状态,也就是说一定时期内,无论怎么调权重,输出都是0,直到达到了阈值,然后输出一下子变1了,然后卡在那里不动了。
 
    所以,为了增强激活函数的表达力,我们需要一个随着权重调整输出会变动的激活函数。那我们就得到了线性函数。
 
    线性函数
 
    线性函数比阶跃函数好多了,至少权重调整会导致输出变动了。但线性函数的表达力还是很差:
 
    线性函数的导数是常数。而现在神经网络的训练都流行使用梯度下降。碰到线性函数这样的常数梯度,马上就歇菜了。
 
    线性函数的组合仍然是线性函数!现在都流行深度学习,所谓的深度学习,简单来说就是用具有很多层的网络来学习(注意,这是一个不精确的定义,姑且先这么理解)。那既然线性函数的组合仍然是线性函数,那不管网络有多深,最后都等效于单层网络,该网络的激活函数是原网络很多层的激活函数的线性组合。也就是说,碰到线性函数,深度学习歇菜了。
 
    我的天!现在最流行的梯度下降、深度学习都用不上,你说这线性激活函数还有什么前途可言!
 
    那怎么办呢?很简单,我们把线性函数搞成非线性的不就行了!非线性的话,导数就不会是常数了,这样梯度下降可以用了。然后,网络层也可以堆得很深了。问题一下子就解决了。
 
    怎么弄成非线性呢?
 
    把线性函数折一下就可以。
 
    ReLU

另一视角

换一换