多層感知機(jī) MLP
何為多層感知機(jī)袁辈?
就是在簡單的神經(jīng)網(wǎng)絡(luò)盔然,只包括輸入層和輸出層的之間加入一層或者多層隱藏層锣夹,這樣就是一個多層感知機(jī)的模型了减牺。
如下圖就是一個三層的多層感知機(jī)模型
如何計(jì)算MLP豌习?
我們假設(shè)輸入為X,在輸入層與隱藏層的連線的權(quán)重是W1拔疚,隱藏層與輸出層之間連線的權(quán)重是W2肥隆,輸出為O,bia分別為b1與b2
那么我們的計(jì)算可以為:
當(dāng)然如果這樣就是MLP的話稚失,那么你就錯了栋艳,還差什么呢?
按照上面的運(yùn)算句各,我們可以得到下面的計(jì)算結(jié)果
我們仔細(xì)看一下吸占,其實(shí)我們并沒有發(fā)生什么根本性的變化,只是我們的權(quán)重變成了凿宾,bias變成了
而已矾屯。
以上設(shè)計(jì)依然只能與僅含輸出層的單層神經(jīng)網(wǎng)絡(luò)等價
解決辦法:在隱藏層加入非線性激活函數(shù)
將非線性運(yùn)算的結(jié)果作為下一個全連接層的輸入
常見的激活函數(shù)有如下幾種
首先定義一個畫圖函數(shù)
%matplotlib inline
import d2lzh as d2l
from mxnet import autograd,nd
def xyplot(x_val,y_val,name):
d2l.set_figsize(figsize=(5,2.5))
d2l.plt.plot(x_val.asnumpy(),y_val.asnumpy())
d2l.plt.xlabel('x')
d2l.plt.ylabel(name+'(x)')
1. ReLU函數(shù)
x = nd.arange(-8.0,8.0,0.1)
x.attach_grad()
with autograd.record():
y = x.relu()
y.backward()
xyplot(x,y,'relu')
查看relu函數(shù)導(dǎo)數(shù)的圖像
xyplot(x,x.grad,'grad of relu')
2. Sigmoid函數(shù)
with autograd.record():
y = x.sigmoid()
y.backward()
xyplot(x,y,'sigmoid')
查看sigmoid函數(shù)導(dǎo)數(shù)的圖像
xyplot(x,x.grad,'grad of sigmoid')
3. tanh函數(shù)
with autograd.record():
y = x.tanh()
y.backward()
xyplot(x,y,'tanh')
查看tanh函數(shù)的導(dǎo)數(shù)的圖像
xyplot(x,x.grad,'grad of tanh')
那么,最后讓我們來總結(jié)以下多層感知機(jī)MLP把初厚!
多層感知機(jī)就是含有至少一個隱藏層的由全連接層組成的神經(jīng)網(wǎng)絡(luò)件蚕,且每個隱藏層的輸出通過激活函數(shù)進(jìn)行變換。多層感知機(jī)的層數(shù)和各隱藏層中隱藏單元個數(shù)都是超參數(shù)。以單隱藏層為例并沿用本節(jié)之前定義的符號排作,多層感知機(jī)按以下方式計(jì)算輸出:
其中 ? 表示激活函數(shù)妄痪。在分類問題中哈雏,我們可以對輸出 O 做softmax運(yùn)算,并使用softmax回歸中的交叉熵?fù)p失函數(shù)衫生。 在回歸問題中裳瘪,我們將輸出層的輸出個數(shù)設(shè)為1,并將輸出 O 直接提供給線性回歸中使用的平方損失函數(shù)障簿。