學(xué)習(xí)算法聽起來很美妙应民。但是我們?nèi)绾卧O(shè)計出這樣的神經(jīng)元網(wǎng)絡(luò)算法呢?假設(shè)我們有一個想要用來學(xué)習(xí)解決問題的神經(jīng)元網(wǎng)絡(luò)。例如光稼,輸入網(wǎng)絡(luò)的是掃描一副手寫數(shù)字圖片的原始像素數(shù)據(jù)。我們希望這個網(wǎng)絡(luò)學(xué)習(xí)權(quán)重和偏移孩等,然后輸出數(shù)字的正確分類艾君。來看一下學(xué)習(xí)如何工作,假設(shè)我們很小的改動了網(wǎng)絡(luò)中的一些權(quán)重(或者偏移)肄方,我們期望的是通過改變這一點(diǎn)的權(quán)重僅僅使網(wǎng)絡(luò)的輸出有相應(yīng)的很小的改變冰垄。正如接下來我們將要看到的,這個性質(zhì)使學(xué)習(xí)稱為了可能权她。如圖所示虹茶,這就是我們想要的(顯然這個網(wǎng)絡(luò)太簡單而不能用來做手寫識別):
如果權(quán)重(或者偏移)很小的變化真的可以僅僅引起輸出很小的改變,我們就可以用這個事實(shí)來修改權(quán)重和偏移來使我們的網(wǎng)絡(luò)做出我們想要的表現(xiàn)隅要。例如蝴罪,假設(shè)網(wǎng)絡(luò)錯誤的將一幅“9”的圖片識別成“8”,我們可以算出怎樣使權(quán)重和偏移做出很小的變化使網(wǎng)絡(luò)更接近的能夠?qū)ⅰ?”的圖片分類正確步清。然后重復(fù)這一步要门,一遍一遍的改變權(quán)重和偏移來得到越來越好的輸出。這個網(wǎng)絡(luò)就學(xué)習(xí)了尼啡。
問題是包含很多感知機(jī)的網(wǎng)絡(luò)并不是這樣暂衡。事實(shí)上,任何一個神經(jīng)元權(quán)重或者偏移很小的改變都可能感知機(jī)輸出完全反轉(zhuǎn)崖瞭,也就是從0到1狂巢。這種反轉(zhuǎn)可能會引起剩余網(wǎng)絡(luò)的行為以很復(fù)雜的方式完全改變。因此當(dāng)“9”現(xiàn)在可能分類正確了书聚,這個網(wǎng)絡(luò)的行為在其它圖片上可能不可控的完全改變了唧领。這使得通過逐步修改權(quán)重和偏移來使網(wǎng)絡(luò)得到跟接近想要的行為的方式是很難的藻雌。也許有更聰明的方法來解決這個問題,但是這不能立刻讓我們明確的知道神經(jīng)網(wǎng)絡(luò)是怎樣學(xué)習(xí)的斩个。
我們可以通過引入一種被稱為*sigmoid*的新的神經(jīng)元來克服這個問題胯杭。Sigmoid神經(jīng)元和感知機(jī)非常接近,但是修改他們很小的權(quán)重和偏移可以引起僅僅輸出很小的改變受啥。這是使sigmoid神經(jīng)網(wǎng)絡(luò)可以學(xué)習(xí)的決定性事實(shí)做个。
好了,讓我們描述一下sigmoid神經(jīng)元滚局。我們將像畫感知機(jī)一樣畫sigmoid神經(jīng)元:
就像感知機(jī)一樣居暖,這個sigmoid神經(jīng)元有輸入,x1藤肢,x2太闺,x3.... 但是輸入可以**取0到1之間的任何值**,而不僅僅是0和1嘁圈。因此省骂,例如,0.638...對sigmoid神經(jīng)元來說是有效的輸入值最住。也像感知機(jī)一樣钞澳,sigmoid神經(jīng)元對沒有輸入也有相應(yīng)的權(quán)重w1,w2.... 并且一個總的偏移b。但是輸出不是0或1涨缚,而是<code>σ(w?x+b)</code>略贮,σ被稱為*sigmoid函數(shù)*,定義如下:
更明確的仗岖,一個輸入為x1逃延,x2,...轧拄,權(quán)重為w1揽祥,w2,....檩电,并且偏移為b的sigmoid神經(jīng)元的輸出為:
乍一看拄丰,sigmoid神經(jīng)元表現(xiàn)的和感知機(jī)很不一樣。如果你對sigmoid函數(shù)代數(shù)式不熟悉的話俐末,它看起來可能是陌生又令人敬畏的料按。事實(shí)上,sigmoid神經(jīng)元和感知機(jī)之間有很多相似的地方卓箫,而sigmoid函數(shù)的代數(shù)形式更多的是技術(shù)細(xì)節(jié)而不是真正的理解障礙物载矿。
為了理解和感知機(jī)模型的相似性,假設(shè)z≡w?x+b是一個很大的正數(shù)烹卒,那么闷盔,e^?z≈0并且σ(z)≈1弯洗。換句話說,當(dāng)z=w?x+b的值是個正數(shù)并且很大的時候逢勾,sigmoid神經(jīng)元的輸出接近于1牡整,就像一個感知機(jī)一樣。相反的溺拱,假設(shè)z=w?x+b是一個很大的負(fù)數(shù)逃贝,那么e^?z→∞且σ(z)≈0。因此說迫摔,當(dāng)z=w?x+b是一個很大的負(fù)數(shù)的時候秋泳,sigmoid神經(jīng)元的行為和感知機(jī)也很接近。只有w?x+b是一個中等值的時候攒菠,感知機(jī)模型的值差別才會非常大。
σ的代數(shù)形式是怎樣的呢歉闰?我們怎樣理解它辖众?事實(shí)上,σ的準(zhǔn)確形式并不重要和敬,重要的是這個函數(shù)畫出來的時候是什么樣子的凹炸。形如下圖:
形似一個平滑的階躍函數(shù):
如果σ真的是一個階躍函數(shù),那么sigmoid神經(jīng)元就成為了一個感知機(jī)昼弟,因?yàn)樗妮敵鲇蓋?x+b的正負(fù)決定是0還是1啤它。正如上面暗示的那樣,使用σ函數(shù)后我們得到了一個平滑輸出的感知機(jī)舱痘。確實(shí)变骡,σ函數(shù)的平滑性至關(guān)重要,而不是它的其他細(xì)節(jié)芭逝。σ平滑意味著權(quán)重很小的改變Δwj和偏移很小的改變Δb能夠使神經(jīng)元輸出產(chǎn)生很小的改變Δoutput塌碌。事實(shí)上,經(jīng)過計算旬盯,Δoutput大約為:
你不熟悉偏導(dǎo)數(shù)也不要驚慌! 雖然這個都是偏導(dǎo)數(shù)的表達(dá)式看起來很復(fù)雜台妆,但是它實(shí)際上說的東西非常簡單(這聽起來是一個好消息):Δoutput是一個關(guān)于Δwj和Δb的**線性函數(shù)**。這種線性性質(zhì)使的改變很小的權(quán)重和偏移使輸出得到期望的微小變化變的很簡單胖翰。雖然sigmoid神經(jīng)元和感知機(jī)有很多相似的行為接剩,但是它使得計算怎樣改變權(quán)重和偏移來改變輸出變得更簡單。
如果σ的形狀很重要而不是它的準(zhǔn)確細(xì)節(jié)萨咳,那么我們?yōu)槭裁催€要會用等式(3)中的形式呢懊缺?事實(shí)上,在本書接下來的部分中培他,對于神經(jīng)元其他的**激勵函數(shù)**f(·)我們會偶爾認(rèn)為是f(w?x+b)桐汤。我們使用不同的激勵函數(shù)后最大的變化就是等式(5)中的偏導(dǎo)數(shù)的值的變化而克。當(dāng)我們計算偏導(dǎo)數(shù)的時候使用σ將會簡代數(shù),因?yàn)橹笖?shù)有很好的求導(dǎo)性質(zhì)怔毛。無論如何员萍,σ是一個在神經(jīng)元網(wǎng)絡(luò)中經(jīng)常使用的函數(shù),并且是我們在這本書中使用的最多的激勵函數(shù)拣度。
我們應(yīng)該怎樣解釋sigmoid神經(jīng)元的輸出呢碎绎?非常明顯的的是感知機(jī)和sigmoid神經(jīng)元最大的不同是sigmoid神經(jīng)元的輸出不僅僅是0和1,也可以是像0.173...和0.689..的合法輸出抗果。這是很有用的筋帖,例如,如果我們想要輸出輸入到神經(jīng)網(wǎng)絡(luò)中一張圖片像素的平均強(qiáng)度值冤馏,但是有時這是很令人討厭的日麸。假設(shè)我們想要從網(wǎng)絡(luò)中輸出表明是“輸入的圖片是9”或者“輸入的圖片不是9”。顯然逮光,最簡單的是使用感知機(jī)輸出0或1代箭。實(shí)際中我們可以建立一個慣例來解決這個問題,例如涕刚,通過聲明任何不小于0.5的輸出是“9”嗡综,任何小于0.5的輸出是“不是9”。當(dāng)我們使用這種慣例的時候我會明確說明杜漠,所以這不會引起任何混亂极景。