來源:知乎
前饋神經網絡(Deep feedforward network) 可以說是深度學習最核心的模型之一。前饋神經網絡的目的是對于輸入
,假設我們要模拟從輸入到輸出的真實函數
,神經網絡想要找到這樣的映射
和合适的參數
使得其預測盡量接近于真實函數
。
一.解釋前饋神經網絡
下面分别解釋一下前饋,神經,和網絡三個詞的含義。
1.前饋
前饋代表了所有的資訊都從輸入 經過某些中間的計算而最終輸出到
,而不存在從模型的輸出到輸入的回報(feedback),對于有回報的情況即為循環神經網絡(recurrent neural network)前饋網絡已經廣泛應用在工業界,其重要性不言而喻,而且它也是了解在自然語言進行中應用廣泛的循環神經網絡的基礎。
2.網絡
而網絡則代表了該模型是将不同的基本函數組合在一起形成的模型。
例如通過将三個函數
串聯起來構成最終的函數
,
就是網絡的第一層,
就是網絡的第二層,以此類推。這個鍊的長度又被稱作網絡的深度(depth),深度學習也是以得名。
而前饋網絡的最後一層被稱作輸出層(output layer),對于我們的訓練資料,每一個輸入
都有相應的标記
,而網絡的輸出層的結果需要盡量接近
。
但對于其它層來說,和訓練資料沒有這樣的直接對應關系,即我們的算法隻要求最後的輸出接近于真實的标記,而對于中間每層的目的并沒有明确定義,是以這些層又被稱作隐藏層(hidden layer)。
3.神經
神經代表了它的靈感部分受到了神經科學的影響。每一隐藏層通常是矢量值,而這些隐藏層的次元定義了網絡的寬度。我們可以将每層看做從一個大的從矢量到矢量的函數映射,但從另一方面也可以将矢量的每個元素看做一個小的神經元,每個神經元進行了矢量到标量的映射操作(這一操作又被稱作激活函數,activation function),而每一層是不同的神經元并行運算的綜合。
前饋神經網絡的提出是為了解決傳統線性模型的一些限制。線性模型如邏輯回歸或者線性回歸的優勢是我們有的可以快速求出解析解,有的可以利用convex optimization來解決。但同時,線性模型也受限于隻能模拟線性關系,而很難學習不同輸入參數間的關系。
為了将線性模型擴充到非線性函數,我們可以對于輸入
做非線性變換
,再利用對于的線性模型解決該問題,例如支援向量機中提到的kernel trick。我們可以将
了解為從
向其蘊含的特征的映射,或者了解為對于
的一種新的表征(representation)。
- 對于如何選取映射 有如下幾種思路:選取一個比較通用的
前饋神經網絡初探 ,例如kernel trick中的RBF kernel(也稱作Gaussian kernel),如果前饋神經網絡初探 的次元足夠高,我們總能夠使其比對訓練集,但很難推廣到測試集。因為這種模型隻是假設了局域變化不大的前提,而并沒有包含任何有價值的先驗資訊。前饋神經網絡初探 - 人工選取合适的 ,實際上這是在深度學習流行之前普遍采用的方法,但是這需要大量的相關經驗與人力資源,而且不同領域間的知識很難遷移。
前饋神經網絡初探 - 深度學習的政策是利用神經網絡學習合适的用隐藏層代表的映射 ,即模拟
前饋神經網絡初探 ,其中前饋神經網絡初探 是前饋神經網絡初探 的模拟參數,而前饋神經網絡初探 是從前饋神經網絡初探 到最終輸出的映射參數。它結合了第一和第二種方法,我們可以從比較通用的函數家族中學習前饋神經網絡初探 ,同時也可以利用經驗對函數家族的選擇進行一些限制。與第二種方法比較,其優勢在于我們隻需要找到一個比較合适的函數家族,而不需要知道确切的函數。前饋神經網絡初探
二.前饋神經網絡解決問題原理
下面就利用異或操作的模拟來簡單解釋前饋神經網絡解決非線性問題的原理。
用神經網絡模拟XOR
異或操作XOR定義為對于兩個二進制輸入
,如果其中有且僅有一個為1,則XOR輸出1,否則輸出0,如下圖所示:
從圖中可以看出,我們無法對該空間進行線性分割,使得兩個輸出為1的點落在分割線同一側,而兩個輸出為0的點落在分割線另一側。是以,傳統的線性模型無法解決這一問題。為了解決這個問題,我們需要找到一個新的特征空間,使得在新空間中能用線性模型來解決。
我們引入一個如下圖所示的簡單的具有一層隐藏層的前饋網絡模型:
注意圖中兩種方式表示是等價的,左圖是具體畫出每個節點,而右圖是簡化為層。
假設我們用
模拟從輸入到隐藏層的映射,而用
模拟從隐藏層到輸出的線性映射,則整個模型可以表示為
,那我們如何選取
呢,通常在神經網絡中我們選稱作rectified linear unit(整流線性單元),簡稱為RELU的激活函數,其形式為
。
同時選取
為線性函數,我們的模型轉化為
。
我們的輸入用矩陣表示為:
而希望模拟的對應的輸出是:
對于我們的模型,我們可以找到如下的解【問題簡單,是以可以很快得到】:
同時
。
我們可以做如下驗證,經過
操作後,我們的隐藏層的值為:
即我們已經從原空間映射到隐藏層所代表的空間:
可以看到在新空間中,原來的輸出為1的兩個點已經彙聚在同一點
,是以我們可以找到該空間的線性分割,使得兩個輸出為1的點落在分割線同一側,而兩個輸出為0的點落在分割線另一側。
我們繼續将h,w,b代入可得最終輸出:
這個例子中,我們用簡單的神經網絡并找到合适的解來模拟XOR操作,實際中問題要複雜得多,而我們不能這麼容易的猜到合适的解,這時候我們就需要利用梯度下降算法來逼近合适的解。