構建乙個簡單的人工神經網路

2021-09-24 23:33:42 字數 2904 閱讀 5196

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。如果還想要處理更加複雜的神經網路,就需要增加更多的隱含層,這就叫深度學習,通過更多層的神經網路來實現機器學習。目前國際上的一些神經網路已經達到了一千多層。

下面是其中一些公式的推導:

構建第乙個神經網路

莫煩python 使用軟體anaconda3 import tensorflow as tf import numpy as np 匯入模組以後,構建乙個新增神經網路層的函式 add layer 其中需要設定的神經網路層的變數為輸入輸出和激勵函式,同時需要告知函式輸入輸出的大小 size def a...

乙個神經網路

機器學習三要素 資料 演算法 算力 1 機器學習,就是在任務 t 上,隨經驗 e 的增加,效果 p 隨之增加。2 機器學習的過程是通過大量資料的輸入,生成乙個模型,再利用這個生成的 模型,實現對結果的 3 龐大的神經網路是基於神經元結構的,是輸入乘以權重,再求和,再過非線 性函式的過程。檔案讀操作 ...

簡單神經網路的構建

參考文章 coding utf 8 import numpy as np def sigmoid x 啟用函式 return 1 1 np.exp x input1 np.array 0.35 0.9 0.58 0.78 輸入資料 4x1 w1 np.random.rand 3,4 第一層權重引數 ...