最近在研究激活函数,有一些问题与思考在这里写下来,如果有不对的欢迎各位大佬指正。

在研究激活函数的时候有一个问题困扰我很久,那就是

Q:既然ReLU激活函数将负输入直接置为0,那是不是意味着这个神经元被宣判死刑了?那我还初始化这么多干嘛呢?

A:是,也不是(黄姥爷.gif)。

我们知道,正向传播过程,需要激活函数对ax+b进行激活,这时候如果输入的为负数,那么最终的结果就0,而反向传播过程中,依然需要获取激活函数在ax+b上的偏导,因此对于一个输入,如果正向传播在负半区(既0),也意味着反向传播也在负半区(即0),那这个神经元确实是“死”了。

但是训练过程中往往不是一个输入,也许另一个输入ax+b就不为负数,这个神经元就“复活”了,这也给整个网络带来了一些不同输入下的鲁棒性。

详见下图(重点部分已加粗):

Q:那怎样才算宣判一个神经元的真正死亡呢?

A:如果连接一个神经元的所有w都是负的(点也是够背的),同时该神经元前一层的输入均为正数(比如前一层也是用了ReLU激活,其实目的就是保证y=wx+b为负数[输入的x均为非负,w为负的,在不考虑b的情况下,y永远为负数]),那么这个神经元将永久死亡,不再会复活。

因为更新该神经元的任何一条路径都被ReLU堵死。

可以看出条件还算比较苛刻的。

Q:为什么各种激活函数都喜欢对负数下手?ReLU的各种变种都喜欢给负数0梯度或者极低的梯度?

A:因为我没见识,这个问题本身就是错误的,如果ReLU一开始是大于0为0,小于0为x,那么这个问题就会换一个方向存在。

只不过是一个习惯,负数->正数,所以负数就是被选中的孩子。

依然可以看到很多激活函数并没有抛弃负数。(我记得是有一个激活函数和ReLU很像,但是正负区间都有x与1,通过mod 2来判断不同的函数,但是名字没找到,至少确实不是“抛弃”了负值)


0 条评论

发表回复

Avatar placeholder

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