本章將介紹用于解決實際問題的深度學習架構的不同模塊。前一章使用PyTorch的低級操作構建了如網絡架構、損失函數和優化器這些模塊。本章將介紹用于解決真實問題的神經網絡的一些重要組件,以及PyTorch如何通過提供大量高級函數來抽象出復雜度。本章還將介紹用于解決真實問題的算法,如回歸、二分類、多類別分類等。
本章將討論如下主題:
?詳解神經網絡的不同構成組件;
?探究PyTorch中用于構建深度學習架構的高級功能;
?應用深度學習解決實際的圖像分類問題。
3.1詳解神經網絡的組成部分
上一章已經介紹了訓練深度學習算法需要的幾個步驟。
1.構建數據管道。
2.構建網絡架構。
3.使用損失函數評估架構。
4.使用優化算法優化網絡架構的權重。
上一章中的網絡由使用PyTorch數值運算構建的簡單線性模型組成。盡管使用數值運算為玩具性質的問題搭建神經架構很簡單,但當需要構建解決不同領域的復雜問題時,如計算機視覺和自然語言處理,構建一個架構就迅速變得復雜起來。大多數深度學習框架,如PyTorch、TensorFlow和Apache MXNet,都提供了抽象出很多復雜度的高級功能。這些深度學習框架的高級功能稱為層(layer)。它們接收輸入數據,進行如同在前面一章看到的各種變換,并輸出數據。解決真實問題的深度學習架構通常由1~150個層組成,有時甚至更多。抽象出低層的運算并訓練深度學習算法的過程如圖3.1所示。
圖3.1
3.1.1層——神經網絡的基本組成
在本章的剩余部分,我們會見到各種不同類型的層。首先,先了解其中最重要的一種層:線性層,它就是我們前面講過的網絡層結構。線性層應用了線性變換:
Y=Wx+b
線性層之所以強大,是因為前一章所講的功能都可以寫成單一的代碼行,如下所示。
上述代碼中的myLayer層,接受大小為10的張量作為輸入,并在應用線性變換后輸出一個大小為5的張量。下面是一個簡單例子的實現:
可以使用屬性weights和bias訪問層的可訓練參數:
線性層在不同的框架中使用的名稱有所不同,有的稱為dense層,有的稱為全連接層(fully connected layer)。用于解決真實問題的深度學習架構通常包含不止一個層。在PyTorch中,可以用多種方式實現。
一個簡單的方法是把一層的輸出傳入給另一層:
每一層都有自己的學習參數,在多個層的架構中,每層都學習出它本層一定的模式,其后的層將基于前一層學習出的模式構建。把線性層簡單堆疊在一起是有問題的,因為它們不能學習到簡單線性表示以外的新東西。我們通過一個簡單的例子看一下,為什么把線性層堆疊在一起的做法并不合理。
假設有具有如下權重的兩個線性層:
層 權重
Layer1 3.0
Layer2 2.0
以上包含兩個不同層的架構可以簡單表示為帶有另一不同層的單層。因此,只是堆疊多個線性層并不能幫助我們的算法學習任何新東西。有時,這可能不太容易理解,我們可以用下面的數學公式對架構進行可視化:
Y= 2(3X1) -2Linear layers
Y= 6(X1) -1Linear layers
為解決這一問題,相較于只是專注于線性關系,我們可以使用不同的非線性函數,幫助學習不同的關系。
深度學習中有很多不同的非線性函數。PyTorch以層的形式提供了這些非線性功能,因為可以采用線性層中相同的方式使用它們。
一些流行的非線性函數如下所示:
?sigmoid
?tanh
?ReLU
?Leaky ReLU
3.1.2非線性激活函數
非線性激活函數是獲取輸入,并對其應用數學變換從而生成輸出的函數。我們在實戰中可能遇到數個非線性操作。下面會講解其中幾個常用的非線性激活函數。
1.sigmoid
sigmoid激活函數的數學定義很簡單,如下:
簡單來說,sigmoid函數以實數作為輸入,并以一個0到1之間的數值作為輸出。對于一個極大的負值,它返回的值接近于0,而對于一個極大的正值,它返回的值接近于1。圖3.2所示為sigmoid函數不同的輸出。
圖3.2
sigmoid函數曾一度被不同的架構使用,但由于存在一個主要弊端,因此最近已經不太常用了。當sigmoid函數的輸出值接近于0或1時,sigmoid函數前一層的梯度接近于0,由于前一層的學習參數的梯度接近于0,使得權重不能經常調整,從而產生了無效神經元。
2.tanh
非線性函數tanh將實數值輸出為-1到1之間的值。當tanh的輸出極值接近-1和1時,也面臨梯度飽和的問題。不過,因為tanh的輸出是以0為中心的,所以比sigmoid更受偏愛,如圖3.3所示。
圖3.3
3.ReLU
近年來ReLU變得很受歡迎,我們幾乎可以在任意的現代架構中找到ReLU或其某一變體的身影。它的數學公式很簡單:
f(x)=max(0,x)
簡單來說,ReLU把所有負值取作0,正值保持不變。可以對ReLU函數進行可視化,如圖3.4所示。
圖3.4
使用ReLU函數的一些好處和弊端如下。
?有助于優化器更快地找到正確的權重集合。從技術上講,它使隨機梯度下降收斂得更快。
?計算成本低,因為只是判斷了閾值,并未計算任何類似于sigmoid或tangent函數計算的內容。
?ReLU有一個缺點,即當一個很大的梯度進行反向傳播時,流經的神經元經常會變得無效,這些神經元稱為無效神經元,可以通過謹慎選擇學習率來控制。我們將在第4章中討論調整學習率的不同方式時,了解如何選擇學習率。
4.Leaky ReLU
Leaky ReLU嘗試解決一個問題死角,它不再將飽和度置為0,而是設為一個非常小的數值,如0.001。對某些用例,這一激活函數提供了相較于其他激活函數更優異的性能,但它不是連續的。
審核編輯 黃昊宇
-
神經網絡
+關注
關注
42文章
4781瀏覽量
101178 -
人工智能
+關注
關注
1796文章
47683瀏覽量
240311
發布評論請先 登錄
相關推薦
評論