'Dead ReLU Problem' 产生的原因
2018-01-30 11:53
302 查看
原文地址:https://www.quora.com/What-is-the-dying-ReLU-problem-in-neural-networks
译者话:看了一些激活函数优缺点的中文博客,很少有人去解释’Dead ReLU’现象,无奈只能去国外的论坛找答案了,于是就有这篇翻译,感觉挺有道理。
假设有一个神经网络的输入W遵循某种分布,对于一组固定的参数(样本),w的分布也就是ReLU的输入的分布。假设ReLU输入是一个低方差中心在+0.1的高斯分布。
在这个场景下:
大多数ReLU的输入是正数,因此
大多数输入经过ReLU函数能得到一个正值(ReLU is open),因此
大多数输入能够反向传播通过ReLU得到一个梯度,因此
ReLU的输入(w)一般都能得到更新通过随机反向传播(SGD)
现在,假设在随机反向传播的过程中,有一个巨大的梯度经过ReLU,由于ReLU是打开的,将会有一个巨大的梯度传给输入(w)。这会引起输入w巨大的变化,也就是说输入w的分布会发生变化,假设输入w的分布现在变成了一个低方差的,中心在-0.1高斯分布。
在这个场景下:
大多数ReLU的输入是负数,因此
大多数输入经过ReLU函数能得到一个0(ReLU is close),因此
大多数输入不能反向传播通过ReLU得到一个梯度,因此
ReLU的输入w一般都得不到更新通过随机反向传播(SGD)
发生了什么?只是ReLU函数的输入的分布函数发生了很小的改变(-0.2的改变),导致了ReLU函数行为质的改变。我们越过了0这个边界,ReLU函数几乎永久的关闭了。更重要的是ReLU函数一旦关闭,参数w就得不到更新,这就是所谓的‘dying ReLU’。
(译者:下面有一段关于神经元死亡后能够复活的讨论,未翻译)
从数学上说,这是因为ReLU的数学公式导致的
r(x)=max(x,0)r(x)=max(x,0)
导数如下
Δxr(x)=1(x>0)Δxr(x)=1(x>0)
所以可以看出,如果在前向传播的过程中ReLU is close,那么反向传播时,ReLU也是close的。
我不确定ReLU dying在实际中是否经常发生,但是显然值得关注。希望你能明白为什么大的学习率可能是这里的罪魁祸首。在反向传播的过程中,大的梯度更新,可能会导致参数W的分布小于0。
译者话:看了一些激活函数优缺点的中文博客,很少有人去解释’Dead ReLU’现象,无奈只能去国外的论坛找答案了,于是就有这篇翻译,感觉挺有道理。
假设有一个神经网络的输入W遵循某种分布,对于一组固定的参数(样本),w的分布也就是ReLU的输入的分布。假设ReLU输入是一个低方差中心在+0.1的高斯分布。
在这个场景下:
大多数ReLU的输入是正数,因此
大多数输入经过ReLU函数能得到一个正值(ReLU is open),因此
大多数输入能够反向传播通过ReLU得到一个梯度,因此
ReLU的输入(w)一般都能得到更新通过随机反向传播(SGD)
现在,假设在随机反向传播的过程中,有一个巨大的梯度经过ReLU,由于ReLU是打开的,将会有一个巨大的梯度传给输入(w)。这会引起输入w巨大的变化,也就是说输入w的分布会发生变化,假设输入w的分布现在变成了一个低方差的,中心在-0.1高斯分布。
在这个场景下:
大多数ReLU的输入是负数,因此
大多数输入经过ReLU函数能得到一个0(ReLU is close),因此
大多数输入不能反向传播通过ReLU得到一个梯度,因此
ReLU的输入w一般都得不到更新通过随机反向传播(SGD)
发生了什么?只是ReLU函数的输入的分布函数发生了很小的改变(-0.2的改变),导致了ReLU函数行为质的改变。我们越过了0这个边界,ReLU函数几乎永久的关闭了。更重要的是ReLU函数一旦关闭,参数w就得不到更新,这就是所谓的‘dying ReLU’。
(译者:下面有一段关于神经元死亡后能够复活的讨论,未翻译)
从数学上说,这是因为ReLU的数学公式导致的
r(x)=max(x,0)r(x)=max(x,0)
导数如下
Δxr(x)=1(x>0)Δxr(x)=1(x>0)
所以可以看出,如果在前向传播的过程中ReLU is close,那么反向传播时,ReLU也是close的。
我不确定ReLU dying在实际中是否经常发生,但是显然值得关注。希望你能明白为什么大的学习率可能是这里的罪魁祸首。在反向传播的过程中,大的梯度更新,可能会导致参数W的分布小于0。
相关文章推荐
- Linux环境下段错误的产生原因及调试方法小结
- Quatus联合modelsim仿真无法产生波形原因分析
- java8 list 转化成map,java.lang.IllegalStateException异常产生的原因
- SVN各种错误提示产生原因及处理方法大全(转)
- “无法解析的外部符号”产生的几种原因
- Linux系统内存错误产生的原因及调试方法(段错误|core dumped)
- Linux系统内存错误产生的原因及调试方法
- Linux环境下段错误的产生原因及调试方法小结
- Linux环境下段错误的产生原因及调试方法小结
- android ANR产生原因和解决办法
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
- 劣质代码的产生原因(5)英语能力不足
- java 死锁产生原因及解锁
- Linux下的段错误(Segmentation fault)产生的原因及调试方法(经典)
- 死锁产生的原因及四个必要条件
- 多线程-线程安全问题的产生原因分析以及同步代码块的方式解决线程安全问题
- 全面疯狂行情产生的原因与基本特点
- MySQL+PHP产生乱码的原因及解决方法
- Linux环境下段错误的产生原因及调试方法小结
- ConcurrentModificationExeception :并发修改异常产生原因及解决方法