原文寫于個人博客双戳,歡迎關(guān)注www.xiaolewei.com
前言
所謂神經(jīng)網(wǎng)絡(luò)是一組連接的輸入/輸出單元命咐,類似于人腦中的神經(jīng)細胞谬运,其中每個連接都與一個權(quán)重相關(guān)聯(lián)。學(xué)習(xí)階段通過輸入元組杖狼,不斷的調(diào)整權(quán)重參數(shù),使得它能夠預(yù)測輸入元組的正確類標號妖爷。
所謂類標號蝶涩,是某種類別的標號。
多層前饋神經(jīng)網(wǎng)絡(luò)
后向傳播算法是在前饋神經(jīng)網(wǎng)絡(luò)上進行學(xué)習(xí)絮识。多層前饋神經(jīng)網(wǎng)絡(luò)由一個輸入層绿聘,一個或者多個隱藏層以及一個輸出層組成。
圖中每個圓即為一個神經(jīng)單元
其中每一層都包含多個單元次舌。輸入層的每個單元對應(yīng)于用于訓(xùn)練的元組的每個觀測屬性熄攘,輸入會提供給輸入層的單元,經(jīng)過加權(quán)后垃它,再提供給隱藏層的單元鲜屏。而隱藏層的輸出可以是另一個隱藏層烹看,也可以是輸出層。實踐中隱藏層通常只有一層洛史。
之所以稱該網(wǎng)絡(luò)為前饋的惯殊,是因為權(quán)重不回送到輸入層或前一層的輸出單元。
這里先說明一下幾個關(guān)鍵字:
權(quán)重
對于一個單元而言也殖,可能同時具有多個輸入土思,顯然所有的輸入并不是同等重要的,可以形象地理解為造成某一結(jié)果的原因占不同的比重忆嗜,例如對于LungCancer
己儒,Smoker
和Drinker
顯然前者更容易導(dǎo)致肺癌的產(chǎn)生。這里就會傾向于給予Smoker
更大的權(quán)重捆毫。
偏倚
計算各個輸入的權(quán)重和時闪湾,人為的為這個和加上一個參數(shù),這個參數(shù)就是偏倚绩卤。
輸入處理
對于連續(xù)型變量途样,通常采用一些規(guī)范化的方法,將其映射到0-1之間濒憋,如最小-最大化規(guī)范
等何暇。
而對于離散化的數(shù)據(jù),則常常重新編碼凛驮,使每個域值都有一個輸入單元裆站。如屬性A的所有可能取值為{a0, a1, a2}
,則為其分配3個輸入單元黔夭,使用I0
,I1
,I2
表示宏胯,對于某一實例,若A=a1纠修,則將輸入單元I1置為1胳嘲,其余置為0。
單元計算
對于單個單元扣草,其處理過程如下:
圖中yi為上一層單元的輸出值了牛,即本單元的輸入值,wij為該輸入值的權(quán)重辰妙,θj為偏倚鹰祸,擠壓函數(shù)可以簡單的理解為一個將輸入值映射到較小區(qū)間0-1之間。
對于各個輸入值密浑,首先計算權(quán)重和蛙婴,再加上偏倚獲得凈輸入,即:
凈輸入Ij = ∑ yi * Wij + θj
將該結(jié)果作用于擠壓函數(shù)尔破,得到輸出結(jié)果街图。對于擠壓函數(shù)一般使用Logistic函數(shù)浇衬,如:
Oj = 1/(1 + e^(-Ij) )
誤差計算
神經(jīng)網(wǎng)絡(luò)經(jīng)過一次學(xué)習(xí),學(xué)習(xí)到了什么餐济?或者說經(jīng)過一次學(xué)習(xí)耘擂,神經(jīng)網(wǎng)絡(luò)該如何自我調(diào)整,來接近真理絮姆?這就是誤差計算的作用醉冤。誤差計算通過計算更新權(quán)重與偏倚,來使得預(yù)測結(jié)果更接近真相篙悯。
誤差
對于輸出層:
Errj = Oj * (1-Oj) * (Tj-Oj)
Oj 即為該單元的實際輸出蚁阳,而Tj就是該訓(xùn)練樣本的已知目標值。
對于隱藏層:
Errj = Oj * (1-Oj) * ∑ Errk * Wjk
由該單元的輸出單元的誤差權(quán)重和鸽照,和本身輸出組成螺捐。
Oj * (1-Oj) 實際上時
Logistic函數(shù)
的導(dǎo)數(shù)
權(quán)重與偏倚
計算出誤差后,即可對權(quán)重進行更新矮燎。這里先引入另一個名詞 學(xué)習(xí)率
,用l
表示,通常取0-1之間的數(shù)归粉,一般將l設(shè)為 1/t,這里的t為已迭代次數(shù)漏峰。
權(quán)重使用如下公式進行更新:
Wij = Wij + l * Errj * Oj
對于偏倚使用如下公式更新:
θj = θj + l * Errj
更新策略
關(guān)于更新策略,有兩種方式届榄,一種是每學(xué)習(xí)一次浅乔,就更新一次,稱為實例更新
铝条,另一種是將計算出來的增量累計到變量中靖苇,等訓(xùn)練完所有元組后再更新,稱為周期更新
班缰。由于實例更新
通常帶來更準確的效果贤壁,所以該方式更為常見。
基本流程
這里先講一個大概流程埠忘,后面使用實際的訓(xùn)練例子脾拆,可以得到更直觀的感受。
首先是對網(wǎng)絡(luò)的一個初始化工作莹妒,包括建立結(jié)構(gòu)名船,將權(quán)重和偏倚初始化為隨機小數(shù)(通常為-1-1之間),輸入訓(xùn)練元組旨怠,根據(jù)計算結(jié)果對權(quán)重和偏倚進行更新渠驼,輸入下一個訓(xùn)練元組,重復(fù)上述過程鉴腻,直到:
- 前一周期所有ΔW均小于某一閾值
- 前一周琦誤分類元組小于某一閾值
- 超過指定周期數(shù)
中一個條件滿足迷扇。
樣例詳解
輸入值以及各項初始值如下:
x1 | x2 | x3 | w14 | w15 | w24 | w25 | w34 | w35 | w46 | w56 | θ4 | θ5 | θ6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 0 | 1 | 0.2 | -0.3 | 0.4 | 0.1 | -0.5 | 0.2 | -0.3 | -0.2 | -0.4 | 0.2 | 0.1 |
以下計算中百揭,部分相似的過程省略,直接給出結(jié)果蜓席。
計算凈輸入以及輸出值:
單元J | 凈輸入Ij | 輸出Oj |
---|---|---|
4 | 0.2+0-0.5-0.4=-0.7 | 1/(1+e^(0.7))=0.332 |
5 | -0.3+0+0.2+0.2=0.1 | 0.525 |
6 | -0.3*0.332-(-0.2) * 0.525+0.1)=-0.105 | 0.474 |
計算誤差:
單元j | Errj |
---|---|
6 | 0.474 * (1-0.474) * (1-0.474) = 0.1311 |
5 | 0.525 * (1-0.525) * 0.1311 * (-0.2) = -0.0065 |
4 | 0.332 * (1-0.332) * 0.1311 * (-0.3) = -0.02087 |
更新權(quán)重和偏倚:
權(quán)重/偏倚 | 新值 |
---|---|
w46 | -0.3 + 0.9 * 0.1311 * 0.332 = -0.261 |
w56 | -0.138 |
w14 | 0.2 + 0.9 * (-0.087)* 1 = 0.192 |
w15 | -0.306 |
w24 | 0.4 |
w25 | 0.1 |
w34 | -0.508 |
θ6 | 0.1 + 0.9 * 0.1311 = 0.218 |
θ5 | 0.2 + 0.9 * (-0.0065) = 0.194 |
θ4 | -0.408 |
至此便完成了一個訓(xùn)練元組的迭代器一。