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 第一層權重引數 ...