感知機
感知機就是我們前面學過的線性分類器加上一個激活函數。 線性分類器:
v=wTx+b=(∑iwixi)+b
很多實際問題並不是線性可分的,所以需要用一個非線性函數將上述結果變爲非線性的。
y=φ(v)
常用的激活函數有sigmoid 、tanh、ReLU、Softplus:
它們的函數圖像分別是:
sigmoid(x)=11+e−x
tanh(x)=ex−e−xex+e−x
ReLU(x)=max(0,x)
softplus(x)=log(1+e−x)
多層神經網絡
單層感知機無法處理或模擬像異或這種函數。如果將感知機連接起來構成一個多層神經網絡,則可以滿足類需求。也就說說多層神經網絡的模擬能力遠超過單層神經網絡。。
設神經網絡有L+1層,每一層的輸出分別爲 [h0,h1,h2,h3,...,hL ,其中hi 均爲增廣向量。h0 爲輸入x⃗ ,h_L 爲 y⃗ 。
各層的權值爲 [w1,w2,w3,...,bL] 和 [b1,b2,b3,...,wL] 。可以認爲第0層沒有權值,因爲他的輸出h0 就是x,或者也可以認爲w0 爲全一向量。這樣 h0=1˙x .
令φl 表示第l 層的激活函數。
hl=φl(wTl−1hl−1+bl−1),l=1,2,...,L
(式1)
誤差函數
誤差函數採用 二階範式 即
L(w)=12N(y−ylabel)T(y−ylabel)
(式2)
R(w)=λ∑l=1LwTlwl+bl
(式3)
J(w)=L(w)+R(w)
(式4)
各種求導
爲了下面的推導方便,我們先給出各種函數的求導結果。
sigmoid :
s′=s(1−s)
(式5)
tanh:
t′=1−t2
(式6)
ReLU:
r′={01 if x<0 if x≥0
(式7)
Softplus:
p′=sigmoid−1
(式8)
線性函數
∂y/∂w=∂∂w(wTx)=x
(式9)
∂∂w(wTw)=w
(式10)
反向傳播算法
爲了能對這個神經網絡模型進行學習,我們同樣採用梯度下降法。我們求損失函數
∂L(w)∂wl=∂L(w)∂hL˙∂hL∂hL−1...∂hl+2∂hl+1˙∂hl+1∂hl˙∂hl∂wl
∂L(w)∂bl=∂L(w)∂hL˙∂hL∂hL−1...∂hl+2∂hl+1˙∂hl+1∂hl˙∂hl∂bl
(式11)
這個式子是怎麼得到的呢? 觀察(式1)可以看出 hl 是 hl−1 的函數。所以運用複合函數求導法則,形成了上述公式。
我們再計算一個L(w)對 wl+1 的偏導數
∂L(w)∂wl+1=∂L(w)∂hL˙∂hL∂hL−1...∂hl+2∂hl+1˙∂hl+1∂wl+1
∂L(w)∂bl+1=∂L(w)∂hL˙∂hL∂hL−1...∂hl+2∂hl+1˙∂hl+1∂bl+1
(式12)
可以分析得到以下結論:
其一、最後一項爲相應層的輸出hl 對相應 的 wl 求導, 前面的項從最後的誤差函數一直向前求導。
∂L(w)∂wl=∂L(w)∂hl˙∂hl∂wl
∂L(w)∂bl=∂L(w)∂hl˙∂hl∂bl
(式13)
其二、L(w)對wl 求導和 對wl+1 求導公式有很多相同項。令
σl=∂L(w)∂hl
(式14)
整理(式11)和(式12)得到
σl=σl+1˙∂hl+1∂hl
(式15)
對於最後一層,其輸出就是整個神經網絡的輸出,所以不能用這個公式, 應該使用下面的公式。
σL=∂L(w)∂hL
這個σl 稱爲誤差傳播項,可以從高層向低層逐層計算。
那麼∂hl+1/∂hl 如何計算呢? 根據(式1),可以得到:
∂hl+1∂hl=∂φl+1∂vl+1˙∂vl+1∂hl=∂φl+1∂v˙wl+1
(式16)
其中
∂φl+1/∂v 就是 (式5) - (式10)給出的,根據這個層的激活函數選用對應的偏導數。
有了誤差L(w)對wl 的偏導數,我們就可以使用梯度下降法求更新權值了。
wl=wl−α∂L(w)∂wl
bl=wbl−α∂L(w)∂bl
(式17)
代入(式13)和(式14),得到
wl=wl−α∂L(w)∂hl˙∂hl∂wl=wl−σl∂hl∂φl˙∂φl∂wl=wl−σl∂hl∂φlhl−1
bl=bl−α∂L(w)∂hl˙∂hl∂bl=wl−σl∂hl∂φl˙∂φl∂bl=wl−σl∂hl∂φl
(式18)
程序實現思路
有了(式15)這個最核心的公式,我們就可以將每個層做成一個類,然後將他們串聯起來就可以構造任意的多層神經網絡。
matlab中沒有類的概念,但有結構體,我們定義一個結構體並定義一組方法來構成一個“類”。
應該具有的方法有:
(1)前向傳播 ,根據(式1)從底向上逐層計算每層的輸出,最後一層的輸出即神經網絡的輸出 hl 。
(2)誤差後向傳播。 根據(式15),從頂到底計算每一層的誤差傳播項σl
(3)根據(式17)從底向上更新權值。
Matlab 實現