資料整理: jserv
ReLU 全名為 Rectified Linear Unit,中譯為「修正線性單元」,是種類神經網路中激勵函數 (activation function,也可翻譯為活化函數)。所謂的激勵函數,用意是增加類神經網路裡頭的非線性特徵。早期尚未發展出深層網路時,時常被拿來做資料預測的演算法是線性回歸法 (linear regression),正如字面上的意義,線性回歸法只能用來預測呈線性分佈的資料,非線性的關係就難以用這樣的函數來描述。但現實生活中大部分的現象都是非線性,例如美國人的收入與年齡之間的關係呈曲線分佈,這樣要給定一個年紀的人,去預測他的收入,就顯然難以利用線性回歸。因此,為解決更複雜的問題,人們就發展出了帶有非線性特徵的 Logistic Regression,開始可解決簡單的二分法問題。
然而一個 Logistic Regression 的能力還是有限,即便是二分法都有無法正確分類的狀況,因此為了得到更強大的函數,數學家嘗試串接多個 Logistic Regression,形成初步的類神經網路。
ReLU 定義如下:
ReLU 計算量小,只要判斷輸入是否大於 0
,沒有指數運算。
思路:由於 ReLU 函數要判斷輸入數值的正負,但浮點數的操作成本較高,於是我們可引入 union,讓 float 和 int (有號整數) 共用同一段記憶體空間 (針對 LP64 data model):
首先我們回顧有號整數的表達方式,為了方便圖解,下列圖示以 8 位元的整數 (即對應到 C 語言的 int8_t
,定義於 <stdint.h>
標頭檔)
sign bit 為
0
時,表示該數值為「正」,數值為 (最右邊的位元) + (右邊數來第二個位元) + (右邊數來第三個位元) = 4 (十進位)
sign bit 為
1
時,表示該數值為「負」,右側 7 個位元表示數值 ,這編碼採用二補數
二補數看似不直觀,但可縮減運算的成本。例如十進位的 和 相加,透過二補數運作如下:
從上圖右方起逐位元進行加法運算,連帶 sign bit 也可運算,超過 8 位元能表達的位元 (即上圖左下的 1
) 就直接捨棄,這樣就讓電路設計變得單純。
另外,在二補數系統中,對有號數的位移 (shift) 概念上也跟無號整數相同,但為了確保最終結果的正負號一致,需要額外的運算規則:
當你將有號整數右移,需要在左側填補一致的 sign bit
知曉二補數系統及有號整數右移的規則後,我們考慮 ~(out.i >> 31)
這個表示方式,其實相當於取參數 x
的 sign bit,分為以下兩種狀況:
~(out.i >> 31)
得到運算結果是 000...00
(32-bits)~(out.i >> 31)
得到運算結果是 111...11
(32-bits)再將 x
和上述 ~(out.i >> 31)
進行 AND 運算,即為 ReLU 函數的定義。
程式碼列表如下:
Sigmoid function 作為 Logistic Regression 的激勵函數,是這個算式當中非線性特徵的由來。由於 Logistic Regression 的目的是做分類,其輸出是一個機率值,故其值域會介於 之間。在反向傳播演算法 (Backpropagation) 發明後,人們發現在計算神經網路中每一層結點的參數時,由於 Sigmoid 會把 的輸入映射到 之間,會造成在反向傳播參數時每一層的數字愈算愈小,到最後幾層的數字全都是 0 的梯度消失 (Gradient Vanishing) 現象。後來出現的 Hyperbolic tangent function (tanh)(長高的 Sigmoid,其值域在 之間)也有類似的問題。
因此,在 Yoshua Bengio 等人的論文〈Deep Sparse Rectifier Neural Networks〉(第 318 頁),提到以 ReLU 取代其它激勵函數的好處:
The rectifier activation function allows a network to easily obtain sparse representations.
…
Apart from being more biologically plausible, sparsity also leads to mathematical advantages (see previous section).
…
Computations are also cheaper: there is no need for computing the exponential function in activations, and sparsity can be exploited.
統整論文的描述:
在神經生理方面,當刺激未達一定的強度時,神經元不會興奮,因此不會產生神經衝動。如果超過某個強度,才會引起神經衝動。ReLU 較好捕捉這個生物神經元的特徵。
因此, ReLU 成為現代訓練類神經網路時,常用的激勵函數之一。
延伸閱讀: