本文盡可能地減少使用數(shù)學(xué)公式,更多地基于可視化幫助讀者入門,一方面降低了對背景知識的要求,一方面也是因為用這種方式介紹神經(jīng)網(wǎng)絡(luò)可能更易于理解。事實上,理解大部分機器學(xué)習(xí)的內(nèi)容都只需要高中程度的數(shù)學(xué)知識,加上一點類比和抽象的能力。在此基礎(chǔ)上入門機器學(xué)習(xí)是可能的,也是很多人所盼望的(否則很多人可能就放棄接觸這個領(lǐng)域了)。
在本文中,我們將更仔細些地評估它的表現(xiàn),同時查看它的內(nèi)部狀態(tài),以得到一些關(guān)于它是如何運作的直覺。在本文的后半部分,我們將嘗試在一個更復(fù)雜的數(shù)據(jù)集(狗、汽車和船舶)上訓(xùn)練神經(jīng)網(wǎng)絡(luò),看看需要什么樣的革新能將我們的網(wǎng)絡(luò)提高一個等級。
可視化權(quán)重
讓我們來訓(xùn)練一個分類MNIST手寫數(shù)字的網(wǎng)絡(luò),和前一篇文章不同的是,我們直接映射輸入層到輸出層,不設(shè)置隱藏層。所以我們的網(wǎng)絡(luò)看起來像這樣。
用于MNIST的單層神經(jīng)網(wǎng)絡(luò)。10個輸出神經(jīng)元對應(yīng)數(shù)字0-9
當(dāng)我們向神經(jīng)網(wǎng)絡(luò)輸入圖像時,我們通過將像素“展開”為一列神經(jīng)元來可視化網(wǎng)絡(luò),如下圖左半部分所示。讓我們集中注意力到第一個輸出神經(jīng)元的連接,我們將這個神經(jīng)元標(biāo)記為z,并將每個輸入神經(jīng)元和相應(yīng)的權(quán)重標(biāo)記為xi和wi。
我們并不展開像素,而是將權(quán)重看成一個28x28的網(wǎng)格,其中權(quán)重的排列方式與對應(yīng)的像素完全一致。上圖右半部分和下圖看起來不同,但是它們都表達了相同的等式,即z = b + ∑ wx。
另一種可視化每個輸出神經(jīng)元的像素權(quán)重乘積的方式
現(xiàn)在讓我們看一下基于這個架構(gòu)的訓(xùn)練好的網(wǎng)絡(luò),同時可視化第一個輸出神經(jīng)元接受的學(xué)習(xí)好的權(quán)重,這是負責(zé)歸類數(shù)字0的神經(jīng)元。我們給它們標(biāo)上顏色,最低的權(quán)重是黑色的,最高的則是白色。
可視化MNIST分類器0-神經(jīng)元的權(quán)重
瞇起你的眼睛,右邊那個圖形看起來是不是有點像一個模糊的0?想一下這個神經(jīng)元在做什么,這樣可以更容易理解為什么這個圖形是這個形狀。這個神經(jīng)元“負責(zé)”歸類零,它的目標(biāo)是輸出一個較高的值(如果數(shù)字是零)或一個較低的值(如果數(shù)字不是零)。它將較高的權(quán)重賦值給一些像素,在表示零的圖像中,這些像素通常趨向高值。通過這樣的方法,對于表示零的圖像,它可以得出較高的值。類似地,它將較低的權(quán)重賦值給一些像素,在表示非零的圖像中,這些像素通常趨向高值,而在表示零的圖像中,這些像素通常趨向低值。通過這樣的方法,對于表示非零的圖像,它可以得出較低的值。權(quán)重圖像中相對黑的中心源自這樣一個事實,表示零的圖像的像素在這個位置通常趨向于最低值(數(shù)字零當(dāng)中的空洞),而表示其他數(shù)字的圖像的像素在這個位置通常有一個相對較高的值。
讓我們來看看所有10個輸出神經(jīng)元學(xué)習(xí)到的權(quán)重。 正如我們所猜測的那樣,它們都看起來像是10個數(shù)字有些模糊的版本,看起來好像是我們平均了許多屬于每個數(shù)字類別的圖像。
可視化MNIST分類器所有輸出神經(jīng)元的權(quán)重
假設(shè)輸入是表示數(shù)字2的圖像,我們可以預(yù)見負責(zé)歸類2的神經(jīng)元的值應(yīng)該較高,因為它的權(quán)重是這樣設(shè)定的:高權(quán)重傾向于賦值給在表示2的圖像中趨向于高值的像素。其他神經(jīng)元的一些權(quán)重也會與高值像素一致,使得他們的分?jǐn)?shù)也有所提高。然而,共同之處要少很多,并且這些圖像中的許多高值像素會被歸類2的神經(jīng)元中的低權(quán)重所抵消。激活函數(shù)不會改變這一點,因為它是單調(diào)的,也就是說,輸入值越高,輸出值越高。
我們可以將這些權(quán)重解釋為輸出分類的模板。這真是引人入勝,因為我們從來沒有事先告訴過網(wǎng)絡(luò)這些數(shù)字是什么或者這些數(shù)字是什么意思,然而它們最終卻和這些分類的對象很相似。這暗示了神經(jīng)網(wǎng)絡(luò)內(nèi)部機制的特殊性:它們形成了訓(xùn)練對象的表示,在簡單的分類或預(yù)測之外,這些表示還有其他作用。當(dāng)我們開始研究卷積神經(jīng)網(wǎng)絡(luò)時,我們將把這個表示能力提升至一個新等級,但就目前而言,讓我們不要過于超前了。
相比提供的答案,這引發(fā)了更多問題。例如,添加隱藏層時權(quán)重會發(fā)生什么變化?正如我們很快會看到的,這個問題的答案基于我們在前一節(jié)中以直觀的方式看到的東西。但在我們討論這一點之前,讓我們先檢視一下我們神經(jīng)網(wǎng)絡(luò)的表現(xiàn),特別是考慮它往往會造成哪些種類的錯誤。
0op5, 1 d14 17 2ga1n
有時候,我們的網(wǎng)絡(luò)會犯一些情有可原的錯誤。 在我看來,下面的第一個數(shù)字是9這一點并不是很明顯。有人可能很容易把它誤認(rèn)為4,就像我們的網(wǎng)絡(luò)做的那樣。類似地,我們也可以理解為什么第二個數(shù)字3被網(wǎng)絡(luò)誤認(rèn)為8。下面第三和第四個數(shù)字的錯誤更明顯。幾乎任何人都可以立刻認(rèn)出它們分別是3和2,我們的機器卻把第一個數(shù)字誤認(rèn)為5,對第二個數(shù)字是什么則毫無頭緒。
我們的單層MNIST網(wǎng)絡(luò)的一些錯誤。左邊兩個屬于可以理解的錯誤,右邊兩個則是明顯的錯誤
讓我們仔細看看上一篇的最后一個神經(jīng)網(wǎng)絡(luò)的性能,它在MNIST數(shù)字上達到了90%的精確度。達到這個精確度的其中一個方法是查找一個混淆矩陣,這個矩陣將我們的預(yù)測分解成一張表格。在下面的混淆矩陣中,行對應(yīng)MNIST數(shù)據(jù)集的實際標(biāo)簽,列對應(yīng)預(yù)測的標(biāo)簽。例如,第4行(actual 3)、第6列(predicted 5)的單元格表示有71個3被我們的神經(jīng)網(wǎng)絡(luò)誤標(biāo)記為5。混淆矩陣的綠色對角線表示預(yù)測正確的數(shù)量,而其他所有單元格均表示錯誤的數(shù)量。
將每個單元格的頂部取樣填入混淆矩陣,我們可以得到一些很好的洞見。
MNIST混淆矩陣中網(wǎng)絡(luò)最自信的樣本
這給了我們一個網(wǎng)絡(luò)如何學(xué)習(xí)進行某種預(yù)測的印象。看前面兩列,我們看到,我們的網(wǎng)絡(luò)看起來在尋找大環(huán)形來預(yù)測0,尋找細線來預(yù)測1,如果其他數(shù)字碰巧具有這些特征,網(wǎng)絡(luò)會誤認(rèn)。
玩壞我們的神經(jīng)網(wǎng)絡(luò)
到目前為止,我們只討論了訓(xùn)練識別手寫數(shù)字的神經(jīng)網(wǎng)絡(luò)。我們從中獲得了許多洞見,但是我們選擇的卻是一個非常簡單的數(shù)據(jù)集,這給了我們很多優(yōu)勢;我們只有10個分類,這些分類定義非常明確,其中的內(nèi)部差異相對很小。在大多數(shù)現(xiàn)實世界的場景中,我們試圖在非常不理想的情況下分類圖像。 讓我們來看看同一個神經(jīng)網(wǎng)絡(luò)在另一個數(shù)據(jù)集CIFAR-10上的表現(xiàn)。這個數(shù)據(jù)集包括6萬張32x32的彩色圖像,分屬10類:飛機、汽車、鳥、貓、鹿、狗、青蛙、馬、船和卡車。以下是CIFAR-10中的一些隨機樣本圖像。
現(xiàn)在,很明顯,我們必須面對這樣一個困境,這些圖像類別存在我們未曾應(yīng)對過的差異。例如,貓可以面向不同的方向,具有不同的顏色和毛皮紋理,舒展或卷曲,還有許多其他我們在手寫數(shù)字上不曾遇到過的變體。貓的照片也會與其他物體混雜在一起,加劇問題的復(fù)雜程度。
果然,如果我們在這些圖像上訓(xùn)練一個雙層神經(jīng)網(wǎng)絡(luò),我們的精確度只有37%。這還是要比隨機猜測好很多(精確度10%),但是遠遠低于我們的MNIST分類器達到的90%。使用卷積神經(jīng)網(wǎng)絡(luò)后,我們將大大提升精確度,不管是MNIST還是CIFAR-10。目前而言,我們可以通過審查權(quán)重來更準(zhǔn)確地了解普通神經(jīng)網(wǎng)絡(luò)的缺陷。
讓我們重復(fù)先前的試驗,觀察一個不帶隱藏層的單層神經(jīng)網(wǎng)絡(luò)的權(quán)重,只不過這次我們將訓(xùn)練CIFAR-10中的圖像。權(quán)重顯示在下面。
可視化單層CIFAR-10分類器的權(quán)重
與MNIST的權(quán)重相比,明顯的特征更少,清晰度也低很多。某些細節(jié)確實有直覺上的意義,例如飛機和船舶圖像的外邊緣大多是藍色,反映了這些圖像的周圍傾向于是藍天或者水體。由于特定類別的權(quán)重圖像確實與屬于該類別的圖像的平均值相關(guān),所以我們可以如先前一般期待斑點狀的平均顏色凸現(xiàn)出來。然而,由于CIFAR類的內(nèi)部一致性要低很多,我們看到的界限清晰的“模板”相比MNIST要不明顯很多。
讓我們來看看與這個CIFAR-10分類器相關(guān)的混淆矩陣。
毫無意外,表現(xiàn)非常差,精確度只有37%。顯然,我們簡單的單層神經(jīng)網(wǎng)絡(luò)不能應(yīng)付這個復(fù)雜的數(shù)據(jù)集。我們可以引入一個隱藏層,多少改善一下表現(xiàn)。下一小節(jié)將分析這樣做的效果。
添加隱藏層
到目前為止,我們專注于輸入直接連接到輸出的單層神經(jīng)網(wǎng)絡(luò)。隱藏層將如何影響我們的神經(jīng)網(wǎng)絡(luò)?在我們的MNIST網(wǎng)絡(luò)中插入一個包含10個神經(jīng)元的中間層看看。那么,現(xiàn)在我們的手寫數(shù)字分類神經(jīng)網(wǎng)絡(luò)大概是這個樣子:
MNIST雙層神經(jīng)網(wǎng)絡(luò)
上面提到的單層網(wǎng)絡(luò)的簡單模板象征不再適用于這種情況,因為784個輸入像素并沒有直接連接到輸出類。從某種意義上來說,我們過去“強制”我們原來的單層網(wǎng)絡(luò)去學(xué)習(xí)這些模板,因為每個權(quán)重直接連接到一個類別標(biāo)簽,因而只影響該類別。但在我們現(xiàn)在引入的更復(fù)雜的網(wǎng)絡(luò)中,隱藏層的權(quán)重影響輸出層中所有10個神經(jīng)元。那么我們應(yīng)該期待這些權(quán)重看起來是什么樣子呢?
為了理解發(fā)生了什么,我們將像原來那樣可視化第一層中的權(quán)重,但是我們也會仔細查看他們的激活在第二層是如何合并的,從而得到類別分?jǐn)?shù)。回顧一下前面提到的內(nèi)容,如果圖像在很大程度上和過濾器相交感,那么圖像將在第一層的特定神經(jīng)元中產(chǎn)生高激活。因此,隱藏層中的10個神經(jīng)元反映了原始圖像中這10個特征的存在性。在輸出層中,對應(yīng)于某個類別標(biāo)簽的單個神經(jīng)元,是前10次隱藏激活的加權(quán)組合。下圖展示了這一點。
讓我們先來看看上圖頂部的第一層權(quán)重。它們看起來很陌生,不再像圖像模板了。一些看起來像偽數(shù)字,其他看起來像數(shù)字的組成部分:半環(huán)、對角線、孔,等等。
過濾器圖像下面的行對應(yīng)于我們的輸出神經(jīng)元,每行代表一個圖像類別。條形代表隱藏層傳遞給10個過濾器的激活對應(yīng)的權(quán)重。例如,0類似乎偏愛外緣的值較高的第一層過濾器(因為數(shù)字零傾向于如此)。它厭惡中間的像素的值較低的過濾器(通常對應(yīng)數(shù)字零中間的孔)。1類幾乎與此正相反,鐘愛在中間的值較高的過濾器,你可能已經(jīng)想到了,那里對應(yīng)數(shù)字1的豎筆。
這種方法的優(yōu)勢是靈活性。對于每個類別而言,更廣泛的輸入模式可以刺激相應(yīng)的輸出神經(jīng)元。每個類別都可以由前一個隱藏層的若干抽象特征或者它們的組合來觸發(fā)。從本質(zhì)上講,我們可以學(xué)習(xí)不同種類的數(shù)字零,不同種類的數(shù)字一等等。對大多數(shù)任務(wù)而言,這通常能改善網(wǎng)絡(luò)的表現(xiàn)(盡管并不總是如此)。
特征和表示
讓我們概括一下我們在本文學(xué)到的內(nèi)容。在單層和多層神經(jīng)網(wǎng)絡(luò)中,每一層都有類似的功能;它將來自前一層的數(shù)據(jù)轉(zhuǎn)換為該數(shù)據(jù)的“高層”表示。“高層”的意思是它包含了這些數(shù)據(jù)更緊湊、更突出的表示,就像內(nèi)容概要是書的“高層”表示一樣。例如,在上面提到的雙層網(wǎng)絡(luò)中,我們將“低層”像素映射到第一層網(wǎng)絡(luò)中數(shù)字(筆劃、圓圈等)的“高層”特征,然后將這些高層特征映射為下一層的更高層表示(實際數(shù)字)。這種將數(shù)據(jù)轉(zhuǎn)換成更小但更有意義的信息的觀念是機器學(xué)習(xí)的核心,也是神經(jīng)網(wǎng)絡(luò)的主要功能。
通過在神經(jīng)網(wǎng)絡(luò)中增加一個隱藏層,我們讓它有機會在多個抽象層次上學(xué)習(xí)特征。這給了我們數(shù)據(jù)的豐富表示,其中,較前的層包含低層特征,較后的層包含由前層特征組合而成的高層特征。
正如我們所看到的,隱藏層可以提高精確性,不過程度有限。隨著越來越多圖層的迅速增加,很快精確性就不能再提升了,而且這會帶來運算成本——我們不能簡單地要求我們的神經(jīng)網(wǎng)絡(luò)在隱藏層中記憶圖像類別的每個可能版本。事實證明,使用卷積神經(jīng)網(wǎng)絡(luò)是一個更好的方法。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4811瀏覽量
102992
原文標(biāo)題:初窺神經(jīng)網(wǎng)絡(luò)內(nèi)部機制
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
評論