對于一個(gè)給定的感知器來說,它的權(quán)重和閾值也是給定的,代表一種決策策略。因此,我們可以通過調(diào)整權(quán)重和閾值來改變這個(gè)策略。
關(guān)于閾值threshold,這里需要指出的一點(diǎn)是,為了表達(dá)更方便,一般用它的相反數(shù)來表達(dá):b=-threshold,這里的b被稱為偏置(bias)。
這樣,前面計(jì)算輸出的規(guī)則就修改為:如果w1x1+w2x2+w3x3+...+b>0,則輸出output=1,否則輸出output=0。
而權(quán)重w1=w2=-2,則b=3。
很明顯,只有當(dāng)x1=x2=1的時(shí)候,output=0,因?yàn)??2)*1+(?2)*1+3=?1,小于0。而其它輸入的情況下,都是output=1。
所以在實(shí)際情況下,這其實(shí)是一個(gè)“與非門”!
在計(jì)算機(jī)科學(xué)中,與非門是所有門部件中比較特殊的一個(gè),它可以通過組合的方式表達(dá)任何其它的門部件。這被稱為與非門的普適性(GateUniversality)。
既然感知器能夠通過設(shè)置恰當(dāng)?shù)臋?quán)重和偏置參數(shù),來表達(dá)一個(gè)與非門,那么理論上它也就能表達(dá)任意其它的門部件。
因此,感知器也能夠像前面三體中的例子一樣,通過彼此連接從而組成一個(gè)計(jì)算機(jī)系統(tǒng)。
但這似乎沒有什么值得驚喜的,我們已經(jīng)有現(xiàn)成的計(jì)算機(jī)了,這只不過是讓事情復(fù)雜化了而已。
單個(gè)感知器能做的事情很有限。要做復(fù)雜的決策,所以則是需要將多個(gè)感知器連接起來。
而實(shí)際中的網(wǎng)絡(luò)可能會有上萬個(gè),甚至數(shù)十萬個(gè)參數(shù),如果手工一個(gè)一個(gè)地去配置這些參數(shù),恐怕這項(xiàng)任務(wù)永遠(yuǎn)也完成不了了。
而神經(jīng)網(wǎng)絡(luò)最有特色的地方就在于這里。
我們不是為網(wǎng)絡(luò)指定所有參數(shù),而是提供訓(xùn)練數(shù)據(jù),讓網(wǎng)絡(luò)自己在訓(xùn)練中去學(xué)習(xí),在學(xué)習(xí)過程中為所有參數(shù)找到最恰當(dāng)?shù)闹怠?br/>
大體的運(yùn)轉(zhuǎn)思路是這樣:我們告訴網(wǎng)絡(luò)當(dāng)輸入是某個(gè)值的時(shí)候,我們期望的輸出是什么,這樣的每一份訓(xùn)練數(shù)據(jù),稱為訓(xùn)練樣本(trainingexample)。
這個(gè)過程相當(dāng)于老師在教學(xué)生某個(gè)抽象的知識的時(shí)候,舉一個(gè)具體例子:
一般來說,我們舉的例子越多,就越能表達(dá)那個(gè)抽象的知識。這在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中同樣成立。
我們可以向網(wǎng)絡(luò)灌入成千上萬個(gè)訓(xùn)練樣本,然后網(wǎng)絡(luò)就自動從這些樣本中總結(jié)出那份隱藏在背后的抽象的知識。
這份知識的體現(xiàn),就在于網(wǎng)絡(luò)的所有權(quán)重和偏置參數(shù)的取值。
假設(shè)各個(gè)參數(shù)有一個(gè)初始值,當(dāng)我們輸入一個(gè)訓(xùn)練樣本的時(shí)候,它會根據(jù)當(dāng)前參數(shù)值計(jì)算出唯一的一個(gè)實(shí)際輸出值。
這個(gè)值可能跟我們期望的輸出值不一樣。想象一下,這時(shí)候,我們可以試著調(diào)整某些參數(shù)的值,讓實(shí)際輸出值和期望輸出值盡量接近。
當(dāng)所有的訓(xùn)練樣本輸入完畢之后,網(wǎng)絡(luò)參數(shù)也調(diào)整到了最佳值,這時(shí)每一次的實(shí)際輸出值和期望輸出值已經(jīng)無限接近,這樣訓(xùn)練過程就結(jié)束了。
假設(shè)在訓(xùn)練過程中,網(wǎng)絡(luò)已經(jīng)對數(shù)萬個(gè)樣本能夠給出正確(或接近正確)的反應(yīng)了,那么再給它輸入一個(gè)它沒見過的數(shù)據(jù),它也應(yīng)該有很大概率給出我們預(yù)期的決策。這就是一個(gè)神經(jīng)網(wǎng)絡(luò)工作的原理。
但這里還有一個(gè)問題,在訓(xùn)練過程中,當(dāng)實(shí)際輸出值和期望輸出值產(chǎn)生差異的時(shí)候,要如何去調(diào)整各個(gè)參數(shù)呢?
當(dāng)然,在思考怎么做之前,也應(yīng)該先弄清楚:通過調(diào)整參數(shù)的方式獲得期望的輸出,這個(gè)方法行得通嗎?
實(shí)際上,對于感知器網(wǎng)絡(luò)來說,這個(gè)方法基本不可行。
比如在上圖有39個(gè)參數(shù)的感知器網(wǎng)絡(luò)中,如果維持輸入不變,我們改變某個(gè)參數(shù)的值,那么最終的輸出基本完全不可預(yù)測。
它或者從0變到1(或從1變到0),當(dāng)然也可能維持不變。這個(gè)問題的關(guān)鍵在于:輸入和輸出都是二進(jìn)制的,只能是0或者1。
如果把整個(gè)網(wǎng)絡(luò)看成一個(gè)函數(shù)(有輸入,有輸出),那么這個(gè)函數(shù)不是連續(xù)的。
因此,為了讓訓(xùn)練成為可能,我們需要一個(gè)輸入和輸出能夠在實(shí)數(shù)上保持連續(xù)的神經(jīng)網(wǎng)絡(luò)。于是,這就出現(xiàn)了sigmoid神經(jīng)元。
sigmoid神經(jīng)元(sigmoidneuron)是現(xiàn)代神經(jīng)網(wǎng)絡(luò)經(jīng)常使用的基本結(jié)構(gòu)(當(dāng)然不是唯一的結(jié)構(gòu))。它與感知器的結(jié)構(gòu)類似,但有兩個(gè)重要的區(qū)別。
第一,它的輸入不再限制為0和1,而可以是任意0~1之間的實(shí)數(shù)。
第二,它的輸出也不再限制為0和1,而是將各個(gè)輸入的加權(quán)求和再加上偏置參數(shù),經(jīng)過一個(gè)稱為sigmoid函數(shù)的計(jì)算作為輸出。
具體來說,假設(shè)z=w1x1+w2x2+w3x3+...+b,那么輸出output=σ(z),其中:σ(z)=1/(1+e-z)。
σ(z)是一個(gè)平滑、連續(xù)的函數(shù)。而且,它的輸出也是0~1之間的實(shí)數(shù),這個(gè)輸出值可以直接作為下一層神經(jīng)元的輸入,保持在0~1之間。
可以想象,在采用sigmoid神經(jīng)元組裝神經(jīng)網(wǎng)絡(luò)之后,網(wǎng)絡(luò)的輸入和輸出都變?yōu)檫B續(xù)的了,也就是說,當(dāng)我們對某個(gè)參數(shù)的值進(jìn)行微小的改變的時(shí)候,它的輸出也只是產(chǎn)生微小的改變。這樣就使得逐步調(diào)整參數(shù)值的訓(xùn)練成為可能。
在歷史上,很多研究人員曾經(jīng)也做過嘗試,MichaelNielsen的書《NeuralNetworksandDeepLearning》這本書中也曾經(jīng)提到過這個(gè)例子。
這個(gè)神經(jīng)網(wǎng)絡(luò)只有一層隱藏層,屬于淺層的神經(jīng)網(wǎng)絡(luò)(shallowneuralnetworks)。而真正的深度神經(jīng)網(wǎng)絡(luò)(deepnerualnetworks),則會有多層隱藏層。
神經(jīng)元系統(tǒng)采用了左右腦半球的設(shè)計(jì)方式進(jìn)行設(shè)計(jì)和制造。
最右側(cè)則是輸出層(outputlayer),有10個(gè)神經(jīng)元節(jié)點(diǎn),分別代表識別結(jié)果是0,1,2,...,9。當(dāng)然,受sigmoid函數(shù)σ(z)的限制,每個(gè)輸出也肯定是0~1之間的數(shù)。
那我們在得到一組輸出值之后,哪個(gè)輸出的值最大,最終的識別結(jié)果就是它。
而在訓(xùn)練的時(shí)候,輸出的形式則是:正確的那個(gè)數(shù)字輸出為1,其它輸出為0,隱藏層和輸出層之間也是全連接。
而神經(jīng)網(wǎng)絡(luò)共的權(quán)重參數(shù)有784*15+15*10=11910個(gè),偏置參數(shù)有15+10=25個(gè),總共參數(shù)個(gè)數(shù)為:11910+25=11935個(gè)。
這是一個(gè)非常驚人的數(shù)字。
,