您的位置:首頁>正文

深度學習基礎篇:如何選擇正確的啟動函數?

互聯網提供了大量的資訊, 我們只需要一個搜尋引擎就可以獲取。 然而, 當大量的資訊撲面而來, 究竟如何區分相關資訊和無關資訊呢?

大腦在得到大量資訊時, 會努力理解和分類有用資訊和不那麼有用的資訊。 而在深度學習中, 我們也需要一種類似的機制來分類傳入的資訊。

不是所有資訊都是有用的, 一些只是噪音。 啟動函數可以説明神經網路做這種隔離。 它啟動有用的資訊, 並抑制無關的資料點。

啟動函數如此重要, 那麼都有哪些比較熱門呢?它們是如何工作的?又適合解決什麼問題?本文將為你一一解答。 以下是本文目錄。

1.簡單介紹神經網路

2.什麼是啟動函數?

3.可以不用啟動函數嗎?

4.常用的啟動函數類型以及使用方法

Binary Step函數

線性函數

Sigmoid函數

tanh函數

ReLU函數

Leaky ReLU函數

Softmax函數

5.如何選擇正確的啟動函數?

簡單介紹神經網路

在深入瞭解啟動函數的細節之前,

讓我們先回顧一下什麼是神經網路, 以及它是如何運行的。 神經網路是一種非常強大的機器學習機制, 它基本上類比人腦的學習方式。

大腦接受外界的刺激, 對輸入進行加工, 然後產生輸出。 當任務變得複雜時, 多個神經元會形成一個複雜的網路,

傳遞資訊。

人工神經網路試圖模仿類似的行為。 下圖所示的網路就是由相互連接的神經元組成的人工神經網路。

上圖中的黑色圓圈代表神經元。 每個神經元都有權重、偏差和啟動函數。 資訊進入輸入層, 神經元通過權重和偏差對輸入資訊進行線性變換,

而非線性變換由啟動函數完成。 資訊從輸入層傳輸到隱藏層, 隱藏層對資訊進行處理並將結果發送到輸出層。 這被稱為前向傳播。 如果產生的輸出偏離預期值呢? 在神經網路中, 我們將根據誤差更新神經元的權重和偏差。 這個過程被稱為反向傳播。 一旦所有訓練資料經過了這一過程, 則最終的權重和偏差就被用於測試。

什麼是啟動函數?

啟動函數是人工神經網路的一個極其重要的特徵。 它決定一個神經元是否應該被啟動, 啟動代表神經元接收的資訊與給定的資訊有關。

啟動函數對輸入資訊進行非線性變換。 然後將變換後的輸出資訊作為輸入資訊傳給下一層神經元。

可以不用啟動函數嗎?

如果啟動函數增加了許多複雜性, 我們可以不用啟動函數嗎?

當然不行!當我們不用啟動函數時, 權重和偏差只會進行線性變換。 線性方程很簡單, 但解決複雜問題的能力有限。 沒有啟動函數的神經網路實質上只是一個線性回歸模型。 啟動函數對輸入進行非線性變換, 使其能夠學習和執行更複雜的任務。 我們希望我們的神經網路能夠處理複雜任務, 如語言翻譯和圖像分類等。 線性變換永遠無法執行這樣的任務。

啟動函數使反向傳播成為可能, 因為啟動函數的誤差梯度可以用來調整權重和偏差。 如果沒有可微的非線性函數, 這就不可能實現。

常用的啟動函數類型以及使用方法

Binary Step函數

當我們有一個啟動函數時, 首先聯想到的是一個自帶閾值的分類器,用於啟動神經元。下圖中,如果y值高於給定的閾值,則啟動神經元,否則禁用。

f(x) = 1, x>=0

Binary Step函數非常簡單,可以在創建二進位分類器時使用它。當我們只需要對單個類說“是”或“不是”時,Step函數是最好的選擇,因為它要麼啟動神經元要麼把它設為零。

函數的理論性比實用性強,在大多數情況下,我們需要將資料分入多個類而不僅僅放在一類中。此時,Step函數就有點不好用了。

此外,step函數的梯度為零,這使得step函數不能用於反向傳播過程中。

f '(x) = 0, for all x

線性函數

我們看到了step函數的問題,梯度為零,在反向傳播過程中不可能更新權重和偏差。此時,我們可以用線性函數來代替簡單的step函數。函數運算式:

f(x)=ax

上圖中假設a為4。這時啟動與輸入成正比,輸入的x值將被轉換為ax。線性函數可用於不同的神經元,也可以啟動多個神經元。當我們有多個類時,可以選擇f(x)值最大的類。但線性函數仍然存在一個問題。讓我們看看這個函數的導數。

f'(x) = a

線性函數的導數是常數,也就是說它不依賴於輸入值x

這意味著每次我們做反向傳播時,梯度都是一樣的。這是一個大問題,我們並沒有真正減少誤差。不僅如此,假設我們正在做一項複雜任務,需要使用多層神經網路。然而如果每一層都使用線性變換,不管我們有多少層,最終輸出的還是輸入的線性變換。因此,線性函數只適用於容易解釋的簡單任務。

Sigmoid函數

Sigmoid函數曾被廣泛應用,但由於其自身的一些缺陷,現在已經很少用了。Sigmoid函式定義如下:

f(x)=1/(1+e^-x)

讓我們來看看這個函數。

這是一個平滑函數,並且具有連續性和可微性。與線性函數相比,它的最大優點就是非線性。這意味著多個神經元使用S(Sigmoid簡稱)形函數作為啟動函數時,輸出也是非線性的。我們來看看曲線的形狀。Y軸範圍0-1,x軸在-3到3之間的梯度非常高,但在其他區域形狀很平坦。這有什麼用嗎?

這意味著在[-3,3]這個範圍內,x的少量變化也將導致y值的大幅度變化。因此,函數本質上試圖將y值推向極值。 當我們嘗試將值分類到特定的類時,使用Sigmoid函數非常理想。

讓我們來看一下Sigmoid函數的梯度。

它是平滑的,依賴於x值,這意味著在反向傳播過程中,我們可以使用這個函數。誤差可以被反向傳播,權重也可以相應地更新。

即使在今天,sigmoid函數也被廣泛使用,但我們仍然需要解決一些問題。正如之前所看到的,這個函數在[-3,3]之外是相當平坦的。這意味著一旦x值不在[-3,3]內,梯度就變得很小,接近於零,而網路就得不到真正的學習。

sigmoid函數的另一個問題是,y軸取值範圍[0,1]。這個函數在原點周圍不對稱,得到的值都是正的。我們不希望下一個神經元得到的值在任何時候都是正值,不過可以通過縮放sigmoid函數來解決這個問題,而這需要在tanh函數中發生。

tanh函數

tanh函數與Sigmoid函數非常相似。它實際上只是Sigmoid函數的一個放大版本。

tanh(x)=2sigmoid(2x)-1

還可以直接表示為:

tanh(x)=2/(1+e^(-2x)) -1

Tanh函數與sigmoid函數相似,但原點對稱。它的範圍從- 1到1。

它基本上解決了所有值符號相同的問題,而其他屬性都與sigmoid函數相同。函數具有連續性和可微性。你可以看到函數是非線性的,所以我們可以很容易地將誤差進行反向傳播。

讓我們看一下tanh函數的梯度。

與Sigmoid函數相比,tanh函數的梯度更陡。 使用sigmoid函數還是tanh函數取決於問題陳述中對梯度的要求。 但是tanh函數出現了Sigmoid函數類似的問題,梯度漸趨平坦,並且值非常低。

ReLU函數

ReLU是近幾年非常受歡迎的啟動函數。其定義為:

f(x)=max(0,x)

以下是圖形表示:

ReLU是如今設計神經網路時使用最廣泛的啟動函數。首先,ReLU函數是非線性的,這意味著我們可以很容易地反向傳播誤差,並啟動多個神經元。

ReLU函數優於其他啟動函數的一大優點是它不會同時啟動所有的神經元。這是什麼意思?如果輸入值是負的,ReLU函數會轉換為0,而神經元不被啟動。這意味著,在一段時間內,只有少量的神經元被啟動,神經網路的這種稀疏性使其變得高效且易於計算。

我們來看看ReLU函數的梯度。

ReLU函數也存在著梯度為零的問題。看上圖,x<0時,梯度是零,這意味著在反向傳播過程中,權重沒有得到更新。這就會產生死神經元,而這些神經元永遠不會被啟動。好在當我們遇到問題時,我們總能找到解決方案。

Leaky ReLU函數

Leaky ReLU函數只是一個ReLU函數的改良版本。我們看到,在ReLU函數中,x < 0時梯度為0,這使得該區域的神經元死亡。為了解決這個問題, Leaky ReLU出現了。這是它的定義:

f(x)= ax, x<0

= x, x>=0

我們所做的,只是用一個非水平線簡單地替換了水平線。這裡a是一個很小的值,如0.01。見下圖。

替換水平線的主要優點是去除零梯度。在這種情況下,上圖左邊的梯度是非零的,所以該區域的神經元不會成為死神經元。梯度圖如下。

與Leaky ReLU函數類似的,還有PReLU函數,它的定義與Leaky ReLU相似。

f(x)= ax, x<0

= x, x>=0

然而, 在PReLU函數中,a也是可訓練的函數。神經網路還會學習a的價值,以獲得更快更好的收斂。 當Leaky ReLU函數仍然無法解決死神經元問題並且相關資訊沒有成功傳遞到下一層時,可以考慮使用PReLU函數。

Softmax函數

softmax函數也是一種sigmoid函數,但它在處理分類問題時很方便。sigmoid函數只能處理兩個類。當我們想要處理多個類時,該怎麼辦呢?只對單類進行“是”或“不是”的分類方式將不會有任何説明。softmax函數將壓縮每個類在0到1之間,並除以輸出總和。它實際上可以表示某個類的輸入概率。其定義為:

比如,我們輸入[1.2,0.9,0.75],當應用softmax函數時,得到[0.42,0.31,0.27]。現在可以用這些值來表示每個類的概率。

softmax函數最好在分類器的輸出層使用。

如何選擇正確的啟動函數?

現在我們已經瞭解了這麼多的啟動函數,接下來就需要分析在哪種情況下應該使用哪種啟動函數了。啟動函數好或壞,不能憑感覺定論。然而,根據問題的性質,我們可以為神經網路更快更方便地收斂作出更好的選擇。

用於分類器時,Sigmoid函數及其組合通常效果更好。

由於梯度消失問題,有時要避免使用sigmoid和tanh函數。

ReLU函數是一個通用的啟動函數,目前在大多數情況下使用。

如果神經網路中出現死神經元,那麼PReLU函數就是最好的選擇。

請記住,ReLU函數只能在隱藏層中使用。

一點經驗:你可以從ReLU函數開始,如果ReLU函數沒有提供最優結果,再嘗試其他啟動函數。

—完—

作者:Dishashree Gupta

智慧觀 編譯

想知道AI加教育領域有哪些最新研究成果?請在智慧觀(zhinengguanym)對話介面回復“論文”;

想要AI領域更多的乾貨?請在對話介面回復“乾貨”;

想瞭解更多專家的“智慧觀”,請在對話介面回復“觀點”,去獲取你想要的內容吧。

首先聯想到的是一個自帶閾值的分類器,用於啟動神經元。下圖中,如果y值高於給定的閾值,則啟動神經元,否則禁用。

f(x) = 1, x>=0

Binary Step函數非常簡單,可以在創建二進位分類器時使用它。當我們只需要對單個類說“是”或“不是”時,Step函數是最好的選擇,因為它要麼啟動神經元要麼把它設為零。

函數的理論性比實用性強,在大多數情況下,我們需要將資料分入多個類而不僅僅放在一類中。此時,Step函數就有點不好用了。

此外,step函數的梯度為零,這使得step函數不能用於反向傳播過程中。

f '(x) = 0, for all x

線性函數

我們看到了step函數的問題,梯度為零,在反向傳播過程中不可能更新權重和偏差。此時,我們可以用線性函數來代替簡單的step函數。函數運算式:

f(x)=ax

上圖中假設a為4。這時啟動與輸入成正比,輸入的x值將被轉換為ax。線性函數可用於不同的神經元,也可以啟動多個神經元。當我們有多個類時,可以選擇f(x)值最大的類。但線性函數仍然存在一個問題。讓我們看看這個函數的導數。

f'(x) = a

線性函數的導數是常數,也就是說它不依賴於輸入值x

這意味著每次我們做反向傳播時,梯度都是一樣的。這是一個大問題,我們並沒有真正減少誤差。不僅如此,假設我們正在做一項複雜任務,需要使用多層神經網路。然而如果每一層都使用線性變換,不管我們有多少層,最終輸出的還是輸入的線性變換。因此,線性函數只適用於容易解釋的簡單任務。

Sigmoid函數

Sigmoid函數曾被廣泛應用,但由於其自身的一些缺陷,現在已經很少用了。Sigmoid函式定義如下:

f(x)=1/(1+e^-x)

讓我們來看看這個函數。

這是一個平滑函數,並且具有連續性和可微性。與線性函數相比,它的最大優點就是非線性。這意味著多個神經元使用S(Sigmoid簡稱)形函數作為啟動函數時,輸出也是非線性的。我們來看看曲線的形狀。Y軸範圍0-1,x軸在-3到3之間的梯度非常高,但在其他區域形狀很平坦。這有什麼用嗎?

這意味著在[-3,3]這個範圍內,x的少量變化也將導致y值的大幅度變化。因此,函數本質上試圖將y值推向極值。 當我們嘗試將值分類到特定的類時,使用Sigmoid函數非常理想。

讓我們來看一下Sigmoid函數的梯度。

它是平滑的,依賴於x值,這意味著在反向傳播過程中,我們可以使用這個函數。誤差可以被反向傳播,權重也可以相應地更新。

即使在今天,sigmoid函數也被廣泛使用,但我們仍然需要解決一些問題。正如之前所看到的,這個函數在[-3,3]之外是相當平坦的。這意味著一旦x值不在[-3,3]內,梯度就變得很小,接近於零,而網路就得不到真正的學習。

sigmoid函數的另一個問題是,y軸取值範圍[0,1]。這個函數在原點周圍不對稱,得到的值都是正的。我們不希望下一個神經元得到的值在任何時候都是正值,不過可以通過縮放sigmoid函數來解決這個問題,而這需要在tanh函數中發生。

tanh函數

tanh函數與Sigmoid函數非常相似。它實際上只是Sigmoid函數的一個放大版本。

tanh(x)=2sigmoid(2x)-1

還可以直接表示為:

tanh(x)=2/(1+e^(-2x)) -1

Tanh函數與sigmoid函數相似,但原點對稱。它的範圍從- 1到1。

它基本上解決了所有值符號相同的問題,而其他屬性都與sigmoid函數相同。函數具有連續性和可微性。你可以看到函數是非線性的,所以我們可以很容易地將誤差進行反向傳播。

讓我們看一下tanh函數的梯度。

與Sigmoid函數相比,tanh函數的梯度更陡。 使用sigmoid函數還是tanh函數取決於問題陳述中對梯度的要求。 但是tanh函數出現了Sigmoid函數類似的問題,梯度漸趨平坦,並且值非常低。

ReLU函數

ReLU是近幾年非常受歡迎的啟動函數。其定義為:

f(x)=max(0,x)

以下是圖形表示:

ReLU是如今設計神經網路時使用最廣泛的啟動函數。首先,ReLU函數是非線性的,這意味著我們可以很容易地反向傳播誤差,並啟動多個神經元。

ReLU函數優於其他啟動函數的一大優點是它不會同時啟動所有的神經元。這是什麼意思?如果輸入值是負的,ReLU函數會轉換為0,而神經元不被啟動。這意味著,在一段時間內,只有少量的神經元被啟動,神經網路的這種稀疏性使其變得高效且易於計算。

我們來看看ReLU函數的梯度。

ReLU函數也存在著梯度為零的問題。看上圖,x<0時,梯度是零,這意味著在反向傳播過程中,權重沒有得到更新。這就會產生死神經元,而這些神經元永遠不會被啟動。好在當我們遇到問題時,我們總能找到解決方案。

Leaky ReLU函數

Leaky ReLU函數只是一個ReLU函數的改良版本。我們看到,在ReLU函數中,x < 0時梯度為0,這使得該區域的神經元死亡。為了解決這個問題, Leaky ReLU出現了。這是它的定義:

f(x)= ax, x<0

= x, x>=0

我們所做的,只是用一個非水平線簡單地替換了水平線。這裡a是一個很小的值,如0.01。見下圖。

替換水平線的主要優點是去除零梯度。在這種情況下,上圖左邊的梯度是非零的,所以該區域的神經元不會成為死神經元。梯度圖如下。

與Leaky ReLU函數類似的,還有PReLU函數,它的定義與Leaky ReLU相似。

f(x)= ax, x<0

= x, x>=0

然而, 在PReLU函數中,a也是可訓練的函數。神經網路還會學習a的價值,以獲得更快更好的收斂。 當Leaky ReLU函數仍然無法解決死神經元問題並且相關資訊沒有成功傳遞到下一層時,可以考慮使用PReLU函數。

Softmax函數

softmax函數也是一種sigmoid函數,但它在處理分類問題時很方便。sigmoid函數只能處理兩個類。當我們想要處理多個類時,該怎麼辦呢?只對單類進行“是”或“不是”的分類方式將不會有任何説明。softmax函數將壓縮每個類在0到1之間,並除以輸出總和。它實際上可以表示某個類的輸入概率。其定義為:

比如,我們輸入[1.2,0.9,0.75],當應用softmax函數時,得到[0.42,0.31,0.27]。現在可以用這些值來表示每個類的概率。

softmax函數最好在分類器的輸出層使用。

如何選擇正確的啟動函數?

現在我們已經瞭解了這麼多的啟動函數,接下來就需要分析在哪種情況下應該使用哪種啟動函數了。啟動函數好或壞,不能憑感覺定論。然而,根據問題的性質,我們可以為神經網路更快更方便地收斂作出更好的選擇。

用於分類器時,Sigmoid函數及其組合通常效果更好。

由於梯度消失問題,有時要避免使用sigmoid和tanh函數。

ReLU函數是一個通用的啟動函數,目前在大多數情況下使用。

如果神經網路中出現死神經元,那麼PReLU函數就是最好的選擇。

請記住,ReLU函數只能在隱藏層中使用。

一點經驗:你可以從ReLU函數開始,如果ReLU函數沒有提供最優結果,再嘗試其他啟動函數。

—完—

作者:Dishashree Gupta

智慧觀 編譯

想知道AI加教育領域有哪些最新研究成果?請在智慧觀(zhinengguanym)對話介面回復“論文”;

想要AI領域更多的乾貨?請在對話介面回復“乾貨”;

想瞭解更多專家的“智慧觀”,請在對話介面回復“觀點”,去獲取你想要的內容吧。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示