感知機(jī)到神經(jīng)網(wǎng)絡(luò)
感知機(jī)(理論上)可以處理很復(fù)雜的問(wèn)題,但是感知機(jī)權(quán)重設(shè)置的工作依然是由人工進(jìn)行的,這個(gè)特性限制了感知機(jī)處理問(wèn)題的復(fù)雜度.
而神經(jīng)網(wǎng)絡(luò)一個(gè)重要性質(zhì)就是他可以自動(dòng)從數(shù)據(jù)中學(xué)習(xí)到合適的權(quán)重參數(shù).
習(xí)慣上"多層感知機(jī)"指的就是神經(jīng)網(wǎng)絡(luò).
一個(gè)2層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)可以用下圖表示:
"2層"表示擁有權(quán)重的層數(shù)為2
中間層由被稱(chēng)為隱藏層,神經(jīng)網(wǎng)絡(luò)的連接方式和感知機(jī)一致,可以將神經(jīng)網(wǎng)絡(luò)理解成由多層感知機(jī)堆疊而成.
激活函數(shù)
感知機(jī)判別函數(shù)
可以寫(xiě)成如下形式
類(lèi)似h這種將輸入信號(hào)的總和轉(zhuǎn)化為輸出信號(hào)的函數(shù)被稱(chēng)為激活函數(shù)
我們可以用下圖表示這一過(guò)程
神經(jīng)網(wǎng)絡(luò)中每一個(gè)節(jié)點(diǎn)都可以認(rèn)為是一個(gè)激活函數(shù)的計(jì)算過(guò)程.
常見(jiàn)的激活函數(shù)包括:
階躍函數(shù)
類(lèi)似感知機(jī)的激活函數(shù),以閾值為界,一旦輸入超過(guò)閾值就切換輸出
sigmoid函數(shù)(較傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)激活函數(shù)):
ReLU函數(shù)(最近流行的神經(jīng)網(wǎng)絡(luò)激活函數(shù))
線性激活函數(shù)
神經(jīng)網(wǎng)絡(luò)必須使用非線性的激活函數(shù),否則便失去了加深神經(jīng)網(wǎng)絡(luò)層數(shù)的意義
eg.對(duì)于一個(gè)n層網(wǎng)絡(luò),若使用作為激活函數(shù),則
等價(jià)于單層神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)的內(nèi)積
三層神經(jīng)網(wǎng)絡(luò)
其中,為函數(shù)
實(shí)現(xiàn)代碼如下:
import numpy as np
def init_network():
network = {}
network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])
network['b1'] = np.array([0.1, 0.2, 0.3])
network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])
network['b2'] = np.array([0.1, 0.2])
network['W3'] = np.array([[0.1, 0.3], [0.2, 0.4]])
network['b3'] = np.array([0.1, 0.2])
return network
def sigmoid(x):
return 1/(1+np.exp(-x))
def forward(network,x):
W1,W2,W3 = network['W1'],network['W2'],network['W3']
b1,b2,b3 = network['b1'],network['b2'],network['b3']
a1 = x.dot(W1) + b1
z1 = sigmoid(a1)
a2 = z1.dot(W2) + b2
z2 = sigmoid(a2)
a3 = z2.dot(W3) + b3
y = a3
return y
network = init_network()
x = np.array([1.,.5])
y = forward(network,x)
# y = [0.31682708, 0.69627909]
恒等函數(shù)和softmax函數(shù)
恒等函數(shù):將輸入信號(hào)原樣輸出的函數(shù),輸出層的神經(jīng)元只受單個(gè)輸入神經(jīng)元的影響
softmax函數(shù):,輸出層的神經(jīng)元收到輸入層的所有神經(jīng)元影響
為了防止數(shù)值溢出,我們可以對(duì)上式變形
softmax函數(shù)總是輸出0.到1.之間的實(shí)數(shù),并且softmax輸出總和總是1,我們可以吧softmax函數(shù)的輸出解釋成"概率"
小結(jié)
- 神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)使用平滑變化的sigmoid函數(shù)或者ReLU函數(shù)
- 通過(guò)巧妙使用Numpy的多維數(shù)組,可以高效地實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)
- 機(jī)器學(xué)習(xí)的問(wèn)題大體上可以分為分類(lèi)和回歸問(wèn)題
- 關(guān)于輸出層的激活函數(shù),回歸問(wèn)題中一般用恒等函數(shù),分類(lèi)問(wèn)題一般用softmax函數(shù)
- 分類(lèi)問(wèn)題中,輸出層的神經(jīng)元的數(shù)量設(shè)置為要分類(lèi)的類(lèi)別數(shù)
- 輸入數(shù)據(jù)的集合稱(chēng)為批(batch),通過(guò)以批為單位的推理處理(Numpy)能夠提高運(yùn)算效率