1 基本概念
2 一些簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)和向前傳播
1失受、神經(jīng)網(wǎng)絡(luò)的交互界面很簡(jiǎn)單。它接受輸入變量咏瑟,并以此作為信息來源拂到;擁有權(quán)重變量,以此作為知識(shí)码泞;然后兄旬,融合信息和知識(shí),輸出預(yù)測(cè)結(jié)果。
2领铐、權(quán)重也可以作為網(wǎng)絡(luò)的輸入和預(yù)測(cè)之間敏感度的度量悯森。如果權(quán)重非常高。那么即使最小的輸入也可以對(duì)預(yù)測(cè)結(jié)果產(chǎn)生非常大的影響绪撵;如果權(quán)重很小瓢姻,那么很大的輸入也只能對(duì)預(yù)測(cè)結(jié)果產(chǎn)生很小的擾動(dòng)。這種敏感度類似于音量調(diào)節(jié)
3音诈、神經(jīng)網(wǎng)絡(luò)可以同時(shí)接受多個(gè)輸入并做出預(yù)測(cè)幻碱。將每個(gè)輸入乘以各自的權(quán)重,然后對(duì)所有局部預(yù)測(cè)結(jié)果進(jìn)行求和细溅。這稱為輸入的加權(quán)和褥傍,或簡(jiǎn)稱為加權(quán)和,也稱為點(diǎn)積
4喇聊、為了預(yù)測(cè)恍风,神經(jīng)網(wǎng)絡(luò)對(duì)輸入重復(fù)執(zhí)行加權(quán)求和操作。通過網(wǎng)絡(luò)激勵(lì)信號(hào)向前進(jìn)行傳播誓篱,激勵(lì)信號(hào)代表的是所有非權(quán)重的數(shù)字
2.1 使用多個(gè)輸入作為預(yù)測(cè)
#多個(gè)參數(shù)作為輸入朋贬,一個(gè)輸出
import numpy as np
weights = np.array([0.1,0.2,0])
def neural_network(input,weights):
pred = input.dot(weights)
return pred
#每個(gè)球員的平均腳趾數(shù)
toes = np.array([8.5,9.5,9.9,9.0])
#歷史勝率
wlrec = np.array([0.65,0.8,0.8])
#粉絲數(shù)
nfans = np.array([1.2,1.3,0.5,1.0])
input = np.array([toes[0],wlrec[0],nfans[0]])
pred = neural_network(input,weights)
print(pred)
2.2 預(yù)測(cè)多個(gè)輸出
預(yù)測(cè)結(jié)果與三個(gè)單一權(quán)重的獨(dú)立神經(jīng)網(wǎng)絡(luò)是一樣的
#一個(gè)輸入,多個(gè)輸出
import numpy as np
def ele_mul(number,vector):
output = [0,0,0]
assert(len(output)==len(vector))
for i in range(len(vector)):
output[i] = number*vector[i]
return output
def neural_network(input,weights):
pred = ele_mul(input,weights)
return pred
wlrec = [0.65,0.8,0.8]
#三個(gè)權(quán)重分別代表:受傷燕鸽、比賽勝負(fù)兄世、悲傷程度
weights = [0.3,0.2,0.9]
input = wlrec[0]
pred = neural_network(input,weights)
print(pred)
2.3 使用多個(gè)輸入和輸出進(jìn)行預(yù)測(cè)
基于構(gòu)建多個(gè)輸入網(wǎng)絡(luò)的方法和構(gòu)建多個(gè)輸出網(wǎng)絡(luò)的方法可以結(jié)合起來構(gòu)建一個(gè)同時(shí)具有多個(gè)輸入和多個(gè)輸出的網(wǎng)絡(luò)。整個(gè)網(wǎng)絡(luò)的邏輯就是:取一個(gè)向量啊研,將它和矩陣中的每一行做點(diǎn)積運(yùn)算御滩。
#多輸入,多輸出
import numpy as np
#weights 各列分別代表:平均腳趾數(shù)党远、歷史勝率削解、粉絲數(shù)
#weights 各行分別代表:預(yù)測(cè)是否受傷,預(yù)測(cè)是否贏球沟娱,預(yù)測(cè)悲傷程度
weights = [[0.1,0.1,-0.3],
[0.1,0.2,0.0],
[0.0,1.3,0.1]]
def neural_network(input,weights):
pred = vect_mat_mul(input,weights)
return pred
def w_sum(a,b):
assert(len(a)==len(b))
output = 0
for i in range(len(a)):
output += a[i]*b[i]
return output
def vect_mat_mul(vect,matrix):
assert(len(vect) == len(matrix))
output = [0,0,0]
for i in range(len(vect)):
output[i] = w_sum(vect,matrix[i])
return output
toes = np.array([8.5,9.5,9.9,9.0])
wlrec = np.array([0.65,0.8,0.8])
nfans = np.array([1.2,1.3,0.5,1.0])
input = [toes[0],wlrec[0],nfans[0]]
pred = neural_network(input,weights)
print(pred)
2.4 用預(yù)測(cè)結(jié)果進(jìn)一步預(yù)測(cè)
神經(jīng)網(wǎng)絡(luò)是可以堆疊的氛驮,可以將一個(gè)網(wǎng)絡(luò)的輸出提供給另一個(gè)網(wǎng)絡(luò)作為輸入。這相當(dāng)于兩個(gè)連續(xù)的向量矩陣乘法济似。
#用預(yù)測(cè)結(jié)果進(jìn)行進(jìn)一步預(yù)測(cè)
import numpy as np
#weights 各列分別代表相對(duì)應(yīng)的數(shù)據(jù):平均腳趾數(shù)矫废、歷史勝率、粉絲數(shù)
#weights 各行分別代表預(yù)測(cè)的不同的隱藏層:隱藏層1砰蠢,隱藏層2蓖扑,隱藏層3
ih_wgt = np.array([
[0.1,0.2,-0.1],
[-0.1,0.1,0.9],
[0.1,0.4,0.1]]).T
#weights 各列分別代表相對(duì)應(yīng)的數(shù)據(jù):平均腳趾數(shù)、歷史勝率台舱、粉絲數(shù)
#weights 各行分別代表預(yù)測(cè)的不同類型:預(yù)測(cè)是否受傷律杠,預(yù)測(cè)是否贏球,預(yù)測(cè)悲傷程度
hp_wgt = np.array([
[0.3,1.2,-0.3],
[-0.1,0.2,0.0],
[0.0,1.3,0.1]]).T
weights = [ih_wgt,hp_wgt]
def neural_network(input,weights):
hid = input.dot(weights[0])#獲得隱藏層的預(yù)測(cè)
pred = hid.dot(weights[1])#隱藏層作為輸入,再進(jìn)行預(yù)測(cè)
return pred
toes = np.array([8.5,9.5,9.9,9.0])
wlrec = np.array([0.65,0.8,0.8])
nfans = np.array([1.2,1.3,0.5,1.0])
input = np.array([toes[0],wlrec[0],nfans[0]])
pred = neural_network(input,weights)
print(pred)
3 參考資料
《深度學(xué)習(xí)圖解》