- 深度學習初學者指南
- (智)巴勃羅·里瓦斯
- 2253字
- 2021-12-01 13:58:39
1.3.3 淺層網絡
神經網絡由多個網絡組成,這些網絡通過不同的層進行連接。相比之下,感知機只有一個神經元,由一個輸入層和一個輸出層組成。在神經網絡中,在輸入層和輸出層之間存在額外的層,稱為隱藏層,如圖1.8所示。
圖1.8中的示例表示一個神經網絡,它有一個包含8個神經元的隱藏層。輸入層有10維,而輸出層有4維(4個神經元)。只要你的系統在訓練過程中能夠處理,這個中間的隱藏層可以包含盡可能多的神經元,但通常最好將神經元數量控制在合理的范圍之內。

圖1.8 淺層神經網絡示例
如果這是你第一次使用神經網絡,建議你的隱藏層大小(即神經元的數量)大于或等于輸入層大小,并且小于或等于輸出層大小。然而,盡管這是給初學者的良好建議,但這并不是一個絕對的科學事實,因為目前在神經網絡中尋找神經元的最佳數量還是一門藝術,而不是一門科學,通常需要通過大量的實驗來確定。
神經網絡通常可以解決沒有網絡的算法解決不了的、更加困難的問題。例如,有一個單個的神經單元,如感知機。它必須依靠直覺,而且必須容易設定。神經網絡可以解決線性可分及其之外的問題。對于線性可分問題,可以使用感知機模型和神經網絡。然而,對于更加復雜和非線性可分的問題,雖然感知機不能提供高質量的解決方案,但是神經網絡可以。
例如,如果我們考慮具有兩個類別的樣本數據集,把這些數據放在一起,感知機將無法找到一個分類的解決方案,還需要使用一些其他的策略來阻止進入死循環。或者,我們可以切換到神經網絡,訓練神經網絡找到可能找到的最好的解決方案。圖1.9展示了在一個線性不可分的兩類數據集上訓練含100個神經元的隱藏層的神經網絡的例子。
這個神經網絡的隱藏層有100個神經元。這是通過實驗做出的選擇,你將在后面的章節中學習構建這些網絡模型實例的策略。然而,在我們進一步討論之前,需要進一步解釋兩個新術語,即線性不可分數據和非線性模型,它們的定義分別如下:
·線性不可分數據是指不能使用直線實現類別劃分的一組數據。
·非線性模型或非線性解是指分類問題的最佳解不是直線的自然而常見的模型。例如,它可以是某條曲線,由某個次數大于1的多項式描述,如圖1.9所示的神經網絡模型。

圖1.9 線性不可分數據以及使用隱藏層具有100個神經元的神經網絡處理結果
非線性模型是整本書中都會用到的概念,因為非線性模型是現實世界中最可能遇到的模型。在某種程度上,模型之所以是非線性的,正是因為問題是線性不可分的。為了找到非線性可分問題的解,神經網絡模型進行了以下數學運算。
1.輸入–隱藏層
在神經網絡中,輸入向量x通過每個神經元的權重向量w連接到一定數量的神經元,可以將多個權重向量組成一個權重矩陣W。矩陣W的列數與層所含有的神經元數量相同,行數與x含有的特征(或維度)數量相同。因此,隱藏層的輸出可以由如下向量進行表示:

其中b是偏置向量,其元素對應一個神經單元,h的大小與隱藏單元的數量成正比。例如圖1.8中有8個神經元,圖1.9中有100個神經元。然而,激活函數z(·)不一定是sign(·)函數,事實上,它通常不是sign(·)函數。相反,大多數人使用的激活函數都是可微且易于微分的函數。
可微的激活函數是具有可以用傳統數值方法進行計算或者定義明確的導數的函數。與之相反的是沒有明確定義的導數的函數,即函數的導數不存在或者難以計算。
2.隱藏–隱藏層
神經網絡可以有不止一個隱藏層,本書會討論很多這樣的例子。在這種情況下,矩陣W可以表示為一個三維矩陣,該矩陣具有與網絡相同的三維元素和隱藏層數。對于第i層,為方便起見,將該矩陣稱為。
因此,第i隱藏層的輸出如下所示:

對于,其中k是總層數,
由第一層(參見上一小節)給出的方程計算,直接使用x,不需要去到最后一層計算
,計算過程如下一小節所述。
3.隱藏–輸出層
整個神經網絡的輸出是最后一層的輸出:

在這里,最后一個激活函數通常不同于隱藏層的激活函數。最后一層(輸出)中的激活函數通常取決于要解決問題的類型。例如,如果想解決回歸問題,將會使用線性函數;要解決分類問題,則使用S型激活函數,我們稍后再討論這些內容。顯然,感知機算法將不再適用于神經網絡的訓練。
雖然學習算法仍然必須根據神經網絡所犯的錯誤調整模型參數,但參數的調整幅度不能與錯誤分類數或預測誤差直接成正比。原因在于只是最后一層的神經元負責做出預測,但它們依賴于之前一層的計算結果,而之前一層的計算結果又可能依賴于更之前一層的計算結果。當對W和b的取值做出調整時,關于每個神經元的參數調整必須有所不同。
有一種方法是在神經網絡上使用梯度下降技術。梯度下降技術有很多種,我們將在后面的章節中討論其中最流行的技術。梯度下降算法的一般原理是,如果對一個函數求導,其值為零,那么你就已經找到了對其求導的一組參數的最大值(或最小值)。對于標量,我們將它們稱為導數,但對于向量或矩陣(W, b),稱之為梯度。
我們可以將上述函數稱為損失函數。
損失函數通常是可微的,因此可以用梯度下降算法計算其梯度。
可以將損失函數定義為:

這種損失稱為均方誤差(MSE),可以用該損失函數來衡量目標輸出y與輸出層中預測輸出元素的平方有多大的差異,并取其平均值。因為這個損失是可微的,而且很容易計算,所以它是一個很好的損失函數。
這種神經網絡引入了大量的可能性,但是它主要依賴于一種基于反向傳播的梯度下降技術來進行網絡訓練(Hecht-Nielsen,R.,1992)。我們先不在這里解釋反向傳播的原理(將在后面的章節介紹),而是著重稱贊它改變了ML的世界。梯度下降法已經有些年沒有取得多大的進展了,這是因為它在實用方面受到了一些制約,消除這些制約的解決方案為深度學習的產生和發展鋪平了道路。