1. 程式人生 > >ReLU啟用函式的缺點

ReLU啟用函式的缺點

訓練的時候很”脆弱”,很容易就”die”了,訓練過程該函式不適應較大梯度輸入,因為在引數更新以後,ReLU的神經元不會再有啟用的功能,導致梯度永遠都是零。
例如,一個非常大的梯度流過一個 ReLU 神經元,更新過引數之後,這個神經元再也不會對任何資料有啟用現象了,那麼這個神經元的梯度就永遠都會是 0.
如果 learning rate 很大,那麼很有可能網路中的 40% 的神經元都”dead”了。

原因:

假設有一個神經網路的輸入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)

導數如下

Δxr(x)=1(x>0)

所以可以看出,如果在前向傳播的過程中ReLU is close,那麼反向傳播時,ReLU也是close的。

參考:

https://www.zhihu.com/question/59031444

https://www.jianshu.com/p/22d9720dbf1a

https://blog.csdn.net/disiwei1012/article/details/79204243

原文地址:https://www.cnblogs.com/Time-LCJ/p/9235711.html