




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第1章感知機(jī)目錄01感知機(jī)是什么?03感知機(jī)的實(shí)現(xiàn)04感知機(jī)的局限性02簡單邏輯電路05多層感知機(jī)1.1感知機(jī)是什么感知機(jī)接收多個(gè)輸入信號,輸出一個(gè)信號。這里所說的“信號”可以想象成電流或河流那樣具備“流動性”的東西。像電流流過導(dǎo)線,向前方輸送電子一樣,感知機(jī)的信號也會形成電流,像前方輸送信息。但是,和實(shí)際的電流不同的是,感知機(jī)的信號只有“流/不流”(1/0)兩種取值。在本書中,0對應(yīng)“不傳遞信號”,1對應(yīng)“傳遞信號”。(1-1)1.2簡單邏輯電路1.2.1與門現(xiàn)在要通過調(diào)整感知機(jī)的權(quán)重和閾值來模擬與門的邏輯功能。具體來說,需要確定能夠滿足表1-1的真值表的w1、w2、θ的值。換句話說,要找到這樣的權(quán)重和閾值,使得感知機(jī)能夠按照與門的真值表來輸出相應(yīng)的結(jié)果。實(shí)際上,滿足表1-1的真值表?xiàng)l件的參數(shù)選擇有無數(shù)多個(gè)。比如,當(dāng)(w1,w2,θ)=(0.5,0.5,0.7)時(shí),可以滿足表1-1的條件。此外,當(dāng)(w1,w2,θ)為(1.0,1.0,1.5)或者(0.3,0.3,0.5)時(shí),同樣也滿足與門的條件。設(shè)定這樣的參數(shù)后,僅當(dāng)x1和x2同時(shí)為1時(shí),信號的加權(quán)總和才會超過給定的閾值θ。1.2簡單邏輯電路1.2.2與非門與非門的參數(shù)又可以是什么樣的組合呢?可以選擇以下參數(shù)值,當(dāng)(w1,w2,θ)=(-0.5,-0.5,-0.7)時(shí),可以滿足表1-2的條件。此外,當(dāng)(w1,w2,θ)為(-1.0,-1.0,-1.5)或者(-0.3,-0.3,-0.5)時(shí),同樣也滿足與非門的條件。實(shí)際上,只要把實(shí)現(xiàn)與門的參數(shù)值的符號取反,就可以實(shí)現(xiàn)與非門的邏輯功能。因此,存在無數(shù)多組參數(shù)值可以使感知機(jī)模擬與非門的邏輯功能。1.2簡單邏輯電路1.2.2或門正如上所述,使用感知機(jī)可以表示與門、與非門、或門的邏輯電路。重要的一點(diǎn)是:與門、與非門、或門的感知機(jī)構(gòu)造是一樣的。實(shí)際上,這三個(gè)門電路的感知機(jī)結(jié)構(gòu)相同,它們之間的區(qū)別僅在于參數(shù)的值(權(quán)重和閾值)不同。換句話說,相同構(gòu)造的感知機(jī),只需要通過適當(dāng)?shù)卣{(diào)整參數(shù)的值,就可以像“變色龍演員”一樣,變身為與門、與非門和或門。應(yīng)該為這個(gè)或門設(shè)定什么樣的參數(shù)呢?1.3感知機(jī)的實(shí)現(xiàn)1.3.1與門的簡單的實(shí)現(xiàn)用Python來實(shí)現(xiàn)剛才的邏輯電路,這里,先定義一個(gè)接收參數(shù)x1和x2的and_gate函數(shù)。defand_gate(x1,x2):
w1,w2,theta=0.5,0.5,0.7
ifw1*x1+w2*x2<=theta:
return0
else:
return1在函數(shù)內(nèi)部初始化了參數(shù)w1=0.5、
w2=0.5、theta=0.7,當(dāng)輸入的加權(quán)總和超過閾值時(shí)返回1,否則返回0。1.3感知機(jī)的實(shí)現(xiàn)1.3.1與非門簡單的實(shí)現(xiàn)按照同樣的步驟也可以實(shí)現(xiàn)與非門和或門,只需要修改一下相應(yīng)的參數(shù)即可。對應(yīng)與非門的實(shí)現(xiàn)如下:defnand_gate(x1,x2):w1,w2,theta=-0.5,-0.5,-0.7ifw1*x1+w2*x2<=theta:return1else:return0在函數(shù)內(nèi)部初始化了參數(shù)w1=-0.5、
w2=-0.5、theta=-0.7,當(dāng)輸入的加權(quán)總和超過閾值時(shí)返回1,否則返回0。#測試print(nand_gate(0,0))
#輸出:1print(nand_gate(0,1))
#輸出:1print(nand_gate(1,0))
#輸出:1print(nand_gate(1,1))
#輸出:0輸出結(jié)果和與非門的結(jié)果一樣。或門也可以改變參數(shù)實(shí)現(xiàn)。1.3感知機(jī)的實(shí)現(xiàn)1.3.2導(dǎo)入權(quán)重和偏置之前的與門實(shí)現(xiàn)方法非常直接和易于理解,但是考慮到未來可能會有一些變化,可以考慮另一種實(shí)現(xiàn)形式。在這之前,先將式(1-1)中的閾值θ換成-b,這樣就可以用式(1-2)來表示感知機(jī)的行為。
(1-2)式(1-1)和式(1-2)雖然有一個(gè)符號不同,但表達(dá)的內(nèi)容是完全相同的。在式(1-2)中,b
被稱為偏置,而w1和w2被稱為權(quán)重。根據(jù)式(1-2),感知機(jī)會計(jì)算輸入信號和權(quán)重的乘積,然后加上偏置,如果這個(gè)值大于0則輸出1,否則輸出0。1.3感知機(jī)的實(shí)現(xiàn)1.3.3權(quán)重和偏置的實(shí)現(xiàn)下面使用NumPy按照式(1-2)的方式來實(shí)現(xiàn)與門。代碼如下:importnumpyasnp
#定義與門函數(shù)defand_gate(x1,x2):
inputs=np.array([x1,x2])
#輸入信號
weights=np.array([0.5,0.5])
#權(quán)重
bias=-0.7
#偏置
result=np.sum(inputs*weights)+bias
#計(jì)算輸入信號和權(quán)重的乘積再加上偏置
output=1ifresult>0else0
#根據(jù)計(jì)算結(jié)果輸出1或0
returnoutput
#測試print(and_gate(0,0))
#輸出:0print(and_gate(0,1))
#輸出:0print(and_gate(1,0))
#輸出:0print(and_gate(1,1))
#輸出:1運(yùn)行結(jié)果如下:00011.3感知機(jī)的實(shí)現(xiàn)1.3.3權(quán)重和偏置的實(shí)現(xiàn)下面使用NumPy按照式(1-2)的方式來實(shí)現(xiàn)與非門,代碼如下:importnumpyasnpdefnand_gate(x1,x2):inputs=np.array([x1,x2])weights=np.array([-0.5,-0.5])bias=0.7result=np.sum(inputs*weights)+biasoutput=1ifresult>0else0returnoutput#測試print(nand_gate(0,0))#輸出:1print(nand_gate(0,1))#輸出:1print(nand_gate(1,0))#輸出:1print(nand_gate(1,1))#輸出:0運(yùn)行結(jié)果如下:11101.3感知機(jī)的實(shí)現(xiàn)1.3.3權(quán)重和偏置的實(shí)現(xiàn)下面使用NumPy按照式(1-2)的方式來實(shí)現(xiàn)或門,代碼如下:importnumpyasnpdefor_gate(x1,x2):inputs=np.array([x1,x2])weights=np.array([0.5,0.5])bias=-0.2result=np.sum(inputs*weights)+biasoutput=1ifresult>0else0returnoutput#測試print(or_gate(0,0))#輸出:0print(or_gate(0,1))#輸出:1print(or_gate(1,0))#輸出:1print(or_gate(1,1))#輸出:1運(yùn)行結(jié)果如下:0111對三種門的實(shí)現(xiàn)進(jìn)行對比,只有參數(shù)不同,其余部分完全相同。1.4感知機(jī)的局限性1.4.1異或門
異或門也稱為邏輯異或電路。根據(jù)其真值表1-4,僅當(dāng)x1或x2中的一方為1時(shí),輸出結(jié)果為1。然而,用前面介紹的感知機(jī)是無法實(shí)現(xiàn)這個(gè)異或門的。這是因?yàn)楦兄獧C(jī)只能實(shí)現(xiàn)線性可分的函數(shù),而異或門屬于線性不可分的函數(shù)。無法用一條直線將圖1-3中的異或門的輸出分開。圖1-3異或門的輸出1.4感知機(jī)的局限性1.4.2線性和非線性圖1-3異或門的輸出圖1-3中的綠色圓圈和藍(lán)色矩形無法用一條直線分開,但是如果將直線這個(gè)限制去掉,就可以實(shí)現(xiàn)了,比如,可以像1-4那樣,做出分開綠色圓圈和藍(lán)色矩形的空間。圖1-4使用曲線分開0和1感知機(jī)的局限性就在于它只能表示由一條直線分割的空間。圖1-4這樣的曲線無法用感知機(jī)表示。另外,由圖1-4這樣的曲線分割而成的空間稱為非線性空間,由直線分割而成的空間稱為線性空間。1.5多層感知機(jī)感知機(jī)不能表示異或門讓人深感遺憾,但也無需悲觀。實(shí)際上,感知機(jī)的獨(dú)特之處在于它能夠通過疊加多個(gè)層來解決非線性問題?,F(xiàn)在,暫時(shí)不考慮疊加層具體是指什么,下面從其他角度來思考一下異或門的問題。1.5多層感知機(jī)1.5.1組合門電路配置異或門1.5多層感知機(jī)1.5.1組合門電路配置異或門1.5多層感知機(jī)1.5多層感知機(jī)1.5.2異或門的實(shí)現(xiàn)當(dāng)嘗試用Python實(shí)現(xiàn)表1-5所示的異或門時(shí),可以使用之前定義的與門函數(shù)and_gate()、與非門函數(shù)nand_gate()和或門函數(shù)or_gate()。代碼如下所示:def
xor_gate(x1,x2):
s1=nand_gate(x1,x2)
s2=or_gate(x1,x2)return
and_gate(s1,s2)
print(xor_gate(0,0))
#輸出0print(xor_gate(0,1))
#輸出1print(xor_gate(1,0))
#輸出1print(xor_gate(1,1))
#輸出0上述代碼運(yùn)行結(jié)果為:0110下面用感知機(jī)的表示方法(明確地顯示神經(jīng)元)來表示這個(gè)異或門,結(jié)果如圖1-7所示。圖1-7用感知機(jī)實(shí)現(xiàn)的異或門這也說明了“單層感知機(jī)”無法表示的東西,通過增加一層就可以解決。換句話說,通過疊加層(加深層),感知機(jī)能夠進(jìn)行更加靈活的表示,從而應(yīng)對更為復(fù)雜的問題。這種概念也為后來深度學(xué)習(xí)的發(fā)展奠定了基礎(chǔ)。1.5多層感知機(jī)感謝觀看第2章神經(jīng)網(wǎng)絡(luò)目錄2.1從感知機(jī)到神經(jīng)網(wǎng)絡(luò)2.2激活函數(shù)2.3神經(jīng)網(wǎng)絡(luò)的前向傳播2.4輸出層的設(shè)計(jì)2.5損失函數(shù)2.6梯度法2.7學(xué)習(xí)算法的實(shí)現(xiàn)2.8誤差反向傳播2.9簡單層的實(shí)現(xiàn)2.10激活函數(shù)層的實(shí)現(xiàn)2.11Affine層和softmax層的實(shí)現(xiàn)2.12softmax-with-loss層第2章
神經(jīng)網(wǎng)絡(luò)上一章學(xué)習(xí)了感知機(jī)。盡管感知機(jī)能夠表示復(fù)雜函數(shù),但設(shè)定權(quán)重的工作仍然需要人工進(jìn)行,以確定合適的、符合預(yù)期的輸入和輸出的權(quán)重。神經(jīng)網(wǎng)絡(luò)的出現(xiàn)就是為了解決剛才的壞消息。具體地說,神經(jīng)網(wǎng)絡(luò)的一個(gè)重要特性是它可以自動地從數(shù)據(jù)中學(xué)習(xí)到合適的權(quán)重參數(shù)。在本章中,將深入探討神經(jīng)網(wǎng)絡(luò)的基本概念和結(jié)構(gòu),首先從感知機(jī)的原理入手,了解其在神經(jīng)網(wǎng)絡(luò)發(fā)展中的重要性。接著,將介紹神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu),包括各層的組成及其功能,進(jìn)而引入激活函數(shù)的概念,討論其對神經(jīng)網(wǎng)絡(luò)性能的影響。此外,本章還將詳細(xì)闡述神經(jīng)網(wǎng)絡(luò)的前向傳播過程,包括信號在各層間的傳遞及實(shí)現(xiàn)方法、輸出層的設(shè)計(jì),以及不同激活函數(shù)的應(yīng)用。通過逐步解析損失函數(shù)、梯度法以及學(xué)習(xí)算法的實(shí)現(xiàn),最后給出誤差反向傳播相關(guān)理論。2.1從感知機(jī)到神經(jīng)網(wǎng)絡(luò)2.1.1神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)神經(jīng)網(wǎng)絡(luò)中信號是如何傳遞的呢?2.1從感知機(jī)到神經(jīng)網(wǎng)絡(luò)2.1.2回顧感知機(jī)(2-1)2.1從感知機(jī)到神經(jīng)網(wǎng)絡(luò)2.1.3激活函數(shù)2.2激活函數(shù)2.2.1階躍函數(shù)的實(shí)現(xiàn)根據(jù)式(2-2),實(shí)現(xiàn)階躍函數(shù)的代碼如下:defstep_function(x):ifx>0:return1else:return0importnumpyasnp
defstep_function(x):returnnp.array(x>0,dtype=)以上代碼實(shí)現(xiàn)簡單、易于理解,但是參數(shù)x只能接受實(shí)數(shù)(浮點(diǎn)數(shù))。為了便于后面的操作,把它修改為支持numpy數(shù)組的實(shí)現(xiàn)。2.2激活函數(shù)2.2.2階躍函數(shù)的實(shí)現(xiàn)根據(jù)式(2-2),實(shí)現(xiàn)階躍函數(shù)的代碼如下:defstep_function(x):ifx>0:return1else:return0importnumpyasnp
defstep_function(x):returnnp.array(x>0,dtype=)以上代碼實(shí)現(xiàn)簡單、易于理解,但是參數(shù)x只能接受實(shí)數(shù)(浮點(diǎn)數(shù))。為了便于后面的操作,把它修改為支持numpy數(shù)組的實(shí)現(xiàn)。2.2激活函數(shù)2.2.2Sigmoid函數(shù)2.2激活函數(shù)2.2.3ReLu函數(shù)2.3神經(jīng)網(wǎng)絡(luò)的前向傳播2.3神經(jīng)網(wǎng)絡(luò)的前向傳播2.3.1符號的含義2.3神經(jīng)網(wǎng)絡(luò)的前向傳播2.3.1符號的含義2.3神經(jīng)網(wǎng)絡(luò)的前向傳播2.3.2各層間信號傳遞的實(shí)現(xiàn)importnumpyasnp
#設(shè)置輸入信號、權(quán)重和偏置X=np.array([1.0,0.5])#輸入信號,形狀為(2,)W1=np.array([[0.1,0.2,0.3],[0.4,0.5,0.6]])#權(quán)重,形狀為(2,3)B1=np.array([0.1,0.2,0.3])#偏置,形狀為(3,)
#計(jì)算輸出A1=np.dot(X,W1)+B12.3神經(jīng)網(wǎng)絡(luò)的前向傳播2.3.2各層間信號傳遞的實(shí)現(xiàn)2.3神經(jīng)網(wǎng)絡(luò)的前向傳播2.3.2各層間信號傳遞的實(shí)現(xiàn)2.3神經(jīng)網(wǎng)絡(luò)的前向傳播2.3.2各層間信號傳遞的實(shí)現(xiàn)2.3神經(jīng)網(wǎng)絡(luò)的前向傳播2.3.2各層間信號傳遞的實(shí)現(xiàn)2.3神經(jīng)網(wǎng)絡(luò)的前向傳播2.3.2各層間信號傳遞的實(shí)現(xiàn)2.3神經(jīng)網(wǎng)絡(luò)的前向傳播2.3.2各層間信號傳遞的實(shí)現(xiàn)2.3神經(jīng)網(wǎng)絡(luò)的前向傳播2.3.2各層間信號傳遞的實(shí)現(xiàn)2.3神經(jīng)網(wǎng)絡(luò)的前向傳播2.3.2各層間信號傳遞的實(shí)現(xiàn)2.3神經(jīng)網(wǎng)絡(luò)的前向傳播2.3.3代碼實(shí)現(xiàn)importnumpyasnp
defsigmoid(x):
return1/(1+np.exp(-x))
defidentity_function(x):
returnx
definit_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])
returnnetwork
defforward(networ,x):
W1,W2,W3=network['W1'],network['W2'],network['W3']
b1,b2,b3=network['b1'],network['b2'],network['b3']
a1=np.dot(x,W1)+b1
z1=sigmoid(a1)
a2=np.dot(z1,W2)+b2
z2=sigmoid(a2)
a3=np.dot(z2,W3)+b3
y=identity_function(a3)
returny
network=init_network()x=np.array([1.0,0.5])y=forward(network,x)print(y)2.4輸出層的設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)可以應(yīng)用于分類問題和回歸問題。根據(jù)問題的性質(zhì),需要選擇適當(dāng)?shù)妮敵鰧蛹せ詈瘮?shù)。通常情況下,對于回歸問題,會選擇恒等函數(shù)作為輸出層的激活函數(shù),而對于分類問題,會選擇softmax函數(shù)。2.4輸出層的設(shè)計(jì)2.4.1恒等函數(shù)2.4輸出層的設(shè)計(jì)2.4.2softmax函數(shù)2.4輸出層的設(shè)計(jì)2.4.2softmax函數(shù)importnumpyasnp
defsoftmax(a):
exp_a
=np.exp(a)
sum_exp_a
=np.sum(exp_a)
returnexp_a
/sum_exp_a需要注意的是,由于指數(shù)函數(shù)的特性,softmax函數(shù)在處理大數(shù)字時(shí)可能導(dǎo)致數(shù)值穩(wěn)定性問題。因此在實(shí)際應(yīng)用中,通常會對輸入向量先進(jìn)行適當(dāng)?shù)目s放處理,以避免數(shù)值溢出或數(shù)值不穩(wěn)定的情況?!纠?-1】softmax函數(shù)實(shí)現(xiàn)示例。importnumpyasnp
defsoftmax(x):
returnnp.exp(x)/np.sum(np.exp(x),axis=0)
#示例用法x=np.array([1000,999,1010])result=softmax(x)print(result)運(yùn)行結(jié)果為:[nannannan]2.4輸出層的設(shè)計(jì)2.4.2softmax函數(shù)【例2-2】采用溢出對策的softmax函數(shù)實(shí)現(xiàn)示例。2.4輸出層的設(shè)計(jì)2.4.2softmax函數(shù)2.4輸出層的設(shè)計(jì)2.4.2softmax函數(shù)2.4輸出層的設(shè)計(jì)2.4.2softmax函數(shù)2.4.3輸出層的神經(jīng)元數(shù)量2.4輸出層的設(shè)計(jì)對于分類問題,輸出層的神經(jīng)元數(shù)量通常設(shè)置為類別的數(shù)量,例如對圖像中的數(shù)字0到9進(jìn)行分類,輸出層的神經(jīng)元數(shù)量設(shè)定為10。神經(jīng)網(wǎng)絡(luò)在訓(xùn)練過程中學(xué)習(xí)將輸入映射到不同類別,每個(gè)輸出神經(jīng)元對應(yīng)一個(gè)類別,最終產(chǎn)生分類預(yù)測結(jié)果。對于回歸問題,輸出層的神經(jīng)元數(shù)量通常根據(jù)目標(biāo)變量的維度決定。如果要預(yù)測單個(gè)實(shí)數(shù)值(如房價(jià)、溫度),則輸出層的神經(jīng)元數(shù)量設(shè)置為1;如果需要同時(shí)預(yù)測多個(gè)相關(guān)的實(shí)數(shù)值(如坐標(biāo)點(diǎn)的x和y坐標(biāo)),則設(shè)置為對應(yīng)實(shí)數(shù)值的維度。這樣的設(shè)置保證了神經(jīng)網(wǎng)絡(luò)輸出與問題需求相匹配,更好地完成回歸預(yù)測任務(wù)。2.5損失函數(shù)損失函數(shù)在神經(jīng)網(wǎng)絡(luò)中扮演著關(guān)鍵的角色,它用于衡量模型預(yù)測結(jié)果與實(shí)際標(biāo)簽之間的差異。通過損失函數(shù),能夠量化模型的預(yù)測性能,進(jìn)而引導(dǎo)網(wǎng)絡(luò)的學(xué)習(xí)過程,使其不斷優(yōu)化以更好地?cái)M合數(shù)據(jù)。損失函數(shù)的作用是評估模型的預(yù)測值與真實(shí)值之間的差距,這種差距通常被稱為“損失”,它是衡量模型性能的重要指標(biāo)。在訓(xùn)練過程中,目標(biāo)是最小化損失函數(shù),通過調(diào)整神經(jīng)網(wǎng)絡(luò)中的參數(shù),使得模型能夠更準(zhǔn)確地預(yù)測數(shù)據(jù)的標(biāo)簽。因此,損失函數(shù)在神經(jīng)網(wǎng)絡(luò)中起著至關(guān)重要的作用,它不僅指導(dǎo)著模型的學(xué)習(xí)方向,也是評價(jià)模型性能優(yōu)劣的重要標(biāo)準(zhǔn)。損失函數(shù)一般情況下采用均方誤差和交叉熵誤差。2.5損失函數(shù)2.5.1均方誤差2.5.2交叉熵誤差2.5損失函數(shù)交叉熵誤差實(shí)現(xiàn)代碼如下:defcross_entropy(y,t):delta=1e-7return-np.sum(t*np.log(y+delta))2.5損失函數(shù)2.5.2交叉熵誤差2.5.3mini-batch學(xué)習(xí)2.5損失函數(shù)2.5.3mini-batch學(xué)習(xí)2.5損失函數(shù)在神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)中,通常會從訓(xùn)練數(shù)據(jù)中選取一批數(shù)據(jù)(稱為mini-batch,小批量),然后對每個(gè)mini-batch進(jìn)行學(xué)習(xí)。比如,從80000個(gè)訓(xùn)練數(shù)據(jù)中隨機(jī)選擇100個(gè)樣本,再利用這100個(gè)樣本進(jìn)行學(xué)習(xí)。這種學(xué)習(xí)方式被稱為mini-batch學(xué)習(xí)。這樣的方法不僅能夠提高計(jì)算效率,同時(shí)也保持了對整體數(shù)據(jù)集的有效學(xué)習(xí)。2.5.4mini-batch版交叉熵誤差的實(shí)現(xiàn)如果監(jiān)督數(shù)據(jù)是one-hot編碼形式時(shí),可采用下面的代碼實(shí)現(xiàn)單個(gè)數(shù)據(jù)和批量數(shù)據(jù)的交叉熵誤差:defcross_entropy_error_1(y,t):ify.ndim==1:t=t.reshape(1,t.size)y=y.reshape(1,y.size)
batch_size=y.shape[0]return-np.sum(t*np.log(y+1e-7))/batch_size其中,y是神經(jīng)網(wǎng)絡(luò)的輸出,t是監(jiān)督數(shù)據(jù)。求單個(gè)數(shù)據(jù)的交叉熵誤差時(shí),需要改變數(shù)據(jù)的形狀。并且,當(dāng)輸入為mini-batch時(shí),要用batch的個(gè)數(shù)進(jìn)行正則化,計(jì)算單個(gè)數(shù)據(jù)的平均交叉熵誤差。2.5損失函數(shù)2.6梯度法機(jī)器學(xué)習(xí)的主要任務(wù)是在學(xué)習(xí)過程中尋找最優(yōu)參數(shù)。同樣,神經(jīng)網(wǎng)絡(luò)在訓(xùn)練時(shí)也需要找到最優(yōu)的參數(shù)(包括權(quán)重和偏置)。在這一過程中,損失函數(shù)用于衡量模型的預(yù)測與實(shí)際結(jié)果之間的差距,目標(biāo)是使損失函數(shù)的值最小化。然而,損失函數(shù)通常是復(fù)雜的,參數(shù)空間也非常龐大,無法直接知道在哪些位置能夠獲得最小值。為了解決這個(gè)問題,梯度法通過巧妙地利用梯度信息來尋找函數(shù)的最小值,從而有效地優(yōu)化模型的參數(shù)。2.6梯度法2.6.1梯度2.6梯度法2.6.1梯度函數(shù)numerical_gradient(f,x)中,參數(shù)f為函數(shù),x為numpy數(shù)組,該函數(shù)對numpy數(shù)組x的各個(gè)元素求數(shù)值微分,下面給出求點(diǎn)(3,4)的梯度。deff_2(x):returnx[0]**2+x[1]**2
defnumerical_gradient(f,x):h=1e-4grad=np.zeros_like(x)#生成和x形狀相同的數(shù)組
foridxinrange(x.size):tmp_val=x[idx]
#f(x+h)的計(jì)算
x[idx]=tmp_val+hfxh1=f(x)
#f(x-h)的計(jì)算
x[idx]=tmp_val-hfxh2=f(x)
grad[idx]=(fxh1-fxh2)/(2*h)x[idx]=tmp_val
returngradnumerical_gradient(f_2,np.array([3,4]))2.6梯度法2.6.1梯度函數(shù)numerical_gradient(f,x)中,參數(shù)f為函數(shù),x為numpy數(shù)組,該函數(shù)對numpy數(shù)組x的各個(gè)元素求數(shù)值微分,下面給出求點(diǎn)(3,4)的梯度。deff_2(x):returnx[0]**2+x[1]**2
defnumerical_gradient(f,x):h=1e-4grad=np.zeros_like(x)#生成和x形狀相同的數(shù)組
foridxinrange(x.size):tmp_val=x[idx]
#f(x+h)的計(jì)算
x[idx]=tmp_val+hfxh1=f(x)
#f(x-h)的計(jì)算
x[idx]=tmp_val-hfxh2=f(x)
grad[idx]=(fxh1-fxh2)/(2*h)x[idx]=tmp_val
returngradnumerical_gradient(f_2,np.array([3,4]))運(yùn)行結(jié)果為:array([6.,8.])
梯度表示的是各個(gè)點(diǎn)處函數(shù)值減小最快的方向,因此并不能保證梯度所指向的方向就是函數(shù)的最小值或最優(yōu)前進(jìn)方向。實(shí)際上,在復(fù)雜的函數(shù)中,梯度指示的方向往往并不指向函數(shù)的最小值。盡管如此,沿著梯度的方向仍然能夠最大限度地降低函數(shù)的值。因此,在尋找函數(shù)最小值的過程中,應(yīng)以梯度信息為線索,決定前進(jìn)的方向。
此時(shí),梯度法便發(fā)揮了重要作用。在梯度法中,從當(dāng)前位置出發(fā),沿著梯度方向前進(jìn)一定的距離,然后在新的位置重新計(jì)算梯度,再繼續(xù)沿著新的梯度方向前進(jìn),如此反復(fù),不斷迭代。通過這種方式,逐步沿梯度方向前進(jìn),從而逐漸減小函數(shù)值,這就是梯度法的基本過程。梯度法是解決機(jī)器學(xué)習(xí)中優(yōu)化問題的常用方法,尤其在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中得到了廣泛應(yīng)用。2.6梯度法2.6.1梯度2.6梯度法2.6.1梯度下面給出梯度下降法的實(shí)現(xiàn)。defgradient_descent(f,init_x,lr=0.01,step_num=100):x=init_x
foriinrange(step_num):grad=numerical_gradient(f,x)x-=lr*grad
returnx參數(shù)f是要進(jìn)行優(yōu)化的函數(shù),init_x是初始值,lr是學(xué)習(xí)率,step_num是梯度法的重復(fù)次數(shù)。numerical_gradient(f,x)會求函數(shù)的梯度,用該梯度乘以學(xué)習(xí)率得到的值進(jìn)行更新操作,由step_num指定重復(fù)的次數(shù)。2.6梯度法2.6.1梯度2.6梯度法2.6.2神經(jīng)網(wǎng)絡(luò)的梯度2.6梯度法2.6.2神經(jīng)網(wǎng)絡(luò)的梯度importnumpyasnp
defsoftmax(z):exp_z=np.exp(z)sum_exp_z=np.sum(exp_z)returnexp_z/sum_exp_z
defcross_entropy(y,t):delta=1e-7return-np.sum(t*np.log(y+delta))
classsimpleNet:def__init__(self):self.w=np.random.randn(2,3)
defpredict(self,x):returnnp.dot(x,self.w)
defloss(self,x,t):z=self.predict(x)y=softmax(z)loss=cross_entropy(y,t)returnloss下面構(gòu)建一個(gè)簡單的神經(jīng)網(wǎng)絡(luò)來,然后來求梯度。代碼如下:2.7學(xué)習(xí)算法的實(shí)現(xiàn)2.6.2神經(jīng)網(wǎng)絡(luò)的梯度步驟1(mini-batch):從訓(xùn)練數(shù)據(jù)中隨機(jī)選出一部分?jǐn)?shù)據(jù),這部分?jǐn)?shù)據(jù)稱為mini-batch。目標(biāo)是通過這一mini-batch來減小損失函數(shù)的值。步驟2(計(jì)算梯度):為了降低mini-batch的損失函數(shù)的值,需要求出各個(gè)權(quán)重參數(shù)的梯度,梯度指示了損失函數(shù)值下降最快的方向。步驟3(更新參數(shù)):根據(jù)計(jì)算得到的梯度,沿著梯度方向?qū)?quán)重參數(shù)進(jìn)行微小更新。步驟4(重復(fù)):重復(fù)步驟1、步驟2和步驟3,直到模型的性能達(dá)到預(yù)期目標(biāo)。神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)按照上述四個(gè)步驟進(jìn)行。該方法通過梯度下降法來更新參數(shù),但由于使用的是隨機(jī)選擇的mini-batch數(shù)據(jù),因此被稱為隨機(jī)梯度下降法(StochasticGradientDescent,簡稱SGD)。2.8
誤差反向傳播神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)通常依賴于數(shù)值微分來計(jì)算權(quán)重參數(shù)的梯度。雖然數(shù)值微分方法簡單且易于實(shí)現(xiàn),但其主要缺點(diǎn)是計(jì)算效率較低,耗時(shí)較長。在本節(jié)中,將學(xué)習(xí)一種更高效的計(jì)算權(quán)重參數(shù)梯度的方法——誤差反向傳播法。2.8
誤差反向傳播2.8.1用計(jì)算圖求解計(jì)算圖是將計(jì)算過程以圖形形式表示的工具。它由多個(gè)節(jié)點(diǎn)和邊組成,其中節(jié)點(diǎn)用圓圈○表示,圓圈○中是計(jì)算的內(nèi)容,而連接節(jié)點(diǎn)的有箭頭的直線線段稱為“邊”。通過這種方式,計(jì)算圖清晰地展示了數(shù)據(jù)流和依賴關(guān)系?!纠?-7】用計(jì)算圖描述問題示例1。小張?jiān)诔匈I了2個(gè)100日元一個(gè)的蘋果,消費(fèi)稅是10%,請計(jì)算支付金額。用計(jì)算圖描述支付金額的計(jì)算過程,得到圖2-18。節(jié)點(diǎn)○表示乘法運(yùn)算。通過此圖示得到最終的支付金額為220元。2.8
誤差反向傳播2.8.1用計(jì)算圖求解計(jì)算圖是將計(jì)算過程以圖形形式表示的工具。它由多個(gè)節(jié)點(diǎn)和邊組成,其中節(jié)點(diǎn)用圓圈○表示,圓圈○中是計(jì)算的內(nèi)容,而連接節(jié)點(diǎn)的有箭頭的直線線段稱為“邊”。通過這種方式,計(jì)算圖清晰地展示了數(shù)據(jù)流和依賴關(guān)系?!纠?-8】用計(jì)算圖描述問題示例2。小李在超市買了2個(gè)蘋果、3個(gè)橘子。其中,蘋果每個(gè)100日元,橘子每個(gè)150日元。消費(fèi)稅是10%,請計(jì)算支付金額。用圖2-19描述上述過程,這個(gè)問題中新增加了加法節(jié)點(diǎn)“+”,用來合計(jì)蘋果和橘子的金額。構(gòu)建了計(jì)算圖后,從左向右進(jìn)行計(jì)算。綜上,用計(jì)算圖解題的情況下,需要按如下流程進(jìn)行。1)構(gòu)建計(jì)算圖。2)在計(jì)算圖上,從左到右進(jìn)行計(jì)算。這里的第2步“從左到右進(jìn)行計(jì)算”是一種正方向上的傳播,簡稱為正向傳播。正向傳播是從計(jì)算圖出發(fā)點(diǎn)到結(jié)束點(diǎn)的傳播。既然有正向傳播這個(gè)名稱,當(dāng)然也可以考慮反向的傳播(從圖上看,就是從右向左的傳播)。反向傳播將在接下來的導(dǎo)數(shù)計(jì)算中發(fā)揮重要作用。前面用計(jì)算圖解答了兩個(gè)問題,那么計(jì)算圖到底有什么優(yōu)點(diǎn)呢?一個(gè)優(yōu)點(diǎn)就在于前面所說的局部計(jì)算。無論全局是多么復(fù)雜的計(jì)算,都可以通過局部計(jì)算使各個(gè)節(jié)點(diǎn)致力于簡單的計(jì)算,從而簡化問題。另一個(gè)優(yōu)點(diǎn)是,利用計(jì)算圖可以將中間的計(jì)算結(jié)果全部保存起來(比如,計(jì)算進(jìn)行到2個(gè)蘋果時(shí)的金額是200日元、加上消費(fèi)稅之前的金額650日元等)。但是只有這些理由可能還無法令人信服。實(shí)際上,使用計(jì)算圖最大的原因是,可以通過反向傳播高效計(jì)算導(dǎo)數(shù)。2.8
誤差反向傳播2.8.1用計(jì)算圖求解2.8
誤差反向傳播2.8.2計(jì)算圖的反向傳播如圖2-20所示,反向傳播使用與正方向相反的箭頭(粗線)表示。反向傳播傳遞“局部導(dǎo)數(shù)”,將導(dǎo)數(shù)的值寫在箭頭的下方。在這個(gè)例子中,反向傳播從右向左傳遞導(dǎo)數(shù)的值(1→1.1→2.2)。從這個(gè)結(jié)果中可知,“支付金額關(guān)于蘋果的價(jià)格的導(dǎo)數(shù)”的值是2.2。這意味著,如果蘋果的價(jià)格上漲1日元,最終的支付金額會增加2.2日元。(嚴(yán)格地講,如果蘋果的價(jià)格增加某個(gè)微小值,則最終的支付金額將增加那個(gè)微小值的2.2倍)。2.8
誤差反向傳播2.8.3加法節(jié)點(diǎn)的反向傳播2.8
誤差反向傳播2.8.4乘法節(jié)點(diǎn)的反向傳播2.9
簡單層的實(shí)現(xiàn)2.9.1乘法層的實(shí)現(xiàn)2.9
簡單層的實(shí)現(xiàn)2.9.1乘法層的實(shí)現(xiàn)2.9
簡單層的實(shí)現(xiàn)2.9.2加法層的實(shí)現(xiàn)加法層實(shí)現(xiàn)的代碼如下:classAddLayer:def__init__(self):pass
defforward(self,x,y):out=x+y
returnout
defbackward(self,dout):dx=dout*1dy=dout*1
returndx,dy2.10激活函數(shù)層的實(shí)現(xiàn)2.10.1ReLU層2.10激活函數(shù)層的實(shí)現(xiàn)2.10.1ReLU層2.10激活函數(shù)層的實(shí)現(xiàn)2.10.2Sigmoid層Sigmoid層的Python實(shí)現(xiàn)代碼如下:classSigmoid:def__init__(self):self.out=None
defforward(self,x):out=1/(1+np.exp(-x))self.out=out
returnout
defbackward(self,dout):dx=dout*self.out*(1-self.out)
returndx
在這個(gè)實(shí)現(xiàn)中,正向傳播時(shí)的輸出保存在實(shí)例變量
out中。在反向傳播過程中,使用該變量out進(jìn)行計(jì)算。2.11Affine層和softmax層的實(shí)現(xiàn)2.11.1Affine層2.11Affine層和softmax層的實(shí)現(xiàn)2.11.1Affine層2.11Affine層和softmax層的實(shí)現(xiàn)2.11.2批版本的Affine層批版本Affine層的代碼實(shí)現(xiàn)如下:classAffine:def__init__(self,W,b):self.W=Wself.b=bself.x=Noneself.dW=Noneself.db=None
defforward(self,x):self.x=xout=np.dot(x,self.W)+self.b
returnout
def
backward(self,dout):dx=np.dot(dout,self.W.T)self.dW=np.dot(self.x.T,dout)self.db=np.sum(dout,axis=0)
returndx2.11Affine層和softmax層的實(shí)現(xiàn)2.11.3softmax-with-loss層神經(jīng)網(wǎng)絡(luò)的處理過程主要分為推理和學(xué)習(xí)兩個(gè)階段。在推理階段,神經(jīng)網(wǎng)絡(luò)通常不使用softmax層。例如,在圖2-31所示的網(wǎng)絡(luò)中進(jìn)行推理時(shí),會直接將最后一個(gè)Affine層的輸出作為識別結(jié)果。在這種情況下,網(wǎng)絡(luò)的未正規(guī)化輸出結(jié)果有時(shí)被稱為“得分”。也就是說,當(dāng)神經(jīng)網(wǎng)絡(luò)在推理時(shí)只需要給出一個(gè)答案時(shí),由于只對得分的最大值感興趣,因此不需要使用softmax層。然而,在學(xué)習(xí)階段,softmax層是必不可少的。它在計(jì)算損失函數(shù)時(shí)提供了類別的預(yù)測概率,使得網(wǎng)絡(luò)能夠有效地進(jìn)行反向傳播和參數(shù)更新。2.11Affine層和softmax層的實(shí)現(xiàn)2.11.3softmax-with-loss層接下來,將實(shí)現(xiàn)一個(gè)包含softmax層和交叉熵?fù)p失函數(shù)的“softmax-with-Loss”層。這一層不僅能夠?qū)⒕W(wǎng)絡(luò)輸出轉(zhuǎn)換為概率分布,還能計(jì)算損失值,以便在訓(xùn)練過程中進(jìn)行有效的反向傳播。這種設(shè)計(jì)的優(yōu)點(diǎn)在于,它將softmax和損失計(jì)算結(jié)合在一起,簡化了模型的實(shí)現(xiàn),并提高了計(jì)算效率。softmax-with-Loss的代碼實(shí)現(xiàn)如下:classsoftmaxWithLoss:def__init__(self):self.loss=None#損失
self.y=None#softmax的輸出
self.t=None#監(jiān)督數(shù)據(jù)
defforward(self,x,t):self.t=tself.y=softmax(x)self.loss=cross_entropy_error(self.y,self.t)
returnself.loss
defbackward(self,dout=1):batch_size=self.t.shape[0]dx=(self.y-self.t)/batch_size
returndx2.12Affine層和softmax層的實(shí)現(xiàn)2.11.3softmax-with-loss層接下來,將實(shí)現(xiàn)一個(gè)包含softmax層和交叉熵?fù)p失函數(shù)的“softmax-with-Loss”層。這一層不僅能夠?qū)⒕W(wǎng)絡(luò)輸出轉(zhuǎn)換為概率分布,還能計(jì)算損失值,以便在訓(xùn)練過程中進(jìn)行有效的反向傳播。這種設(shè)計(jì)的優(yōu)點(diǎn)在于,它將softmax和損失計(jì)算結(jié)合在一起,簡化了模型的實(shí)現(xiàn),并提高了計(jì)算效率。softmax-with-Loss的代碼實(shí)現(xiàn)如下:classsoftmaxWithLoss:def__init__(self):self.loss=None#損失
self.y=None#softmax的輸出
self.t=None#監(jiān)督數(shù)據(jù)
defforward(self,x,t):self.t=tself.y=softmax(x)self.loss=cross_entropy_error(self.y,self.t)
returnself.loss
defbackward(self,dout=1):batch_size=self.t.shape[0]dx=(self.y-self.t)/batch_size
returndx2.12誤差反向傳播法的實(shí)現(xiàn)2.12.1神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的全貌圖神經(jīng)網(wǎng)絡(luò)中,存在合適的權(quán)重和偏置。調(diào)整這些權(quán)重和偏置以便擬合訓(xùn)練數(shù)據(jù)的過程稱為學(xué)習(xí)。神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)分為以下4個(gè)步驟:步驟1(mini-batch)從訓(xùn)練數(shù)據(jù)中隨機(jī)選擇一部分?jǐn)?shù)據(jù)。步驟2(計(jì)算梯度)計(jì)算損失函數(shù)關(guān)于各個(gè)權(quán)重參數(shù)的梯度。步驟3(更新參數(shù))將權(quán)重參數(shù)沿著梯度方向進(jìn)行微小的更新。步驟4(重復(fù))重復(fù)步驟1、步驟2、步驟3。2.12誤差反向傳播法的實(shí)現(xiàn)2.12.2誤差反向傳播法的神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)2.12誤差反向傳播法的實(shí)現(xiàn)2.12.2誤差反向傳播法的神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)importnumpyasnpfromcollectionsimportOrderedDict
classReLU:def__init__(self):self.mask=None
defforward(self,x):self.mask=(x<=0)out=x.copy()out[self.mask]=0
returnout
defbackward(self,dout):dout[self.mask]=0dx=dout
returndx#TwoLayerNet類的實(shí)現(xiàn)classTwoLayerNet:def__init__(self,input_size,hidden_size,output_size,weight_init_std=0.01):#初始化權(quán)重和偏置
self.params={}self.params['W1']=weight_init_std*np.random.randn(input_size,hidden_size)self.params['b1']=np.zeros(hidden_size)self.params['W2']=weight_init_std*np.random.randn(hidden_size,output_size)self.params['b2']=np.zeros(output_size)
defpredict(self,x):forlayerinself.layers.values():x=layer.forward(x)returnx
defloss(self,x,t):y=self.predict(x)returnself.lastLayer.forward(y,t)
defaccuracy(self,x,t):y=self.predict(x)y=np.argmax(y,axis=1)#預(yù)測類別
ift.ndim!=1:t=np.argmax(t,axis=1)#正確類別
accuracy=np.sum(y==t)/float(x.shape[0])returnaccuracy
defnumerical_gradient(self,x,t):loss_w=lambdaw:self.loss(x,t)grads={}forkeyinself.params:grads[key]=self.numerical_gradient(loss_w,self.params[key])returngrads
defgradient(self,x,t):#前向傳播
self.loss(x,t)
#反向傳播#保存各層
self.layers=OrderedDict()self.layers['Affine1']=Affine(self.params['W1'],self.params['b1'])self.layers['ReLU1']=ReLU()self.layers['Affine2']=Affine(self.params['W2'],self.params['b2'])
#最后一層
self.lastLayer=softmaxWithLoss()
dout=self.lastLayer.backward()layers=list(self.layers.values())layers.reverse()#反向傳播需要從后往前
forlayerinlayers:dout=layer.backward(dout)
#保存梯度
grads={}grads['W1']=self.layers['Affine1'].dWgrads['b1']=self.layers['Affine1'].dbgrads['W2']=self.layers['Affine2'].dWgrads['b2']=self.layers['Affine2'].db
returngrads2.12誤差反向傳播法的實(shí)現(xiàn)2.12.3誤差反向傳播法的神經(jīng)網(wǎng)絡(luò)訓(xùn)練和推理importnumpyasnp
defsoftmax(z):
exp_z=np.exp(z)
sum_exp_z=np.sum(exp_z)
returnexp_z/sum_exp_z
defcross_entropy_error(y,t):
delta=1e-7
return-np.sum(t*np.log(y+delta))
#生成隨機(jī)數(shù)據(jù)defgenerate_data(num_samples):
np.random.seed(0)
X=np.random.randn(num_samples,2)
#生成二維數(shù)據(jù)
t=np.zeros((num_samples,2))
#初始化標(biāo)簽
foriinrange(num_samples):
ifX[i,0]+X[i,1]>0:
#將標(biāo)簽設(shè)置為
1或
0
t[i,1]=1
#類別1
else:
t[i,0]=1
#類別0
returnX,t#超參數(shù)設(shè)置input_size=2
#輸入層神經(jīng)元數(shù)hidden_size=4
#隱藏層神經(jīng)元數(shù)output_size=2
#輸出層神經(jīng)元數(shù)weight_init_std=0.01
#權(quán)重初始化標(biāo)準(zhǔn)差num_samples=100
#樣本數(shù)量learning_rate=0.1
#學(xué)習(xí)率num_epochs=1000
#訓(xùn)練輪數(shù)
#生成數(shù)據(jù)X,t=generate_data(num_samples)
#初始化TwoLayerNetnetwork=TwoLayerNet(input_size,hidden_size,output_size,weight_init_std)
#訓(xùn)練過程forepochinrange(num_epochs):
#計(jì)算損失
loss=network.loss(X,t)
#計(jì)算梯度
grads=network.gradient(X,t)
#更新參數(shù)
forkeyinnetwork.params:
network.params[key]-=learning_rate*grads[key]
#每100次輸出一次損失
ifepoch%100==0:
print(f'Epoch{epoch},Loss:{loss}')#推理過程#使用訓(xùn)練好的模型進(jìn)行推理predictions=network.predict(X)
#將輸出轉(zhuǎn)化為類別predicted_classes=np.argmax(predictions,axis=1)
#真實(shí)類別true_classes=np.argmax(t,axis=1)
#計(jì)算準(zhǔn)確率accuracy=np.sum(predicted_classes==true_classes)/num_samplesprint(f'Accuracy:{accuracy:.2f}')感謝觀看神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)方法目錄01參數(shù)的更新03正則化04超參數(shù)的驗(yàn)證02權(quán)重的初始值01參數(shù)的更新神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)目的是找到使損失函數(shù)值盡可能小的參數(shù)。這一過程被稱為最優(yōu)化,旨在尋找最優(yōu)參數(shù)。然而,神經(jīng)網(wǎng)絡(luò)的最優(yōu)化問題相當(dāng)復(fù)雜,主要源于參數(shù)空間的復(fù)雜性,這使得無法簡單地通過解析數(shù)學(xué)方法直接求得最小值。此外,深度神經(jīng)網(wǎng)絡(luò)的參數(shù)數(shù)量龐大,進(jìn)一步加劇了這一優(yōu)化問題的復(fù)雜性。為了找到最優(yōu)參數(shù),通常利用參數(shù)的梯度(導(dǎo)數(shù))作為指導(dǎo)。通過沿著梯度方向更新參數(shù),并重復(fù)這一過程多次,可以逐漸接近最優(yōu)參數(shù),這一方法稱為隨機(jī)梯度下降法(StochasticGradientDescent,簡稱SGD)。SGD是一種相對簡單的方法,相比于隨意搜索參數(shù)空間,已經(jīng)算是一種“聰明”的選擇。然而,根據(jù)不同的問題類型,也存在比SGD更有效的優(yōu)化方法。本節(jié)將探討SGD的缺點(diǎn),并介紹其他的最優(yōu)化方法。3.1參數(shù)的更新3.1.1SGD3.1參數(shù)的更新3.1.1SGD3.1參數(shù)的更新3.1.1SGD3.1參數(shù)的更新3.1.2SGD的缺點(diǎn)盡管
SGD方法簡單且易于實(shí)現(xiàn),但在解決某些問題時(shí)可能效率不高。SGD的更新過程往往呈現(xiàn)“之”字形移動,形成一種相當(dāng)?shù)托У乃阉髀窂健.?dāng)損失函數(shù)的形狀不均勻,尤其是呈現(xiàn)拉伸狀時(shí),搜索路徑將變得非常低效。因此,需要比單純沿梯度方向前進(jìn)的SGD更為智能的方法。SGD低效的根本原因在于,梯度的方向并不總是指向最小值的方向。為了克服
SGD的缺點(diǎn),接下來將介紹三種優(yōu)化方法:Momentum、AdaGrad和Adam,以取代SGD。3.1參數(shù)的更新3.1.2SGD的缺點(diǎn)盡管
SGD方法簡單且易于實(shí)現(xiàn),但在解決某些問題時(shí)可能效率不高。SGD的更新過程往往呈現(xiàn)“之”字形移動,形成一種相當(dāng)?shù)托У乃阉髀窂?。?dāng)損失函數(shù)的形狀不均勻,尤其是呈現(xiàn)拉伸狀時(shí),搜索路徑將變得非常低效。因此,需要比單純沿梯度方向前進(jìn)的SGD更為智能的方法。SGD低效的根本原因在于,梯度的方向并不總是指向最小值的方向。為了克服
SGD的缺點(diǎn),接下來將介紹三種優(yōu)化方法:Momentum、AdaGrad和Adam,以取代SGD。3.1參數(shù)的更新3.1.3MomentumclassMomentum:
def__init__(self,lr=0.01,momentum=0.9):
self.lr=lr
self.momentum=momentum
self.v=None
defupdate(self,params,grads):
ifself.visNone:
self.v={}
forkey,valinparams.items():
self.v[key]=np.zeros_like(val)
forkeyinparams.keys():
self.v[key]=self.momentum*self.v[key]-self.lr*grads[key]
params[key]+=self.v[key]3.1參數(shù)的更新3.1.4AdaGrad在神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程中,學(xué)習(xí)率的選擇至關(guān)重要。若學(xué)習(xí)率設(shè)置過小,模型的學(xué)習(xí)過程將會非常緩慢,導(dǎo)致訓(xùn)練時(shí)間的顯著增加;反之,如果學(xué)習(xí)率過大,則可能導(dǎo)致模型發(fā)散,從而無法正確收斂到最優(yōu)解。因此,合理設(shè)置學(xué)習(xí)率是優(yōu)化算法成功的關(guān)鍵。在學(xué)習(xí)率管理的有效技巧中,有一種稱為學(xué)習(xí)率衰減的方法。這種方法的核心思想是隨著訓(xùn)練的進(jìn)行,逐漸減小學(xué)習(xí)率。實(shí)際上,這種策略可以理解為在訓(xùn)練初期采用較高的學(xué)習(xí)率以加快收斂速度,然后在接近最優(yōu)解時(shí)逐步降低學(xué)習(xí)率,允許模型以更精細(xì)的步伐進(jìn)行調(diào)整。這種“多學(xué)”到“少學(xué)”的策略在神經(jīng)網(wǎng)絡(luò)訓(xùn)練中被廣泛應(yīng)用,能夠有效提高模型的性能。逐漸減小學(xué)習(xí)率的想法相當(dāng)于將所有參數(shù)的學(xué)習(xí)率整體降低。然而,AdaGrad進(jìn)一步發(fā)展了這一思路,為每個(gè)參數(shù)提供了“定制”的學(xué)習(xí)率。具體來說,AdaGrad會根據(jù)每個(gè)參數(shù)的歷史梯度信息,動態(tài)調(diào)整其學(xué)習(xí)率。這樣一來,頻繁更新的參數(shù)會獲得更小的學(xué)習(xí)率,而不常更新的參數(shù)則會保持相對較大的學(xué)習(xí)率。這種適應(yīng)性調(diào)整使得AdaGrad在處理稀疏數(shù)據(jù)和具有不同特征規(guī)模的情況下表現(xiàn)得更加高效。3.1參數(shù)的更新3.1.4AdaGrad3.1參數(shù)的更新3.1.5AdamMomentum方法可以類比為小球在碗中滾動的物理規(guī)則,而AdaGrad則為每個(gè)參數(shù)的元素適當(dāng)?shù)卣{(diào)整更新步伐。如果將這兩種方法融合在一起,會產(chǎn)生什么效果呢?這正是Adam方法的基本思路。Adam(AdaptiveMomentEstimation)是一種在2015年提出的新優(yōu)化算法,其理論相對復(fù)雜,但可以直觀地理解為Momentum和AdaGrad的結(jié)合。通過結(jié)合這兩種方法的優(yōu)點(diǎn),Adam旨在實(shí)現(xiàn)參數(shù)空間的高效搜索,并且特別引入了超參數(shù)的“偏置校正”機(jī)制,進(jìn)一步提高了優(yōu)化的穩(wěn)定性。在
Adam的更新過程中,參數(shù)的調(diào)整類似于小球在碗中滾動的方式。雖然Momentum也具有類似的移動特性,但相比之下,Adam的小球在左右搖晃的幅度上有所減輕,這得益于其學(xué)習(xí)更新的步伐得到了適當(dāng)?shù)卣{(diào)整。通過動態(tài)調(diào)整學(xué)習(xí)率和引入動量,Adam能夠更好地適應(yīng)不同的參數(shù)更新需求,從而在訓(xùn)練過程中實(shí)現(xiàn)更快的收斂和更好的性能。近年來,Adam方法因其結(jié)合了動量和自適應(yīng)學(xué)習(xí)率的優(yōu)點(diǎn)而受到眾多研究人員和技術(shù)人員的青睞,成為優(yōu)化算法中的熱門選擇。每種方法的選擇應(yīng)根據(jù)具體問題的特性和需求進(jìn)行相應(yīng)的調(diào)整,以達(dá)到最佳的優(yōu)化效果。3.2權(quán)重的初始值在神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程中,權(quán)重的初始值極為重要。實(shí)際上,權(quán)重初始值的選擇往往直接關(guān)系到神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的成功與否。如果初始權(quán)重設(shè)置不當(dāng),可能導(dǎo)致梯度消失或爆炸現(xiàn)象,從而阻礙網(wǎng)絡(luò)的有效訓(xùn)練。因此,合理設(shè)置權(quán)重初始值對于加速收斂和提升模型性能至關(guān)重要。3.2權(quán)重的初始值3.2.1可以將權(quán)重初始值設(shè)為0嗎?在神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)中,權(quán)重的初始值設(shè)定至關(guān)重要。后面將介紹一種抑制過擬合、提高泛化能力的技巧——權(quán)值衰減。權(quán)值衰減的核心思想是通過減小權(quán)重參數(shù)的值來抑制過擬合的發(fā)生。為了有效實(shí)現(xiàn)這一目標(biāo),權(quán)重的初始值應(yīng)該設(shè)定為較小的隨機(jī)值。例如,常見的做法是使用類似于0.01*np.random.randn(10,100)的形式,從標(biāo)準(zhǔn)差為0.01的高斯分布中生成權(quán)重初始值。既然可設(shè)定為較小的隨機(jī)值,將權(quán)重初始值設(shè)為
0是否可以呢?雖然可以將權(quán)重初始值設(shè)定為較小的隨機(jī)值,但將其設(shè)為0并不是一個(gè)好主意。當(dāng)所有權(quán)重初始化為0時(shí),網(wǎng)絡(luò)中的每個(gè)神經(jīng)元在正向傳播時(shí)僅依賴于偏置項(xiàng),從而產(chǎn)生相同的輸出。這種情況使得各個(gè)神經(jīng)元無法學(xué)習(xí)到不同的特征,因?yàn)樗鼈兊挠?jì)算過程完全一致。在反向傳播過程中,所有權(quán)重的更新也將是相同的,這導(dǎo)致它們保持相同的值,嚴(yán)重限制了網(wǎng)絡(luò)的學(xué)習(xí)能力和表達(dá)能力。由于神經(jīng)元的輸出沒有差異,網(wǎng)絡(luò)無法有效擬合輸入與輸出之間的復(fù)雜關(guān)系,進(jìn)而可能陷入局部最優(yōu)解,影響訓(xùn)練效果。因此,為了確保神經(jīng)網(wǎng)絡(luò)能夠獨(dú)立學(xué)習(xí)每個(gè)參數(shù)并提高模型的性能,權(quán)重的初始值應(yīng)設(shè)定為小的隨機(jī)值,以打破對稱性并促進(jìn)有效學(xué)習(xí)。將權(quán)重設(shè)置為相同的值并不是一個(gè)好的做法,原因與將權(quán)重初始化為0類似。因此,為了防止“權(quán)重均一化”,必須隨機(jī)生成初始權(quán)重值。通過引入隨機(jī)性,可以打破對稱性,確保網(wǎng)絡(luò)中的每個(gè)神經(jīng)元能夠獨(dú)立學(xué)習(xí),從而提高模型的表達(dá)能力和學(xué)習(xí)效果。3.2權(quán)重的初始值3.2.2隱藏層的激活值的分布隱藏層激活值的分布在神經(jīng)網(wǎng)絡(luò)中具有重要意義,它直接影響信息的傳遞和模型的學(xué)習(xí)能力。各層的激活值需要具備適當(dāng)?shù)膹V度,以便通過層間傳遞多樣性的數(shù)據(jù),從而支持神經(jīng)網(wǎng)絡(luò)的高效學(xué)習(xí)。相反,如果傳遞的是偏向性數(shù)據(jù),就可能導(dǎo)致梯度消失或者“表現(xiàn)力受限”的問題,從而使學(xué)習(xí)過程難以順利進(jìn)行。因此,選擇合適的激活函數(shù)和權(quán)重初始化方法至關(guān)重要。當(dāng)激活函數(shù)為ReLU時(shí),權(quán)重參數(shù)通常使用He初始化;而當(dāng)采用Sigmoid或Tanh等S型激活函數(shù)時(shí),權(quán)重參數(shù)推薦使用Xavier初始化。這些做法被廣泛認(rèn)為是最佳實(shí)踐,有助于提升網(wǎng)絡(luò)的訓(xùn)練效率和最終性能。激活值反映了輸入數(shù)據(jù)經(jīng)過網(wǎng)絡(luò)處理后的狀態(tài),良好的激活值分布能夠有效促進(jìn)梯度的計(jì)算與傳播,從而避免梯度消失或爆炸的問題。如果激活值過于集中或分散,可能會導(dǎo)致網(wǎng)絡(luò)在訓(xùn)練過程中難以學(xué)習(xí)到有用的特征,從而影響模型的整體性能。3.2權(quán)重的初始值3.2.2隱藏層的激活值的分布隱藏層激活值的分布在神經(jīng)網(wǎng)絡(luò)中具有重要意義,它直接影響信息的傳遞和模型的學(xué)習(xí)能力。各層的激活值需要具備適當(dāng)?shù)膹V度,以便通過層間傳遞多樣性的數(shù)據(jù),從而支持神經(jīng)網(wǎng)絡(luò)的高效學(xué)習(xí)。相反,如果傳遞的是偏向性數(shù)據(jù),就可能導(dǎo)致梯度消失或者“表現(xiàn)力受限”的問題,從而使學(xué)習(xí)過程難以順利進(jìn)行。因此,選擇合適的激活函數(shù)和權(quán)重初始化方法至關(guān)重要。當(dāng)激活函數(shù)為ReLU時(shí),權(quán)重參數(shù)通常使用He初始化;而當(dāng)采用Sigmoid或Tanh等S型激活函數(shù)時(shí),權(quán)重參數(shù)推薦使用Xavier初始化。這些做法被廣泛認(rèn)為是最佳實(shí)踐,有助于提升網(wǎng)絡(luò)的訓(xùn)練效率和最終性能。激活值反映了輸入數(shù)據(jù)經(jīng)過網(wǎng)絡(luò)處理后的狀態(tài),良好的激活值分布能夠有效促進(jìn)梯度的計(jì)算與傳播,從而避免梯度消失或爆炸的問題。如果激活值過于集中或分散,可能會導(dǎo)致網(wǎng)絡(luò)在訓(xùn)練過程中難以學(xué)習(xí)到有用的特征,從而影響模型的整體性能。3.3BatchNormalization為什么BN如此引人注目呢?首先,BN能夠增大學(xué)習(xí)率,從而使模型更快收斂,縮短訓(xùn)練時(shí)間。其次,使用BN后,模型對權(quán)重初始值的敏感性降低,使得訓(xùn)練過程更加穩(wěn)定。此外,BN通過規(guī)范化激活值,有效減少了對Dropout等正則化方法的依賴,從而降低了過擬合的風(fēng)險(xiǎn)。BN的思路是調(diào)整各層的激活值分布使其擁有適當(dāng)?shù)膹V度。為此,要向神經(jīng)網(wǎng)絡(luò)中插入對數(shù)據(jù)分布進(jìn)行正規(guī)化的層,即BN層。具體如圖3-1所示。3.3BatchNormalization3.4正則化在機(jī)器學(xué)習(xí)中,過擬合是一個(gè)非常常見的問題。過擬合指的是模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)良好,但在未包含在訓(xùn)練數(shù)據(jù)中的其他數(shù)據(jù)上卻無法有效擬合。機(jī)器學(xué)習(xí)的目標(biāo)是提高模型的泛化能力,即使面對未觀測的數(shù)據(jù),模型也能做出正確的預(yù)測。雖然可以構(gòu)建復(fù)雜且表現(xiàn)力強(qiáng)的模型,但同樣重要的是采用有效的技巧來抑制過擬合。發(fā)生過擬合的原因,主要有以下兩個(gè):1、模型擁有大量參數(shù),表現(xiàn)力強(qiáng);2、訓(xùn)練數(shù)據(jù)少。3.4正則化在機(jī)器學(xué)習(xí)中,過擬合是一個(gè)非常常見的問題。過擬合指的是模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)良好,但在未包含在訓(xùn)練數(shù)據(jù)中的其他數(shù)據(jù)上卻無法有效擬合。機(jī)器學(xué)習(xí)的目標(biāo)是提高模型的泛化能力,即使面對未觀測的數(shù)據(jù),模型也能做出正確的預(yù)測。雖然可以構(gòu)建復(fù)雜且表現(xiàn)力強(qiáng)的模型,但同樣重要的是采用有效的技巧來抑制過擬合。發(fā)生過擬合的原因,主要有以下兩個(gè):1、模型擁有大量參數(shù),表現(xiàn)力強(qiáng);2、訓(xùn)練數(shù)據(jù)少。3.4.1過擬合3.4正則化3.4.2權(quán)值衰減權(quán)值衰減是一種常用的抑制過擬合的方法。該方法通過在學(xué)習(xí)過程中對較大的權(quán)重施加懲罰,從而抑制過擬合現(xiàn)象。許多過擬合的情況往往是由于權(quán)重參數(shù)取值過大所導(dǎo)致的,因此,通過控制權(quán)重的大小,權(quán)值衰減可以有效提高模型的泛化能力。3.4正則化3.4.3Dropout當(dāng)網(wǎng)絡(luò)模型變得非常復(fù)雜時(shí),僅依靠權(quán)值衰減可能難以有效控制過擬合。在這種情況下,通常會采用Dropout方法。Dropout是一種在訓(xùn)練過程中隨機(jī)刪除神經(jīng)元的技術(shù)。具體而言,在每次訓(xùn)練時(shí),隨機(jī)選擇一定比例的隱藏神經(jīng)元,并將其“刪除”,即這些神經(jīng)元在該次前向傳播中不參與信號的傳播。這意味著被刪除的神經(jīng)元不會對后續(xù)層的計(jì)算產(chǎn)生影響。在訓(xùn)練過程中,每次數(shù)據(jù)傳遞時(shí),都會隨機(jī)選擇要刪除的神經(jīng)元。這樣可以促使模型學(xué)習(xí)到更加魯棒的特征,減少對特定神經(jīng)元的依賴。當(dāng)模型進(jìn)入測試階段時(shí),所有神經(jīng)元都會參與信號傳播,但為了保持一致性,輸出會乘以訓(xùn)練時(shí)的刪除比例,以確保模型的輸出在訓(xùn)練和測試階段之間保持平衡。3.5超參數(shù)的驗(yàn)證在神經(jīng)網(wǎng)絡(luò)中,除了權(quán)重和偏置等模型參數(shù)外,超參數(shù)的設(shè)置同樣至關(guān)重要。這里所提到的超參數(shù)包括各層的神經(jīng)元數(shù)量、批量大小、學(xué)習(xí)率、權(quán)值衰減等。如果這些超參數(shù)沒有設(shè)置合理,模型的性能可能會顯著下降。盡管超參數(shù)的選擇對模型的表現(xiàn)至關(guān)重要,但在確定超參數(shù)的過程中通常需要經(jīng)歷大量的試錯(cuò)過程。為了提高超參數(shù)搜索的效率,本節(jié)將介紹一些方法和策略,幫助更高效地尋找最佳的超參數(shù)值。通過合理的超參數(shù)調(diào)整,可以顯著提升模型的性能和訓(xùn)練效果。3.5超參數(shù)的驗(yàn)證3.5.1驗(yàn)證數(shù)據(jù)為什么不能用測試數(shù)據(jù)來評估超參數(shù)的性能呢?原因在于,如果使用測試數(shù)據(jù)來調(diào)整超參數(shù),超參數(shù)的值可能會對測試數(shù)據(jù)發(fā)生過擬合。換句話說,用測試數(shù)據(jù)來確認(rèn)超參數(shù)的“優(yōu)劣”會導(dǎo)致超參數(shù)調(diào)整為僅僅適合測試數(shù)據(jù)的值。結(jié)果將導(dǎo)致模型無法有效擬合其他數(shù)據(jù),進(jìn)而顯著降低泛化能力。因此,在調(diào)整超參數(shù)時(shí),必須使用專門的驗(yàn)證數(shù)據(jù)集。通過合理使用驗(yàn)證數(shù)據(jù),可以更有效地
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026屆廣東省深圳市龍文一對一化學(xué)高三上期中學(xué)業(yè)水平測試試題含解析
- 基層醫(yī)療衛(wèi)生機(jī)構(gòu)信息化建設(shè)中的醫(yī)療信息化與基層衛(wèi)生人才培養(yǎng)報(bào)告
- 基層醫(yī)療衛(wèi)生機(jī)構(gòu)信息化建設(shè)中的醫(yī)療信息化產(chǎn)業(yè)鏈創(chuàng)新與產(chǎn)業(yè)生態(tài)優(yōu)化報(bào)告
- 深海礦產(chǎn)資源勘探技術(shù)與海底地形地貌演變報(bào)告
- 深度解讀:2025年工業(yè)互聯(lián)網(wǎng)平臺AR交互技術(shù)在設(shè)備維護(hù)與優(yōu)化中的應(yīng)用報(bào)告
- 2026屆福建省泉港一中化學(xué)高一第一學(xué)期期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 教育行業(yè)投資并購整合策略研究報(bào)告:在線教育平臺并購案例深度剖析
- 2025銀行審計(jì)面試試題及答案
- 游戲產(chǎn)品培訓(xùn)課件
- 2025審計(jì)文秘試題及答案
- 企業(yè)國有資產(chǎn)法解讀課件講義
- 服裝采購員崗位職責(zé)(10篇)
- 新版中國電信員工手冊
- 012. 癡呆( 阿爾茨海默病) 中醫(yī)護(hù)理方案
- 《史記》上冊注音版
- 第章呼吸生理學(xué)
- GB/T 19326-2022鍛制支管座
- GB 12982-2004國旗
- 惡性心律失常的識別與處理課件
- 鋼鐵企業(yè)遠(yuǎn)程智能監(jiān)控技術(shù)方案V1.0
- 氣象科普知識競賽試題及參考答案
評論
0/150
提交評論