前饋神經網絡權值更新案例

本章的主要目的是在於用tensorflow實現一個簡單的神經網絡算法。

        下圖是一個簡單的前饋神經網絡圖,改圖中有3層結構,第一層爲輸入層,第二層爲隱藏層,第三層則爲輸出層,圖中的W1,……,W9爲連接邊的權值。下圖展示如何進行神經網絡的前向傳播計算。

1.前向傳播計算的手動計算及矩陣表示以及Tensorflow計算代碼

(1)計算輸入層-->隱藏層的權重

a11 = W1 * X1 + W4 * X2 = 0.2*0.7 + 0.3*0.9 = 0.14 + 0.27 = 0.41

a12 = W2 * X1 + W5 * X2 = 0.3*0.7 + (-0.5)*0.9 = 0.21 - 0.45 = -0.24

a13 = W3 * X1 + W6 * X2 = 0.4*0.7 + 0.2*0.9 = 0.28 + 0.18 = 0.46

(2)計算隱藏層-->輸出層的權值

Y = W7 * a11 + W8 * a12 + W9 * a13 = 0.6*0.41 + 0.1*(-0.24) - 0.2*0.46 = 0.13

由於最終Y的值大於0,故Y的結果爲正類。

觀察上圖,輸入爲X1和X2,將輸入轉化爲矩陣表示X=[x1,x2],權值W爲如下所示,隱藏層的a表示如下所示。



將計算輸入層-->隱藏層的權重、計算隱藏層-->輸出層的權值轉化爲矩陣表示爲


        上述是實現一個前饋神經網絡計算的一個矩陣表示形式,Y的矩陣取決於樣本類別的個數,在Tensorflow中計算如下公式所示:


        上述的前饋神經網絡只是簡單的實現了神經網絡的計算過程。神經網絡的優化過程就是優化神經元中參數取值的過程。網絡中的權值都是預先設置好的,下面我們將使用Tensorflow工具進行權值的訓練,即訓練模型,下面介紹一下有監督學習的方式來更合理地設置參數取值。

2.不包含激活函數以及池化函數的模型訓練

(1)通過上述1節得到了前向傳播的值,這裏就不再重複。注:把上述的權重都看作爲初值

(2)利用反向傳播來更新所有的權重

爲了方便計算,則將y的實際值設置爲0.5。

a.計算總誤差(梯度下降方法中有3個方法,本文采用全批量梯度下降方法)


b.隱藏層-->輸出層的權值更新

以權重W7爲例,我們想知道W7對整體誤差產生了多少的影響:




用上述的值來更新W7、W8以及W9的權值。其中,ŋ爲學習率,取值爲0.5。


c.隱藏層-->輸入層的權值更新

該層的計算方法和上述方法基本一致,本文中Y只有一個節點,故上層的影響只有Y沒有其他節點。當改層中存在很多個節點時,就需要計算所有節點給W1帶來的影響了。爲了方便說明這個問題,故引用了其他論文中的圖片,該圖如下所示,y_k節點受上層的影響。







        更新誤差一次完成,得到了a11=0.4451,a12=-0.2342,a13=0.04556,Y=0.1727,E_total=0.0536相對於0.0685提高了0.0149。繼續更新將完成神經網絡的權值更新。

2.使用激活函數以及池化函數的模型訓練


該圖是上個圖的改進版,在圖中加入了偏移項,輸出節點Y2,激活函數是sigmoid函數,函數如下所示。


(1)計算輸入層-->隱藏層的權重

a11 = W1 * X1 + W4 * X2 + b1 * B1 = 0.2*0.7 + 0.3*0.9 - 0.5 = - 0.900 

a12 = W2 * X1 + W5 * X2 + b1 * B1 = 0.3*0.7 - 0.5*0.9 - 0.5 = - 0.740

a13 = W3 * X1 + W6 * X2 + b1 * B1 = 0.4*0.7 + 0.2*0.9 - 0.5 = - 0.040


(2)計算隱藏層-->輸出層的權值更新

Y1 = S(a11) * W7 + S(a12) * W9 + S(a13) * W11 + b2 * B4 = 0.289*0.6 + 0.323*0.1 + 0.490*(-0.2) + 0.1*1 = 0.208

Y2 = S(a11) * W8 + S(a12) * W10 + S(a13) * W12 + b2 * B5 = 0.289*0.3 + 0.323*0.5 + 0.490*0.2 + 0.3*1 = 0.646


(3)計算總誤差

       該層的計算方法和上述方法基本一致,本文中Y有二個節點,故上層的影響有Y1和Y2節點。則在計算隱藏層的時候還需要把下一層的節點考慮進來。

爲了方便計算,則將Y1的實際值設置爲0.7,Y2的實際值設置爲0.8。


(4)隱藏層-->輸出層的權值更新






(5)計算隱藏層-->輸入層的權值

針對該層的權值同時收到Y1和Y2的影響,故和有一個輸出節點的計算方法不一樣。在計算的時候需要考慮多個輸出點。如下圖所示。






上述方法即更新完參數。


參考文獻:

https://www.cnblogs.com/charlotte77/p/5629865.html

實戰Google深度學習框架

http://www.cnblogs.com/charlotte77/p/7783261.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章