構建一個簡單的人工神經網絡

2017-11-22 01:28

     人工神經網絡是進行機器學習的基礎,模仿生物神經元的工作方式構建神經網絡,讓計算機擁有“自我學習“的能力。人工神經網絡的誕生具有革命性的意義,”自我學習“是其最大的優點,通過適當的訓練,它語音識別、圖像識別、人機對話、大數據方面發揮的了巨大的作用。
    神經網絡的概念早在數十年前就已經提出來了,但限於當時計算機的計算能力,還無法應用。近些年來,隨着計算機的計算能力大幅提升,機器學習興起,導致神經網絡的使用日益廣泛。
    目前最常用的構建神經網絡的方法就是反向傳播,當程序運算過一遍後,查看計算出的結果與理想結果之間的誤差,通過反向傳播算法讓計算機優化人工神經元之間的權值(連接強度),然後再次計算結果,不斷循環這一過程,經過一定次數的循環後,獲得解將非常接近理想結果。
圖片

    這是一個非常簡單的神經網絡,分爲三層,輸入層(包含兩個神經元i1、i2,截距項b1),隱含層(包含兩個神經元h1、h2,截距項b2),輸出層(o1,o2)。假設輸入3對應輸出映射0.2,輸入8對應的是輸出映射0.9。
圖片
令i1=3,i2=8
o1=0.2,o2=0.9
我們把權值用w表示,通常我們會隨機初始化權值。
初始化權值w1=0.15,w2=0.2,w3=0.25,w4=0.3,w5=0.4,w6=0.45,w7=0.5,w8=0.55。
初始化b1=0.35,b2=0.6
首先進行前向傳播:
輸入層——》隱含層——》輸出層,下圖爲本例中神經元h1的結構:
圖片
隱含層****計算net:

neth1=w1*i1+w2*i2+b1

neth2=w3*i1+w4*i2+b1
計算out:

outh1=sigma(neth1)
outh2=sigma(neth2)
(其中sigma函數是常用的激活函數之一,此外還有tanh(),sigma(x)=1/(1+e^(-x))) 
輸出層****計算net:

neto1=w5*outh1+w6*outh2+b2

neto2=w7*outh1+w8*outh2+b2
計算out:
 outo1=sigma(neto1)

 outo2=sigma(neto2)

計算總誤差:
 Eo1=0.5*(o1-outo1)*(o1-outo1)

 Eo2=0.5*(o2-outo2)*(o2-outo2)

 Etotal=Eo1+Eo2
(其中Etotal代表總誤差,Eo1代表神經元o1輸出的值與理想值o1得誤差,Eo2代表神經元o2輸出的值與理想值o2得誤差) 

反向傳播:

delta_o1=-(o1-outo1)*sigma_da(outo1)

delta_o2=-(o2-outo2)*sigma_da(outo2)
(delta_o1,delta_o2分別爲neth1,neth2值對整體的誤差) 

 

dw1=sigma_da(outh1)*i1*(delta_o1*w5+delta_o2*w7)

dw2=sigma_da(outh1)*i2*(delta_o1*w5+delta_o2*w7)

dw3=sigma_da(outh2)*i1*(delta_o1*w6+delta_o2*w8)

dw4=sigma_da(outh2)*i2*(delta_o1*w6+delta_o2*w8)

(dw1,dw2,dw3,dw4分別是w1~w4對整體的偏導)

w1-=alpha*dw1

w2-=alpha*dw2

w3-=alpha*dw3

w4-=alpha*dw4

(w1~w4爲更新後的權值,alpha是學習率,自定義)


 dw5=delta_o1*outh1

dw6=delta_o1*outh2

dw7=delta_o2*outh1

dw8=delta_o2*outh2
 (dw5~dw8爲w5~w8對整體的偏導)

w5-=alpha*dw5

w6-=alpha*dw6

w7-=alpha*dw7

w8-=alpha*dw8
 (w5~w8爲更新後的權值)

循環一次:

outo1=0.802745098356

outo2=0.830938316533
(訓練一次後,結果與理想值還有很大誤差,理想值:o1=0.2,o2=0.9) 

循環40次:

outo1=0.222343700362

outo2=0.879218779053
(訓練40次後,結果已經比較接近理想值了,理想值:o1=0.2,o2=0.9) 

循環200次:

outo1=0.199989353333

outo2=0.898828168138 
(訓練200次後,結果變得極其接近理想值,最大誤差不超過0.002,理想值:o1=0.2,o2=0.9)

    現在,這個簡單的神經網絡已可以根據輸入值3、8, 預測出輸出值0.2、0.9。如果還想要處理更加複雜的神經網絡,就需要增加更多的隱含層,這就叫深度學習,通過更多層的神經網絡來實現機器學習。目前國際上的一些神經網絡已經達到了一千多層。
    下面是其中一些公式的推導:
圖片

圖片

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