日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

神經(jīng)網(wǎng)絡(luò)快速入門:什么是多層感知器和反向傳播?

 LibraryPKU 2018-06-11

來源:機(jī)器之心

作者:Ujjwal Karn


[導(dǎo)讀]本文對多層感知器和反向傳播進(jìn)行入門級的介紹。作者 Ujjwal Karn 在機(jī)器學(xué)習(xí)領(lǐng)域有三年的從業(yè)和研究經(jīng)驗(yàn),對深度學(xué)習(xí)在語音和視覺識別上的應(yīng)用非常感興趣。


人工神經(jīng)網(wǎng)絡(luò)是一種計(jì)算模型,啟發(fā)自人類大腦處理信息的生物神經(jīng)網(wǎng)絡(luò)。人工神經(jīng)網(wǎng)絡(luò)在語音識別、計(jì)算機(jī)視覺和文本處理領(lǐng)域取得了一系列突破,讓機(jī)器學(xué)習(xí)研究和產(chǎn)業(yè)感到了興奮。在本篇博文中,我們將試圖理解一種稱為「多層感知器(Multi Layer Perceptron)」的特定的人工神經(jīng)網(wǎng)絡(luò)。


單個(gè)神經(jīng)元


神經(jīng)網(wǎng)絡(luò)中計(jì)算的基本單元是神經(jīng)元,一般稱作「節(jié)點(diǎn)」(node)或者「單元」(unit)。節(jié)點(diǎn)從其他節(jié)點(diǎn)接收輸入,或者從外部源接收輸入,然后計(jì)算輸出。每個(gè)輸入都輔有「權(quán)重」(weight,即 w),權(quán)重取決于其他輸入的相對重要性。節(jié)點(diǎn)將函數(shù) f(定義如下)應(yīng)用到加權(quán)后的輸入總和,如圖 1 所示:


圖 1:單個(gè)神經(jīng)元


此網(wǎng)絡(luò)接受 X1 和 X2 的數(shù)值輸入,其權(quán)重分別為 w1 和 w2。另外,還有配有權(quán)重 b(稱為「偏置(bias)」)的輸入 1。我們之后會(huì)詳細(xì)介紹「偏置」的作用。


神經(jīng)元的輸出 Y 如圖 1 所示進(jìn)行計(jì)算。函數(shù) f 是非線性的,叫做激活函數(shù)。激活函數(shù)的作用是將非線性引入神經(jīng)元的輸出。因?yàn)榇蠖鄶?shù)現(xiàn)實(shí)世界的數(shù)據(jù)都是非線性的,我們希望神經(jīng)元能夠?qū)W習(xí)非線性的函數(shù)表示,所以這種應(yīng)用至關(guān)重要。


每個(gè)(非線性)激活函數(shù)都接收一個(gè)數(shù)字,并進(jìn)行特定、固定的數(shù)學(xué)計(jì)算 [2]。在實(shí)踐中,可能會(huì)碰到幾種激活函數(shù):


  • Sigmoid(S 型激活函數(shù)):輸入一個(gè)實(shí)值,輸出一個(gè) 0 至 1 間的值 σ(x) = 1 / (1 + exp(?x))

  • tanh(雙曲正切函數(shù)):輸入一個(gè)實(shí)值,輸出一個(gè) [-1,1] 間的值 tanh(x) = 2σ(2x) ? 1

  • ReLU:ReLU 代表修正線性單元。輸出一個(gè)實(shí)值,并設(shè)定 0 的閾值(函數(shù)會(huì)將負(fù)值變?yōu)榱悖ゝ(x) = max(0, x)


圖 2 表示了上述的激活函數(shù)


圖 2:不同的激活函數(shù)。


偏置的重要性:偏置的主要功能是為每一個(gè)節(jié)點(diǎn)提供可訓(xùn)練的常量值(在節(jié)點(diǎn)接收的正常輸入以外)。神經(jīng)元中偏置的作用,詳見這個(gè)鏈接:http:///q/2480650/3297280


前饋神經(jīng)網(wǎng)絡(luò)


前饋神經(jīng)網(wǎng)絡(luò)是最先發(fā)明也是最簡單的人工神經(jīng)網(wǎng)絡(luò) [3]。它包含了安排在多個(gè)層中的多個(gè)神經(jīng)元(節(jié)點(diǎn))。相鄰層的節(jié)點(diǎn)有連接或者邊(edge)。所有的連接都配有權(quán)重。


圖 3 是一個(gè)前饋神經(jīng)網(wǎng)絡(luò)的例子。


圖 3: 一個(gè)前饋神經(jīng)網(wǎng)絡(luò)的例子


一個(gè)前饋神經(jīng)網(wǎng)絡(luò)可以包含三種節(jié)點(diǎn):


1. 輸入節(jié)點(diǎn)(Input Nodes):輸入節(jié)點(diǎn)從外部世界提供信息,總稱為「輸入層」。在輸入節(jié)點(diǎn)中,不進(jìn)行任何的計(jì)算——僅向隱藏節(jié)點(diǎn)傳遞信息。

2. 隱藏節(jié)點(diǎn)(Hidden Nodes):隱藏節(jié)點(diǎn)和外部世界沒有直接聯(lián)系(由此得名)。這些節(jié)點(diǎn)進(jìn)行計(jì)算,并將信息從輸入節(jié)點(diǎn)傳遞到輸出節(jié)點(diǎn)。隱藏節(jié)點(diǎn)總稱為「隱藏層」。盡管一個(gè)前饋神經(jīng)網(wǎng)絡(luò)只有一個(gè)輸入層和一個(gè)輸出層,但網(wǎng)絡(luò)里可以沒有也可以有多個(gè)隱藏層。

3. 輸出節(jié)點(diǎn)(Output Nodes):輸出節(jié)點(diǎn)總稱為「輸出層」,負(fù)責(zé)計(jì)算,并從網(wǎng)絡(luò)向外部世界傳遞信息。


在前饋網(wǎng)絡(luò)中,信息只單向移動(dòng)——從輸入層開始前向移動(dòng),然后通過隱藏層(如果有的話),再到輸出層。在網(wǎng)絡(luò)中沒有循環(huán)或回路 [3](前饋神經(jīng)網(wǎng)絡(luò)的這個(gè)屬性和遞歸神經(jīng)網(wǎng)絡(luò)不同,后者的節(jié)點(diǎn)連接構(gòu)成循環(huán))。


下面是兩個(gè)前饋神經(jīng)網(wǎng)絡(luò)的例子:


1. 單層感知器——這是最簡單的前饋神經(jīng)網(wǎng)絡(luò),不包含任何隱藏層。你可以在 [4] [5] [6] [7] 中了解更多關(guān)于單層感知器的知識。

2. 多層感知器——多層感知器有至少一個(gè)隱藏層。我們在下面會(huì)只討論多層感知器,因?yàn)樵诂F(xiàn)在的實(shí)際應(yīng)用中,它們比單層感知器要更有用。


多層感知器


多層感知器(Multi Layer Perceptron,即 MLP)包括至少一個(gè)隱藏層(除了一個(gè)輸入層和一個(gè)輸出層以外)。單層感知器只能學(xué)習(xí)線性函數(shù),而多層感知器也可以學(xué)習(xí)非線性函數(shù)。


圖 4:有一個(gè)隱藏層的多層感知器


圖 4 表示了含有一個(gè)隱藏層的多層感知器。注意,所有的連接都有權(quán)重,但在圖中只標(biāo)記了三個(gè)權(quán)重(w0,,w1,w2)。


輸入層:輸入層有三個(gè)節(jié)點(diǎn)。偏置節(jié)點(diǎn)值為 1。其他兩個(gè)節(jié)點(diǎn)從 X1 和 X2 取外部輸入(皆為根據(jù)輸入數(shù)據(jù)集取的數(shù)字值)。和上文討論的一樣,在輸入層不進(jìn)行任何計(jì)算,所以輸入層節(jié)點(diǎn)的輸出是 1、X1 和 X2 三個(gè)值被傳入隱藏層。


隱藏層:隱藏層也有三個(gè)節(jié)點(diǎn),偏置節(jié)點(diǎn)輸出為 1。隱藏層其他兩個(gè)節(jié)點(diǎn)的輸出取決于輸入層的輸出(1,X1,X2)以及連接(邊界)所附的權(quán)重。圖 4 顯示了隱藏層(高亮)中一個(gè)輸出的計(jì)算。其他隱藏節(jié)點(diǎn)的輸出計(jì)算同理。需留意 *f *指代激活函數(shù)。這些輸出被傳入輸出層的節(jié)點(diǎn)。


輸出層:輸出層有兩個(gè)節(jié)點(diǎn),從隱藏層接收輸入,并執(zhí)行類似高亮出的隱藏層的計(jì)算。這些作為計(jì)算結(jié)果的計(jì)算值(Y1 和 Y2)就是多層感知器的輸出。


給出一系列特征 X = (x1, x2, ...) 和目標(biāo) Y,一個(gè)多層感知器可以以分類或者回歸為目的,學(xué)習(xí)到特征和目標(biāo)之間的關(guān)系。


為了更好的理解多層感知器,我們舉一個(gè)例子。假設(shè)我們有這樣一個(gè)學(xué)生分?jǐn)?shù)數(shù)據(jù)集:



兩個(gè)輸入欄表示了學(xué)生學(xué)習(xí)的時(shí)間和期中考試的分?jǐn)?shù)。最終結(jié)果欄可以有兩種值,1 或者 0,來表示學(xué)生是否通過的期末考試。例如,我們可以看到,如果學(xué)生學(xué)習(xí)了 35 個(gè)小時(shí)并在期中獲得了 67 分,他 / 她就會(huì)通過期末考試。


現(xiàn)在我們假設(shè)我們想預(yù)測一個(gè)學(xué)習(xí)了 25 個(gè)小時(shí)并在期中考試中獲得 70 分的學(xué)生是否能夠通過期末考試。


這是一個(gè)二元分類問題,多層感知器可以從給定的樣本(訓(xùn)練數(shù)據(jù))進(jìn)行學(xué)習(xí),并且根據(jù)給出的新的數(shù)據(jù)點(diǎn),進(jìn)行準(zhǔn)確的預(yù)測。在下面我們可以看到一個(gè)多層感知器如何學(xué)習(xí)這種關(guān)系。


訓(xùn)練我們的多層感知器:反向傳播算法


反向傳播誤差,通??s寫為「BackProp」,是幾種訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)的方法之一。這是一種監(jiān)督學(xué)習(xí)方法,即通過標(biāo)記的訓(xùn)練數(shù)據(jù)來學(xué)習(xí)(有監(jiān)督者來引導(dǎo)學(xué)習(xí))。


簡單說來,BackProp 就像「從錯(cuò)誤中學(xué)習(xí)」。監(jiān)督者在人工神經(jīng)網(wǎng)絡(luò)犯錯(cuò)誤時(shí)進(jìn)行糾正。


一個(gè)人工神經(jīng)網(wǎng)絡(luò)包含多層的節(jié)點(diǎn);輸入層,中間隱藏層和輸出層。相鄰層節(jié)點(diǎn)的連接都有配有「權(quán)重」。學(xué)習(xí)的目的是為這些邊緣分配正確的權(quán)重。通過輸入向量,這些權(quán)重可以決定輸出向量。


在監(jiān)督學(xué)習(xí)中,訓(xùn)練集是已標(biāo)注的。這意味著對于一些給定的輸入,我們知道期望 / 期待的輸出(標(biāo)注)。


反向傳播算法:最初,所有的邊權(quán)重(edge weight)都是隨機(jī)分配的。對于所有訓(xùn)練數(shù)據(jù)集中的輸入,人工神經(jīng)網(wǎng)絡(luò)都被激活,并且觀察其輸出。這些輸出會(huì)和我們已知的、期望的輸出進(jìn)行比較,誤差會(huì)「傳播」回上一層。該誤差會(huì)被標(biāo)注,權(quán)重也會(huì)被相應(yīng)的「調(diào)整」。該流程重復(fù),直到輸出誤差低于制定的標(biāo)準(zhǔn)。


上述算法結(jié)束后,我們就得到了一個(gè)學(xué)習(xí)過的人工神經(jīng)網(wǎng)絡(luò),該網(wǎng)絡(luò)被認(rèn)為是可以接受「新」輸入的。該人工神經(jīng)網(wǎng)絡(luò)可以說從幾個(gè)樣本(標(biāo)注數(shù)據(jù))和其錯(cuò)誤(誤差傳播)中得到了學(xué)習(xí)。


現(xiàn)在我們知道了反向傳播的原理,我們回到上面的學(xué)生分?jǐn)?shù)數(shù)據(jù)集。


圖 5:多層感知器的前向傳播


圖 5 中的多層感知器(修改自 Sebastian Raschka 漂亮的反向傳播算法圖解:https://github.com/rasbt/python-machine-learning-book/blob/master/faq/visual-backpropagation.md)的輸入層有兩個(gè)節(jié)點(diǎn)(除了偏置節(jié)點(diǎn)以外),兩個(gè)節(jié)點(diǎn)分別接收「學(xué)習(xí)小時(shí)數(shù)」和「期中考試分?jǐn)?shù)」。感知器也有一個(gè)包含兩個(gè)節(jié)點(diǎn)的隱藏層(除了偏置節(jié)點(diǎn)以外)。輸出層也有兩個(gè)節(jié)點(diǎn)——上面一個(gè)節(jié)點(diǎn)輸出「通過」的概率,下面一個(gè)節(jié)點(diǎn)輸出「不通過」的概率。


在分類任務(wù)中,我們通常在感知器的輸出層中使用 Softmax 函數(shù)作為激活函數(shù),以保證輸出的是概率并且相加等于 1。Softmax 函數(shù)接收一個(gè)隨機(jī)實(shí)值的分?jǐn)?shù)向量,轉(zhuǎn)化成多個(gè)介于 0 和 1 之間、并且總和為 1 的多個(gè)向量值。所以,在這個(gè)例子中:


概率(Pass)+概率(Fail)=1


第一步:前向傳播


網(wǎng)絡(luò)中所有的權(quán)重都是隨機(jī)分配的。我們現(xiàn)在考慮圖 5 中標(biāo)注 V 的隱藏層節(jié)點(diǎn)。假設(shè)從輸入連接到這些節(jié)點(diǎn)的權(quán)重分別為 w1、w2 和 w3(如圖所示)。


神經(jīng)網(wǎng)絡(luò)會(huì)將第一個(gè)訓(xùn)練樣本作為輸入(我們已知在輸入為 35 和 67 的情況下,通過的概率為 1)。


網(wǎng)絡(luò)的輸入=[35, 67]

期望的網(wǎng)絡(luò)輸出(目標(biāo))=[1, 0]


涉及到的節(jié)點(diǎn)的輸出 V 可以按如下方式計(jì)算(*f* 是類似 Sigmoid 的激活函數(shù)):


V = f(1*w1 + 35*w2 + 67*w3)


同樣,隱藏層的其他節(jié)點(diǎn)的輸出也可以計(jì)算。隱藏層兩個(gè)節(jié)點(diǎn)的輸出,是輸出層兩個(gè)節(jié)點(diǎn)的輸入。這讓我們可以計(jì)算輸出層兩個(gè)輸出的概率值。


假設(shè)輸出層兩個(gè)節(jié)點(diǎn)的輸出概率分別為 0.4 和 0.6(因?yàn)闄?quán)重隨機(jī),輸出也會(huì)隨機(jī))。我們可以看到計(jì)算后的概率(0.4 和 0.6)距離期望概率非常遠(yuǎn)(1 和 0),所以圖 5 中的網(wǎng)絡(luò)被視為有「錯(cuò)誤輸出」。


第二步:反向傳播和權(quán)重更新


我們計(jì)算輸出節(jié)點(diǎn)的總誤差,并將這些誤差用反向傳播算法傳播回網(wǎng)絡(luò),以計(jì)算梯度。接下來,我們使用類似梯度下降之類的算法來「調(diào)整」網(wǎng)絡(luò)中的所有權(quán)重,目的是減少輸出層的誤差。圖 6 展示了這一過程(暫時(shí)忽略圖中的數(shù)學(xué)等式)。


假設(shè)附給節(jié)點(diǎn)的新權(quán)重分別是 w4,w5 和 w6(在反向傳播和權(quán)重調(diào)整之后)。


圖 6:多層感知器中的反向傳播和權(quán)重更新步驟


如果我們現(xiàn)在再次向網(wǎng)絡(luò)輸入同樣的樣本,網(wǎng)絡(luò)應(yīng)該比之前有更好的表現(xiàn),因?yàn)闉榱俗钚』`差,已經(jīng)調(diào)整了權(quán)重。如圖 7 所示,和之前的 [0.6, -0.4] 相比,輸出節(jié)點(diǎn)的誤差已經(jīng)減少到了 [0.2, -0.2]。這意味著我們的網(wǎng)絡(luò)已經(jīng)學(xué)習(xí)了如何正確對第一個(gè)訓(xùn)練樣本進(jìn)行分類。


圖 7:在同樣的輸入下,多層感知器網(wǎng)絡(luò)有更好的表現(xiàn)


用我們數(shù)據(jù)集中的其他訓(xùn)練樣本來重復(fù)這一過程。這樣,我們的網(wǎng)絡(luò)就可以被視為學(xué)習(xí)了這些例子。


現(xiàn)在,如果我們想預(yù)測一個(gè)學(xué)習(xí)了 25 個(gè)小時(shí)、期中考試 70 分的學(xué)生是否能通過期末考試,我們可以通過前向傳播步驟來計(jì)算 Pass 和 Fail 的輸出概率。


我回避了數(shù)學(xué)公式和類似「梯度下降(Gradient Descent)」之類概念的解釋,而是培養(yǎng)了一種對于算法的直覺。對于反向傳播算法更加注重?cái)?shù)學(xué)方面討論,請參加此鏈接:http://home./~vlsi/AI/backp_t_en/backprop.html


多層感知器的 3D 可視化


Adam Harley 創(chuàng)造了一個(gè)多層感知器的 3D 可視化(http://scs./~aharley/vis/fc/),并已經(jīng)開始使用 MNIST 數(shù)據(jù)庫手寫的數(shù)字進(jìn)行訓(xùn)練。


此網(wǎng)絡(luò)從一個(gè) 28 x 28 的手寫數(shù)字圖像接受 784 個(gè)數(shù)字像素值作為輸入(在輸入層有對應(yīng)的 784 個(gè)節(jié)點(diǎn))。網(wǎng)絡(luò)的第一個(gè)隱藏層有 300 個(gè)節(jié)點(diǎn),第二個(gè)隱藏層有 100 個(gè)節(jié)點(diǎn),輸出層有 10 個(gè)節(jié)點(diǎn)(對應(yīng) 10 個(gè)數(shù)字)[15]。


雖然這個(gè)網(wǎng)絡(luò)跟我們剛才討論的相比大了很多(使用了更多的隱藏層和節(jié)點(diǎn)),所有前向傳播和反向傳播步驟的計(jì)算(對于每個(gè)節(jié)點(diǎn)而言)方式都是一樣的。


圖 8 顯示了輸入數(shù)字為「5」的時(shí)候的網(wǎng)絡(luò)


圖 8:輸入為「5」時(shí)的視覺化的網(wǎng)絡(luò)


輸出值比其它節(jié)點(diǎn)高的節(jié)點(diǎn),用更亮的顏色表示。在輸入層,更亮的節(jié)點(diǎn)代表接受的數(shù)字像素值更高。注意,在輸出層,亮色的節(jié)點(diǎn)是如何代表數(shù)字 5 的(代表輸出概率為 1,其他 9 個(gè)節(jié)點(diǎn)的輸出概率為 0)。這意味著多層感知器對輸入數(shù)字進(jìn)行了正確的分類。我非常推薦對這個(gè)可視化進(jìn)行探究,觀察不同節(jié)點(diǎn)之間的聯(lián)系。


深度神經(jīng)網(wǎng)絡(luò)


1. 深度學(xué)習(xí)和一般的機(jī)器學(xué)習(xí)有什么區(qū)別?https://github.com/rasbt/python-machine-learning-book/blob/master/faq/difference-deep-and-normal-learning.md

2. 神經(jīng)網(wǎng)絡(luò)和深度神經(jīng)網(wǎng)絡(luò)有什么區(qū)別?http://stats./questions/182734/what-is-the-difference-between-a-neural-network-and-a-deep-neural-network?rq=1

3. 深度學(xué)習(xí)和多層感知器有有怎樣的不同?https://www./How-is-deep-learning-different-from-multilayer-perceptron


結(jié)論


在這篇文章中,我跳過了部分概念的重要細(xì)節(jié),以促進(jìn)理解。為了全面理解多層感知器,我推薦閱讀斯坦福神經(jīng)網(wǎng)絡(luò)教程的第一、第二、第三和案例研究部分。如果有任何問題或者建議,請?jiān)谙路皆u論告訴我。


第一:http://cs231n./neural-networks-1/

第二:http://cs231n./neural-networks-2/

第三:http://cs231n./neural-networks-3/

案例研究:http://cs231n./neural-networks-case-study/


參考文獻(xiàn)


1. Artificial Neuron Models (https://www./~gorr/classes/cs449/ann-overview.html)

2. Neural Networks Part 1: Setting up the Architecture (Stanford CNN Tutorial) (http://cs231n./neural-networks-1/)

3. Wikipedia article on Feed Forward Neural Network (https://en./wiki/Feedforward_neural_network)

4. Wikipedia article on Perceptron (https://en./wiki/Perceptron)

5. Single-layer Neural Networks (Perceptrons) (http://computing./~humphrys/Notes/Neural/single.neural.html)

6. Single Layer Perceptrons (http://www.cs./courses/ITNP4B/lectures/kms/2-Perceptrons.pdf)

7. Weighted Networks – The Perceptron (http://page.mi./rojas/neural/chapter/K3.pdf)

8. Neural network models (supervised) (scikit learn documentation) (http:///dev/modules/neural_networks_supervised.html)

9. What does the hidden layer in a neural network compute? (http://stats./a/63163/53914)

10. How to choose the number of hidden layers and nodes in a feedforward neural network? (http://stats./a/1097/53914)

11. Crash Introduction to Artificial Neural Networks (http://ulcar./~iag/CS/Intro-to-ANN.html)

12. Why the BIAS is necessary in ANN? Should we have separate BIAS for each layer? (http:///questions/7175099/why-the-bias-is-necessary-in-ann-should-we-have-separate-bias-for-each-layer)

13. Basic Neural Network Tutorial – Theory (https://takinginitiative./2008/04/03/basic-neural-network-tutorial-theory/)

14. Neural Networks Demystified (Video Series): Part 1, Welch Labs @ MLconf SF (https://www./watch?v=5MXp9UUkSmc)

15. A. W. Harley, 'An Interactive Node-Link Visualization of Convolutional Neural Networks,' in ISVC, pages 867-877, 2015 (link (http://scs./~aharley/vis/harley_vis_isvc15.pdf))

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多