iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0
AI & Data

30天搞懂機器學習是否搞錯了什麼系列 第 17

【Day 17】深度學習(Deep Learning)--- Tip(二)--- ReLU

  • 分享至 

  • xImage
  •  

Vanishing Gradient Problem

昨天我們提到當你的Network很深的時候,設定同樣的Learning rate,就會產生輸入還是幾乎隨機的時候,輸出已經收斂了,就會以為是找到Local minimum。而我們可以透過改Activation function來解決這個問題。

ReLU(Rectified Linear Unit)

這個Activation function的輸入 https://chart.googleapis.com/chart?cht=tx&chl=z 如果大於 0,輸出 https://chart.googleapis.com/chart?cht=tx&chl=a 就會等於輸入,而如果輸入小於 0,輸出等於 0。而為什麼要選擇這個Activation function呢?

  1. 跟Sigmoid function比起來運算更快。
  2. 有生命上的理由,與生物上的觀察結合。
  3. 可以看成是無窮多的Sigmoid function疊加的結果。
  4. 可以解決Vanishing Gradient的問題。

剛剛我們提到ReLU作用在兩個不同的區域,輸入大於 0 和輸入小於 0,也就是說輸出只有兩種情況一個是輸出等於輸入,也就是Activation function是Linear的,另一個是輸出等於 0。

而輸出是 0 的那些Neuron對整個Network根本沒有影響,也不會影響最後輸出的值,所以其實可以直接把它從Network裡面拿掉。這樣剩下來的Neuron都是Linear的時候,整個Network就會等於是一個Linear Network,就不會有Gradient越來越小的問題了。

但要注意的是,整個Network整體來說還是Non-linear的,如果對輸入做小小的改變,不改變Neuron運算區域,它是一個Linear function,但是如果對輸入做比較大的改變,而改變了Neuron的運算區域,它就變成是Non-linear的。
還有另外一個問題是,我們之前說在做Gradient Descent的時候,你需要對Loss function做微分,也就是說要可以對Nerual Network做微分,但ReLU不可微。而實際上你可以當作是,在輸入大於 0 的區域的時候,Gradient的微分就是 1,而在輸入小於 0 的時候,Gradient的微分就是 0。

ReLU - variant

Leaky ReLU

有些人會覺得說原本的ReLU輸入小於 0,輸出會是 0,這樣你就沒有辦法更新你的參數了,所以應該要讓在輸入小於 0 的時候,輸出還是有一點點的值,就是在輸入小於 0 的時候,輸出是輸入乘上 0.01,這個叫做Leaky ReLU。

Parametric ReLU

有些人又會覺得說為什麼是乘上 0.01 而不是乘上 0.07, 0.08,所以他們又提出了Parametric ReLU,是在輸入小於 0 的時候,輸出等於輸入乘上一個Network的參數 https://chart.googleapis.com/chart?cht=tx&chl=%5Calpha,可以透過訓練資料學出來,甚至每一個Neuron都可以有不同的 https://chart.googleapis.com/chart?cht=tx&chl=%5Calpha 值。


參考資料

李宏毅老師 - ML Lecture 9-1


上一篇
【Day 16】深度學習(Deep Learning)--- Tip(一)
下一篇
【Day 18】深度學習(Deep Learning)--- Tip(三)
系列文
30天搞懂機器學習是否搞錯了什麼30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言