一、RELU激活函数
relu函数:
r
(
x
)
=
max
(
x
,
0
)
r(x) = \max(x, 0)
r(x)=max(x,0)
梯度:
∇
x
r
(
x
)
=
1
{
x
>
0
}
\nabla_xr(x) = \Bbb{1}\{x > 0\}
∇xr(x)=1{x>0}
二、RELU神经元坏死场景
假设一个神经网络的输入是X,X服从某个分布。R是一个激活函数为RELU的神经元。对于任意的参数更新,X的分布表示神经元R的输入数据的分布。假设神经元R开始输入是一个中心为+0.1的低方差高斯分布。
此时
- R的大多数输入都是正数;
- R中RULE函数被激活;
- 梯度通过R向后流动;
- 由于SGD后向传播,R的输入更新
现在假设一次backprop中一个很大的梯度流向R。R被激活,将这个非常大的梯度向后传递为R的输入。这导致计算R的输入的函数发生很大的改变。这表示R的输入数据的分布发生改变 ——现在是中心为-0.1的低方差高斯分布。
此时:
- R的大多数输入为负;
- R不被激活;
- 梯度无法从R向后传播;
- R的输入不通过SGD backprop更新
R的输入的分布发生了一个微小的变化(跨越了0界),导致R的行为发生本质的变化。这是神经元R将总是不能被激活。
三、重激活
神经元R在某次前向传播时没有激活,SGD backprop时此神经元的参数
W
W
W没有更新,但是神经元的前一层的输出(即R所在层的输入在更新),下一次迭代时神经元R可能重新被激活。
神经元R中激活函数RELU的输入
W
X
+
b
WX+b
WX+b,其中,
W
W
W在神经元坏死时不更新,但
X
X
X一直在更新。当某次跟新后
W
X
+
b
>
0
WX+b>0
WX+b>0时,神经元R被激活。
但是,如果坏死的神经元在第一个隐藏层,那么这个神经元100%不可能被重新激活。