前進(jìn)的道路上涨冀,我們將擴(kuò)展出很多關(guān)于神經(jīng)網(wǎng)絡(luò)的關(guān)鍵的思想,其中包括兩個(gè)重要的人工神經(jīng)元 (感知機(jī)和 S 型神經(jīng)元)炕泳,以及標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法贝奇,即隨機(jī)梯度下降算法钢属。自始至終,我專(zhuān)注于解釋事情的原委叔收,并構(gòu)筑你對(duì)神經(jīng)網(wǎng)絡(luò)的直觀感受尝江。
感知機(jī)
感知機(jī)在20世紀(jì)五啸驯、 六十年代由科學(xué)家 Frank Rosenblatt 發(fā)明客扎,其受到 Warren McCulloch 和 Walter Pitts 早期著 作的影響。今天罚斗,使用其它人工神經(jīng)元模型更為普遍---在這本書(shū)中徙鱼,以及更多現(xiàn)代的神經(jīng)網(wǎng)絡(luò)著作中,主要使用的是一種叫做 S 型神經(jīng)元的神經(jīng)元模型针姿。我們很快會(huì)講到S型神經(jīng)元袱吆。但是要理解為什么S型神經(jīng)元被定義為那樣的方式,值得花點(diǎn)時(shí)間先來(lái)理解下感知機(jī)距淫。
感知機(jī)是如何工作的呢?
一個(gè)感知機(jī)接受幾個(gè)二進(jìn)制輸入绞绒,x1, x2, . . .,并產(chǎn)生一個(gè)二進(jìn)制輸 出:
示例中的感知機(jī)有三個(gè)輸入榕暇,x1, x2, x3蓬衡。通常可以有更多或更少輸入拐揭。Rosenblatt 提議一個(gè)簡(jiǎn)單的規(guī)則來(lái)計(jì)算輸出撤蟆。他引入權(quán)重奕塑,w1, w2, . . .堂污,表示相應(yīng)輸入對(duì)于輸出重要性的實(shí)數(shù)。神經(jīng) 元的輸出龄砰,0 或者 1盟猖,則由分配權(quán)重后的總和 ∑ wjxj 小于或者大于一些閾值決定。和權(quán)重一樣换棚,閾值是一個(gè)實(shí)數(shù)式镐,一個(gè)神經(jīng)元的參數(shù)。用更精確的代數(shù)形式:
這就是感知機(jī)要做的事情固蚤,一個(gè)基本的數(shù)學(xué)模型娘汞。
在這個(gè)網(wǎng)絡(luò)中,第一列感知機(jī) —— 我們稱(chēng)其為第一層感知機(jī) —— 通過(guò)權(quán)衡輸入依據(jù)做出三 個(gè)非常簡(jiǎn)單的決定夕玩。那第二層的感知機(jī)呢?每一個(gè)都在權(quán)衡第一層的決策結(jié)果并做出決定你弦。以這種方式,一個(gè)第二層中的感知機(jī)可以比第一層中的做出更復(fù)雜和抽象的決策燎孟。在第三層中的感 知機(jī)甚至能進(jìn)行更復(fù)雜的決策禽作。以這種方式,一個(gè)多層的感知機(jī)網(wǎng)絡(luò)可以從事復(fù)雜巧妙的決策揩页。
順便提一下旷偿,當(dāng)我定義感知機(jī)時(shí)我說(shuō)的是感知機(jī)只有一個(gè)輸出。在上面的網(wǎng)絡(luò)中感知機(jī)看上 去像是有多個(gè)輸出。實(shí)際上萍程,他們?nèi)匀皇菃屋敵龅拇蓖6鄠€(gè)感知機(jī)輸出箭頭僅僅便于說(shuō)明一個(gè)感 知機(jī)的輸出被用于其它感知機(jī)的輸入。
讓我們簡(jiǎn)化感知機(jī)的數(shù)學(xué)描述尘喝。條件 ∑ wjxj 看上去有些冗?磁浇,我們可以創(chuàng)建兩個(gè)符號(hào)的變動(dòng)來(lái)簡(jiǎn)化。第一個(gè)變動(dòng)是把∑wjxj 改寫(xiě)成點(diǎn)乘朽褪,w · x ≡ ∑wjxj置吓,這里 w 和 x 對(duì)應(yīng)權(quán)重和輸入的向量。第二個(gè)變動(dòng)是把閾值移到不等式的另一邊缔赠,并用感知機(jī)的偏置 b ≡ ?threshold 代替衍锚。用偏置而不是閾值,那么感知機(jī)的規(guī)則可以重寫(xiě)為:
S型神經(jīng)元
我們用描繪感知機(jī)的相同方式來(lái)描繪 S 型神經(jīng)元:
正如一個(gè)感知機(jī)嗤堰,S型神經(jīng)元有多個(gè)輸入戴质,x1,x2,...。但是這些輸入可以取 0 和 1 中的任意值踢匣,而不僅僅是 0 或 1告匠。例如,0.638 . . . 是一個(gè)S型神經(jīng)元的有效輸入离唬。同樣后专,S型神經(jīng)元對(duì)每個(gè)輸入有權(quán)重,w1,w2,...输莺,和一個(gè)總的偏置戚哎,b。但是輸出不是 0 或 1嫂用。相反型凳,它現(xiàn)在是 σ(w · x + b),這里 σ 被稱(chēng)為S 型函數(shù)嘱函,定義為:
把它們放在一起來(lái)更清楚地說(shuō)明甘畅,一個(gè)具有輸入 x1, x2, . . .,權(quán)重 w1, w2, . . .往弓,和偏置 b 的 S 型神經(jīng)元的輸出是:
為了理解和感知機(jī)模型的相似性疏唾,假設(shè) z ≡ w · x + b 是一個(gè)很大的正數(shù)。那么 e?z ≈ 0 而 σ(z) ≈ 1亮航。即荸实,當(dāng) z = w · x + b 很大并且為正,S 型神經(jīng)元的輸出近似為 1缴淋,正好和感知機(jī)一樣准给。 相反地泄朴,假設(shè) z = w·x+b 是一個(gè)很大的負(fù)數(shù)。那么 e?z → ∞露氮,σ(z) ≈ 0祖灰。所以當(dāng) z = w·x+b 是一個(gè)很大的負(fù)數(shù),S 型神經(jīng)元的行為也非常近似一個(gè)感知機(jī)畔规。只有在 w · x + b 取中間值時(shí)局扶, 和感知機(jī)模型有比較大的偏離。
σ 的精確形式不重要 —— 重要的是這個(gè)函數(shù)繪制的形狀叁扫。是這樣:
這個(gè)形狀是階躍函數(shù)平滑后的版本:
如果 σ 實(shí)際是個(gè)階躍函數(shù)三妈,既然輸出會(huì)依賴(lài)于 w · x + b 是正數(shù)還是負(fù)數(shù)2,那么 S 型神經(jīng)元會(huì)成為一個(gè)感知機(jī)莫绣。利用實(shí)際的 σ 函數(shù)畴蒲,我們得到一個(gè),就像上面說(shuō)明的对室,平滑的感知機(jī)模燥。確實(shí),σ函數(shù)的平滑特性掩宜,正
是關(guān)鍵因素蔫骂,而不是其細(xì)部形式。σ 的平滑意味著權(quán)重和偏置的微小變化牺汤,即 ?wj 和 ?b辽旋,會(huì)從神經(jīng)元產(chǎn)生一
個(gè)微小的輸出變化 ?output。實(shí)際上慧瘤,微積分告訴我 們 ?output 可以很好地近似表示為:
它的意思非常簡(jiǎn)單:?output 是一個(gè)反映權(quán)重和偏置變化 —— 即 ?wj 和 ?b —— 的線性函數(shù)戴已。利用這個(gè)線性特性固该,我們比較容易細(xì)微地修改權(quán)重 和偏置的值锅减,從而獲得我們需要的細(xì)微的輸出變化。所以伐坏,因?yàn)镾型神經(jīng)元具有與感知機(jī)類(lèi)似的本質(zhì)行為怔匣,它們可以幫助我們了解權(quán)重和偏置的變化如何影響輸出值。
我們應(yīng)該如何解釋一個(gè) S 型神經(jīng)元的輸出呢? 很明顯桦沉,感知機(jī)和 S 型神經(jīng)元之間一個(gè)很大的不同是 S 型神經(jīng)元不僅僅輸出 0 或 1每瞒。它可以輸出 0 到 1 之間的任何實(shí)數(shù),所以諸如 0.173和0.689的值是合理的輸出纯露。
神經(jīng)網(wǎng)絡(luò)的架構(gòu)
這個(gè)網(wǎng)絡(luò)中最左邊的稱(chēng)為輸入層剿骨,其中的神經(jīng)元稱(chēng)為輸入神經(jīng)元。最右邊的埠褪, 輸出層包含有輸出神經(jīng)元浓利,在本例中挤庇,輸出層只有一個(gè)神經(jīng)元。中間層贷掖,既然這層中的神經(jīng)元既不是輸入也不是輸出嫡秕,則被稱(chēng)為隱藏層。
相比于神經(jīng)網(wǎng)絡(luò)中輸入輸出層的直觀設(shè)計(jì)苹威,隱藏層的設(shè)計(jì)則堪稱(chēng)一?藝術(shù)昆咽。特別是,通過(guò)一些簡(jiǎn)單的經(jīng)驗(yàn)法則來(lái)總結(jié)隱藏層的設(shè)計(jì)流程是不可行的牙甫。相反掷酗,神經(jīng)網(wǎng)絡(luò)的研究人員已經(jīng)為隱藏層開(kāi)發(fā)了許多設(shè)計(jì)最優(yōu)法則,這有助于網(wǎng)絡(luò)的行為能符合人們期望的那樣窟哺。例如汇在,這些法則可以用于幫助權(quán)衡隱藏層數(shù)量和訓(xùn)練網(wǎng)絡(luò)所需的時(shí)間開(kāi)銷(xiāo)。
目前為止脏答,我們討論的神經(jīng)網(wǎng)絡(luò)糕殉,都是以上一層的輸出作為下一層的輸入。這種網(wǎng)絡(luò)被稱(chēng)為前饋神經(jīng)網(wǎng)絡(luò)殖告。這意味著網(wǎng)絡(luò)中是沒(méi)有回路的 —— 信息總是向前傳播阿蝶,從不反向回饋。如果確 實(shí)有回路黄绩,我們最終會(huì)有這樣的情況:σ 函數(shù)的輸入依賴(lài)于輸出羡洁。
一個(gè)簡(jiǎn)單的分類(lèi)手寫(xiě)數(shù)字的網(wǎng)絡(luò)
定義神經(jīng)網(wǎng)絡(luò)后,讓我們回到手寫(xiě)識(shí)別上來(lái)爽丹。我們可以把識(shí)別手寫(xiě)數(shù)字的問(wèn)題分成兩個(gè)子問(wèn)題筑煮。
首先,我們希望有個(gè)方式把包含許多數(shù)字的圖像分成一系列單獨(dú)的圖像粤蝎,每個(gè)包含單個(gè)數(shù)字真仲。
其次,我們將專(zhuān)注于編程解決第二個(gè)問(wèn)題初澎,識(shí)別單獨(dú)的數(shù)字秸应。
我們將使用一個(gè)三層神經(jīng)網(wǎng)絡(luò)來(lái)識(shí)別單個(gè)數(shù)字:
網(wǎng)絡(luò)的輸出層包含有 10 個(gè)神經(jīng)元。如果第一個(gè)神經(jīng)元激活碑宴,即輸出 ≈ 1软啼,那么表明網(wǎng)絡(luò)認(rèn)為數(shù)字是一個(gè)0。如果第二個(gè)神經(jīng)元激活延柠,就表明網(wǎng)絡(luò)認(rèn)為數(shù)字是一個(gè)1祸挪。依此類(lèi)推。更確切地說(shuō)贞间,我們把輸出神經(jīng)元的輸出賦予編號(hào) 0 到 9贿条,并計(jì)算出那個(gè)神經(jīng)元有最高的激活值盈罐。比如,如果編號(hào)為 6 的神經(jīng)元激活闪唆,那么我們的網(wǎng)絡(luò)會(huì)猜到輸入的數(shù)字是6盅粪。其它神經(jīng)元相同。
你可能會(huì)好奇為什么我們用 10 個(gè)輸出神經(jīng)元悄蕾。畢竟我們的任務(wù)是能讓神經(jīng)網(wǎng)絡(luò)告訴我們哪個(gè)數(shù)字(0, 1, 2, . . . , 9 )能和輸入圖片匹配票顾。一個(gè)看起來(lái)更自然的方式就是使用4個(gè)輸出神經(jīng)元,把每一個(gè)當(dāng)做一個(gè)二進(jìn)制值帆调,結(jié)果取決于它的輸出更靠近 0 還是 1 奠骄。四個(gè)神經(jīng)元足夠編碼這個(gè)問(wèn)題了,因?yàn)?2 ^ 4 = 16 大于 10 種可能的輸入番刊。為什么我們反而要用 10 個(gè)神經(jīng)元呢? 這樣做難道效率不低嗎? 最終的判斷是基于經(jīng)驗(yàn)主義的: 我們可以實(shí)驗(yàn)兩種不同的網(wǎng)絡(luò)設(shè)計(jì)含鳞,結(jié)果證明對(duì)于這個(gè)特定的問(wèn)題而言,10個(gè)輸出神經(jīng)元的神經(jīng)網(wǎng)絡(luò)比 4 個(gè)的識(shí)別效果更好芹务。但是令我們好奇的是為什么使用 10 個(gè)輸出神經(jīng)元的神經(jīng)網(wǎng)絡(luò)更有效呢蝉绷。有沒(méi)有什么啟發(fā)性的方法能提前告訴我們用10個(gè)輸出編碼比使用4個(gè)輸出編碼更有好呢?
為了理解為什么我們這么做,我們需要從根本原理上理解神經(jīng)網(wǎng)絡(luò)究竟在做些什么枣抱。首先考 慮有 10 個(gè)神經(jīng)元的情況熔吗。我們首先考慮第一個(gè)輸出神經(jīng)元,它告訴我們一個(gè)數(shù)字是不是 0佳晶。它能那么做是因?yàn)榭梢詸?quán)衡從隱藏層來(lái)的信息桅狠。隱藏層的神經(jīng)元在做什么呢?假設(shè)隱藏層的第一個(gè)神經(jīng)元只是用于檢測(cè)如下的圖像是否存在:
為了達(dá)到這個(gè)目的,它通過(guò)對(duì)此圖像對(duì)應(yīng)部分的像素賦予較大權(quán)重轿秧,對(duì)其它部分賦予較小 的權(quán)重中跌。同理,我們可以假設(shè)隱藏層的第二菇篡,第三漩符,第四個(gè)神經(jīng)元是為檢測(cè)下列圖片是否存在:
就像你能猜到的,這四幅圖像組合在一起構(gòu)成了前面顯示的一行數(shù)字圖像中的 0:
如果所有隱藏層的這四個(gè)神經(jīng)元被激活那么我們就可以推斷出這個(gè)數(shù)字是 0逸贾。當(dāng)然陨仅,這不是 我們推斷出 0 的唯一方式 —— 我們能通過(guò)很多其他合理的方式得到 0 (舉個(gè)例子來(lái)說(shuō)津滞,通過(guò)上述圖像的轉(zhuǎn)換铝侵,或者稍微變形)。但至少在這個(gè)例子中我們可以推斷出輸入的數(shù)字是 0触徐。
假設(shè)神經(jīng)網(wǎng)絡(luò)以上述方式運(yùn)行咪鲜,我們可以給出一個(gè)貌似合理的理由去解釋為什么用 10 個(gè)輸 出而不是 4 個(gè)。如果我們有 4 個(gè)輸出撞鹉,那么第一個(gè)輸出神經(jīng)元將會(huì)盡力去判斷數(shù)字的最高有效位是什么疟丙。把數(shù)字的最高有效位和數(shù)字的形狀聯(lián)系起來(lái)并不是一個(gè)簡(jiǎn)單的問(wèn)題颖侄。很難想象出有 什么恰當(dāng)?shù)臍v史原因,一個(gè)數(shù)字的形狀要素會(huì)和一個(gè)數(shù)字的最高有效位有什么緊密聯(lián)系享郊。
上面我們說(shuō)的只是一個(gè)啟發(fā)性的方法览祖。沒(méi)有什么理由表明這個(gè)三層的神經(jīng)網(wǎng)絡(luò)必須按照我所 描述的方式運(yùn)行,即隱藏層是用來(lái)探測(cè)數(shù)字的組成形狀炊琉≌沟伲可能一個(gè)聰明的學(xué)習(xí)算法將會(huì)找到一 些合適的權(quán)重能讓我們僅僅用 4 個(gè)輸出神經(jīng)元就行。但是這個(gè)啟發(fā)性的方法通常很有效苔咪,它會(huì)節(jié)省你大量時(shí)間去設(shè)計(jì)一個(gè)好的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)锰悼。
使用梯度下降算法進(jìn)行學(xué)習(xí)
我們將使用 MNIST 數(shù)據(jù)集,其包含有數(shù)以萬(wàn)計(jì)的連 帶著正確分類(lèi)器的手寫(xiě)數(shù)字的掃描圖像团赏。MNIST 的名字來(lái)源于 NIST ——美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù) 研究所 —— 收集的兩個(gè)數(shù)據(jù)集改進(jìn)后的子集箕般。
我們希望有一個(gè)算法,能讓我們找到權(quán)重和偏置舔清,以至于網(wǎng)絡(luò)的輸出 y(x) 能夠擬合所有的訓(xùn)練輸入 x丝里。為了量化我們?nèi)绾螌?shí)現(xiàn)這個(gè)目標(biāo),我們定義一個(gè)代價(jià)函數(shù):
這里 w 表示所有的網(wǎng)絡(luò)中權(quán)重的集合体谒,b 是所有的偏置丙者,n 是訓(xùn)練輸入數(shù)據(jù)的個(gè)數(shù),a 是表示當(dāng)輸入為 x 時(shí)輸出的向量营密,求和則是在總的訓(xùn)練輸入 x 上進(jìn)行的械媒。當(dāng)然,輸出 a 取決于 x, w 和 b评汰,但是為了保持符號(hào)的簡(jiǎn)潔性纷捞,我沒(méi)有明確地指出這種依賴(lài)關(guān)系。符號(hào) ∥v∥ 是指向量 v 的模被去。我們把 C 稱(chēng)為二次代價(jià)函數(shù);有時(shí)也被稱(chēng)為均方誤差或者 MSE主儡。
觀察二次代價(jià)函數(shù)的形式我們可以看到 C(w, b)是非負(fù)的,因?yàn)榍蠛凸街械拿恳豁?xiàng)都是非負(fù)的惨缆。此外糜值,代價(jià)函數(shù) C(w,b) 的值相當(dāng)小,即 C(w,b) ≈ 0坯墨,精確地說(shuō)寂汇,是當(dāng)對(duì)于所有的訓(xùn)練輸入 x,y(x) 接近于輸出 a 時(shí)捣染。因此如果我們的學(xué)習(xí)算法能找到合適的權(quán)重和偏置骄瓣,使得 C(w, b) ≈ 0,它就能很好地工作耍攘。相反榕栏,當(dāng) C(w, b) 很大時(shí)就不怎么好了畔勤,那意味著對(duì)于大量地輸入,y(x) 與輸出 a 相差很大扒磁。 因此我們的訓(xùn)練算法的目的庆揪,是最小化權(quán)重和偏置的代價(jià)函數(shù) C(w, b)。換句話說(shuō)妨托,我們想要找到一系列能讓代價(jià)盡可能小的權(quán)重和偏置嚷硫。我們將采用稱(chēng)為梯度下降的算法來(lái)達(dá)到這個(gè)目的。
假設(shè) C 是一個(gè)有 m 個(gè)變量 v1, ..., vm 的多元函數(shù)始鱼。那么對(duì) C 中 自變量的變化 ?v = (?v1, ..., ?vm)T 仔掸,?C 將會(huì)變?yōu)?
這里的梯度 ?C 是向量
我們可以選取
這里的 η 是個(gè)很小的正數(shù)(稱(chēng)為學(xué)習(xí)速率) 。
這給了我們一種方式從梯度中去取得最小值医清, 即使 C 是任意的多元函數(shù)起暮,我們也能重復(fù)運(yùn)用更新規(guī)則
事實(shí)上,甚至有一種觀點(diǎn)認(rèn)為梯度下降法是求最小值的最優(yōu)策略会烙。假設(shè)我們正在努力去改變 ?v 來(lái)讓 C 盡可能地減小负懦。這相當(dāng)于最小化 ?C ≈ ?C · ?v。我們首先限制步?為小的固定值柏腻, 即 ∥?v∥ = ε纸厉,ε > 0。當(dāng)步?固定時(shí)五嫂,我們要找到使得 C 減小最大的下降方向颗品。可以證明沃缘,使得 ?C ·?v 取得最小值的 ?v 為 ?v = ?η?C躯枢,這里 η = ε/∥?C∥ 是由步?限制 ∥?v∥ = ε 所決定的。因此槐臀,梯度下降法可以被視為一種在 C 下降最快的方向上做微小變化的方法锄蹂。
反向傳播
反向傳播算法最初在 1970 年代被提及,但是人們直到 David Rumelhart水慨、Geo rey Hinton 和 Ronald Williams 的著名的 1986 年的論文中才認(rèn)識(shí)到這個(gè)算法的重要性得糜。這篇論文描述了對(duì)一些神經(jīng)網(wǎng)絡(luò)反向傳播要比傳統(tǒng)的方法更快,這使得使用神經(jīng)網(wǎng)絡(luò)來(lái)解決之前無(wú)法完成的問(wèn)題變得可行∥鳎現(xiàn)在朝抖,反向傳播算法已經(jīng)是神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的重要組成部分了。
反向傳播的核心是一個(gè)對(duì)代價(jià)函數(shù) C 關(guān)于任何權(quán)重 w (或者偏置 b )的 偏導(dǎo)數(shù) ?C/?w 的表達(dá)式欢顷。這個(gè)表達(dá)式告訴我們?cè)诟淖儥?quán)重和偏置時(shí)槽棍,代價(jià)函數(shù)變化的快慢。盡管表達(dá)式會(huì)有點(diǎn)復(fù)雜抬驴,不過(guò)里面也包含一種美感炼七,就是每個(gè)元素其實(shí)是擁有一種自然的直覺(jué)上的解釋。所以反向傳播不僅僅是一種學(xué)習(xí)的快速算法布持。實(shí)際上它讓我們細(xì)致領(lǐng)悟如何通過(guò)改變權(quán) 重和偏置來(lái)改變整個(gè)網(wǎng)絡(luò)的行為豌拙。因此,這也是學(xué)習(xí)反向傳播細(xì)節(jié)的重要價(jià)值所在题暖。
反向傳播的四個(gè)基本方程
輸出層誤差的方程
使用下一層的誤差來(lái)表示當(dāng)前層的誤差
代價(jià)函數(shù)關(guān)于網(wǎng)絡(luò)中任意偏置的改變率
代價(jià)函數(shù)關(guān)于任何一個(gè)權(quán)重的改變率
兩個(gè)神經(jīng)元之間的連接其實(shí)是關(guān)聯(lián)與一個(gè)變化率因子按傅,這僅僅是一個(gè)神經(jīng)元的激活值相對(duì)于其他神經(jīng)元的激活值的偏導(dǎo)數(shù)。從第一個(gè)權(quán)重到第一個(gè)神經(jīng)元的變化率因子是 ?a /?w 胧卤。路徑的變化率因子其實(shí)就是這條路徑上的眾多因子的乘積唯绍。而整個(gè)的變化率就是對(duì)于所有可能的從初始權(quán)重到最終輸出的代價(jià)函數(shù)的路徑的變化率因子的和。
反向傳播就是一種巧妙地追蹤權(quán)重(和偏置)微小變化的傳播枝誊,抵達(dá)輸出層影響代價(jià)函數(shù)的技術(shù)况芒。
改進(jìn)神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)方法
涉及的技術(shù)包括:更好的代價(jià)函數(shù)的選擇 —— 交叉熵代價(jià)函數(shù);四種稱(chēng)為“正則化”的 方法(L1 和 L2 正則化,棄權(quán)和訓(xùn)練數(shù)據(jù)的人為擴(kuò)展)叶撒,這會(huì)讓我們的網(wǎng)絡(luò)在訓(xùn)練集之外的數(shù)據(jù) 上更好地泛化;更好的權(quán)重初始化方法;還有幫助選擇好的超參數(shù)的啟發(fā)式想法绝骚。
交叉熵代價(jià)函數(shù)
假設(shè),我們現(xiàn)在要訓(xùn)練一 個(gè)包含若干輸入變量的的神經(jīng)元祠够,x1, x2, . . . 對(duì)應(yīng)的權(quán)重為 w1, w2, . . . 和偏置 b:
神經(jīng)元的輸出就是 a = σ(z)压汪,其中 z = ∑ wj xj + b 是輸入的帶權(quán)和。我們?nèi)缦露x這個(gè)神經(jīng)元的交叉熵代價(jià)函數(shù):
當(dāng)我們使用二次代價(jià)函數(shù)時(shí)古瓤,學(xué)習(xí)在神經(jīng)元犯了明顯的錯(cuò)誤的時(shí)候卻比學(xué)習(xí)快接近 真實(shí)值的時(shí)候緩慢;而使用交叉熵學(xué)習(xí)正是在神經(jīng)元犯了明顯錯(cuò)誤的時(shí)候速度更快止剖。特別地,當(dāng) 我們使用二次代價(jià)函數(shù)時(shí)落君,當(dāng)神經(jīng)元在接近正確的輸出前犯了明顯錯(cuò)誤的時(shí)候滴须,學(xué)習(xí)變得更加緩慢;而使用交叉熵,在神經(jīng)元犯明顯錯(cuò)誤時(shí)學(xué)習(xí)得更快叽奥。這些現(xiàn)象并不依賴(lài)于如何設(shè)置學(xué)習(xí)速率扔水。
過(guò)度擬合與正則化
過(guò)度擬合是神經(jīng)網(wǎng)絡(luò)的一個(gè)主要問(wèn)題。這在現(xiàn)代網(wǎng)絡(luò)中特別正常朝氓,因?yàn)榫W(wǎng)絡(luò)權(quán)重和偏置數(shù)量巨大魔市。為了高效地訓(xùn)練,我們需要一種檢測(cè)過(guò)度擬合是不是發(fā)生的技術(shù)赵哲,這樣我們不會(huì)過(guò)度訓(xùn)練待德。并且我們也想要找到一些技術(shù)來(lái)降低過(guò)度擬合的影響。
一般來(lái)說(shuō)枫夺,最好的降低過(guò)度擬合的方式之一就是增加訓(xùn)練樣本的量将宪。有了足夠的訓(xùn)練數(shù)據(jù),就算是一個(gè)規(guī)模非常大的網(wǎng)絡(luò)也不大容易過(guò)度擬合。不幸的是较坛,訓(xùn)練數(shù)據(jù)其實(shí)是很難或者很昂貴的資源印蔗,所以這不是一種太切實(shí)際的選擇。
幸運(yùn)的是丑勤,還有其他的技術(shù)能夠緩解過(guò)度擬合华嘹,即使我們只有一個(gè)固定的網(wǎng)絡(luò)和固定的訓(xùn)練集合。這種技術(shù)就是正則化法竞。本節(jié)耙厚,我會(huì)給出一種最為常用的正則化手段 —— 有時(shí)候被稱(chēng)為權(quán)重衰減或者 L2正則化。L2 正則化的想法是增加一個(gè)額外的項(xiàng)到代價(jià)函數(shù)上岔霸,這個(gè)項(xiàng)叫做正則化項(xiàng)薛躬。下面是正則化的交叉熵:
其中第一個(gè)項(xiàng)就是常規(guī)的交叉熵的表達(dá)式。第二個(gè)現(xiàn)在加入的就是所有權(quán)重的平方的和呆细。然 后使用一個(gè)因子 λ/2n 進(jìn)行量化調(diào)整型宝,其中 λ > 0 可以稱(chēng)為規(guī)范化參數(shù),而 n 就是訓(xùn)練集合的 大小侦鹏。我們會(huì)在后面討論 λ 的選擇策略诡曙。需要注意的是,正則化項(xiàng)里面并不包含偏置略水。
直覺(jué)地看价卤,正則化的效果是讓網(wǎng)絡(luò)傾向于學(xué)習(xí)小一點(diǎn)的權(quán)重,其他的東西都一樣的渊涝。大的權(quán)重只有能夠給出代價(jià)函數(shù)第一項(xiàng)足夠的提升時(shí)才被允許慎璧。換言之,正則化可以當(dāng)做一種尋找小 的權(quán)重和最小化原始的代價(jià)函數(shù)之間的折中跨释。這兩部分之間相對(duì)的重要性就由 λ 的值來(lái)控制了: λ 越小胸私,就偏向于最小化原始代價(jià)函數(shù),反之鳖谈,傾向于小的權(quán)重岁疼。
正則化在實(shí)踐中能夠減少過(guò)度擬合了。這是令人振奮的缆娃,不過(guò)捷绒,這背后的原 因還不得而知!通常的說(shuō)法是:小的權(quán)重在某種程度上,意味著更低的復(fù)雜性贯要,也就對(duì)數(shù)據(jù)給出了一種更簡(jiǎn)單卻更強(qiáng)大解釋?zhuān)虼藨?yīng)該優(yōu)先選擇暖侨。
所以,我們應(yīng)當(dāng)時(shí)時(shí)記住這一點(diǎn)崇渗,正則化的神經(jīng)網(wǎng)絡(luò)常常能夠比非正則化的泛化能力更強(qiáng)字逗, 這只是一種實(shí)驗(yàn)事實(shí)(empirical fact)京郑。
激活函數(shù)的作用
摘自:https://www.zhihu.com/question/22334626
激活函數(shù)(Activation Function)是用來(lái)加入非線性因素的,因?yàn)榫€性模型的表達(dá)能力不夠葫掉。
以下些举,同種顏色為同類(lèi)數(shù)據(jù)。
某些數(shù)據(jù)是線性可分的挖息,意思是金拒,可以用一條直線將數(shù)據(jù)分開(kāi)兽肤。比如下圖:
這時(shí)候你需要通過(guò)一定的機(jī)器學(xué)習(xí)的方法套腹,比如感知機(jī)算法(perceptron learning algorithm) 找到一個(gè)合適的線性方程。
但是有些數(shù)據(jù)不是線性可分的资铡。比如如下數(shù)據(jù):
第二組數(shù)據(jù)你就沒(méi)有辦法畫(huà)出一條直線來(lái)將數(shù)據(jù)區(qū)分開(kāi)电禀。
這時(shí)候有兩個(gè)辦法,第一個(gè)辦法笤休,是做線性變換(linear transformation)尖飞,比如講x,y變成x2,y2,這樣可以畫(huà)出圓形店雅。如圖所示:
如果將坐標(biāo)軸從x,y變?yōu)橐詘2,y2為標(biāo)準(zhǔn)政基,你會(huì)發(fā)現(xiàn)數(shù)據(jù)經(jīng)過(guò)變換后是線性可分的了。大致示意圖如下:
另外一種方法是引入非線性函數(shù)闹啦。
我們來(lái)看異或問(wèn)題(xor problem)沮明。以下是xor真值表:
個(gè)真值表不是線性可分的,所以不能使用線性模型窍奋,如圖所示:
我們可以設(shè)計(jì)一種神經(jīng)網(wǎng)絡(luò)荐健,通過(guò)激活函數(shù)來(lái)使得這組數(shù)據(jù)線性可分。
激活函數(shù)我們選擇閥值函數(shù)(threshold function)琳袄,也就是大于某個(gè)值輸出1(被激活了)江场,小于等于則輸出0(沒(méi)有激活)。這個(gè)函數(shù)是非線性函數(shù)窖逗。
神經(jīng)網(wǎng)絡(luò)示意圖如下:
其中直線上的數(shù)字為權(quán)重址否。圓圈中的數(shù)字為閥值。第二層碎紊,如果輸入大于1.5則輸出1佑附,否則0;第三層矮慕,如果輸入大于0.5帮匾,則輸出1,否則0痴鳄。
我們來(lái)一步步算瘟斜。第一層到第二層(閥值1.5):
第二層到第三層(閥值0.5):
可以看到第三層輸出就是我們所要的xor的答案。
經(jīng)過(guò)變換后的數(shù)據(jù)是線性可分的(n維,比如本例中可以用平面)螺句,如圖所示:
這是一個(gè)單層的感知機(jī), 也是我們最常用的神經(jīng)網(wǎng)絡(luò)組成單元啦. 用它可以劃出一條線, 把平面分割開(kāi):
那么很容易地我們就會(huì)想用多個(gè)感知機(jī)來(lái)進(jìn)行組合, 獲得更強(qiáng)的分類(lèi)能力, 這是沒(méi)問(wèn)題的啦~~~~ 如圖所示:
那么我們動(dòng)筆算一算, 就可以發(fā)現(xiàn), 這樣一個(gè)神經(jīng)網(wǎng)絡(luò)組合起來(lái),輸出的時(shí)候無(wú)論如何都還是一個(gè)線性方程哎~~~~納尼, 說(shuō)好的非線性分類(lèi)呢?
我們?cè)诿恳粚盈B加完了以后, 加一個(gè)激活函數(shù), 如圖中的.
這樣輸出的就是一個(gè)不折不扣的非線性函數(shù)!
有了這樣的非線性激活函數(shù)以后, 神經(jīng)網(wǎng)絡(luò)的表達(dá)能力更加強(qiáng)大虽惭。
加上非線性激活函數(shù)之后, 我們就有可能學(xué)習(xí)到這樣的平滑分類(lèi)平面。
所以到這里為止蛇尚,我們就解釋了這個(gè)觀點(diǎn)芽唇,加入激活函數(shù)是用來(lái)加入非線性因素的,解決線性模型所不能解決的問(wèn)題取劫。