自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

理解深度學(xué)習(xí)的鑰匙 –啟蒙篇

人工智能 深度學(xué)習(xí)
由于理解深度學(xué)習(xí)的前提是理解神經(jīng)網(wǎng)絡(luò),因此,筆者會(huì)試著寫(xiě)三篇文章,分別是啟蒙篇,參數(shù)篇及總結(jié)篇,深入淺出的給出我的理解,所有的資料都來(lái)自網(wǎng)上電子書(shū)《Neural Networks and Deep Learning》,這本書(shū)寫(xiě)得實(shí)在太好了,我只是剪輯了下,吸出了其中的精髓,希望你堅(jiān)持看完。

神經(jīng)網(wǎng)絡(luò)是有史以來(lái)發(fā)明的最優(yōu)美的編程范式之⼀。在傳統(tǒng)的編程⽅法中,我們告訴計(jì)算機(jī)做什么,把⼤問(wèn)題分成許多小的、精確定義的任務(wù),計(jì)算機(jī)可以很容易地執(zhí)行。相比之下,在神經(jīng)網(wǎng)絡(luò)中,我們不告訴計(jì)算機(jī)如何解決我們的問(wèn)題。相反,它從觀測(cè)數(shù)據(jù)中學(xué)習(xí),找出它自己的解決問(wèn)題的辦法。

從數(shù)據(jù)中自動(dòng)學(xué)習(xí),聽(tīng)上去很有前途。然而,直到 2006 年,除了用于一些特殊的問(wèn)題,我們?nèi)匀徊恢廊绾斡?xùn)練神經(jīng)⽹絡(luò)去超越傳統(tǒng)的⽅法。2006 年,被稱為 “深度神經(jīng)網(wǎng)絡(luò)” 的學(xué)習(xí)技術(shù)的發(fā)現(xiàn)引起了變化。這些技術(shù)現(xiàn)在被稱為 “深度學(xué)習(xí)”。它們已被進(jìn)⼀步發(fā)展,今天深度神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)在計(jì)算機(jī)視覺(jué)、語(yǔ)音識(shí)別、自然語(yǔ)言處理等許多重要問(wèn)題上都取得了顯著的性能。

筆者從一年前接觸深度學(xué)習(xí),驚嘆于AlphaGo所取得的成績(jī),任何雄心于建模領(lǐng)域的數(shù)據(jù)管理者,不管你現(xiàn)在是否還在自己建模,或者正領(lǐng)導(dǎo)著一只團(tuán)隊(duì)向前走,都有必要去理解一下深度學(xué)習(xí)到底是什么,如果你還敢說(shuō)自己是數(shù)據(jù)方面的專業(yè)人士的話,但任何媒體上的關(guān)于深度學(xué)習(xí)的介紹,其深度都是及其有限的,幾乎可以說(shuō),對(duì)一個(gè)數(shù)據(jù)管理者的學(xué)識(shí)提升沒(méi)有什么幫助。

即使你已經(jīng)知道了TensorFlow這類引擎,甚至已經(jīng)安排開(kāi)始安裝這里引擎,依樣畫(huà)葫蘆的去完成一個(gè)深度學(xué)習(xí)的過(guò)程,也僅僅是術(shù)上的一個(gè)追求,如果你想要了解今后⼏年都不會(huì)過(guò)時(shí)的原理,那么只是學(xué)習(xí)些熱⻔的程序庫(kù)是不夠的,你需要領(lǐng)悟讓神經(jīng)⽹絡(luò)⼯作的原理。技術(shù)來(lái)來(lái)去去,但原理是永恒的。

筆者曾經(jīng)寫(xiě)過(guò)一篇《我如何理解深度學(xué)習(xí)?》的微信公眾號(hào)文章,那個(gè)是及其簡(jiǎn)單的一個(gè)淺層次理解,對(duì)于構(gòu)建一個(gè)真正的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)沒(méi)有指導(dǎo)作用,因?yàn)樯窠?jīng)網(wǎng)絡(luò)本質(zhì)上屬于機(jī)器學(xué)習(xí)的一類,其難點(diǎn)在于如何構(gòu)建一個(gè)可用的多層神經(jīng)網(wǎng)絡(luò),而不是說(shuō)深度神經(jīng)網(wǎng)絡(luò)是個(gè)什么東西,那個(gè)其實(shí)沒(méi)有啥秘密可言。

牛逼的深度學(xué)習(xí)專家肯定是網(wǎng)絡(luò)架構(gòu)、參數(shù)調(diào)優(yōu)的高手,而不是簡(jiǎn)單的反復(fù)說(shuō)深度學(xué)習(xí)是啥東西,筆者一直沒(méi)勇氣去深入的理解神經(jīng)網(wǎng)絡(luò)最核心的東西-參數(shù),導(dǎo)致我一直游離在這門(mén)實(shí)踐學(xué)科之外,這次斗膽看了些書(shū),網(wǎng)上找了些文章,多了點(diǎn)理解,對(duì)于神經(jīng)網(wǎng)絡(luò)的參數(shù)有了一些基本的概念,這些都是打造一個(gè)深度學(xué)習(xí)價(jià)值網(wǎng)絡(luò)的基礎(chǔ)。

團(tuán)隊(duì)的同事最近自己在研究深度學(xué)習(xí),說(shuō)出來(lái)的結(jié)果比SVM差很多,我想,肯定是不懂參數(shù)和調(diào)試的方法吧。

筆者數(shù)學(xué)并不好,極大降低了學(xué)習(xí)的效率,我想很多人應(yīng)該跟我一樣,也不可能再有機(jī)會(huì)去重讀一次高等數(shù)學(xué),這是一個(gè)數(shù)學(xué)上的殘疾人理解的深度學(xué)習(xí),我能做的,就是當(dāng)個(gè)知識(shí)的搬運(yùn)工,用最通俗易懂的方式闡述我所理解的東西,讓很多看似深?yuàn)W的東西盡量平民化一點(diǎn),從“道”的角度去理解一個(gè)深度網(wǎng)絡(luò),也許,還能有些生活的感悟呢。

由于理解深度學(xué)習(xí)的前提是理解神經(jīng)網(wǎng)絡(luò),因此,筆者會(huì)試著寫(xiě)三篇文章,分別是啟蒙篇,參數(shù)篇及總結(jié)篇,深入淺出的給出我的理解,所有的資料都來(lái)自網(wǎng)上電子書(shū)《Neural Networks and Deep Learning》,這本書(shū)寫(xiě)得實(shí)在太好了,我只是剪輯了下,吸出了其中的精髓,希望你堅(jiān)持看完。

Part 1

感知器

這一節(jié)你能理解什么是感知器以及為什么要用S型(邏輯)感知器。

什么是神經(jīng)網(wǎng)絡(luò)?一開(kāi)始,我將解釋⼀種被稱為“感知器”的人工神經(jīng)元,感知器是如何⼯作的呢?⼀個(gè)感知器接受⼏個(gè)⼆進(jìn)制輸⼊,x1; x2;x3,并產(chǎn)⽣⼀個(gè)⼆進(jìn)制輸出: 

 

 

 

⽰例中的感知器有三個(gè)輸⼊,x1; x2; x3。通??梢杂懈嗷蚋佥?#12042;。Rosenblatt 提議⼀個(gè)簡(jiǎn)單的規(guī)則來(lái)計(jì)算輸出。他引⼊權(quán)重,w1;w2……,表示相應(yīng)輸⼊對(duì)于輸出重要性的實(shí)數(shù)。神經(jīng)元的輸出,0 或者1,則由分配權(quán)重后的總和Σj wjxj ⼩于或者⼤于⼀些閾值決定。和權(quán)重⼀樣,閾值是⼀個(gè)實(shí)數(shù),⼀個(gè)神經(jīng)元的參數(shù),⽤更精確的代數(shù)形式: 

 

 

 

這是基本的數(shù)學(xué)模型。你可以將感知器看作依據(jù)權(quán)重來(lái)作出決定的設(shè)備。讓我舉個(gè)例⼦。這不是⾮常真實(shí)的例⼦,但是容易理解,⽽且很快我們會(huì)有根多實(shí)際的例⼦。假設(shè)這個(gè)周末就要來(lái)了,你聽(tīng)說(shuō)你所在的城市有個(gè)奶酪節(jié),你喜歡奶酪,正試著決定是否去參加。你也許會(huì)通過(guò)給三個(gè)因素設(shè)置權(quán)重來(lái)作出決定:

1. 天氣好嗎?

2. 你的男朋友或者⼥朋友會(huì)不會(huì)陪你去?

3. 這個(gè)節(jié)⽇舉辦的地點(diǎn)是否靠近交通站點(diǎn)?(你沒(méi)有⻋)

你可以把這三個(gè)因素對(duì)應(yīng)地⽤⼆進(jìn)制變量x1; x2 和x3 來(lái)表⽰。例如,如果天⽓好,我們把x1 = 1,如果不好,x1 = 0。類似地,如果你的男朋友或⼥朋友同去,x2 = 1,否則x2 = 0。x3也類似地表⽰交通情況。

現(xiàn)在,假設(shè)你是個(gè)嗜好奶酪的吃貨,以⾄于即使你的男朋友或⼥朋友不感興趣,也不管路有多難⾛都樂(lè)意去。但是也許你確實(shí)厭惡糟糕的天⽓,⽽且如果天⽓太糟你也沒(méi)法出⻔。你可以使⽤感知器來(lái)給這種決策建⽴數(shù)學(xué)模型。⼀種⽅式是給天⽓權(quán)重選擇為w1 = 6 ,其它條件為w2 = 2 和w3 = 2。w1 被賦予更⼤的值,表⽰天⽓對(duì)你很重要,⽐你的男朋友或⼥朋友陪你,或者最近的交通站重要的多。最后,假設(shè)你將感知器的閾值設(shè)為5。這樣,感知器實(shí)現(xiàn)了期望的決策模型,只要天⽓好就輸出1,天⽓不好則為0。對(duì)于你的男朋友或⼥朋友是否想去,或者附近是否有公共交通站,其輸出則沒(méi)有差別。隨著權(quán)重和閾值的變化,你可以得到不同的決策模型。例如,假設(shè)我們把閾值改為3 。那么感知器會(huì)按照天⽓好壞,或者結(jié)合交通情況和你男朋友或⼥朋友同⾏的意愿,來(lái)得出結(jié)果。換句話說(shuō),它變成了另⼀個(gè)不同的決策模型。降低閾值則表⽰你更愿意去。

這個(gè)例⼦說(shuō)明了⼀個(gè)感知器如何能權(quán)衡不同的依據(jù)來(lái)決策,這看上去也可以⼤致解釋⼀個(gè)感知器⽹絡(luò)能夠做出微妙的決定: 

 

 

 

在這個(gè)⽹絡(luò)中,第⼀列感知器—— 我們稱其為第⼀層感知器—— 通過(guò)權(quán)衡輸⼊依據(jù)做出三個(gè)⾮常簡(jiǎn)單的決定。那第⼆層的感知器呢?每⼀個(gè)都在權(quán)衡第⼀層的決策結(jié)果并做出決定。以這種⽅式,⼀個(gè)第⼆層中的感知器可以⽐第⼀層中的做出更復(fù)雜和抽象的決策。在第三層中的感知器甚⾄能進(jìn)⾏更復(fù)雜的決策。以這種⽅式,⼀個(gè)多層的感知器⽹絡(luò)可以從事復(fù)雜巧妙的決策。

假設(shè)我們有⼀個(gè)感知器⽹絡(luò),想要⽤它來(lái)解決⼀些問(wèn)題。例如,⽹絡(luò)的輸⼊可以是⼀幅⼿寫(xiě)數(shù)字的掃描圖像。我們想要⽹絡(luò)能學(xué)習(xí)權(quán)重和偏置,這樣⽹絡(luò)的輸出能正確分類這些數(shù)字。為了看清學(xué)習(xí)是怎樣⼯作的,假設(shè)我們把⽹絡(luò)中的權(quán)重(或者偏置)做些微⼩的改動(dòng),就像我們⻢上會(huì)看到的,這⼀屬性會(huì)讓學(xué)習(xí)變得可能,這⾥簡(jiǎn)要⽰意我們想要的。 

 

 

 

如果對(duì)權(quán)重(或者偏置)的微⼩的改動(dòng)真的能夠僅僅引起輸出的微⼩變化,那我們可以利⽤這⼀事實(shí)來(lái)修改權(quán)重和偏置,讓我們的⽹絡(luò)能夠表現(xiàn)得像我們想要的那樣。例如,假設(shè)⽹絡(luò)錯(cuò)誤地把⼀個(gè)“9”的圖像分類為“8”。我們能夠計(jì)算出怎么對(duì)權(quán)重和偏置做些⼩的改動(dòng),這樣⽹絡(luò)能夠接近于把圖像分類為“9”。然后我們要重復(fù)這個(gè)⼯作,反復(fù)改動(dòng)權(quán)重和偏置來(lái)產(chǎn)⽣更好的輸出,這時(shí)⽹絡(luò)就在學(xué)習(xí)。

問(wèn)題在于當(dāng)我們的⽹絡(luò)包含感知器時(shí)這不會(huì)發(fā)⽣,實(shí)際上,⽹絡(luò)中單個(gè)感知器上⼀個(gè)權(quán)重或偏置的微⼩改動(dòng)有時(shí)候會(huì)引起那個(gè)感知器的輸出完全翻轉(zhuǎn),如0 變到1,那樣的翻轉(zhuǎn)可能接下來(lái)引起其余⽹絡(luò)的⾏為以極其復(fù)雜的⽅式完全改變。因此,雖然你的“9”可能被正確分類,⽹絡(luò)在其它圖像上的⾏為很可能以⼀些很難控制的⽅式被完全改變,這使得逐步修改權(quán)重和偏置來(lái)讓⽹絡(luò)接近期望⾏為變得困難,也許有其它聰明的⽅式來(lái)解決這個(gè)問(wèn)題。但是這不是顯⽽易⻅地能讓⼀個(gè)感知器⽹絡(luò)去學(xué)習(xí)。

我們可以引⼊⼀種稱為S 型神經(jīng)元的新的⼈⼯神經(jīng)元來(lái)克服這個(gè)問(wèn)題,S 型神經(jīng)元和感知器類似,但是被修改為權(quán)重和偏置的微⼩改動(dòng)只引起輸出的微⼩變化。這對(duì)于讓神經(jīng)元⽹絡(luò)學(xué)習(xí)起來(lái)是很關(guān)鍵的。

我們⽤描繪感知器的相同⽅式來(lái)描繪S 型神經(jīng)元: 

 

 

 

正如⼀個(gè)感知器,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),這⾥σ被稱為S 型函數(shù),有時(shí)被稱為邏輯函數(shù),⽽這種新的神經(jīng)元類型被稱為邏輯神經(jīng)元,定義為: 

 

 

 

把它們放在⼀起來(lái)更清楚地說(shuō)明,⼀個(gè)具有輸⼊x1; x2;……,權(quán)重w1;w2; …..,和偏置b 的S型神經(jīng)元的輸出是: 

 

 

 

σ(z)圖形如下所示: 

 

 

 

σ的平滑意味著權(quán)重和偏置的微⼩變化,即Δwj 和Δb,會(huì)從神經(jīng)元產(chǎn)⽣⼀個(gè)微⼩的輸出變化Δoutput。實(shí)際上,微積分告訴我們Δoutput 可以很好地近似表⽰為:

 

上⾯全部⽤偏導(dǎo)數(shù)的表達(dá)式看上去很復(fù)雜,實(shí)際上它的意思⾮常簡(jiǎn)單(這可是個(gè)好消息):Δoutput 是⼀個(gè)反映權(quán)重和偏置變化即Δwj 和Δb的線性函數(shù)。

Part 2

神經(jīng)網(wǎng)絡(luò)的架構(gòu)

這一節(jié)告訴你神經(jīng)網(wǎng)絡(luò)長(zhǎng)什么模樣?

下面這個(gè)⽹絡(luò)中最左邊的稱為輸⼊層,其中的神經(jīng)元稱為輸⼊神經(jīng)元,最右邊的,即輸出層包含有輸出神經(jīng)元,在本例中,輸出層只有⼀個(gè)神經(jīng)元,中間層,既然這層中的神經(jīng)元既不是輸⼊也不是輸出,則被稱為隱藏層。 

 

假設(shè)我們嘗試確定⼀張⼿寫(xiě)數(shù)字的圖像上是否寫(xiě)的是“9”,很⾃然地,我們可以將圖⽚像素的強(qiáng)度進(jìn)⾏編碼作為輸⼊神經(jīng)元來(lái)設(shè)計(jì)⽹絡(luò),如果圖像是⼀個(gè)64 * 64 的灰度圖像,那么我們會(huì)需要4096 = 64 * 64 個(gè)輸⼊神經(jīng)元,每個(gè)強(qiáng)度取0 和1 之間合適的值。輸出層只需要包含⼀個(gè)神經(jīng)元,當(dāng)輸出值⼩于0.5 時(shí)表⽰“輸⼊圖像不是⼀個(gè)9”,⼤于0.5 的值表⽰“輸⼊圖像是⼀個(gè)9”。

定義神經(jīng)⽹絡(luò)后,讓我們回到⼿寫(xiě)識(shí)別上來(lái),我們將使⽤⼀個(gè)三層神經(jīng)⽹絡(luò)來(lái)識(shí)別單個(gè)數(shù)字: 

 

 

  

 

 

 

⽹絡(luò)的輸⼊層包含給輸⼊像素的值進(jìn)⾏編碼的神經(jīng)元,我們給⽹絡(luò)的訓(xùn)練數(shù)據(jù)會(huì)有很多掃描得到的 28×28 的⼿寫(xiě)數(shù)字的圖像組成,所有輸⼊層包含有 784 = 28×28個(gè)神經(jīng)元。為了簡(jiǎn)化,上圖中我已經(jīng)忽略了 784 中⼤部分的輸⼊神經(jīng)元。輸⼊像素是灰度級(jí)的,值為 0.0 表⽰⽩⾊,值為 1.0 表⽰⿊⾊,中間數(shù)值表⽰逐漸暗淡的灰⾊。

⽹絡(luò)的第⼆層是⼀個(gè)隱藏層,我們⽤ n 來(lái)表⽰神經(jīng)元的數(shù)量,⽰例中⽤⼀個(gè)⼩的隱藏層來(lái)說(shuō)明,僅僅包含 n = 15 個(gè)神經(jīng)元,⽹絡(luò)的輸出層包含有 10 個(gè)神經(jīng)元。如果第⼀個(gè)神經(jīng)元激活,即輸出 ≈ 1,那么表明⽹絡(luò)認(rèn)為數(shù)字是⼀個(gè) 0。如果第⼆個(gè)神經(jīng)元激活,就表明⽹絡(luò)認(rèn)為數(shù)字是⼀個(gè) 1。依此類推。更確切地說(shuō),我們把輸出神經(jīng)元的輸出賦予編號(hào) 0 到 9,并計(jì)算出那個(gè)神經(jīng)元有最⾼的激活值。⽐如,如果編號(hào)為 6 的神經(jīng)元激活,那么我們的⽹絡(luò)會(huì)猜到輸⼊的數(shù)字是 6。

為什么我們⽤ 10 個(gè)輸出神經(jīng)元,畢竟我們的任務(wù)是能讓神經(jīng)⽹絡(luò)告訴我們哪個(gè)數(shù)字(0,1,2,...,9 )能和輸⼊圖⽚匹配。⼀個(gè)看起來(lái)更⾃然的⽅式就是使⽤ 4 個(gè)輸出神經(jīng)元,這樣做難道效率不低嗎?最終的判斷是基于經(jīng)驗(yàn)主義的:我們可以實(shí)驗(yàn)兩種不同的⽹絡(luò)設(shè)計(jì),結(jié)果證明對(duì)于這個(gè)特定的問(wèn)題⽽⾔,10 個(gè)輸出神經(jīng)元的神經(jīng)⽹絡(luò)⽐ 4 個(gè)的識(shí)別效果更好。

為了理解為什么我們這么做,我們需要從根本原理上理解神經(jī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 的唯⼀⽅式,假設(shè)神經(jī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)系。

這個(gè)啟發(fā)性的⽅法通常很有效,它會(huì)節(jié)省你⼤量時(shí)間去設(shè)計(jì)⼀個(gè)好的神經(jīng)⽹絡(luò)結(jié)構(gòu),筆者很喜歡這種試圖從道的層面解釋神經(jīng)網(wǎng)絡(luò)的方法,它讓我們對(duì)于神經(jīng)網(wǎng)絡(luò)的認(rèn)識(shí)能更深一點(diǎn),而不是人云亦云。

Part 3

使⽤梯度下降算法進(jìn)⾏學(xué)習(xí)

這一節(jié)你能理解神經(jīng)網(wǎng)絡(luò)到底要計(jì)算什么?為什么要這么計(jì)算?

現(xiàn)在我們有了神經(jīng)⽹絡(luò)的設(shè)計(jì),它怎樣可以學(xué)習(xí)識(shí)別數(shù)字呢?我們需要的第⼀樣?xùn)|西是⼀個(gè)⽤來(lái)學(xué)習(xí)的數(shù)據(jù)集 —— 稱為訓(xùn)練數(shù)據(jù)集。我們將使⽤ MNIST 數(shù)據(jù)集,其包含有數(shù)以萬(wàn)計(jì)的連帶著正確分類器的⼿寫(xiě)數(shù)字的掃描圖像,MNIST 數(shù)據(jù)分為兩個(gè)部分。第⼀部分包含 60,000 幅⽤于訓(xùn)練數(shù)據(jù)的圖像。這些圖像掃描⾃250 ⼈的⼿寫(xiě)樣本,他們中⼀半⼈是美國(guó)⼈⼝普查局的員⼯,⼀半⼈是⾼校學(xué)⽣,這些圖像是28 × 28 ⼤⼩的灰度圖像,第⼆部分是 10,000 幅⽤于測(cè)試數(shù)據(jù)的圖像,同樣是 28 × 28 的灰度圖像,我們將⽤這些測(cè)試數(shù)據(jù)來(lái)評(píng)估我們的神經(jīng)⽹絡(luò)學(xué)會(huì)識(shí)別數(shù)字有多好。

我們將⽤符號(hào) x 來(lái)表⽰⼀個(gè)訓(xùn)練輸⼊。為了⽅便,把每個(gè)訓(xùn)練輸⼊ x 看作⼀個(gè) 28×28 = 784維的向量,每個(gè)向量中的項(xiàng)⽬代表圖像中單個(gè)像素的灰度值。我們⽤ y = y(x) 表⽰對(duì)應(yīng)的期望輸出,這⾥ y 是⼀個(gè) 10 維的向量。例如,如果有⼀個(gè)特定的畫(huà)成 6 的訓(xùn)練圖像,x,那么y(x) = (0,0,0,0,0,0,1,0,0,0) T 則是⽹絡(luò)的期望輸出。注意這⾥ T 是轉(zhuǎn)置操作,把⼀個(gè)⾏向量轉(zhuǎn)換成⼀個(gè)列向量。

我們希望有⼀個(gè)算法,能讓我們找到權(quán)重和偏置,以⾄于⽹絡(luò)的輸出 y(x) 能夠擬合所有的訓(xùn)練輸⼊ x。為了量化我們?nèi)绾螌?shí)現(xiàn)這個(gè)⽬標(biāo),我們定義⼀個(gè)代價(jià)函數(shù),也叫損失函數(shù)或目標(biāo)函數(shù): 

 

 

 

這⾥ w 表⽰所有的⽹絡(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。

我們把 C 稱為⼆次代價(jià)函數(shù);有時(shí)也稱被稱為均⽅誤差或者 MSE。觀察⼆次代價(jià)函數(shù)的形式我們可以看到 C(w,b) 是⾮負(fù)的,因?yàn)榍蠛凸街械拿?#12032;項(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,它就能很好地⼯作,因此我們的訓(xùn)練算法的⽬的,是最⼩化權(quán)重和偏置的代價(jià)函數(shù) C(w,b),換句話說(shuō),我們想要找到⼀系列能讓代價(jià)盡可能⼩的權(quán)重和偏置,我們將采⽤稱為梯度下降的算法來(lái)達(dá)到這個(gè)⽬的。

為什么要介紹⼆次代價(jià)呢?畢竟我們最初感興趣的內(nèi)容不是能正確分類的圖像數(shù)量嗎?為什么不試著直接最⼤化這個(gè)數(shù)量,⽽是去最⼩化⼀個(gè)類似⼆次代價(jià)的間接評(píng)量呢?這么做是因?yàn)樵谏窠?jīng)⽹絡(luò)中,被正確分類的圖像數(shù)量所關(guān)于權(quán)重和偏置的函數(shù)并不是⼀個(gè)平滑的函數(shù),⼤多數(shù)情況下,對(duì)權(quán)重和偏置做出的微⼩變動(dòng)完全不會(huì)影響被正確分類的圖像的數(shù)量,這會(huì)導(dǎo)致我們很難去解決如何改變權(quán)重和偏置來(lái)取得改進(jìn)的性能,⽽⽤⼀個(gè)類似⼆次代價(jià)的平滑代價(jià)函數(shù)則能更好地去解決如何⽤權(quán)重和偏置中的微⼩的改變來(lái)取得更好的效。

這就是選擇MSE的原因,我們又有了一些悟道。

我們訓(xùn)練神經(jīng)⽹絡(luò)的⽬的是找到能最⼩化⼆次代價(jià)函數(shù) C(w,b) 的權(quán)重和偏置,但是現(xiàn)在它有很多讓我們分散精⼒的結(jié)構(gòu) —— 對(duì)權(quán)重 w 和偏置 b 的解釋,晦澀不清的 σ 函數(shù),神經(jīng)⽹絡(luò)結(jié)構(gòu)的選擇,MNIST 等等,事實(shí)證明我們可以忽略結(jié)構(gòu)中⼤部分,把精⼒集中在最⼩化⽅⾯來(lái)理解它。

好了,假設(shè)我們要最⼩化某些函數(shù),C(v),它可以是任意的多元實(shí)值函數(shù),v = v 1 ,v 2 ,...。注意我們⽤ v 代替了 w 和 b 以強(qiáng)調(diào)它可能是任意的函數(shù) —— 我們現(xiàn)在先不局限于神經(jīng)⽹絡(luò)的環(huán)境。為了最⼩化 C(v),想象 C 是⼀個(gè)只有兩個(gè)變量 v1 和 v2 的函數(shù): 

 

 

 

我們想要的是找到 C 的全局最⼩值,當(dāng)然,對(duì)于上圖的函數(shù),我們⼀眼就能找到最⼩值,那意味著,也許我展⽰的函數(shù)過(guò)于簡(jiǎn)單了!通常函數(shù) C 可能是⼀個(gè)復(fù)雜的多元函數(shù),看⼀下就能找到最⼩值可是不可能的。

找到最⼩值可是不可能的。⼀種解決這個(gè)問(wèn)題的⽅式是⽤微積分來(lái)解析最⼩值。我們可以計(jì)算導(dǎo)數(shù)去尋找 C 的極值點(diǎn)。運(yùn)⽓好的話,C 是⼀個(gè)只有⼀個(gè)或少數(shù)⼏個(gè)變量的函數(shù),但是變量過(guò)多的話那就是噩夢(mèng),⽽且神經(jīng)⽹絡(luò)中我們經(jīng)常需要⼤量的變量—最⼤的神經(jīng)⽹絡(luò)有依賴數(shù)億權(quán)重和偏置的代價(jià)函數(shù),極其復(fù)雜,⽤微積分來(lái)計(jì)算最⼩值已經(jīng)不可⾏了。

微積分是不能⽤了。幸運(yùn)的是,有⼀個(gè)漂亮的推導(dǎo)法暗⽰有⼀種算法能得到很好的效果。⾸先把我們的函數(shù)想象成⼀個(gè)⼭⾕,只要瞄⼀眼上⾯的繪圖就不難理解,我們想象有⼀個(gè)⼩球從⼭⾕的斜坡滾落下來(lái)。我們的⽇常經(jīng)驗(yàn)告訴我們這個(gè)球最終會(huì)滾到⾕底。也許我們可以⽤這⼀想法來(lái)找到函數(shù)的最⼩值?我們會(huì)為⼀個(gè)(假想的)球體隨機(jī)選擇⼀個(gè)起始位置,然后模擬球體滾落到⾕底的運(yùn)動(dòng)。我們可以通過(guò)計(jì)算 C 的導(dǎo)數(shù)(或者⼆階導(dǎo)數(shù))來(lái)簡(jiǎn)單模擬——這些導(dǎo)數(shù)會(huì)告訴我們⼭⾕中局部“形狀”的⼀切,由此知道我們的球?qū)⒃鯓訚L動(dòng)。

注意,知道我們的球?qū)⒃鯓訚L動(dòng)這是核心。

為了更精確地描述這個(gè)問(wèn)題,讓我們思考⼀下,當(dāng)我們?cè)?v1 和 v2 ⽅向分別將球體移動(dòng)⼀個(gè)很⼩的量,即 ∆v1 和 ∆v2 時(shí),球體將會(huì)發(fā)⽣什么情況,微積分告訴我們 C 將會(huì)有如下變化: 

 

 

 

我們要尋找⼀種選擇 ∆v 1 和 ∆v 2 的⽅法使得 ∆C 為負(fù);即,我們選擇它們是為了讓球體滾落,為了弄明⽩如何選擇,需要定義 ∆v 為 v 變化的向量,∆v ≡ (∆v1 ,∆v2 ) T ,T 是轉(zhuǎn)置符號(hào),我們也定義 C 的梯度為偏導(dǎo)數(shù)的向量,⽤ ∇C 來(lái)表⽰梯度向量,即: 

 

 

 

有了這些定義,∆C 的表達(dá)式可以被重寫(xiě)為: 

 

 

 

這個(gè)表達(dá)式解釋了為什么 ∇C 被稱為梯度向量:∇C 把 v 的變化關(guān)聯(lián)為 C 的變化,正如我們期望的⽤梯度來(lái)表⽰,但是這個(gè)⽅程真正讓我們興奮的是它讓我們看到了如何選取 ∆v 才能讓∆C 為負(fù)數(shù),假設(shè)我們選?。?nbsp;

 

 

 

這⾥的η 是個(gè)很⼩的正數(shù)(稱為學(xué)習(xí)速率,注意以后會(huì)經(jīng)常見(jiàn)到它),我們看到 

 

 

 

這樣保證了∆C ≤ 0,即如果我們按照∆v方程這個(gè)規(guī)則去改變 v,那么 C 會(huì)⼀直減⼩,不會(huì)增加,這正是我們想要的特性,因此我們把∆v方程⽤于定義球體在梯度下降算法下的“運(yùn)動(dòng)定律”,也就是說(shuō)我們⽤∆v方程計(jì)算∆v,來(lái)移動(dòng)球體的位置 v: 

 

 

 

然后我們⽤它再次更新規(guī)則來(lái)計(jì)算下⼀次移動(dòng)。如果我們反復(fù)持續(xù)這樣做,我們將持續(xù)減⼩C 直到—— 正如我們希望的 —— 獲得⼀個(gè)全局的最⼩值。

總結(jié)⼀下,梯度下降算法⼯作的⽅式就是重復(fù)計(jì)算梯度 ∇C,然后沿著相反的⽅向移動(dòng),沿著⼭⾕“滾落”。我們可以想象它像這樣: 

 

 

 

你可以把這個(gè)更新規(guī)則看做定義梯度下降算法。這給我們提供了⼀種⽅式去通過(guò)重復(fù)改變 v來(lái)找到函數(shù) C 的最⼩值。這個(gè)規(guī)則并不總是有效的 —— 有⼏件事能導(dǎo)致錯(cuò)誤,讓我們⽆法從梯度下降來(lái)求得函數(shù) C 的全局最⼩值,這個(gè)觀點(diǎn)我們會(huì)在后⾯的去探討。但在實(shí)踐中,梯度下降算法通常⼯作地⾮常好,在神經(jīng)⽹絡(luò)中這是⼀種⾮常有效的⽅式去求代價(jià)函數(shù)的最⼩值,進(jìn)⽽促進(jìn)⽹絡(luò)⾃⾝的學(xué)習(xí)。 

責(zé)任編輯:龐桂玉 來(lái)源: 與數(shù)據(jù)同行
相關(guān)推薦

2017-04-19 09:15:57

深度學(xué)習(xí)

2017-03-06 16:56:37

深度學(xué)習(xí)本質(zhì)現(xiàn)狀

2017-04-05 19:04:09

2015-08-12 15:31:18

人工智能深度學(xué)習(xí)Fackbook

2019-02-13 19:00:01

深度學(xué)習(xí)機(jī)器學(xué)習(xí)人工神經(jīng)

2018-09-29 10:05:54

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)神經(jīng)元

2016-12-09 13:45:21

RNN大數(shù)據(jù)深度學(xué)習(xí)

2024-07-26 09:15:22

深度學(xué)習(xí)機(jī)器學(xué)習(xí)數(shù)據(jù)

2017-09-03 13:17:27

深度學(xué)習(xí)計(jì)算機(jī)視覺(jué)卷積神經(jīng)網(wǎng)絡(luò)

2017-08-22 16:20:01

深度學(xué)習(xí)TensorFlow

2018-11-20 15:23:30

深度學(xué)習(xí)梯度神經(jīng)網(wǎng)絡(luò)

2022-06-02 15:31:26

深度學(xué)習(xí)AI

2017-03-11 22:19:09

深度學(xué)習(xí)

2010-04-01 09:32:51

2019-02-13 18:40:22

深度學(xué)習(xí)機(jī)器學(xué)習(xí)人工智能

2017-05-08 16:13:33

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)深度

2021-03-22 10:57:02

人工智能深度學(xué)習(xí)深度學(xué)習(xí)模型

2021-03-19 15:23:38

深度學(xué)習(xí)編程人工智能

2019-09-17 16:56:39

深度學(xué)習(xí)人工智能

2021-03-08 11:28:59

人工智能深度學(xué)習(xí)Python
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)