姓名:吳丞楚
學(xué)號:20012100032
學(xué)院:竹園三號書院
【嵌牛導(dǎo)讀】進(jìn)一步學(xué)習(xí)有關(guān)神經(jīng)網(wǎng)絡(luò)以及感知機(jī)的知識
【嵌牛鼻子】深度學(xué)習(xí) 感知機(jī) 神經(jīng)網(wǎng)絡(luò)
【嵌牛提問】遞歸神經(jīng)網(wǎng)絡(luò)與前饋神經(jīng)網(wǎng)絡(luò)的區(qū)別
【嵌牛正文】
一個(gè)復(fù)雜的感知機(jī)網(wǎng)絡(luò)可以做出更加精準(zhǔn)的決定似乎是合理的:

在這個(gè)網(wǎng)絡(luò)中,第一列感知機(jī)——我們稱作第一層感知機(jī),通過權(quán)衡輸入用來做三個(gè)很簡單的決定。那么第二層的感知機(jī)是干什么的呢?這些感知機(jī)每一個(gè)都通過權(quán)衡第一層輸出的結(jié)果作為輸入而做決定。這樣以來第二層的感知機(jī)可以比第一層做出更加復(fù)雜和抽象的決策。更復(fù)雜的決策可以在第三層做出。通過這種方式,一個(gè)第一層的感知機(jī)網(wǎng)絡(luò)可以進(jìn)行十分復(fù)雜的決策。
順便說一下,我們定義的一個(gè)感知機(jī)都只有一個(gè)輸出,上圖的多層感知機(jī)看起來一個(gè)感知機(jī)有很多個(gè)輸出,其實(shí)它只是把同一個(gè)輸出傳遞給不同的下一層感知機(jī)用來利用,如果不嫌難看,你也可以先畫一條輸出線,然后再分支。
讓我們簡化一下感知機(jī)的描述方式,首先我們可以使用向量點(diǎn)積的方式代替∑jwjxj,即W·X=∑jwjxj,其中W和X分別是權(quán)重值和輸入值所組成的向量。其次,我們可以把閾值threshold移到不等式的另一邊,即b=?threshold,其中b被稱為感知機(jī)的偏差。通過偏差代替閾值,綜上,感知機(jī)規(guī)則改寫為:

你可以把偏差b看作衡量感知機(jī)輸出1的難易程度。從生物學(xué)的角度來講,偏差衡量一個(gè)感知機(jī)是否容易激活。如果偏差b是個(gè)很大的實(shí)數(shù),那么該感知機(jī)就很容易輸出1。顯然,目前引入偏差讓我們對感知機(jī)的描述只是產(chǎn)生了很小的改變,后面我們將會看到它導(dǎo)致的進(jìn)一步簡化。后文我們將不再使用閾值而是使用偏差。
前面已經(jīng)說過感知機(jī)是一個(gè)權(quán)衡輸入做決定的方法。感知機(jī)的另一種使用方法是計(jì)算我們通常認(rèn)為是底層計(jì)算的基本邏輯函數(shù),如AND、OR和NAND。比如,假設(shè)我們有一個(gè)感知機(jī)有兩個(gè)輸入,每一個(gè)的權(quán)重都是-2,偏差是3,下圖是該感知機(jī)模型:

然后我們看到輸入值為[0,0]的話,感知機(jī)輸出值就為1,因?yàn)??2)?0+(?2)?0+3=3是正數(shù)。這里使用*表示乘法是顯而易見的。同樣無論輸入[0,1]還是[1,0],最后產(chǎn)生的結(jié)果都是1,但是當(dāng)輸入[1,1]的時(shí)候產(chǎn)生的結(jié)果是0,因?yàn)橛?jì)算出來的表達(dá)式為-1。其實(shí)我們的感知機(jī)在這里實(shí)現(xiàn)了一個(gè)NAND功能。
該例子說明了感知機(jī)可以用來計(jì)算簡單的邏輯函數(shù)。事實(shí)上,我們可以使用感知機(jī)網(wǎng)絡(luò)計(jì)算任何邏輯函數(shù)。因?yàn)槿魏芜壿嬘?jì)算都可以通過NAND組合而產(chǎn)生。比如,我們可以使用NAND門來構(gòu)建一個(gè)含有兩位的電路x1和x2
。這需要按位求和,x1⊕x2,也需要在x1和x2
都為1時(shí)該位設(shè)為1,也就是做按位乘積x1x2:

為了得到等價(jià)的感知機(jī)網(wǎng)絡(luò),我們將所有的NAND門替換為擁有兩個(gè)輸入,輸入權(quán)重均為-2,偏差全為3的感知機(jī)。下圖是所得的網(wǎng)絡(luò)。

需要注意的時(shí),最左側(cè)的感知機(jī)的輸出被最下方的感知機(jī)作為輸入使用了兩次。前面的感知機(jī)模型的定義中并沒有說是否允許一個(gè)輸出被同一個(gè)感知機(jī)使用多次。事實(shí)上這并不重要。如果我們不想允許這種情況存在,我們可以簡單的將兩天直線合并,用一根權(quán)重為-4的線代替這兩根權(quán)重為-2的線。然后上述感知機(jī)網(wǎng)絡(luò)變?yōu)橄旅孢@個(gè)等價(jià)的網(wǎng)絡(luò),其中沒有標(biāo)記的輸入權(quán)重仍是-2。

到目前為止,我都是把像x1,x2這樣的輸入當(dāng)作變量畫在了網(wǎng)絡(luò)的左側(cè),事實(shí)上,通常我們會畫一個(gè)額外的感知機(jī)——輸入層,對輸入進(jìn)行編碼:

可以看到輸入感知器有輸出但沒有輸入.

但它實(shí)際上并不是一個(gè)沒有輸入的感知機(jī)。如果我們確實(shí)有一個(gè)沒有輸入的感知機(jī),那么∑jwjxj的值一直都是0,因此感知機(jī)的輸出就只和偏差b有關(guān),這時(shí)感知機(jī)僅僅輸出一個(gè)固定的值,而不是期望得到的值。我們最好把輸入感知機(jī)看作是一個(gè)特殊的單元,用來簡單的定義為了輸出所需要的那些值x1,x2...
上述的例子論證了一個(gè)感知機(jī)網(wǎng)絡(luò)可以用來模擬許多包含了NAND門的電路。因?yàn)镹AND門是通用的計(jì)算方法,因此感知機(jī)也通用于計(jì)算。
感知機(jī)的計(jì)算普遍性既讓人欣慰,又讓人失望。安心是因?yàn)楦兄獧C(jī)網(wǎng)絡(luò)可以和其他任意的計(jì)算設(shè)備相媲美,失望是因?yàn)樗雌饋韮H僅像是一種新型的邏輯門,而不是什么NB的技術(shù)。
然而事實(shí)上并不是這這樣的,事實(shí)證明我們可以設(shè)計(jì)出能夠自動(dòng)調(diào)節(jié)人工神經(jīng)元網(wǎng)絡(luò)參數(shù)和偏差的學(xué)習(xí)算法。這種調(diào)參是對外部刺激的相應(yīng),不需要程序員的干預(yù)。這些學(xué)習(xí)算法使我們能夠以一種與傳統(tǒng)的邏輯門截然不同的方式使用人工神經(jīng)元。它并不是明確的列出門電路,我們的神經(jīng)網(wǎng)絡(luò)可以簡單的學(xué)習(xí)解決問題,有些問題是很難通過設(shè)計(jì)傳統(tǒng)電路就能解決的。
Sigmoid神經(jīng)元
學(xué)習(xí)算法看起來非常好。但是我們?nèi)绾尾拍転樯窠?jīng)網(wǎng)絡(luò)設(shè)計(jì)一個(gè)這樣的算法呢?假設(shè)我們有一個(gè)感知器網(wǎng)絡(luò),我們想讓它學(xué)習(xí)著去解決一些問題。舉個(gè)例子,網(wǎng)絡(luò)的輸入可能是手寫數(shù)字的原始掃描像素?cái)?shù)據(jù)。我們想讓這個(gè)網(wǎng)絡(luò)學(xué)習(xí)出一個(gè)可以識別出對應(yīng)數(shù)字的參數(shù)和偏差。為了了解如何學(xué)習(xí),假設(shè)我們對網(wǎng)絡(luò)中的權(quán)重和偏差做了一些小的改變。我們想要這個(gè)小的權(quán)重的改變造成一點(diǎn)網(wǎng)絡(luò)中對應(yīng)的輸出的改變,這個(gè)特性讓學(xué)習(xí)變得可能。下圖是我們想要的(這個(gè)網(wǎng)絡(luò)太簡單不能做手寫數(shù)字的識別):

如果對權(quán)重和偏差一個(gè)曉得調(diào)節(jié)可以造成輸出的很小的變化,然后我們就可以根據(jù)這個(gè)事實(shí)修改權(quán)重和偏差,使得我們的網(wǎng)絡(luò)以我們想要的方式做得更多。舉個(gè)例子,假設(shè)這個(gè)網(wǎng)絡(luò)總是把9分類為8,我們可以想辦法對網(wǎng)絡(luò)的權(quán)重和偏差做一些小的改變,使得網(wǎng)絡(luò)可以將圖片分為9。然后我們重復(fù)這樣做,一次又一次改變權(quán)重和偏差,使得輸出越來越好,網(wǎng)絡(luò)就得到了學(xué)習(xí)。
問題是當(dāng)你的網(wǎng)絡(luò)包含感知機(jī)時(shí)不會發(fā)生這種情況。事實(shí)上,任何一個(gè)感知機(jī)上發(fā)生一點(diǎn)小的改變有時(shí)可能導(dǎo)致感知機(jī)的結(jié)果翻轉(zhuǎn)(要么翻轉(zhuǎn)要么不變),由0變?yōu)?或者相反。這樣的翻轉(zhuǎn)可能造成造成一系列連鎖反應(yīng),造成其他所有感知機(jī)的復(fù)雜變化。也就是當(dāng)你可能調(diào)節(jié)到數(shù)字9可以被很好的識別時(shí),網(wǎng)絡(luò)在其他圖像上的行為已經(jīng)變得完全難以控制。這使得我們通過一點(diǎn)點(diǎn)調(diào)試參數(shù)和偏差讓網(wǎng)絡(luò)更接近期望的行為變得艱難。或許有一些巧妙得方法來解決這個(gè)問題,但是如何使用一個(gè)感知機(jī)網(wǎng)絡(luò)學(xué)習(xí)并不是那么容易的事情。
我們可以通過一種新的人造神經(jīng)元來解決上述問題——sigmoid神經(jīng)元。Sigmoid神經(jīng)元和感知機(jī)很相似,但是它卻可以實(shí)現(xiàn)當(dāng)對權(quán)重和偏差做微小的改變時(shí),輸出量的改變也是微小的。這將使得sigmoid神經(jīng)元網(wǎng)絡(luò)可以學(xué)習(xí)成為了可能。
下面開始描述sigmoid神經(jīng)元。我們將像描述感知機(jī)那樣描述sigmoid神經(jīng)元:

和感知機(jī)一樣,sigmoid函數(shù)也擁有輸入向量,但是它的輸入向量不再僅限于0和1,而是0到1之間的連續(xù)值。比如,0.1314可以作為sigmoid神經(jīng)元的輸入值。同樣,sigmoid神經(jīng)元對每個(gè)輸入都有分配權(quán)重和一個(gè)總的偏差。但是輸出也不再是0和1,而是σ(w?x)+b
,其中σ被稱為sigmoid函數(shù),定義為:

一個(gè)擁有輸入x1,x2...權(quán)重w1,w2...偏差b的sigmoid神經(jīng)元的輸出為:

這個(gè)式子乍一看比感知機(jī)的公式復(fù)雜很多,事實(shí)上,它和感知機(jī)很相似。為了體現(xiàn)和感知機(jī)的相似性,假設(shè)z=w?x+b是一個(gè)很大的正數(shù),那么e?z≈0,那么σ(z)≈1。也就是說當(dāng)z=w?x+b是一個(gè)很大的正數(shù)時(shí),sigmoid神經(jīng)元的輸出就接近于1,這就像一個(gè)感知機(jī)一樣。反之當(dāng)z=w?x+b是一個(gè)很小的負(fù)數(shù)時(shí),sigmoid的輸出結(jié)果趨近于0,這和感知機(jī)的行為很相似。只有當(dāng)w?x+b的值不大不小的時(shí)候,sigmoid的輸出才和感知機(jī)不一樣。
對于σ的代數(shù)式我們該如何理解?事實(shí)上,對于σ的精確表達(dá)并不重要,重要的是σ所形成的函數(shù)圖形:

該函數(shù)圖形是階躍函數(shù)的平滑處理之后的樣子。

如果σ改為一個(gè)階躍函數(shù),那么sigmoid神經(jīng)元就等同于感知機(jī),因?yàn)樗妮敵鼋Y(jié)果和感知機(jī)的輸出結(jié)果情況一模一樣,當(dāng)w?x+b為正輸出1,反之輸出0。通過上面的描述,我們通過使用函數(shù)σ得到一個(gè)平滑版本的感知機(jī)。函數(shù)σ的平滑功能比它具體的代數(shù)表達(dá)式要重要得多。有了平滑處理,才使得我們在稍微改變權(quán)重或者偏差的時(shí)候,神經(jīng)元的輸出值才會有些許改變,而不是要么不變要么翻轉(zhuǎn)。事實(shí)上,微積分告訴我們輸出值得改變量可以近似表達(dá)為:

其中求和是對于所有的權(quán)重而言, ?output/?wj和?output/?b分別表示輸出在wj和偏差b方向上的偏導(dǎo)數(shù)。不要因?yàn)檫@里有求偏導(dǎo)而感到驚慌,雖然是在求偏導(dǎo),但實(shí)際上他在說一件十分簡單的東西:Δoutput是一個(gè)自變量為Δwj和Δb的線性函數(shù)。這樣的線性關(guān)系使得在改變微小的權(quán)重和偏差時(shí)可以的到期望的輸出的微小改變成為一件容易的事情。雖然sigmoid神經(jīng)元和感知機(jī)在行為上有很多相似之處,但是他可以很輕松的知道如何微小的改變權(quán)重和偏差使得輸出改變。
如果σ函數(shù)的形狀比其代數(shù)表達(dá)式重要,那么我們?yōu)槭裁从忠付ㄋ拇鷶?shù)表達(dá)式為等式(3)那樣呢?事實(shí)上,在后文我們也會偶爾考慮使用其他激活函數(shù)。在使用不同激活函數(shù)時(shí),唯一的改變時(shí)方程(5)中的偏導(dǎo)數(shù)的改變。通過計(jì)算發(fā)現(xiàn),使用σ這樣一個(gè)指數(shù)函數(shù)對于分化是有好處的。無論如何,σ函數(shù)是最常見的激活函數(shù)。
我們應(yīng)該如何解釋sigmoid神經(jīng)元的輸出呢?顯然,感知機(jī)和sigmoid神經(jīng)元之間最大的不同在于,sigmoid輸出的值不止0和1.他們可以輸出0到1之間的所有實(shí)數(shù)。這將會是很有用的,比如:如果我們想要使用輸出值表示輸入到一個(gè)神經(jīng)網(wǎng)絡(luò)的像素圖像的平均強(qiáng)度。但有時(shí)候這也是很煩人的一件事。假設(shè)我們想要從網(wǎng)絡(luò)中獲得輸出值來表示是否“圖像表示的是9”或者“圖像表示的不是9”,顯然,感知機(jī)的輸出0和1會更加清楚。但是在實(shí)際使用的時(shí)候,我們會建立一個(gè)共識來解決這個(gè)問題,比如輸出的值大于0.5我們認(rèn)為它是9,反之不是9.
神經(jīng)網(wǎng)絡(luò)的架構(gòu)
在下一節(jié)我將介紹一個(gè)可以很好識別手寫數(shù)字的神經(jīng)網(wǎng)絡(luò)。在此之前,先解釋一下網(wǎng)絡(luò)中的各部分的專業(yè)術(shù)語。假設(shè)我們有一個(gè)網(wǎng)絡(luò):

正如前面提到的,最左邊的一層稱為輸入層,位于這一層的神經(jīng)元稱為輸入神經(jīng)元。最右邊的輸出層包含了輸出神經(jīng)元,本例只有一個(gè)輸出神經(jīng)元。中間的層被稱為隱藏層,因?yàn)檫@些神經(jīng)元既不是輸出也不是輸入。隱藏層聽起來很神秘,我第一次聽到這個(gè)詞的時(shí)候,我覺得它一定有深刻的哲學(xué)或數(shù)學(xué)意義。但是他真的其實(shí)就只意味著既不是輸入也不是輸出而已。上圖的神經(jīng)網(wǎng)絡(luò)中只包含了一個(gè)隱藏層,但是有些網(wǎng)絡(luò)有許多隱藏層,比如下圖的四層網(wǎng)絡(luò)結(jié)構(gòu),含有兩個(gè)隱藏層:

因?yàn)闅v史的原因,這樣的多層網(wǎng)絡(luò)有時(shí)候被稱作多層感知機(jī)(MLPs),盡管這個(gè)網(wǎng)絡(luò)是有sigmoid組成的而不是感知機(jī)。本文不會使用MLP這個(gè)術(shù)語,但是你應(yīng)該知道它的存在。
網(wǎng)絡(luò)中的輸入和輸出層一般都被設(shè)計(jì)的很簡單。比如:假設(shè)我們試圖識別一幅圖像是否是9,一個(gè)自然的方法就是將該圖片的灰度值編碼作為神經(jīng)元的輸入。如果這個(gè)圖片是64X64的灰度圖,那么我們的輸入神經(jīng)元就有64X64=4096個(gè)輸入神經(jīng)元,它的值隨著灰度在0到1里適當(dāng)?shù)淖兓?。輸出神?jīng)元只有一個(gè),輸出的值小于0.5表示這個(gè)數(shù)字不是9,反之就是9.
雖然輸入輸出層的設(shè)計(jì)很簡單,但是隱藏層的設(shè)計(jì)卻是門藝術(shù)。我們不可能通過一些簡單的經(jīng)驗(yàn)法則來總結(jié)隱藏層的設(shè)計(jì)過程。相反,神經(jīng)網(wǎng)絡(luò)的研究人員已經(jīng)開發(fā)了隱藏層的許多的最優(yōu)設(shè)計(jì)規(guī)則,這可以幫助人們從他們的網(wǎng)絡(luò)中的到預(yù)期的行為。比如,這種啟發(fā)式可以幫助人們決定如何權(quán)衡網(wǎng)絡(luò)的隱藏層數(shù)和訓(xùn)練網(wǎng)絡(luò)所需的時(shí)間。我們將在后面見到幾種這樣的最優(yōu)設(shè)計(jì)規(guī)則。
到目前為止,我們所討論的神經(jīng)網(wǎng)絡(luò)都是上一層的輸出作為下一層的輸入。這樣的網(wǎng)絡(luò)被稱為前饋神經(jīng)網(wǎng)絡(luò)(FeedforwardNerralNetworks)。這意味著在網(wǎng)絡(luò)中沒有環(huán)狀,信息總是往前走的,不會反向。如果我們確實(shí)有環(huán),我們將會遇到函數(shù)σ的輸入依賴于其輸出,這很難理解,所以我們不允許這樣的循環(huán)。
然而,有些人造神經(jīng)網(wǎng)絡(luò)中存在反饋回路是可能的。這樣的模型稱為遞歸神經(jīng)網(wǎng)絡(luò)。這些模型的思想是讓神經(jīng)元在有限時(shí)間里激活,然后保持非激活狀態(tài)。這種激活可以刺激其他神經(jīng)元在稍后一段時(shí)間激活。這會導(dǎo)致許神經(jīng)元激活,隨著時(shí)間推移,我們將獲得一串激活神經(jīng)元。在這樣的模型中,循環(huán)不會引起問題,因?yàn)橐粋€(gè)神經(jīng)元的輸出只會在稍后的時(shí)間影響它的輸入,而不是馬上就影響。
遞歸神經(jīng)網(wǎng)絡(luò)的影響力比前饋神經(jīng)網(wǎng)絡(luò)的小,一部分原因是到目前為止,遞歸網(wǎng)絡(luò)的學(xué)習(xí)算法不那么強(qiáng)大。但是遞歸網(wǎng)絡(luò)仍然很有研究意義。比起前饋網(wǎng)絡(luò),它更接近我們大腦的思維方式。遞歸網(wǎng)絡(luò)可能解決一些前饋網(wǎng)絡(luò)很難解決的問題。