人工神经网络之激活函数 -RELU函数

来源:互联网 发布:德国哪个公司办网络好 编辑:程序博客网 时间:2024/05/21 16:49

一句话概括:不用simgoid和tanh作为激活函数,而用ReLU作为激活函数的原因是:加速收敛。

因为sigmoid和tanh都是饱和(saturating)的。何为饱和?个人理解是把这两者的函数曲线和导数曲线plot出来就知道了:他们的导数都是倒过来的碗状,也就是,越接近目标,对应的导数越小。而ReLu的导数对于大于0的部分恒为1。于是ReLU确实可以在BP的时候能够将梯度很好地传到较前面的网络。

ReLU(线性纠正函数)取代sigmoid函数去激活神经元。


定义为:

技术分享

代码:

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);figure;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],即输出均值恒大于零。偏移现象和 神经元死亡会共同影响网络的收敛性。

原创粉丝点击