深度前饋網絡學習方法

什麼是深度前饋網絡

深度前饋網絡(deep feedforward network),也叫做前饋神經網絡(feedforward neurnal network)或者多層感知機(multilayer perceptron, MLP),是典型的深度學習模型。前饋網絡的目標是近似某個函數f*。例如,對於分類器,y=f*(x)將輸入x映射到一個類別y。前饋網絡定義了一個映射y=f(x;θ),並且學習參數θ的值,使它能夠得到最佳的函數近似。

#我們可以把'深度前饋網絡'拆開來看:
'深度':在解釋這個概念之前我們要明確一點就是,所謂的機器學習,我們的目標就是研究
       一個可以解決實際問題的數學模型(函數)。 例如,我們有三個函數f,g和t,
       連接在一個鏈上以形成h(x)=f(g(t(x)))。這些鏈式結構是神經網絡中最常用的結構。
       在這種情況下,f(1)被稱爲網絡的第一層(first layer),f(2)被稱爲第二層(second layer),
       依此類推。鏈的全長稱爲模型的深度(depth)。正是因爲這個術語纔出現了”深度學習”這個名字。

'前饋':在前饋神經網絡內部,參數從輸入層向輸出層單向傳播,有異於遞歸神經網絡,它的內部不會構成有向環。

'網絡':前饋神經網絡被稱作網絡(network)是因爲它們通常用許多不同函數複合在一起來表示。 
	該模型與一個有向無環圖相關聯,而圖描述了函數是如何複合在一起的。

學習路線

一種理解前饋網絡的方式是從線性模型開始,並考慮如何克服它的侷限性。線性模型如邏輯迴歸和線性迴歸,他們無論是通過閉解形式還是凸優化,他們都能高效且可靠的擬合。但是線性模型也有明顯的缺陷,就是模型的能力被侷限在線性函數裏,無法理解任何兩個輸入變量間的關係。
爲了解決線性模型的這種侷限性問題,我們會使用一種擴展的線性模型來表示xx的非線性函數:我們不用線性模型表示xx本身,而是用在一個變換後的φ(x)φ(x)上。這裏的φφ是一個非線性變換。
深度學習的策略就是去學習φφ

實例:關於學習XORXOR

爲了使前饋網絡的想法更加具體,我們首先從一個可以完整工作的前饋網絡說起。這個例子解決一個非常簡單的任務:學習XORXOR函數。
XORXOR函數(‘異或’邏輯)是兩個二進制值x1x_{1}x2x_{2}的運算。當這些二進制值中恰好有一個爲1時,XORXOR函數返回值爲1.其餘情況返回值爲0.XORXOR函數提供了我們想要學習的目標函數y=f(x)y=f^{*}(x).我們的模型給出了一個函數y=f(x;θ)y=f(x;\theta ),並且我們的學習算法會不斷調整參數θ\theta來使得ff儘可能接近ff^{*}

在這裏插入圖片描述
上圖中的藍色字體表明學習的函數必須在每個點輸出的值。
左圖 :直接應用於原始輸入的線性模型不能實現XORXOR函數。當x1=0x_{1}=0時,模型的輸出必須隨着x2x_{2}的增大而增大。當x1=1x_{1}=1時,模型的輸出必須隨着x2x_{2}的增大而減小。線性模型必須對x2x_{2}使用固定的係數,因此,線性模型無法解決這個問題。

右圖:右圖由神經網絡提取了特徵並形成了新的空間,在這個空間中線性模型可以解決這個問題了:我們在新的空間中將輸出必須爲1的兩個點摺疊到了特徵空間中的單個點。換句話說,非線性特徵將x=[1,0]Tx=[1,0]^{T}x=[0,1]Tx=[0,1]^{T}都映射到了特徵空間中的單個點h=[1,0]Th=[1,0]^{T}。這樣做的好處是增加了函數的表達能力。新的空間可以用一條直線將0和1分開。

'這個實例想要說明的問題是',線性模型在表達上很多時候會有侷限性,這也是爲什麼線性模型計算簡單但是
我們神經網絡卻通常使用非線性模型的原因。

基於梯度的學習

梯度學習的目的:尋求最優的方式使得代價函數下降。
現在問題來了,什麼是代價函數?它可以做什麼?
百度百科的解釋如下:
損失函數(loss function)或代價函數(cost function)是將隨機事件或其有關隨機變量的取值映射爲非負實數以表示該隨機事件的“風險”或“損失”的函數。在應用中,損失函數通常作爲學習準則與優化問題相聯繫,即通過最小化損失函數求解和評估模型。例如在統計學和機器學習中被用於模型的參數估計(parameteric estimation)。

百度百科的解釋太抽象,實際情況是這樣:
我們爲了解決實際問題,會給出一個解決問題的數學模型,注意,這裏的數學模型是我們根據經驗得出的,它的準確度使我們要關心的問題。而我們在進行模型優化的時候,我們事先知道的是真實的結果。現在我們就要拿我們設計的模型計算出來一個結果去匹配這個真實的結果。這中間就產生了誤差,這個誤差就是我們的代價或者損失。我們現在要去儘可能的減少這個損失。
通俗的說,我們優化網絡做的事情就是最小化代價函數
概率論中我們分析數據間的差距大不大,通常會採用均方誤差或者平均絕對誤差。但是當我們結合梯度下降的方法進行優化的時候,效果往往很差。原因是一些飽和的輸出單元在結合這些代價函數時會產生非常小的梯度。爲了解決這個問題,我們代價函數通常會採用交叉熵方法。

如果大家對交叉熵不是很理解,可以關注我的這篇博文
啥也不懂照樣看懂交叉熵損失函數

如果大家想更多一些瞭解代價函數、梯度相關的概念,可以參考我的這篇文章
簡明扼要解釋梯度下降

輸出單元

下面我們簡單的討論一下輸出單元這個概念。這個概念很重要,因爲它和代價函數的選擇緊密相關。大多數時候,我們簡單的使用數據分佈和模型分部間的交叉熵。選擇如何表示輸出決定了交叉熵函數的形式。

用於高斯輸出分佈的線性單元
一種簡單的輸出單元是基於仿射變換的輸出單元,放射變換不具有非線性。這些單元往往被稱爲線性單元。
線性輸出層經常被用來產生條件高斯分佈的均值:
p(yx)=N(y;y^,I)p(y|x)=N(y;\hat{y},I)
最大化其對數似然此時等價於最小化均方誤差。因爲線性單元不會飽和,所以他們易於採用基於梯度的優化算法,甚至可以使用其他多種優化算法。

用於Bernoulli輸出分佈的sigmoid單元
許多任務需要預測二值型變量yy的值。具有兩個類的分類問題可以歸結爲這種形式。
此時最大似然的方法就是定義yyxx條件下的Bernoulli分佈。
但是這種分佈策略有一個嚴重的問題就是,由於它是一個二值分佈,當輸出的值在我們的設定區間外部時,模型的輸出對其參數的梯度全部變爲0.梯度爲0通常是有問題的,因爲學習算法對於如何改善相應的參數不再具有指導意義。
這個時候我們期望使用一種新的方法來保證無論何時模型給出了錯誤的答案時,總能有一個較大的梯度。這種方法就是基於sigmoid輸出單元結合最大似然來實現的。

如果大家對於sigmoid不瞭解,可以關注我的另外一篇博文
說一說激活函數是個啥

用於Multinoulli輸出分佈的softmax單元
上面我們提到了輸出結果是一個二元分類的問題時的解決方案,但是很多時候我們想要表示的結果往往是多元化的。這時候我們可以使用softmax分類函數。
softmax的輸出結果是一個歸一化的概率分佈。
關於softmax函數,大家可以參考博文
通俗易懂的講解Softmax

隱藏單元

以上我們簡單的討論了神經網絡的設計選擇問題,這對於使用基於梯度的優化方法來訓練的大多數參數化機器學習模型都是通用的。現在我們討論一個前饋神經網絡獨有的問題:該如何選擇隱藏單元的類型,這些隱藏單元用在模型的隱藏層中。

爲什麼叫隱藏單元
在我們討論隱藏單元之前,搞清楚爲什麼叫隱藏單元是有必要的。

我們在神經網絡的訓練過程中,我們讓訓練的模型去匹配最終的輸出值。訓練數據爲我們提供了在不同訓練點上取值的、含有噪聲的近似實例。每個樣本xx都伴隨着一個標籤yy。訓練樣本直接指明瞭輸出層在每個xx上必須做什麼:它必須產生一個接近標籤的值。但是訓練數據並沒有直接說明其他層應該怎麼做。學習算法必須決定如何使用這些層來產生想要的輸出,但是訓練數據並沒有說每個單獨的層應該做什麼。相反,學習算法必須決定如何使用這些層來最好的實現最終真實結果的近似。因爲訓練數據沒有給出這些層中每一層所需要的輸出,所以這些層被稱爲隱藏層

常用的一些隱藏層
整流線型單元

整流線型單元及其擴展:絕對值整流、滲漏整流線型單元、參數化整流線型單元

logistic sigmoid與雙曲正切函數

其他隱藏單元
關於這些隱藏層的單元介紹,大家可以參照我的博文
說一說激活函數是個啥
這裏面只是大概的介紹了每個激活函數的概念。詳細的原理我之後會持續更新。

架構設計

神經網絡設計的另一個關鍵點是確定它的架構:它應該具有多少個單元,以及這些單元該如何連接。

大多數神經網絡被組織成稱爲層的單元組。大多數神經網絡架構將這些層佈置成鏈式結構,其中每一層都是前一層的函數。在這種結構中,第一層可以表示如下:
h1=g1(W(1)Tx+b(1))h^{1}=g^{1}(W^{(1)T}x+b^{(1)})
第二層由
h2=g2(W(2)Tx+b(2))h^{2}=g^{2}(W^{(2)T}x+b^{(2)})
給出,以此類推。

在這些鏈式架構中,主要的架構考慮是選擇網絡的深度和每一層的寬度。我們將會看到,即使只有一個隱藏層的網絡也足夠適應訓練集。更深層的網絡通常能夠對每一層使用更少的單元數和更少的參數,並且經常容易泛化到測試集,但是通常也更難以優化。對於一個具體的任務,理想的網絡架構必須通過實驗,觀測在驗證集上的誤差來找到。

關於架構的小結論:
1,具有單層的前饋網絡足以表示任何函數,但是網絡層可能大的不可實現;
2,使用更深的模型能夠減少表示期望函數所需的單元的數量,並且可以減少泛化誤差。

反向傳播算法

當我們使用前饋神經網絡接收輸入併產生輸出時,信息通過網絡向前流動,這個過程稱爲前向傳播。訓練過程中,前向傳播可以持續向前直到它產生了一個標量代價函數。反向傳播算法允許來自代價函數的信息通過網絡向後流動,以便計算梯度。

反向傳播這個術語經常被誤解爲用於多層神經網絡的整個學習算法,實際上,反向傳播僅指用於計算梯度的算法。

關於反向傳播的使用示例,大家可以參照我的博文
CNN卷積神經網絡原理詳解(下),這裏面詳細介紹了反向傳播如何通過鏈式法則實現的全過程。

術語介紹

如果您已經閱讀到了這裏,那麼恭喜您,關於前饋神經網絡要掌握的概念基本上您已經全部看完了。(關於裏面涉及到的模型細節問題,我們會在其他文章裏面詳細討論。但是關於什麼是前饋神經網絡,這些就足夠了)
上面的介紹裏面涉及了一些可能會影響理解的術語,例如:凸函數、仿射變換、最大似然原理、正定矩陣等。如果您對這些非常瞭解,那麼恭喜您,這篇文章剩下的內容您可以跳過了,如果您忘記了這些概念,想要了解一下,那麼歡迎繼續下面的內容。

凸函數

先從凸優化說起

凸優化問題(OPT,convex optimization problem)指定義在凸集中的凸函數最優化的問題。儘管凸優化的條件比較苛刻,但仍然在機器學習領域有十分廣泛的應用。

凸優化的優勢
1,凸優化問題的局部最優解就是全局最優解
2,很多非凸問題都可以被等價轉化爲凸優化問題或者被近似爲凸優化問題(例如拉格朗日對偶問題)
3,凸優化問題的研究較爲成熟,當一個具體被歸爲一個凸優化問題,基本可以確定該問題是可被求解的

幾何意義:
直觀來說,任取一個集合中的兩點練成一條線段,如果這條線段完全落在該集合中,那麼這個集合就是凸集。
在這裏插入圖片描述
凸函數
定義:
在這裏插入圖片描述
幾何意義

在這裏插入圖片描述
一句話總結:凸優化可以幫助我們更好的尋求最優解。

極大似然函數

首先我們用一張圖來說明一下什麼是極大似然原理

在這裏插入圖片描述
總結起來,最大似然估計的目的就是:利用已知的樣本結果,反推最有可能(最大概率)導致這樣結果的參數值。

原理:極大似然估計是建立在極大似然原理的基礎上的一個統計方法,是概率論在統計學中的應用。極大似然估計提供了一種給定觀察數據來評估模型參數的方法,即:“模型已定,參數未知”。通過若干次試驗,觀察其結果,利用試驗結果得到某個參數值能夠使樣本出現的概率爲最大,則稱爲極大似然估計。
關於極大似然估計的詳細說明,大家可以參考
極大似然估計詳解,寫的太好了這篇文章。

仿射變換

神經網絡的正向傳播中進行的矩陣乘積運算在幾何學領域被稱爲“仿射變換(Affine)
仿射變換的效果如下:
在這裏插入圖片描述
以上所有變換都屬於仿射變換。
關於仿射變換的特點總結有三:
1,變換前是直線的,變換後依然是直線
2,直線比例保持不變
3,變換前是原點的,變換後依然是原點

仿射變換的好處就是:它不會改變原有數據的結構(這裏的結構不是指形狀,而是說,原有數據是線性的,變換後依然線性),但是可以增加數據的適配性。

正定矩陣

正定矩陣的概念是從正定二次型引入的,對稱矩陣AA爲正定的充要條件即該矩陣的特徵值全爲正數。

在這裏插入圖片描述

幾何意義理解正定矩陣爲
在這裏插入圖片描述

總結

本篇博文主要是從概念上介紹了深度前饋網絡在我們深度學習中的地位和重要性。其中包含了深度前饋網絡名字的由來,瞭解該網絡如何入手,通過一個實例XORXOR闡述了線性模型的侷限性。在梯度學習的小節裏面講述了交叉熵對比於均方誤差的優勢,介紹了sigmoid和softmax的使用區別。激活函數的大體用法是以對博文的引用形式進行了說明,架構設計裏面說明了爲何要講網絡做深的原因,最後提到了反向傳播算法。這些介紹只是一個學習深度前饋網絡的引子,如果想要進一步研究,還需要對裏面的每個知識點認真研究。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章