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

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

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


定义为:

人工神经网络之**函数 -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);
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函数

     可见,ReLU 在x<0 时硬饱和。由于 x>0时导数为 1,所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。但随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为“神经元死亡”。

     ReLU还经常被“诟病”的一个问题是输出具有偏移现象[7],即输出均值恒大于零。偏移现象和 神经元死亡会共同影响网络的收敛性。

相关文章:

  • 2021-06-18
  • 2021-10-15
  • 2021-07-01
  • 2021-07-10
  • 2021-12-14
  • 2022-01-02
  • 2021-10-21
猜你喜欢
  • 2021-12-27
  • 2021-04-20
  • 2021-07-21
  • 2021-08-19
  • 2022-12-23
  • 2021-12-04
相关资源
相似解决方案