姓名:Jyx
班級:csdn人工智能直通車-5期
描述:這是本人在學習人工智能時的學習筆記,加深理解
- 感知器模型
1.1 感知器模型的推廣
- 神經網絡
- 反向傳播算法
一個簡單的感知器算法可以表示如下
yy=sgn(wTx+b)=sgn(w∗Tx∗) 或者,where w∗=[wT,b]T,x∗=[xT,1]T
出於簡化考慮,本文采用第二種表達方式,如無特別說明一般用
w,x
代替
w∗,x∗
。
感知器的代價函數定義爲:
J(w)=∑x∈Y(δxwTx),δx={−1,+1,x∈ω1x∈ω2
ω1,ω2
代表類別,
Y
代表錯誤分類的樣本的集合。
顯然代價函數總是正的。
採用梯度下降法,權重更新公式爲
w(t+1)=w(t)−ρt∂J(w)∂w∣∣∣w=w(t)=w(t)−ρt∑x∈Y(δxx)
算法描述:
- 隨機選擇
w(0)
, 選擇
ρ0
-
t=0
- 重複
-
Y=∅
-
For i=1 to N
If δxiw(t)Txi≥0 then Y=Y∪{xi}
-
End For
-
w(t+1)=w(t)−ρt∑x∈Yδxx
- 調整
ρt→ρt+1
- t = t+ 1
- 直到
Y=∅
這不是一個標準的梯度下降過程,因爲函數
j(w)
隨着訓練的進行一直在改變。但算法依然收斂。
感知器模型的推廣
異或問題
簡單的感知器模型只能處理線性可分的問題,著名的異或問題感知器算法就不能解決。爲此,可以使用兩層感知器,
兩層感知器的侷限:
兩層感知器的處理能力依舊有限:兩層感知器可以分離由多面體區域的並集構成的類,而不能分離這些區域的並集。
爲此,我們可以選擇三層感知器。
神經網絡
上面討論通過增加感知器的層數來增強感知器的分類能力,但另一方面我們也可以改變感知器的其它方面來增強他的分類能力,比如激活函數。這就是神經網絡。
在查找資料的過程中,找到一個很有用的博客專題:深度神經網絡基本問題的原理詳細分析和推導,裏面具體描述了神經網絡的方方面面
關於激活函數的一個定理
整個機器學習中最重要的一個部分就是優化,優化可以看成是在一定損失函數下的擬合問題。通用逼近定理給出了一些擬合的結論。通用逼近定理這裏就不羅列了,有興趣參考wiki,這裏摘錄一段網上一篇blog對通用逼近定理的解釋
一個僅有單隱藏層的神經網絡。在神經元個數足夠多的情況下,通過特定的非線性激活函數(包括sigmoid,tanh等),足以擬合任意函數。這使得我們在思考神經網絡的問題的時候,不需要考慮:我的函數是否能夠用神經網絡擬合,因爲他永遠可以做到——只需要考慮如何用神經網絡做到更好的擬合(摘自https://blog.csdn.net/zpcxh95/article/details/69952020)
反向傳播算法
反向傳播算法從根本上而言是一種多元函數的鏈式法則的應用。其中也沒有高深的推導,只是有層窗戶紙讓人看不真切
這裏力圖把本人理解的關鍵點寫清楚。
推薦一篇比較形象的推導反向傳播算法
一個簡單的神經網絡定義如下
在本文推倒中假定網絡共有
L(1,⋯,L)
層,每層有
ki
個神經元,有兩個特例:對於第一層輸入層
k1
就等於輸入向量的特徵維數,對於最後一層輸出層
kL
就等於輸出向量的維數,又假定輸入向量共有
N(x1,⋯,xN)
個,
fli
表示第
l
層的第
i
個激活函數,
wlij
表示第
l
層第
i
個神經元的第
j
個權向量,
bl
表示第
l
層的偏置。
y^
表示網絡的輸出。
vli
表示第
l
層第
i
個神經元的輸出
一般形式
按照上面的定義,每一層的輸出可以表示爲上一層輸出的函數,即
定義輔助變量則vliy^iξlivli=fli(∑j=1kl−1wlijvl−1j+bli),l>1=vLi=∑j=1l−1wlijvl−1j+bli=fli(ξli),l>1(1)(2)(3)
note:
這裏有個重點
wlij和vl−1j
是獨立的變量,這意味着對
ξli
求導時
vl−1j
可以看作常量
同一般的反向傳播算法這個名字暗示的那樣,我們從最後一層開始往回計算梯度,即先計算
wLij
的梯度,再依次
wl−1ij,⋯,w2ij
1. 第
L
層
對於損失
L(y,y^)
,可以寫成
vLi(y^i=vLi)
的函數
L(y,y^)∂L∂wLij∂L∂bLi=L(y,y1^,y2^,⋯,ykl^)=L(y,vL1,vL2,⋯,vLkL)=∂L∂vLi∂vLi∂wLij=∂L∂vLi∂vLi∂ξLi∂ξLi∂wLij=∂L∂vLi∂vLi∂bLi=∂L∂vLi∂vLi∂ξLi∂ξLi∂bLi(4)(5)(6)
利用2式和3式,可以得到
∂ξLi∂wLij∂ξLi∂bLi∂vLi∂ξLi=vL−1j=1=f′Li(ξli)
所以5式和6式可以化簡成
∂L∂wLij∂L∂bLi=L′(vLi)f′Li(ξli)vL−1j=L′(vLi)f′Li(ξli)
2.
l<L
層
當
l<L
時,根據神經網絡的構成,每一層都只和下一層有關。迭代遞歸下去可以知道,損失
L(y,y^)
總可以寫成某一層的函數,即
L(y,y^)=L(y,vl1,vl2,⋯,vlkl)(7)
注意式(7)和式(3)雖然形式不同,但確實是同一個函數,只不過展開深度的不同。
因爲式(7)和式(3),根據上面的推導過程,立即可以得到
∂L∂wlij∂L∂bli∂L∂wlij∂L∂bli=∂L∂vL∂L∂