神經(jīng)網(wǎng)絡(luò)
5.1 神經(jīng)元模型
在生物神經(jīng)網(wǎng)絡(luò)中,神經(jīng)元之間相互連接,當(dāng)一個(gè)神經(jīng)元受到的外界刺激足夠大時(shí),就會產(chǎn)生興奮(稱為"激活"),并將剩余的"刺激"向相鄰的神經(jīng)元傳導(dǎo)。
神經(jīng)元模型
模型中
x
i
x_i
xi?表示各個(gè)神經(jīng)元傳來的刺激,刺激強(qiáng)度有大有小,所以
w
i
w_i
wi?表示不同刺激的權(quán)重,Θ表示閾值。一段刺激經(jīng)過加權(quán)匯總再減去神經(jīng)元的閾值后,經(jīng)過激活函數(shù)
f
f
f處理,就是一個(gè)輸出y,它如果不為0,那么y就會作用到其他神經(jīng)元當(dāng)中,就如同
x
i
x_i
xi?一樣作為輸入。
前面提到的激活函數(shù)
f
f
f一般表示為:
s
i
g
m
o
i
d
(
x
)
=
1
1
+
e
?
x
sigmoid(x) = \frac{1}{1+e^{-x}}
sigmoid(x)=1+e?x1?
5.2 感知機(jī)與多層網(wǎng)絡(luò)
- 感知機(jī)能快速實(shí)現(xiàn)與,或,非邏輯運(yùn)算,它由兩層神經(jīng)元組成,輸入層接受信號好傳遞到輸出層,并在輸出層進(jìn)行激活函數(shù)處理。
輸出計(jì)算方法為:
y
=
f
(
∑
i
w
i
x
i
?
Θ
)
y = f(\sum_{i}w_ix_i-Θ)
y=f(i∑?wi?xi??Θ)
以"與"運(yùn)算為例(
x
1
x_1
x1?交
x
2
x_2
x2?):令兩個(gè)w值為1,Θ(閾值)為2,則有
y
=
f
(
1
×
x
1
+
1
×
x
2
?
2
)
y=f(1×x_1+1×x_2-2)
y=f(1×x1?+1×x2??2)
只在x均為1時(shí),y才為1
- 常見的神經(jīng)網(wǎng)絡(luò)如下圖所示的層級結(jié)構(gòu),每層神經(jīng)元與下一層的互相連接,稱為"多層前饋神經(jīng)網(wǎng)絡(luò)",神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)到的內(nèi)容,存在于前面提到的連接權(quán)
w
i
w_i
wi?和閾值
Θ
Θ
Θ里。
5.3 誤差逆?zhèn)鞑ニ惴ǎê喎QBP)
多層網(wǎng)絡(luò)的學(xué)習(xí)能力強(qiáng)于單層感知機(jī),可以用BP算法進(jìn)行訓(xùn)練,通過計(jì)算實(shí)際輸出與期望輸出之間的誤差,再將這份誤差反向傳播到網(wǎng)絡(luò)的每一層,從而調(diào)整網(wǎng)絡(luò)中的權(quán)重,這個(gè)過程會迭代進(jìn)行,直到訓(xùn)練效果達(dá)到預(yù)期。
累計(jì)誤差表示為:
E
=
1
m
∑
k
=
1
m
E
k
E=\frac{1}{m}\sum^m_{k=1}E_k
E=m1?k=1∑m?Ek?
具體步驟的偽代碼為:
1.初始化網(wǎng)絡(luò)的權(quán)重和閾值
2.對于每個(gè)訓(xùn)練樣本,進(jìn)行前向傳播計(jì)算:
將輸入樣本傳遞給輸入層
計(jì)算隱藏層的輸出,使用激活函數(shù)(前面提到的Sigmoid函數(shù))
將隱藏層的輸出傳遞給輸出層,再次使用激活函數(shù)
3.計(jì)算輸出層的誤差(期望輸出與實(shí)際輸出的差值)
4.反向傳播誤差:
根據(jù)誤差和激活函數(shù)的導(dǎo)數(shù),計(jì)算輸出層的梯度
將輸出層的梯度傳播回隱藏層,再根據(jù)權(quán)重調(diào)整梯度
更新隱藏層到輸出層的權(quán)重
把隱藏層的梯度傳播回輸入層,根據(jù)權(quán)重調(diào)整梯度
更新輸入層到隱藏層的權(quán)重
5.重復(fù)2-4步驟,直到達(dá)到預(yù)定的訓(xùn)練次數(shù)或者收斂了
6.使用訓(xùn)練好的網(wǎng)絡(luò)進(jìn)行預(yù)測
BP神經(jīng)網(wǎng)絡(luò)經(jīng)常出現(xiàn)"過擬合"現(xiàn)象,表現(xiàn)為:訓(xùn)練誤差持續(xù)降低,測試誤差上升。解決的方法有兩種:
- 第一種是"早停":把數(shù)據(jù)集分為訓(xùn)練集和驗(yàn)證集,前者就是做上述偽代碼的工作,即計(jì)算梯度,更新權(quán)重等;驗(yàn)證集用來估計(jì)誤差(如分類任務(wù)中的分類準(zhǔn)確率),當(dāng)出現(xiàn)訓(xùn)練誤差減小但驗(yàn)證誤差提升時(shí),停止訓(xùn)練,同時(shí)返回具有最小驗(yàn)證集誤差的權(quán)重和閾值。
- 第二種是"正則化",在誤差目標(biāo)函數(shù)中加入一個(gè)描述網(wǎng)絡(luò)復(fù)雜度的部分,通過對模型的復(fù)雜度進(jìn)行懲罰(如限制模型的參數(shù)或權(quán)重的大小)來防止過擬合
深度學(xué)習(xí)
深度學(xué)習(xí)模型通過"增加隱層"的數(shù)目,提高訓(xùn)練效率,降低過擬合的風(fēng)險(xiǎn)。
以第二章的手寫體識別為例,網(wǎng)絡(luò)輸入是一個(gè)32×32的手寫數(shù)字圖像,輸出是算法的識別結(jié)果,過程以偽代碼的形式呈現(xiàn)。
對所有手寫數(shù)字文本
將加載的32×32矩陣轉(zhuǎn)為一行1024的向量
把文本對應(yīng)的數(shù)字轉(zhuǎn)化為one-hot向量(某個(gè)值為1,其余均為0)
構(gòu)建神經(jīng)網(wǎng)絡(luò):設(shè)置網(wǎng)絡(luò)的隱藏層數(shù),各隱藏層神經(jīng)元個(gè)數(shù),激活函數(shù)學(xué)習(xí)率,優(yōu)化方法,最大迭代次數(shù)
做測試
隱藏層中的神經(jīng)元能直接影響網(wǎng)絡(luò)的學(xué)習(xí)能力,但是如果數(shù)量過多容易導(dǎo)致出現(xiàn)過擬合現(xiàn)象,選取合適參數(shù)的方法有
- 手動(dòng)篩選:給定一個(gè)范圍,如:比較50,100,500的效果,如果200的效果優(yōu)于其他兩者,那么就從50到100間再選擇一個(gè)數(shù)值,但這個(gè)方法有點(diǎn)慢
- 正則化技術(shù):以L1正則化(L1 Regularization)為例:L1正則化通過在損失函數(shù)中添加參數(shù)的絕對值之和,來懲罰模型中的大參數(shù)。這導(dǎo)致一些參數(shù)變?yōu)榱?,從而?shí)現(xiàn)特征選擇和稀疏性。L1正則化可以促使模型更加稀疏,即只有少數(shù)參數(shù)對模型的預(yù)測起作用,其他參數(shù)趨近于零。
實(shí)驗(yàn):比較隱藏層不同神經(jīng)元個(gè)數(shù)的多層感知機(jī)的實(shí)驗(yàn)效果
(學(xué)習(xí)率均為0.0001,迭代次數(shù)為2000)
clf = MLPClassifier(hidden_layer_sizes=(100,),
activation='logistic', solver='adam',
learning_rate_init=0.0001, max_iter=2000)
print(clf)
變量為神經(jīng)元個(gè)數(shù),分別是50,100,500,1000文章來源:http://www.zghlxwxcb.cn/news/detail-681013.html
實(shí)驗(yàn)分析:神經(jīng)元個(gè)數(shù)從50逐漸升到500個(gè)的過程中,網(wǎng)絡(luò)對目標(biāo)特征的抓取能力逐漸提升,所以識別的正確率隨之提高。但在個(gè)數(shù)跳到1000時(shí)正確率沒有提高,可能是因?yàn)閭€(gè)數(shù)在達(dá)到1000之前,多層感知機(jī)就已經(jīng)收斂了,個(gè)數(shù)繼續(xù)增加相當(dāng)于時(shí)過度訓(xùn)練數(shù)據(jù),提高網(wǎng)絡(luò)復(fù)雜度,這并不會帶來增益。能測試的變量還有迭代次數(shù)和學(xué)習(xí)率。文章來源地址http://www.zghlxwxcb.cn/news/detail-681013.html
到了這里,關(guān)于機(jī)器學(xué)習(xí)-神經(jīng)網(wǎng)絡(luò)(西瓜書)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!