1. 感知器
一個(gè)感知器接受幾個(gè)二進(jìn)制的輸入憨奸,并產(chǎn)生一個(gè)二進(jìn)制的輸出灾螃。其中,每個(gè)輸入都配有相應(yīng)的權(quán)重來表示輸入對(duì)于輸出的重要性宽涌。和權(quán)重一樣平夜,閾值是一個(gè)實(shí)數(shù)。
2. S型神經(jīng)元
由于在網(wǎng)絡(luò)中卸亮,單個(gè)感知機(jī)上一個(gè)權(quán)重或者偏置的微小改動(dòng)有時(shí)候會(huì)引起那個(gè)感知器的輸出完全翻轉(zhuǎn)忽妒。那樣的翻轉(zhuǎn)可能接下來引起其余網(wǎng)絡(luò)的行為以極其復(fù)雜的方式完全改變。這使得逐步修改權(quán)重和偏置來讓網(wǎng)絡(luò)接近期望行為變得困難兼贸。所以段直,引入一種稱為S型的神經(jīng)元來克服這個(gè)問題。S型神經(jīng)元和感知器類似溶诞,但是被修改為權(quán)重和偏置的微小改動(dòng)只會(huì)引起輸出的微小變化鸯檬。這對(duì)于讓神經(jīng)元網(wǎng)絡(luò)學(xué)習(xí)起來是很關(guān)鍵的。
正如一個(gè)感知器螺垢,S型神經(jīng)元有多個(gè)輸入喧务,但是這些輸入可以取0和1中的任何值赖歌,而不僅僅是0和1。同樣蹂楣,S型神經(jīng)元對(duì)每個(gè)輸入有權(quán)重和一個(gè)總的偏置俏站。但是,輸出不是0或者1痊土。相反肄扎,它現(xiàn)在是sigma(w*x+b),這里的sigma被稱為S型函數(shù)赁酝。
S型神經(jīng)元和感知器模型具有很大的相似性犯祠,假設(shè)z=w*x+b是一個(gè)很大的正數(shù),那么e^-z約等于0而sigma(z)約等于1酌呆。即當(dāng)z=w*x+b很大并且為正衡载,S型神經(jīng)元的輸出近似為1,正好和感知器一樣隙袁。反之亦同痰娱。
3. 神經(jīng)網(wǎng)絡(luò)的架構(gòu)
網(wǎng)絡(luò)中最左邊的部分稱為輸入層,其中的神經(jīng)元稱為輸入神經(jīng)元菩收。最右邊的梨睁,即輸出層包含輸出神經(jīng)元。中間的那些層娜饵,被稱為隱藏層坡贺。
以上一層的輸出作為一下層的輸入的網(wǎng)絡(luò),我們稱為前饋神經(jīng)網(wǎng)絡(luò)箱舞。這意味著網(wǎng)絡(luò)中是沒有回路的遍坟,信息總是向前傳播,從不反向反饋晴股。如果確實(shí)有回路愿伴,那么最終的情況是sigma函數(shù)的輸入會(huì)依賴于輸出。這將難于理解队魏,所以我們不允許這樣的環(huán)路公般。
然而,也有些人工神經(jīng)網(wǎng)絡(luò)的模型胡桨,其中反饋環(huán)路是可行的官帘。這些模型被稱為遞歸神經(jīng)網(wǎng)絡(luò)。遞歸神經(jīng)網(wǎng)絡(luò)比前饋網(wǎng)絡(luò)影響力小得多昧谊,部分原因是遞歸網(wǎng)絡(luò)的學(xué)習(xí)算法不夠強(qiáng)大刽虹。
此外,我們要從根本原因上理解神經(jīng)網(wǎng)絡(luò)究竟在做些什么呢诬。以MNIST手寫數(shù)據(jù)庫為例涌哲,為了識(shí)別0-9的數(shù)字胖缤,我們要考慮有10個(gè)輸出神經(jīng)元。我們首先要考慮第一個(gè)輸出神經(jīng)元阀圾,它告訴我們是不是0哪廓。它能那么做是因?yàn)樗梢詸?quán)衡從隱藏層來的信息。
比如初烘,隱藏層的第一個(gè)神經(jīng)元是用于檢測(cè)如下圖形是否存在:
為了達(dá)到這個(gè)目的园骆,它通過對(duì)此圖形部分的像素賦予較大權(quán)重抗斤,對(duì)其他部分賦予較小的權(quán)重茅特。同理娇斑,我們可以假設(shè)隱藏層的第二,第三吗铐,第四個(gè)神經(jīng)元是為檢測(cè)下列圖片是否存在:
就像你能猜到的东亦,這四幅圖像組合在一起構(gòu)成了前面顯示的一行數(shù)字圖像中的0:
如果所有隱藏層的這四個(gè)神經(jīng)元被激活那么我們就可以推斷出這個(gè)數(shù)字是0。
4. 梯度下降
我們希望有個(gè)算法唬渗,能讓我們找到權(quán)重和偏置典阵,以至于網(wǎng)絡(luò)的輸出能夠擬合所有的訓(xùn)練輸入。為了量化我們?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í)候輸出的向量。我們把C稱為二次代價(jià)函數(shù)充坑,有時(shí)候也被稱為均方誤差或者MSE减江。代價(jià)函數(shù)的值相當(dāng)小的時(shí)候,是當(dāng)對(duì)于所有的訓(xùn)練輸入x捻爷,y(x)接近于輸出a時(shí)辈灼。因此如果我們的學(xué)習(xí)算法能找到合適的權(quán)重和偏置,使得C(w,b)約等于0也榄,它就能很好地工作巡莹。反之亦然。
因此甜紫,我們訓(xùn)練算法的目的是最小化權(quán)重和偏置的代價(jià)函數(shù)C(w,b)降宅。換句話說,我們想要找到一系列能讓代價(jià)盡可能小的權(quán)重和偏置囚霸。我們將采用稱為梯度下降的算法達(dá)到這個(gè)目的腰根。
為什么要用二次代價(jià)函數(shù)呢?畢竟我們最初感興趣的內(nèi)容不就是能正確分類的圖像的數(shù)量嘛拓型?為什么不試著最大化這個(gè)數(shù)量额嘿,而是去最小化一個(gè)類似于二次代價(jià)的間接評(píng)量呢瘸恼?這么做是因?yàn)樵谏窠?jīng)網(wǎng)絡(luò)中,被正確分類的圖像數(shù)量所關(guān)于權(quán)重和偏置的函數(shù)并不是一個(gè)平滑的函數(shù)册养。大多情況下东帅,對(duì)權(quán)重和偏置做出的微小變動(dòng)完全不會(huì)影響被正確分類的圖像的數(shù)量。這會(huì)導(dǎo)致我們很難去解決如何改變權(quán)重和偏置來取得改進(jìn)的性能球拦。而用一個(gè)類似二次代價(jià)的平滑代價(jià)函數(shù)則能更好的解決如何用權(quán)重和偏置中的微小變化來取得更好的效果靠闭。
強(qiáng)調(diào)一下,我們訓(xùn)練神經(jīng)網(wǎng)絡(luò)的目的是能找到一個(gè)最小化二次代價(jià)函數(shù)的權(quán)重和偏置刘莹。
所以阎毅,問題轉(zhuǎn)化為求二次代價(jià)函數(shù)的最小值。
那么一種解決問題的方法是微積分点弯。我們可以計(jì)算導(dǎo)數(shù)去尋找C的極值點(diǎn)扇调。運(yùn)氣好的話,C是一個(gè)或者幾個(gè)變量的函數(shù)抢肛。但是狼钮,如果變量過多的話,那就是噩夢(mèng)捡絮。而且我們神經(jīng)網(wǎng)絡(luò)中經(jīng)常需要用到大量的變量--那么最大的神經(jīng)網(wǎng)絡(luò)有依賴于數(shù)億權(quán)重和偏置的代價(jià)函數(shù)熬芜,極其復(fù)雜。所以用微積分來計(jì)算最小值是不可能的福稳。
所以另一個(gè)方法就是梯度下降涎拉。首先,我們將函數(shù)想象為一個(gè)山谷的圆。我們想象有一個(gè)小球從山谷的斜坡滾下來鼓拧。我們?nèi)粘5慕?jīng)驗(yàn)告訴我們,這個(gè)球最終會(huì)滾落到谷底越妈。也許我們可以用這個(gè)想法來找到函數(shù)的最小值季俩。我們可以為假想的球體隨機(jī)選擇一個(gè)起始位置,然后模擬球體滾落到谷底的運(yùn)動(dòng)梅掠。我們通過計(jì)算C的導(dǎo)數(shù)來模擬這個(gè)過程酌住。
為了更精確地描述這個(gè)問題,讓我們思考一下阎抒,我們?cè)趘1和v2方向上分別將球體移動(dòng)一個(gè)很小的量酪我,球體會(huì)發(fā)生什么變化:
我們要尋找一種選擇delta1和delta2使得deltaC為負(fù)值。我們選擇它們是為了讓球體滾落且叁。我們用deltaC來表示梯度向量:
所以上面可以重寫為:
這個(gè)表達(dá)式解釋了為什么deltaC被稱為梯度向量祭示,因?yàn)閐eltaC把v的變化關(guān)聯(lián)為C的變化。這個(gè)方程的興奮之處是它讓我們看到了如何選取deltav才能讓C的變化值為負(fù)。
總結(jié)一下质涛,梯度下降算法工作的方式就是重復(fù)計(jì)算梯度deltaC稠歉,然后沿著相反的方向移動(dòng),沿著山谷滾落汇陆。
為了使梯度下降能夠正確的運(yùn)行怒炸,我們需要選擇足夠小的學(xué)習(xí)速率才能使方程更好的近似。如果不這樣毡代,我們會(huì)以C的變化址為正而結(jié)束阅羹,這顯然不好。但是如果學(xué)習(xí)速率太小教寂,那么使得v變化太小捏鱼,梯度下降就會(huì)進(jìn)行的非常緩慢。在真正的實(shí)現(xiàn)中酪耕,學(xué)習(xí)速率是不斷的變化的导梆。
所以,將上面推到的例子運(yùn)用到神經(jīng)網(wǎng)絡(luò)中來迂烁。那么就是利用梯度下降算法去尋找使得二次代價(jià)函數(shù)最小的權(quán)重和偏置看尼。
應(yīng)用梯度下降規(guī)則有很多挑戰(zhàn)。代價(jià)函數(shù)有著這樣的形式
即盟步,它是遍歷每個(gè)訓(xùn)練樣本代價(jià)Cx的平均值藏斩。在實(shí)踐中,為了計(jì)算梯度deltaC却盘,我們需要為每個(gè)訓(xùn)練輸入x單獨(dú)地計(jì)算梯度值狰域,然后再求平均值。不幸的是黄橘,當(dāng)訓(xùn)練輸入的數(shù)量過大的時(shí)候北专,會(huì)花費(fèi)很長(zhǎng)的時(shí)間,這樣會(huì)使得學(xué)習(xí)變得很緩慢旬陡。
4.1 離線學(xué)習(xí)(Offline Learning)
上面提到的梯度下降,就是Batch learning或者叫offline learning语婴,強(qiáng)調(diào)的是每次訓(xùn)練都需要使用全量的樣本描孟,因而可能會(huì)面臨數(shù)據(jù)量過大的問題。offline learning包括的批量梯度下降法(BGD)和隨機(jī)梯度下降法(SGD)砰左。首先明確BGD和SGD都屬于batch learing匿醒,都需要全量訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練,需要遍歷所有樣本缠导。
(1) 批量梯度下降法
BGD在每次更新模型的時(shí)候廉羔,都要使用全量樣本來計(jì)算更新的梯度值。如果有m個(gè)樣本僻造,迭代n輪憋他,那么需要是m*n的計(jì)算復(fù)雜度孩饼。
(2) 隨機(jī)梯度下降法
SGD在每次更新模型的時(shí)候,只要當(dāng)前遍歷到的樣本來計(jì)算更新的梯度值就行了竹挡。如果迭代n輪镀娶,則只需要n的計(jì)算復(fù)雜度,因?yàn)槊枯喼挥?jì)算一個(gè)樣本揪罕。其思想就是通過隨機(jī)選取小量訓(xùn)練輸入樣本計(jì)算deltaCx,進(jìn)而估計(jì)deltaC梯码。通過計(jì)算少量樣本的平均值,我們可以快速的得到一個(gè)對(duì)于實(shí)際梯度值很好的估算好啰,這有助于加速梯度下降轩娶。
隨機(jī)梯度下降通過隨機(jī)的選取并訓(xùn)練輸入的小批量數(shù)據(jù)來工作:
其中兩個(gè)求和符合是在當(dāng)前小批量數(shù)據(jù)中的所有訓(xùn)練樣本Xj上進(jìn)行的。然后我們?cè)偬暨x另一隨機(jī)選定的小批量數(shù)據(jù)去訓(xùn)練框往。直到我們用完了所有的訓(xùn)練輸入鳄抒,這被稱為完成了一個(gè)訓(xùn)練迭代期(epoch)。然后我們就會(huì)開始一個(gè)新的訓(xùn)練迭代期搅窿。
BGD和SGD的區(qū)別嘁酿,容易看出,BGD的優(yōu)勢(shì)在于計(jì)算的是全局最優(yōu)解男应,效果較SGD會(huì)好一些闹司,劣勢(shì)在于計(jì)算開銷大;SGD則相反沐飘,優(yōu)勢(shì)在于計(jì)算開銷減小很多游桩,劣勢(shì)在于計(jì)算的是局部最優(yōu)解,可能最終達(dá)不到全局最優(yōu)解耐朴。在數(shù)據(jù)量大的時(shí)候借卧,SGD是較好的折衷選擇。
4.2 在線學(xué)習(xí)(Online Learning)
Offline learning一般進(jìn)行多輪迭代來向最優(yōu)解靠近筛峭。Online learning沒有多輪的概念铐刘,如果數(shù)據(jù)量不夠或訓(xùn)練數(shù)據(jù)不夠充分,通過copy多份同樣的訓(xùn)練數(shù)據(jù)來模擬batch learning的多輪訓(xùn)練也是有效的方法影晓。
梯度下降算法一個(gè)極端的版本是把小批量數(shù)據(jù)的大小設(shè)為1镰吵。即假設(shè)一個(gè)訓(xùn)練輸入x,我們按照規(guī)則更新我們的權(quán)重和偏置挂签。然后我們選取另一個(gè)訓(xùn)練輸入疤祭,再一次更新權(quán)重和偏置。如此重復(fù)饵婆。這個(gè)過程被稱為在線學(xué)習(xí)或者遞增學(xué)習(xí)勺馆。
online learning強(qiáng)調(diào)的是學(xué)習(xí)是實(shí)時(shí)的,流式的,每次訓(xùn)練不用使用全部樣本草穆,而是以之前訓(xùn)練好的模型為基礎(chǔ)灌灾,每來一個(gè)樣本就更新一次模型,這種方法叫做OGD(online gradient descent)续挟。這樣做的目的是快速地進(jìn)行模型的更新紧卒,提升模型時(shí)效性。
5. 反向傳播(backpropagation)
前面我們知道了可以用梯度下降算法來學(xué)習(xí)他們自身的權(quán)重和偏置诗祸。但是跑芳,如何計(jì)算代價(jià)函數(shù)的梯度?這個(gè)是很大的缺失直颅。所以博个,我們將用反向傳播來計(jì)算梯度。
反向傳播的核心是一個(gè)對(duì)代價(jià)函數(shù)C關(guān)于任何權(quán)重w或者偏置b的偏導(dǎo)數(shù)的表達(dá)式功偿。這個(gè)表達(dá)式告訴我們?cè)诟淖儥?quán)重和偏置的時(shí)候盆佣,代價(jià)函數(shù)變化的快慢。所以反向傳播不僅僅是一種學(xué)習(xí)的快速算法械荷,實(shí)際上它讓我們細(xì)致領(lǐng)悟如何通過改變權(quán)重和偏置來改變整個(gè)網(wǎng)絡(luò)的行為共耍。
(1) 反向傳播的四大公式及其推導(dǎo)
(2) 反向傳播與梯度下降的關(guān)系
梯度下降方法是給出了一種學(xué)習(xí)權(quán)重和偏置的方法,但是這個(gè)方法不包含計(jì)算代價(jià)函數(shù)的梯度吨瞎。而反向傳播則是一種能夠快速計(jì)算代價(jià)函數(shù)梯度的方法痹兜。