英文原文:http://neuralnetworksanddeeplearning.com/
對(duì)原文的表達(dá)有部分改動(dòng)
神經(jīng)網(wǎng)絡(luò)的架構(gòu)
在徹底的介紹和使用神經(jīng)網(wǎng)絡(luò)的架構(gòu)前舍沙,讓我們對(duì)于神經(jīng)網(wǎng)絡(luò)的一些名詞做定義和解釋。假設(shè)我們有網(wǎng)絡(luò):
如前所述秒咐,這個(gè)網(wǎng)絡(luò)中最左邊的一層稱為輸入層鹰贵,層內(nèi)的神經(jīng)元稱為輸入神經(jīng)元觅捆。最右邊的稱為輸出層放航,層內(nèi)包含輸出神經(jīng)元跪呈,在這種情況下置鼻,包含單個(gè)輸出神經(jīng)元夫壁。中間層稱為隱藏層,該層中的神經(jīng)元既不是輸入也不是輸出沃疮。 “隱藏”這個(gè)詞可能聽(tīng)起來(lái)有點(diǎn)神秘,它的真正含義只不過(guò)是“不是輸入或輸出”的層梅肤。上面的網(wǎng)絡(luò)只有一個(gè)隱藏層司蔬,但有些網(wǎng)絡(luò)包含多個(gè)隱藏層。例如姨蝴,下面的四層網(wǎng)絡(luò)有兩個(gè)隱藏層:
由于歷史原因俊啼,這種多層網(wǎng)絡(luò)有時(shí)被稱為多層感知器或 MLPs,盡管由 sigmoid 神經(jīng)元組成左医,而不是感知器授帕。
網(wǎng)絡(luò)中輸入和輸出層的設(shè)計(jì)通常很簡(jiǎn)單。例如浮梢,假設(shè)我們?cè)噲D確定手寫(xiě)圖像是否描繪了“9”跛十。設(shè)計(jì)網(wǎng)絡(luò)的一種方式是將圖像像素值(通常是 0~255)編碼到輸入神經(jīng)元中。如果圖像是 64 x 64 灰度圖像秕硝,那么我們將有 4096 個(gè)輸入神經(jīng)元芥映,強(qiáng)度在 0 和 1 之間適當(dāng)縮放。輸出層將只包含一個(gè)神經(jīng)元,輸出小于 0.5 的值表示“輸入圖像不是 9”奈偏,大于 0.5 的值表示“輸入圖像是 9”坞嘀。
雖然神經(jīng)網(wǎng)絡(luò)的輸入和輸出層的設(shè)計(jì)通常很簡(jiǎn)單,但隱藏層的設(shè)計(jì)則是一門(mén)藝術(shù)惊来。特別是丽涩,不可能用一些簡(jiǎn)單的經(jīng)驗(yàn)法則來(lái)總結(jié)隱藏層的設(shè)計(jì)過(guò)程。相反裁蚁,神經(jīng)網(wǎng)絡(luò)研究人員為隱藏層開(kāi)發(fā)了許多啟發(fā)式的設(shè)計(jì)方法矢渊,幫助人們從網(wǎng)絡(luò)中獲得他們想要的行為。例如厘擂,此類(lèi)啟發(fā)式方法可用于幫助確定如何在隱藏層的數(shù)量與訓(xùn)練網(wǎng)絡(luò)所需的時(shí)間之間進(jìn)行權(quán)衡昆淡。我們將在本系列后面遇到幾個(gè)這樣的設(shè)計(jì)啟發(fā)式方法。
到目前為止刽严,我們一直在討論神經(jīng)網(wǎng)絡(luò)昂灵,其中一層的輸出用作下一層的輸入。這種網(wǎng)絡(luò)稱為前饋神經(jīng)網(wǎng)絡(luò)(feedforward neural networks)舞萄。這意味著網(wǎng)絡(luò)中沒(méi)有環(huán)路——信息總是前饋眨补,從不反饋。如果我們確實(shí)有循環(huán)倒脓,我們最終會(huì)遇到 σ 函數(shù)的輸入取決于輸出的情況撑螺。我們不允許這樣的循環(huán)。
然而崎弃,還有其他的人工神經(jīng)網(wǎng)絡(luò)模型甘晤,其中反饋回路是可能的。這些模型稱為循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural networks)饲做。為了限制我們的范圍线婚,在本書(shū)中我們將專(zhuān)注于更廣泛使用的前饋網(wǎng)絡(luò)。
一個(gè)簡(jiǎn)單的手寫(xiě)數(shù)字分類(lèi)網(wǎng)絡(luò)
定義了神經(jīng)網(wǎng)絡(luò)后盆均,讓我們回到手寫(xiě)識(shí)別塞弊。我們可以將識(shí)別手寫(xiě)數(shù)字的問(wèn)題分成兩個(gè)子問(wèn)題。首先泪姨,我們想要一種將包含多個(gè)數(shù)字的圖像分解為一系列單獨(dú)圖像的方法游沿,每個(gè)圖像都包含一個(gè)數(shù)字。例如肮砾,我們想拆分圖像:
拆分成一下六個(gè)圖像:
我們?nèi)祟?lèi)很容易解決這個(gè)分割問(wèn)題诀黍,但計(jì)算機(jī)程序要正確地分解圖像是具有挑戰(zhàn)性的。一旦圖像被分割仗处,程序就需要對(duì)每個(gè)單獨(dú)的數(shù)字進(jìn)行分類(lèi)蔗草。例如咒彤,我們希望我們的程序能夠識(shí)別上面的第一個(gè)數(shù)字:
它是5。
我們將專(zhuān)注于編寫(xiě)一個(gè)程序來(lái)解決第二個(gè)問(wèn)題咒精,即對(duì)單個(gè)數(shù)字進(jìn)行分類(lèi)镶柱。事實(shí)證明,一旦您有一種對(duì)單個(gè)數(shù)字進(jìn)行分類(lèi)的好方法模叙,分割問(wèn)題就不那么難解決了歇拆。因此,與其擔(dān)心分割范咨,我們將專(zhuān)注于開(kāi)發(fā)一個(gè)神經(jīng)網(wǎng)絡(luò)故觅,它可以解決更有趣和更困難的問(wèn)題,即識(shí)別單個(gè)手寫(xiě)數(shù)字渠啊。
為了識(shí)別單個(gè)數(shù)字输吏,我們將使用三層神經(jīng)網(wǎng)絡(luò):
網(wǎng)絡(luò)的輸入層包含對(duì)輸入像素值進(jìn)行編碼的神經(jīng)元。我們的網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù)將由許多 28 x 28 像素的掃描手寫(xiě)數(shù)字圖像組成替蛉,因此輸入層包含 個(gè)神經(jīng)元贯溅。為簡(jiǎn)單起見(jiàn),我省略了上圖中的大部分 784 個(gè)輸入神經(jīng)元躲查。輸入像素是灰度的它浅,0.0 的值代表白色,1.0 的值代表黑色镣煮,中間的值代表逐漸變暗的灰色陰影姐霍。
網(wǎng)絡(luò)的第二層是隱藏層。我們用 表示這個(gè)隱藏層中的神經(jīng)元數(shù)量典唇,我們將試驗(yàn)不同的 n 值镊折。顯示的示例說(shuō)明了一個(gè)小的隱藏層,僅包含
個(gè)神經(jīng)元介衔。
網(wǎng)絡(luò)的輸出層包含 10 個(gè)神經(jīng)元腌乡。如果第一個(gè)神經(jīng)元觸發(fā),即夜牡,則表示網(wǎng)絡(luò)認(rèn)為數(shù)字是 0。如果第二個(gè)神經(jīng)元觸發(fā)侣签,則表明網(wǎng)絡(luò)認(rèn)為數(shù)字是 1塘装。并且很快。更準(zhǔn)確地說(shuō)影所,我們將輸出神經(jīng)元編號(hào)為 0 到 9蹦肴,并找出哪個(gè)神經(jīng)元的激活值最高。如果該神經(jīng)元的編號(hào)為 6猴娩,那么我們的網(wǎng)絡(luò)將猜測(cè)輸入數(shù)字是 6阴幌。對(duì)于其他輸出神經(jīng)元勺阐,依此類(lèi)推。
您可能想知道為什么我們使用 10 個(gè)輸出神經(jīng)元矛双。畢竟渊抽,網(wǎng)絡(luò)的目標(biāo)是告訴我們哪個(gè)數(shù)字 (0,1,2,…,9) 對(duì)應(yīng)于輸入圖像。一種看似自然的方法是僅使用 4 個(gè)輸出神經(jīng)元议忽,將每個(gè)神經(jīng)元視為編碼二進(jìn)制值(0x0001懒闷,0x0010...),具體取決于神經(jīng)元的輸出是接近 0 還是接近 1栈幸。四個(gè)神經(jīng)元足以編碼答案愤估,因?yàn)? 大于輸入數(shù)字的 10 個(gè)可能值。為什么我們的網(wǎng)絡(luò)應(yīng)該使用 10 個(gè)神經(jīng)元速址?那不是導(dǎo)致效率低下嗎玩焰?最終的理由是經(jīng)驗(yàn)性的:我們可以嘗試兩種網(wǎng)絡(luò)設(shè)計(jì)。結(jié)果證明芍锚,對(duì)于這個(gè)特定問(wèn)題昔园,具有 10 個(gè)輸出神經(jīng)元的網(wǎng)絡(luò)比具有 4 個(gè)輸出神經(jīng)元的網(wǎng)絡(luò)學(xué)習(xí)識(shí)別數(shù)字性能更好。但這讓我們想知道為什么使用 10 個(gè)輸出神經(jīng)元效果更好闹炉。是否有一些啟發(fā)式方法可以提前告訴我們應(yīng)該使用 10個(gè)輸出神經(jīng)元編碼而不是 4個(gè)輸出神經(jīng)元編碼蒿赢?
要理解我們?yōu)槭裁匆@樣做,從第一原則考慮神經(jīng)網(wǎng)絡(luò)正在做什么會(huì)有所幫助渣触。首先考慮我們使用 10 個(gè)輸出神經(jīng)元的情況羡棵。讓我們專(zhuān)注于第一個(gè)輸出神經(jīng)元,它試圖確定數(shù)字是否為 0嗅钻。它通過(guò)權(quán)衡來(lái)自神經(jīng)元隱藏層的證據(jù)來(lái)做到這一點(diǎn)皂冰。那些隱藏的神經(jīng)元在做什么?(以下為假設(shè)养篓,并不是真實(shí)情況)假設(shè)為了論證秃流,隱藏層中的第一個(gè)神經(jīng)元檢測(cè)是否存在如下圖像:
它可以通過(guò)對(duì)與圖像重疊的輸入像素進(jìn)行大量加權(quán)(類(lèi)似 mask),并對(duì)其他輸入進(jìn)行少量加權(quán)來(lái)做到這一點(diǎn)柳弄。以類(lèi)似的方式舶胀,我們假設(shè)隱藏層中的第二、第三和第四個(gè)神經(jīng)元檢測(cè)是否存在以下圖像:
您可能已經(jīng)發(fā)覺(jué)了碧注,這四個(gè)圖像一起構(gòu)成了我們?cè)谇懊骘@示的數(shù)字行中看到的圖像 “0”:
因此嚣伐,如果所有四個(gè)隱藏神經(jīng)元都被激活,那么我們可以得出結(jié)論萍丐,數(shù)字是 0轩端。當(dāng)然,這不是我們可以用來(lái)得出圖像是 0 的唯一證據(jù)逝变,我們合法地得到 0 還有許多其他方式(例如基茵,通過(guò)上述圖像的翻轉(zhuǎn)奋构,或輕微的扭曲)。但可以肯定地說(shuō)拱层,至少在這種情況下弥臼,我們得出的結(jié)論是輸入是 0。
假設(shè)神經(jīng)網(wǎng)絡(luò)以這種方式運(yùn)行舱呻,我們可以給出一個(gè)合理的解釋?zhuān)忉尀槭裁淳W(wǎng)絡(luò)有 10 個(gè)輸出而不是 4 個(gè)更好醋火。如果我們有 4 個(gè)輸出,輸出的關(guān)系會(huì)讓人捉摸不定箱吕,二進(jìn)制最低位并不能與圖像產(chǎn)生什么形象的聯(lián)系(每一種輸出都需要使用到最低位芥驳,四位是一個(gè)整體)。
現(xiàn)在茬高,綜上所述兆旬,這只是一種啟發(fā)式方法。沒(méi)有說(shuō)三層神經(jīng)網(wǎng)絡(luò)必須按照我描述的方式運(yùn)行怎栽,隱藏神經(jīng)元檢測(cè)簡(jiǎn)單的組件形狀丽猬。也許一個(gè)聰明的學(xué)習(xí)算法會(huì)找到一些權(quán)重分配,讓我們只使用 4 個(gè)輸出神經(jīng)元熏瞄。但是作為一種啟發(fā)式方法脚祟,我所描述的思維方式非常有效,并且可以為您節(jié)省大量時(shí)間來(lái)設(shè)計(jì)良好的神經(jīng)網(wǎng)絡(luò)架構(gòu)强饮。