AI人工智慧 #2|神經網路(Neural Network)與激活函數(Activation Function)

神經網路圖

資料來源:https://www.tibco.com

神經網路的三層

再來複習一下神經網路的大致結構,分別是:

輸入層(Input Layer):接受非線性(Non-Linearity)輸入訊息,輸入的訊息稱為輸入向量,也可以稱為自變量(Independent Variable)。

隱藏層(Hidden Layer):輸入層和輸出層中間的一層(也可以是多層),隱藏層的神經元(Neuron)負責計算處理資料,隱藏層的數量越多,計算的複雜度和時間也會隨之增加。

輸出層(Output Layer):神經網路的最後一層,輸出層的神經元數量取決於會有哪些輸出結果。

激活函數(Activation Function)

激活函數在一層神經元輸出和下一層神經元輸入之間,每個神經元輸出都會經過激活函數,激活函數會將線性(Linearity)轉換成非線性(Non-Linearity)。

為什麼需要將線性轉換成非線性?

簡單來講,如果使用線性函數,無論神經網路有多少層(Layer),都能用一層取代,也就是說非線性是為了讓神經網路可以有更複雜的計算。

激活函數Sigmoid, ReLU, Leaky ReLU

Sigmoid

中文稱「S形函數」,是將輸入數值映射到0到1之間,可以把下圖的橫線稱作x,直線稱作y,Sigmoid是將橫線x輸入值,轉換成直線y輸出值0-1之間。y輸出值趨近於0時,線條的斜率會變得更小更平坦,也就是梯度變小導致梯度消失(Vanishing Gradient)的問題發生,以下提到的ReLU激活函數,就能解決這個問題。

Sigmoid公式 Sigmoid圖形

資料來源:https://wikimedia.org

ReLU

全名為Rectified Linear Unit,中文稱「線性整流函數」,計算方式簡單所以速度比Sigmoid,還能避免梯度消失和梯度爆炸(Exploding Gradients)的問題。

ReLU公式

資料來源:https://wikimedia.org


f(x)輸入值如果大於0,則輸出x,x = 1,f(x) = (0,1) = 1
f(x)輸入值如果小於等於0,則輸出0,x = -1,f(x) = (0,-1) = 0 ReLU圖形

資料來源:https://wikimedia.org

Leaky ReLU

中文稱「帶泄露線性整流」,是ReLU的進化版,但不代表說能取代ReLU。如果輸入為負數,則輸出為0,這導致神經元不會激活,Leaky ReLU會以很小的值(如0.01)來將負數的x輸入值,轉換成y輸出值。

Leaky ReLU公式

資料來源:https://wikimedia.org

Leaky ReLU圖形

資料來源:http://kwassistfile.cupoy.com

重點整理

Sigmoid

優點:將輸出標準化,容易理解

缺點:正負輸入值如果非常廣,輸出的梯度會趨近於0時,導致梯度消失的問題

ReLU

優點:計算速度比Sigmoid快,解決了梯度消失的問題

缺點:不適用輸入值為負數,神經元死亡的問題,當輸入接近零或負數時,梯度會變0,導致無法反向傳播(Backpropagation)。

Leaky ReLU

優點:可應用於輸入值為負數,解決了ReLU梯度死亡的問題

缺點:正負結果不一致(正負公式不同),需要選擇適當的負數斜率才能達到最佳計算效果

還有非常多種激活函數,這次就只講Sigmoid, ReLU, Leaky ReLU,目前市面上主流的激活函數是ReLU,當然還是要根據用途選擇適合的激活函數。