概覽激活函數-深度學習

原文鏈接:https://www.learnopencv.com/understanding-activation-functions-in-deep-learning/

一、什麼是激活函數?

典型神經元的物理結構包括細胞體(cell body)、向其他神經元發送信號的軸突(axon)和接收其他神經元發送的信號或信息的樹突(dendrites)。
在這裏插入圖片描述
上圖中,紅色圓圈代表兩個神經元交流的區域。神經元通過樹突接收來自其他神經元的信號。樹突的權重叫作突觸權值(synaptic weight),將和接收的信號相乘。來自樹突的信號在細胞體內不斷累積,如果信號強度超過特定閾值,則神經元向軸突傳遞信息。如未超過,則信號被該神經元殺死,無法進一步傳播。
激活函數決定是否傳遞信號。在這種情況下,只需要帶有一個參數(閾值)的簡單階梯函數。現在,當我們學習了一些新的東西(或未學習到什麼)時,一些神經元的閾值和突觸權值會發生改變。這使得神經元之間產生新的連接,大腦學會新的東西。

使用人工神經元理解這一概念:
在這裏插入圖片描述
上圖中(x_1, …, x_n)是信號向量,它和權重(w_1, …, w_n)相乘。然後再累加(即求和 + 偏置項 b)。最後,激活函數 f 應用於累加的總和。

注意: 權重(w_1, …, w_n)和偏置項 b 對輸入信號進行線性變換。而激活函數對該信號進行非線性變換,這使得可以任意學習輸入和輸出之間的複雜變換。

過去已經出現了很多種函數,但是尋找使神經網絡更好更快學習的激活函數仍然是活躍的研究方向。

二、神經網絡如何學習?
有必要對神經網絡如何學習有一個基本瞭解。假設網絡的期望輸出是 y(標註值),但網絡實際輸出的是 y’(預測值)。預測輸出和期望輸出之間的差距(y - y’)可以轉化成一種度量,即損失函數(J)。神經網絡犯大量錯誤時,損失很高;神經網絡犯錯較少時,損失較低。訓練目標就是找到使訓練集上的損失函數最小化的權重矩陣和偏置向量。

在下圖中,損失函數的形狀像一個碗。在訓練過程的任一點上,損失函數關於梯度的偏導數是那個位置的梯度。沿偏導數預測的方向移動,就可以到達谷底,使損失函數最小化。使用函數的偏導數迭代地尋找局部極小值的方法叫作梯度下降。
在這裏插入圖片描述
人工神經網絡中的權重使用反向傳播的方法進行更新。損失函數關於梯度的偏導數也用於更新權重。從某種意義上來說,神經網絡中的誤差根據求導的鏈式法則執行反向傳播。這通過迭代的方式來實施,經過多次迭代後,損失函數達到極小值,其導數變爲 0。

我們計劃在其他文章中介紹反向傳播。這裏主要指出的就是訓練過程中出現的求導步驟。
三、激活函數的類型

線性激活函數:這是一種簡單的線性函數,公式爲:f(x) = x。基本上,輸入到輸出過程中不經過修改。

非線性激活函數:用於分離非線性可分的數據,是最常用的激活函數。非線性方程控制輸入到輸出的映射。非線性激活函數有 Sigmoid、Tanh、ReLU、LReLU、PReLU、Swish 等。

四、爲什麼人工神經網絡需要非線性激活函數?
神經網絡用於實現複雜的函數,非線性激活函數可以使神經網絡隨意逼近複雜函數。沒有激活函數帶來的非線性,多層神經網絡和單層無異。

來看一個簡單的例子,幫助瞭解爲什麼沒有非線性,神經網絡甚至無法逼近異或門(XOR gate)、同或門(XNOR gate)等簡單函數。下圖是一個異或門函數。叉和圈代表了數據集的兩個類別。當 x_1、x_2 兩個特徵一樣時,類別標籤是紅叉;不一樣,就是藍圈。兩個紅叉對於輸入值 (0,0) 和 (1,1) 都有輸出值 0,兩個藍圈對於輸入值 (0,1) 和 (1,0) 都有輸出值 1。
在這裏插入圖片描述
從上圖中,可以看到數據點非線性可分。也就是說,無法畫出一條直線使藍圈和紅叉分開來。因此,需要一個非線性決策邊界(non-linear decision boundary)來分離它們。

激活函數對於將神經網絡的輸出壓縮進特定邊界內也非常關鍵。神經元的輸出值可以非常大。該輸出在未經修改的情況下饋送至下一層神經元時,可以被轉換成更大的值,這樣過程就需要極大算力。激活函數的一個任務就是將神經元的輸出映射到有界的區域(如,0 到 1 之間)。

瞭解這些背景知識之後,就可以瞭解不同類型的激活函數了。

五、不同類型的非線性激活函數

1、 Sigmoid

Sigmoid又叫作 Logistic 激活函數,它將實數值壓縮進 0 到 1 的區間內,還可以在預測概率的輸出層中使用。該函數將大的負數轉換成 0,將大的正數轉換成 1。數學公式爲:
在這裏插入圖片描述
Sigmoid 激活函數:
在這裏插入圖片描述
Sigmoid 導數:
在這裏插入圖片描述
Sigmoid 函數的三個主要缺陷

  1. 梯度消失:注意:Sigmoid 函數趨近 0 和 1 的時候變化率會變得平坦,也就是說,Sigmoid 的梯度趨近於 0。神經網絡使用 Sigmoid 激活函數進行反向傳播時,輸出接近 0 或 1 的神經元其梯度趨近於 0。這些神經元叫作飽和神經元。因此,這些神經元的權重不會更新。此外,與此類神經元相連的神經元的權重也更新得很慢。該問題叫作梯度消失。因此,想象一下,如果一個大型神經網絡包含 Sigmoid 神經元,而其中很多個都處於飽和狀態,那麼該網絡無法執行反向傳播。
  2. 不以零爲中心:Sigmoid 輸出不以零爲中心的。
  3. 計算成本高昂:exp() 函數與其他非線性激活函數相比,計算成本高昂。

2 、Tanh
解決了 Sigmoid 函數中值域期望不爲 0 的問題。
Tanh 激活函數:
在這裏插入圖片描述
Tanh 導數:
在這裏插入圖片描述
Tanh 激活函數又叫作雙曲正切激活函數(hyperbolic tangent activation function)。與 Sigmoid 函數類似,Tanh 函數也使用真值,但 Tanh 函數將其壓縮至-1 到 1 的區間內。與 Sigmoid 不同,Tanh 函數的輸出以零爲中心,因爲區間在-1 到 1 之間。你可以將 Tanh 函數想象成兩個 Sigmoid 函數放在一起。在實踐中,Tanh 函數的使用優先性高於 Sigmoid 函數。負數輸入被當作負值,零輸入值的映射接近零,正數輸入被當作正值。唯一的缺點是:

  1. Tanh 函數也會有梯度消失的問題,因此在飽和時也會殺死梯度。

3、修正線性單元(ReLU)

ReLU 激活函數:
在這裏插入圖片描述

ReLU 導數:
在這裏插入圖片描述
從上圖可以看到,ReLU 是從底部開始半修正的一種函數。數學公式: f(x)=max(0,x)

當輸入 x<0 時,輸出爲 0,當 x> 0 時,輸出爲 x。該激活函數使網絡更快速地收斂。它不會飽和,即它可以對抗梯度消失問題,至少在正區域(x> 0 時)可以這樣,因此神經元至少在一半區域中不會把所有零進行反向傳播。由於使用了簡單的閾值化(thresholding),ReLU 計算效率很高。但是 ReLU 神經元也存在一些缺點:

  1. 不以零爲中心:和 Sigmoid 激活函數類似,ReLU 函數的輸出不以零爲中心。
  2. 前向傳導(forward pass)過程中,如果 x < 0,則神經元保持非激活狀態,且在後向傳導(backward pass)中「殺死」梯度。這樣權重無法得到更新,網絡無法學習。當 x = 0 時,該點的梯度未定義,但是這個問題在實現中得到了解決,通過採用左側或右側的梯度的方式。

爲了解決 ReLU 激活函數中的梯度消失問題,當 x < 0 時,使用 Leaky ReLU激活函數。

4、 Leaky ReLU

Leaky ReLU 激活函數:
在這裏插入圖片描述
該函數試圖緩解 dead ReLU 問題。數學公式爲:f(x) = max(0.1*x,x)
Leaky ReLU 的概念是:當 x < 0 時,它得到 0.1 的正梯度。該函數一定程度上緩解了 dead ReLU 問題,但是使用該函數的結果並不連貫。儘管它具備 ReLU 激活函數的所有特徵,如計算高效、快速收斂、在正區域內不會飽和。Leaky ReLU 的概念是:當 x < 0 時,它得到 0.1 的正梯度。該函數一定程度上緩解了 dead ReLU 問題,但是使用該函數的結果並不連貫。儘管它具備 ReLU 激活函數的所有特徵,如計算高效、快速收斂、在正區域內不會飽和。

5、Parametric ReLU
如果Leaky ReLU不讓 x 乘常數項,而是讓 x 乘超參數,那麼將得到f(x) = max(q*x,x);
其中q是超參數。這裏引入了一個隨機的超參數,它可以被學習,因爲你可以對它進行反向傳播。這使神經元能夠選擇負區域最好的梯度,有了這種能力,它們可以變成 ReLU 或 Leaky ReLU。【當然了,先使用ReLU,再嘗試以上兩個】

6、 Swish(自門控激活函數)
Swish 激活函數:
在這裏插入圖片描述
數學公式:
在這裏插入圖片描述
根據上圖,可以觀察到在 x 軸的負區域曲線的形狀與 ReLU 激活函數不同,因此,Swish 激活函數的輸出可能下降,即使在輸入值增大的情況下。大多數激活函數是單調的,即輸入值增大的情況下,輸出值不可能下降。而 Swish 函數爲 0 時具備單側有界)的特性,它是平滑、非單調的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章