Relu激活函数导致 [ 神经元死亡 ] 的原因
relu函数和sigmoid函数相比,虽然能够避免反向传播过程中的梯度消失、屏蔽负值、防止梯度饱和;
但是relu也有自身的缺陷,当学习率过大时会出现某些神经元永久死亡的现象,导致网络后期无法正常更新
原因分析:
上式是神经网络权重更新的公式,其中η表示学习吕,Δw表示通过求导得到的当前参数的梯度(一般为正值)当学习率过大时,会导致 ηΔw 这一项很大,当 ηΔw 大于w时,更新后的w’就会变为负值;
当权重参数变为负值时,输入网络的正值会和权重相乘后也会变为负值,负值通过relu后就会输出0;如果w在后期有机会被更新为正值也不会出现大问题,但是当relu函数输出值为0时,relu的导数也为0,因此会导致后边Δw一直为0,进而导致w一直不会被更新,因此会导致这个神经元永久性死亡(一直输出0)
解决方法:
1.减小学习率
2.使用ELU、PReLU、LeakyRelu等激活函数代替 Relu
ELU、PReLU、LeakyRelu都是让Relu在自变量小于0时函数值也是一个小于0的值,从而让w小于令0在后期有机会更新为正值。
参考文章: