深度前饋網絡(又稱「多層感知器」)是大多數深度學習模型的基礎。
卷積神經網絡(CNN)和循環神經網絡(RNN)這樣的網絡只是前饋網絡的一些特殊情況。這些網絡主要用於監控機器學習任務,在這些任務中,我們已經知道目標功能,即我們希望網絡實現的結果,並且這些網絡對於實踐機器學習非常重要,構成了許多商業應用的基礎。這些網絡的出現極大地影響了如計算機視覺(computer vision)和自然語言理解(NLP)等領域。
前饋網絡的主要目標是近似一些函數f*。例如,回歸函數y = f *(x)將輸入x映射到值y。前饋網絡定義了y = f (x; θ)映射,並學習參數θ的值,使結果更加接近最佳函數。
這些網絡之所以被稱為前饋,是因為信息是向前流動的,因為x用於計算隱藏層中的某些中間函數,而隱藏層又用於計算y。在這種情況下,如果我們將最後一個隱藏層的反饋添加到第一個隱藏層,它將表示一個循環神經網絡。
這些網絡由許多不同的函數組成。每個模型都與描述函數的組合方式的非循環圖相關聯。例如,我們可能有三個函數f(1)、f(2)和f(3)連接在一個鏈中,形成f(x)=f(3)(f(2)(f(1)(x))。其中f(1)是第一層,f(2)是第二層,f(3)是輸出層。
輸入層和輸出層之間的層稱為隱藏層,因為訓練數據沒有顯示這些層所需的輸出。網絡可以包含任意數量的隱藏層和任意數量的隱藏單元。一個單元基本上類似於一個神經元,它從前一層的單元中獲取輸入並計算自己的激活值。
現在問題來了,為什麼當我們有線性機器學習模型時,還需要前饋網絡?這是因為線性模型僅限於線性函數,而神經網絡不是。當我們的數據不是線性可分離的線性模型時,面臨著近似的問題,而神經網絡則相當容易。隱藏層用於增加非線性並改變數據的表示,以便更好地泛化函數。
對於任何前饋神經網絡的設計,有一些事情需要你決定,大多數網絡需要一些成分,其中一些成分和設計機器學習算法是相同的。
優化器
優化器或優化算法用於將代價函數最小化,在每個訓練周期或每輪後更新權重和偏置值,直到代價函數達到全局最優。
優化算法有兩種:
一階優化算法
這些算法使用與參數相關的梯度值最小化或最大化代價函數。一階導數告訴我們函數是在某一點上遞減還是遞增,簡而言之,它給出了與曲面切線。
二階優化算法
這些算法使用二階導數來最小化代價函數,也稱為Hessian。由於二階導數的計算成本很高,所以不常使用二階導數。二階導數告訴我們一階導數是遞增的還是遞減的,這表示了函數的曲率。二階導數為我們提供了一個與誤差曲面曲率相接觸的二次曲面。
網絡的結構
網絡體系結構是指網絡的結構,即隱藏層的數目和每層的隱藏單元數。根據通用逼近定理,具有一個線性輸出層和至少一個具有任意「壓縮」激活函數的隱藏層的前饋網絡,只要網絡具有足夠的隱層,就可以用任何期望的非零誤差,將任意一個有限維空間中的Borel可測函數近似為另一個有限維空間中的Borel可測函數。這個定理簡單地說明,無論我們試圖學習什麼函數,總會有一個多層感知機(MLP)能夠表示這個函數。
我們現在知道總會有一個MLP能夠解決我們的問題,但是沒有特定的方法來確定MLP的體系結構。沒有人可以說,如果我們使用具有m個隱藏單元、n層的結構,我們就能夠解決給定的問題,找到這個不用猜測和試驗方法的配置仍然是一個熱門的研究領域,目前只能通過猜測和試驗方法來完成。
找到正確的體系結構是困難的,因為我們可能需要嘗試許多不同的配置,但是即使我們有了正確的MLP體系結構,它仍然可能無法表示目標函數。這是由兩個原因造成的:一是優化算法可能無法找到與所需函數對應的參數的正確值;二是訓練算法可能由於過擬合而選擇錯誤的函數。
代價函數
任何訓練點的代價函數都顯示了我們的模型得出的近似值與我們試圖達到的實際目標值之間的差異,並且始終是單值的,因為代價函數的工作是評估整個網絡是如何的。與機器學習算法一樣,前饋網絡也使用基於梯度的學習方法進行訓練,在這種學習方法中,使用隨機梯度下降等算法來使代價函數達到最小化。
整個訓練過程在很大程度上取決於我們的代價函數的選擇,其選擇或多或少與其他參數模型相同。
在我們的參數模型定義了p(y| x;)分布的情況下,我們只使用訓練數據和模型預測之間的交叉熵作為代價函數。我們也可以用另一種方法來預測y在x上的一些統計,而不是預測y上的完全概率分布。
對於反向傳播算法的代價函數,它必須滿足兩個屬性:
代價函數必須能夠表達為平均值。
代價函數不能依賴於輸出層旁邊網絡的任何激活值。
代價函數的形式主要是C(W, B, Sr, Er),其中W是神經網絡的權重,B是網絡的偏置,Sr是單個訓練樣本的輸入,Er是該訓練樣本的期望輸出。
一些可能的代價函數是:
二次代價
該函數也被稱為均方誤差、最大似然率和差平方和。
交叉熵代價
這個函數也被稱為伯努利負對數似然和二元交叉熵。
指數成本
海林格距離
該函數也稱為「統計距離」。
輸出單元
輸出單元是存在於輸出層中的那些單元,它們的任務是給我們期望輸出或預測,從而完成神經網絡必須執行的任務。輸出單元的選擇與代價函數的選擇緊密相關。任何可以在神經網絡中用作隱藏單元的單元也可以用作輸出單元。
輸出單元的選擇如下:
線性單位
最簡單的輸出單元是用於高斯輸出分布的線性輸出單元,這些單元基於對輸出層不提供非線性的仿射變換。給定h特徵,一層線性輸出產生一個矢量:
線性單元函數
對於線性層,對數似然最大化等同於均方誤差最小化,最大似然使高斯分布的協方差近似更容易。
這些線性單元的優點是不飽和,即它們的梯度總是保持不變,從不接近於零,在那裡這些單元對基於梯度的優化算法沒有困難。
Sigmoid單位
Sigmoid單元函數
為了解決二元分類問題,我們結合了最大似然的Sigmoid輸出單元。一個Sigmoid輸出單元有兩個組成部分,一個是使用線性層計算z=w*h+b,然後使用激活函數將z轉換為概率。當使用其他損失函數時,例如均方誤差,損失可以隨時飽和,也就是說,梯度會收縮得太小而不利於學習。因此,最好使用最大似然。
Softmax單元
Softmax單位用於多輸出分布,它用於具有n個可能值的離散變量上的概率分布,這也可以看作是表示二元變量上概率分布的Sigmoid函數的推廣。Softmax函數定義如下:
Softmax單元函數
像Sigmoid函數一樣,Softmax函數也可以飽和,也就是說梯度會收縮得太小而不利於學習。在Softmax的情況下,由於它有多個輸出單元,因此這些單元只能在輸入值之間的差異變得極端時飽和。
由於總概率始終為1且不可超過,因此這些單位由「贏家通吃」(winner take all)原則控制,若其中一輸出值接近1,其他輸出單位的輸出值肯定將接近0。
隱藏單元
選擇隱藏單元的類型也是一個熱門的研究領域,沒有一個特定的單元能夠保證它在每個問題上都會優於其他所有的單元,但是我們仍然有一些單元是開始時默認的選擇,例如,通常使用的是校正線性單元或通常稱為Relu,這是由於直觀的原因而不是經驗。實際上,通常不可能提前預測哪一個最有效。選擇一個隱藏的單元需要反覆嘗試,憑直覺選擇一種隱藏的單元可能工作得很好,然後進行測試。
隱藏單位的可能選擇是:
整流線性單元
這些函數使用由g(z)定義的激活函數
Relus很容易優化,因為它們類似於線性單元,它們之間的唯一區別是一半域的輸出o。Relus之所以如此出名,是因為每當單元處於活動狀態時,它們總是有一個恆定的大梯度。梯度方向比激活函數引入二階效應對學習更有用。
ReLU有一個缺點,那就是不能通過基於梯度的方法來學習,因為它們的激活是零。
Relu有許多推廣,這些概括是:
Absolute value rectification
Leaky ReLU
Parametric ReLU
Maxout units
其中,Maxout單位應用元素級函數g(z),Maxout單位將z分為k組。然後,每個最大輸出單元輸出其中一個組的最大元素。Maxout單元被認為是ReLU的最佳推廣,因為它們具有冗餘性,這是由於每個單元由多個過濾器驅動,這些過濾器幫助它們抵禦災難性遺忘,在這種遺忘中,神經網絡忘記了如何執行它們訓練過的任務。
Logistic sigmoid和雙曲正切
Logistic sigmoid由以下公式給出:
雙曲正切由以下公式給出:
這些單位密切相關,如:
在ReLU之前,這些是神經網絡最著名的選擇,但現在它們的使用被忽略了,因為當z為正時,它們的飽和值為一個高值;當z為負時,它們的飽和為一個低值;只有當z接近0時,它們才對輸入極為敏感。Sigmoid單元的廣泛飽和使得基於梯度的學習非常困難。