如果你的网络在训练时经过一段时间后,发现loss值依然很大,而且持续不变,那么你可能碰到了Dead Relu.

什么是Dead Relu

Dead Relu就是Relu失效,我们知道Relu是max(0,input),如果input小于0,那么它的输出就永远是0了。这时不论你怎么训练,每次得到的结果都一样。因为正向传播已经失效。

为什么发生

刚开始的时候loss可以下降一部分,但是后来为什么不行了呢?
因为刚开始你的weight值是一个小的整数,但是梯度是一个正数,在经过几次训练后,weight减去学习率乘以梯度,就变成了负数。

如何确诊

表象是loss值停在一个高位持续不降低。
本质是当你的一个Relu函数输入向量中绝大部分都已经是小于0的值的时候,就会发生Dead Relu。你可以通过打印tensor或者debug来确认。

如何自救

可以用leaky relu,因为leaky relu可以在输入小于0的时候依旧可以引起梯度的改变,得以训练可以继续。
Relu:

Leaky_Relu:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: