深度学习中的深度前馈网络简介
?幾乎所有的深度學習算法都可以被描述為一個相當簡單的配方:特定的數據集、代價函數、優化過程和模型。
????????在大多數情況下,優化算法可以定義為求解代價函數梯度為零的正規方程。我們可以替換獨立于其它組件的大多數組件,因此我們能得到很多不同的算法。
??????? 通常代價函數至少含有一項使學習過程進行統計估計的成分。最常見的代價函數是負對數似然、最小化代價函數導致的最大似然估計。代價函數也可能含有附加項,如正則化項。
??????? 組合模型、代價和優化算法來構建學習算法的配方同時適用于監督學習和無監督學習。
??????? 在某些情況下,由于計算原因,我們不能實際計算代價函數。在這種情況下,只要我們有近似其梯度的方法,那么我們仍然可以使用迭代數值優化近似最小化目標。
??????? 盡管有時候不顯然,但大多數學習算法都用到了上述配方。如果一個機器學習算法看上去特別獨特或是手動設計的,那么通常需要使用特殊的優化方法進行求解。有些模型,如決策樹或k-均值,需要特殊的優化,因為它們的代價函數有平坦的區域,使其不適合通過基于梯度的優化去最小化。
?
????????深度前饋網絡(deep feedforward network),也叫做前饋神經網絡(feedforward neurnal network)或者多層感知機(multilayer perceptron, MLP),是典型的深度學習模型。前饋網絡的目標是近似某個函數f*。例如,對于分類器,y=f*(x)將輸入x映射到一個類別y。前饋網絡定義了一個映射y=f(x;θ),并且學習參數θ的值,使它能夠得到最佳的函數近似。在前饋神經網絡內部,參數從輸入層向輸出層單向傳播,有異于遞歸神經網絡,它的內部不會構成有向環。
????????這種模型被稱為前向(feedforward)的,是因為信息流過x的函數,流經用于定義f的中間計算過程,最終到達輸出y。在模型的輸出和模型本身之間沒有反饋(feedback)連接。當前饋神經網絡被擴展成包含反饋連接時,它們被稱為循環神經網絡(recurrent neural network)。
????????前饋神經網絡被稱作網絡(network)是因為它們通常用許多不同函數復合在一起來表示。該模型與一個有向無環圖相關聯,而圖描述了函數是如何復合在一起的。例如,我們有三個函數f(1),f(2)和f(3)連接在一個鏈上以形成f(x)=f(3)(f(2)(f(1)(x)))。這些鏈式結構是神經網絡中最常用的結構。在這種情況下,f(1)被稱為網絡的第一層(first layer),f(2)被稱為第二層(second layer),依此類推。鏈的全長稱為模型的深度(depth)。正是因為這個術語才出現了”深度學習”這個名字。前饋網絡的最后一層被稱為輸出層(output layer)。在神經網絡訓練的過程中,我們讓f(x)去匹配f*(x)的值。訓練數據為我們提供了在不同訓練點上取值的、含有噪聲的f*(x)的近似實例。每個樣本x都伴隨著一個標簽y≈f*(x)。訓練樣本直接指明了輸出層在每一點x上必須做什么,它必須產生一個接近y的值。但是訓練數據并沒有指明其它層應該怎么做。學習算法必須決定如何使用這些層來產生想要的輸出,但是訓練數據并沒有說每個單獨的層應該做什么。相反,學習算法必須決定如何使用這些層來最好地實現f*的近似。因為訓練數據并沒有給出這些層中的每一層所需的輸出,所以這些層被稱為隱藏層(hidden layer)。
????????最后,這些網絡被稱為神經網絡是因為它們或多或少地受到神經科學的啟發。網絡中的每個隱藏層通常都是向量值的。這些隱藏層的維數決定了模型的寬度(width)。向量的每個元素都可以被視為起到類似一個神經元的作用。除了將層想象成向量到向量的單個函數,我們也可以把層想象成由許多并行操作的單元(unit)組成,每個單元表示一個向量到標量的函數。每個單元在某種意義上類似一個神經元,它接收的輸入來源于許多其它的單元,并計算它自己的激活值。使用多層向量值表示的想法來源于神經科學。用于計算這些表示的函數f(i)(x)的選擇,也或多或少地受到神經科學觀測的指引,這些觀測是關于生物神經元計算功能的。然而,現代的神經網絡研究受到更多的是來自許多數學和工程學科的指引,并且神經網絡的目標并不是完美地給大腦建模。我們最好將前饋神經網絡想成是為了實現統計泛化而設計出的函數近似機,它偶爾從我們了解的大腦中提取靈感,但并不是大腦功能的模型。
????????基于梯度的學習:梯度下降算法的收斂點取決于參數的初始值。線性模型和神經網絡的最大區別,在于神經網絡的非線性導致大多數我們感興趣的代價函數都變得非凸。這意味著神經網絡的訓練通常使用迭代的、基于梯度的優化,僅僅使得代價函數達到一個非常小的值;而不是像用于訓練線性回歸模型的線性方程求解器,或者用于訓練邏輯回歸或SVM的凸優化算法那樣保證全局收斂。凸優化從任何一種初始參數出發都會收斂(理論上如此,在實踐中也很魯棒但可能會遇到數值問題)。用于非凸損失函數的隨機梯度下降沒有這種收斂性保證,并且對參數的初始值很敏感。對于前饋神經網絡,將所有的權重值初始化為小隨機數是很重要的。偏置可以初始化為零或者小的正值。
????????我們當然也可以用梯度下降來訓練諸如線性回歸和支持向量機之類的模型,并且事實上當訓練集相當大時這是很常用的。從這點來看,訓練神經網絡和訓練其它任何模型沒有太大區別。
????????和其它的機器學習模型一樣,為了使用基于梯度的學習方法我們必須選擇一個代價函數,并且我們必須選擇如何表示模型的輸出。
????????代價函數:深度神經網絡設計中的一個重要方面是代價函數的選擇。用于訓練神經網絡的完整的代價函數,通常在我們這里描述的基本代價函數的基礎上結合一個正則項。
????????大多數現代的神經網絡使用最大似然來訓練。這意味著代價函數就是負的對數似然,它與訓練數據和模型分布間的交叉熵等價。代價函數的具體形式隨著模型而改變。
????????在信息論中,交叉熵是表示兩個概率分布p,q,其中p表示真實分布,q表示非真實分布,在相同的一組事件中,其中用非真實分布q來表示某個事件發生所需要的平均比特數。交叉熵可在神經網絡(機器學習)中作為損失函數,p表示真實標記的分布,q則為訓練后的模型的預測標記分布,交叉熵損失函數可以衡量p與q的相似性。
????????使用最大似然來導出代價函數的方法的一個優勢是,它減輕了為每個模型設計代價函數的負擔。明確一個模型p(y|x)則自動地確定了一個代價函數logp(y|x)。代價函數的梯度必須足夠的大和具有足夠的預測性,來為學習算法提供一個好的指引。
????????用于實現最大似然估計的交叉熵代價函數有一個不同尋常的特性,那就是當它被應用于實踐中經常遇到的模型時,它通常沒有最小值。對于離散型輸出變量,大多數模型以一種特殊的形式來參數化,即它們不能表示概率零和一,但是可以無限接近。邏輯回歸是其中一個例子。
????????均方誤差和平均絕對誤差在使用基于梯度的優化方法時往往成效不佳。一些飽和的輸出單元當結合這些代價函數時會產生非常小的梯度。這就是為什么交叉熵代價函數比均方誤差或者平均絕對誤差更受歡迎的原因之一。
????????輸出單元:代價函數的選擇與輸出單元的選擇緊密相關。大多數時候,我們簡單地使用數據分布和模型分布間的交叉熵。選擇如何表示輸出決定了交叉熵函數的形式。任何可用作輸出的神經網絡單元,也可以被用作隱藏單元。
用于高斯輸出分布的線性單元:一種簡單的輸出單元是基于仿射變換的輸出單元,仿射變換不具有非線性。這些單元往往被直接稱為線性單元。因為線性模型不會飽和,所以它們易于采用基于梯度的優化算法,甚至可以使用其它多種優化算法。
????????隱藏單元:大多數的隱藏單元可以描述為接受輸入向量x,計算仿射變換z=wTx+b,然后使用一個逐元素的非線性函數g(z)。大多數隱藏單元的區別僅僅在于激活函數g(z)的形式。
????????整流線性單元(Rectified Linear Unit, ReLU)是隱藏單元極好的默認選擇。許多其它類型的隱藏單元也是可用的。整流線性單元使用激活函數g(z)=max{0,z}。在z=0處不可微。不可微的隱藏單元通常只在少數點上不可微。整流線性單元易于優化,因為它們和線性單元非常類似。線性單元和整流線性單元的唯一區別在于整流線性單元在其一半的定義域上輸出為零。這使得只要整流線性單元處于激活狀態,它的導數都能保持較大。它的梯度不僅大而且一致。整流操作的二階導數幾乎處處為0,并且在整流線性單元處于激活狀態時,它的一階導數處處為1。這意味著相比于引入二階效應的激活函數來說,它的梯度方向對于學習來說更加有用。
????????有很多整流線性單元的擴展存在。整流線性單元的一個缺陷是它們不能通過基于梯度的方法學習那些使它們激活為零的樣本。整流線性單元的各種擴展保證了它們能在各個位置都接收到梯度。ReLU的擴展:Leaky Rectified Linear Unit(Leaky ReLU)、Parameteric Rectified Linear Unit(PReLU)、Randomized Leaky ReLU(RReLU)、Noisy ReLU、Maxout。
????????線性整流函數(Rectified Linear Unit, ReLU),又稱修正線性單元, 是一種人工神經網絡中常用的激活函數(activationfunction),通常指代以斜坡函數及其變種為代表的非線性函數。線性整流被認為有一定的生物學原理,并且由于在實踐中通常有著比其他常用激活函數(譬如邏輯函數)更好的效果,而被如今的深度神經網絡廣泛使用于諸如圖像識別等計算機視覺人工智能領域。
????????通常意義下,線性整流函數指代數學中的斜坡函數,即f(x)=max(0,x),而在神經網絡中,線性整流作為神經元的激活函數,定義了該神經元在線性變換wTx+b之后的非線性輸出結果。換言之,對于進入神經元的來自上一層神經網絡的輸入向量x,使用線性整流激活函數的神經元會輸出max(0, wTx+b)至下一層神經元或作為整個神經網絡的輸出(取決現神經元在網絡結構中所處位置)。
????????使用ReLU的優勢:相比于傳統的神經網絡激活函數,諸如邏輯函數(Logistic sigmoid)和tanh等雙曲函數,線性整流函數有著以下幾方面的優勢:
????????(1)、仿生物學原理:相關大腦方面的研究表明生物神經元的信息編碼通常是比較分散及稀疏的。通常情況下,大腦中在同一時間大概只有1%-4%的神經元處于活躍狀態。使用線性修正以及正則化(regularization)可以對機器神經網絡中神經元的活躍度(即輸出為正值)進行調試;相比之下,邏輯函數在輸入為0時達到1/2,即已經是半飽和的穩定狀態,不夠符合實際生物學對模擬神經網絡的期望。不過需要指出的是,一般情況下,在一個使用修正線性單元(即線性整流)的神經網絡中大概有50%的神經元處于激活態。
????????(2)、更加有效率的梯度下降以及反向傳播:避免了梯度爆炸和梯度消失問題。
????????(3)、簡化計算過程:沒有了其他復雜激活函數中諸如指數函數的影響;同時活躍度的分散性使得神經網絡整體計算成本下降。
??????? 整流線性單元和它們的這些擴展都是基于一個原則,那就是如果它們的行為更接近線性,那么模型更容易優化。使用線性行為更容易優化的一般性原則同樣也適用于除深度線性網絡以外的情景。
??????? 隱藏單元的設計仍然是一個活躍的研究領域,許多有用的隱藏單元類型仍有待發現。
????????架構設計:架構(architecture)是指網絡的整體架構:它應該具有多少單元,以及這些單元應該如何連接。
??????? 大多數神經網絡被組織成稱為層的單元組。大多數神經網絡架構將這些層布置成鏈式結構,其中每一層都是前一層的函數。在這種結構中,第一層由下式給出:h(1)=g(1)(W(1)Tx+b(1));第二層由h(2)=g(2)(W(2)Th(1)+b(2));給出,依次類推。
??????? 在這些鏈式架構中,主要的架構考慮是選擇網絡的深度和每一層的寬度。即使只有一個隱藏層的網絡也足夠適應訓練集。更深層的網絡通常能夠對每一層使用更少的單元數和更少的參數,并且經常容易泛化到測試集,但是通常也更難以優化。對于一個具體的任務,理想的網絡架構必須通過實驗,觀測在驗證集上的誤差來找到。
??????? 線性模型,通過矩陣乘法將特征映射到輸出,顧名思義,僅能表示線性函數。它具有易于訓練的優點,因為當使用線性模型時,許多損失函數會導出凸優化問題。不幸的是,我們經常希望我們的系統學習非線性函數。
??????? 具有隱藏層的前饋網絡提供了一種萬能近似框架。具體來說,萬能近似定理(universal approximation theorem)表明,一個前饋神經網絡如果具有線性輸出層和至少一層具有任何一種”擠壓”性質的激活函數(例如logistic sigmoid激活函數)的隱藏層,只要給予網絡足夠數量的隱藏單元,它可以以任意的精度來近似任何從一個有限維空間到另一個有限維空間的Borel可測函數。定義在Rn的有界閉集上的任意連續函數是Borel可測的,因此可以用神經網絡來近似。神經網絡也可以近似從任何有限維離散空間映射到另一個的任意函數。雖然原始定理最初以具有特殊激活函數的單元的形式來描述,這個激活函數當變量取絕對值非常大的正值和負值時都會飽和,萬能近似定理也已經被證明對于更廣泛類別的激活函數也是適用的,其中就包括現在常用的整流線性單元。
??????? 萬能近似定理意味著無論我們試圖學習什么函數,我們知道一個大的MLP一定能夠表示這個函數。然而,我們不能保證訓練算法能夠學得這個函數。即使MLP能夠表示該函數,學習也可能因兩個不同的原因而失敗。首先,用于訓練的優化算法可能找不到用于期望函數的參數值。其次,訓練算法可能由于過擬合而選擇了錯誤的函數。前饋網絡提供了表示函數的萬能系統,在這種意義上,給定一個函數,存在一個前饋網絡能夠近似該函數。不存在萬能的過程既能夠驗證訓練集上的特殊樣本,又能夠選擇一個函數來擴展到訓練集上沒有的點。萬能近似定理說明了,存在一個足夠大的網絡能夠達到我們所希望的任意精度,但是這個網絡并沒有說這個網絡有多大。具有單層的前饋網絡足以表示任何函數,但是網絡層可能大得不可實現,并且可能無法正確地學習和泛化。在很多情況下,使用更深的模型能夠減少表示期望函數所需的單元的數量,并且可以減少泛化誤差。根據經驗,更深的模型似乎確實在廣泛的任務中泛化得更好。
????????反向傳播:當我們使用前饋神經網絡接收輸入x并產生輸出y’時,信息通過網絡向前流動。輸入x提供初始信息,然后傳播到每一層的隱藏單元,最終產生輸出y’。這稱之為前向傳播(forward propagation)。在訓練過程中,前向傳播可以持續向前直到它產生一個標量代價函數J(θ)。反向傳播(back propagation)算法,經常簡稱為backprop,允許來自代價函數的信息通過網絡向后流動,以便計算梯度。實際上,反向傳播僅指用于計算梯度的方法,例如隨機梯度下降,使用該梯度來進行學習。反向傳播原則上它可以計算任何函數的導數(對于一些函數,正確的響應是報告函數的導數是未定義的)。
????????微積分中的鏈式法則:用于計算復合函數的導數。反向傳播是一種計算鏈式法則的算法,使用高效的特定運算順序。
????????設x是實數,f和g是從實數映射到實數的函數。假設y=g(x)并且z=f(g(x))=f(y).那么鏈式法則是說:
????????我們可以將這種標量情況進行擴展。假設x∈Rm,y∈Rn,g是從Rm到Rn的映射,f是從Rn到R的映射。如果y=g(x)并且z=f(y),那么:
????????使用向量記法,可以等價地寫成:
????????這里dy/dx是g的n*m的Jacobian矩陣。從這里看到,變量x的梯度可以通過Jacobian矩陣dy/dx和梯度▽yz相乘來得到。反向傳播算法由圖中每一個這樣的Jacobian梯度的乘積操作所組成。通常我們將反向傳播算法應用于任意維度的張量,而不僅僅用于向量。從概念上講,這與使用向量的反向傳播完全相同。唯一的區別是如何將數字排列成網格以形成張量。我們可以想象,在我們運行反向傳播之前,將每個張量變平為一個向量,計算一個向量值梯度,然后將該梯度重新構造成一個張量。從這種重新排列的觀點上看,反向傳播仍然只是將Jacobian乘以梯度。
????????為了表示值z關于張量X的梯度,我們記為▽Xz,就像X是向量一樣。X的索引現在有多個坐標,例如,一個3維的張量由三個坐標索引。我們可以通過使用單個變量i來表示完整的索引元組,從而完全抽象出來。對所有可能的元組i,(▽Xz)i給出dz/dXi.這與向量中索引的方式完全一致,(▽xz)i給出dz/dxi。使用這種記法,我們可以寫出適用于張量的鏈式法則。如果Y=g(X)并且z=f(Y),那么:
????????遞歸地使用鏈式法則來實現反向傳播:使用鏈式法則,我們可以直接寫出某個標量關于計算圖中任何產生該標量的節點的梯度的代數表達式。然而,實際在計算機中計算該表達式時會引入一些額外的考慮。具體來說,許多子表達式可能在梯度的整個表達式中重復若干次。任何計算梯度的程序都需要選擇是存儲這些子表達式還是重新計算它們幾次。在某些情況下,計算兩次相同的子表達式純粹是浪費。在復雜圖中,可能存在指數多的這種計算上的浪費,使得簡單的鏈式法則不可實現。在其它情況下,計算兩次相同的子表達式可能是以較高的運行時間為代價來減少內存開銷的有效手段。
????????張量通??梢跃哂腥我饩S度,并且包含標量、向量和矩陣。
????????反向傳播算法的軟件實現通常提供操作和其bprop方法,所以深度學習軟件庫的用戶能夠對使用諸如矩陣乘法、指數運算、對數運算等等常用操作構建的圖進行反向傳播。反向傳播不是計算梯度的唯一方式或最佳方式,但它是一個非常實用的方法。
????????前饋網絡可以被視為一種高效的非線性函數近似器,它以使用梯度下降來最小化函數近似誤差為基礎。
????????反向傳播(Backpropagation,縮寫為BP)是”誤差反向傳播”的簡稱,是一種與最優化方法(如梯度下降法)結合使用的,用來訓練人工神經網絡的常見方法。該方法對網絡中所有權重計算損失函數的梯度。這個梯度會反饋給最優化方法,用來更新權值以最小化損失函數。反向傳播要求有對每個輸入值想得到的已知輸出,來計算損失函數梯度。因此,它通常被認為是一種監督式學習方法,雖然它也用在一些無監督網絡(如自動編碼器)中。反向傳播要求人工神經元(或”節點”)的激活函數可微。
????????任何監督學習算法的目標是找到一個能把一組輸入最好的映射到其正確的輸出的函數。例如一個簡單的分類任務,其中輸入是動物的圖像,正確的輸出將是動物的名稱。一些輸入和輸出模式可以很容易地通過單層神經網絡(如感知器)學習。但是這些單層的感知機不能學習一些比較簡單的模式,例如那些非線性可分的模式。例如,人可以通過識別動物的圖像的某些特征進行分類,例如肢的數目,皮膚的紋理(無論是毛皮,羽毛,鱗片等),該動物的體型,以及種種其他特征。但是,單層神經網絡必須僅僅使用圖像中的像素的強度來學習一個輸出一個標簽函數。因為它被限制為僅具有一個層,所以沒有辦法從輸入中學習到任何抽象特征。多層的網絡克服了這一限制,因為它可以創建內部表示,并在每一層學習不同的特征。第一層可能負責從圖像的單個像素的輸入學習線條的走向。第二層可能就會結合第一層所學并學習識別簡單形狀(如圓形)。每升高一層就學習越來越多的抽象特征,如上文提到的用來圖像分類。每一層都是從它下方的層中找到模式,就是這種能力創建了獨立于為多層網絡提供能量的外界輸入的內部表達形式。 反向傳播算法的發展的目標和動機是找到一種訓練的多層神經網絡的方法,于是它可以學習合適的內部表達來讓它學習任意的輸入到輸出的映射
????????反向傳播算法(BP算法)主要由兩個階段:激勵傳播與權重更新。
????????第1階段:激勵傳播:
????????每次迭代中的傳播環節包含兩步:(前向傳播階段)將訓練輸入送入網絡以獲得激勵響應;(反向傳播階段)將激勵響應同訓練輸入對應的目標輸出求差,從而獲得隱層和輸出層的響應誤差。
????????第2階段:權重更新:
????????對于每個突觸上的權重,按照以下步驟進行更新:將輸入激勵和響應誤差相乘,從而獲得權重的梯度;將這個梯度乘上一個比例并取反后加到權重上。
????????這個比例(百分比)將會影響到訓練過程的速度和效果,因此稱為”訓練因子”。梯度的方向指明了誤差擴大的方向,因此在更新權重的時候需要對其取反,從而減小權重引起的誤差。
????????第1和第2階段可以反復循環迭代,直到網絡的對輸入的響應達到滿意的預定的目標范圍為止。
????? ? 以上內容主要摘自:?《深度學習中文版》?、?維基百科
????? ? GitHub:? https://github.com/fengbingchun/NN_Test?
--------------------- 本文來自 fengbingchun 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/fengbingchun/article/details/79881847?utm_source=copy
總結
以上是生活随笔為你收集整理的深度学习中的深度前馈网络简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shopee店铺没有流量?3步教你如何诊
- 下一篇: if中逻辑运算符表达式运行顺序