文:城主
何愷明,大名鼎鼎的深度殘差網(wǎng)絡(luò)(ResNets)的主要發(fā)明者。沒有ResNets就沒有現(xiàn)在大放異彩的的深度學(xué)習(xí)AI大模型。
直接上百度百科:
何愷明(Kaiming He),1984年出生于廣東廣州,2003年廣東省高考滿分狀元。2003-2007年就讀于清華大學(xué)物理系基礎(chǔ)科學(xué)班,連續(xù)3年獲得清華獎(jiǎng)學(xué)金,本科畢業(yè)后進(jìn)入香港中文大學(xué)攻讀研究生,師從湯曉鷗。2009年成為CVPR最佳論文首位華人得主。2011年獲得香港中文大學(xué)信息工程哲學(xué)博士學(xué)位,之后進(jìn)入微軟亞洲研究院工作。2016年8月加入Facebook AI Research(FAIR),擔(dān)任研究科學(xué)家。2017年獲得ICCV最佳論文獎(jiǎng)(馬爾獎(jiǎng))。2018年獲得CVPR大會(huì)PAMI青年研究者獎(jiǎng)。2022年入選AI 2000人工智能全球最具影響力學(xué)者榜單,綜合排名第一。2023年獲得未來科學(xué)大獎(jiǎng)數(shù)學(xué)與計(jì)算機(jī)科學(xué)獎(jiǎng)。2024年2月加入麻省理工學(xué)院(MIT)電氣工程與計(jì)算機(jī)科學(xué)系,擔(dān)任副教授。
本文推薦的講座即為何愷明在MIT傳道授業(yè)生涯試講的第一課,一方面很有意義,另外一方面,著實(shí)精彩。縱觀目前所能看到的公開資料,甚少有在知識(shí)深度廣度兼?zhèn)渲线€能講解得如此清晰易懂的深度學(xué)習(xí)講座,PPT也做得很棒,非常適合有一丁點(diǎn)兒科普基礎(chǔ)希望提高深度學(xué)習(xí)認(rèn)知的讀者們,強(qiáng)烈推薦。
原講座為英文,本文根據(jù)講座原意全部重寫為中文書面文字。
![]()
喜歡看視頻的朋友,講座的視頻完整中英版 (字幕錯(cuò)別字請(qǐng)見諒 不影響理解):
--天空之城中文版--
![]()
好的,讓我們開始。我叫愷明,實(shí)際上,我將在下個(gè)月加入一所大學(xué)(MIT),因此,我今天在這里做的是一份無薪工作。現(xiàn)在,讓我們看看我這份無薪工作的名稱——深度表征(深度表示)學(xué)習(xí)。我將在圖像識(shí)別的背景下,以及可能的其他一些場(chǎng)景中討論這個(gè)主題。以下是本教程的概述。
![]()
首先,我將討論什么是表征學(xué)習(xí)以及為什么表征學(xué)習(xí)是一個(gè)重要問題。然后,我將討論如何構(gòu)建和訓(xùn)練非常深的神經(jīng)網(wǎng)絡(luò)。我將討論一些具有里程碑意義的有影響力的神經(jīng)網(wǎng)絡(luò)架構(gòu)。接著,我將介紹一些重要的組件和元素,這些元素對(duì)于我們訓(xùn)練非常深的神經(jīng)網(wǎng)絡(luò)架構(gòu)是必要的,包括一些初始化方法,歸一化方法,以及殘差連接的引入。最后,我將介紹圖像識(shí)別的應(yīng)用和一些序列處理問題。
![]()
那么,為什么要深度學(xué)習(xí)?為什么大約十年前,人們突然開始幾乎到處談?wù)撋疃葘W(xué)習(xí)?簡(jiǎn)單來說,深度學(xué)習(xí)就是表征學(xué)習(xí)。有趣的是,十多年前,深度學(xué)習(xí)并不流行,也沒有受到計(jì)算機(jī)視覺或機(jī)器學(xué)習(xí)領(lǐng)域主流會(huì)議的青睞。然而,一些深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)架構(gòu)的先驅(qū),比如Yann LeCun和Yoshua Bengio,決定再舉辦一次對(duì)深度學(xué)習(xí)研究更加友好、更加開放的會(huì)議。他們決定將他們的新會(huì)議命名為國際學(xué)習(xí)表征會(huì)議,這反映了深度學(xué)習(xí)和表征學(xué)習(xí)之間的密切關(guān)系。
那么,為什么表征學(xué)習(xí)如此重要呢?表征學(xué)習(xí)是一個(gè)常見問題,可以在許多領(lǐng)域的許多應(yīng)用程序中找到。表征學(xué)習(xí)的一個(gè)共同目標(biāo)是將原始數(shù)據(jù)轉(zhuǎn)換為一些高級(jí)表征空間,我們?cè)谶@個(gè)表征空間中可以更好地進(jìn)行壓縮、抽象或概念化。當(dāng)計(jì)算機(jī)算法在這個(gè)表征空間上運(yùn)行時(shí),它們可以更輕松地解決非常復(fù)雜的問題。并且,根據(jù)場(chǎng)景的不同,原始數(shù)據(jù)可以有多種不同的形式。例如,在計(jì)算機(jī)視覺中,原始數(shù)據(jù)可以是圖像或視頻中的像素;在自然語言處理中,原始數(shù)據(jù)可以是字母或單詞;在語音識(shí)別或音頻識(shí)別中,原始數(shù)據(jù)可以是音頻波或頻譜圖;在玩游戲的情況下,原始數(shù)據(jù)可以是游戲板的狀態(tài);在一些科學(xué)問題中,原始數(shù)據(jù)可以是分子序列、DNA序列或其他一些結(jié)構(gòu)。在許多此類應(yīng)用程序中,一個(gè)常見的問題是如何在某些高級(jí)抽象空間中表征數(shù)據(jù),這樣計(jì)算機(jī)算法就可以更容易地解決問題。
![]()
現(xiàn)在,讓我們以圍棋游戲?yàn)槔T谶^去的幾十年里,使用計(jì)算機(jī)解決圍棋游戲被認(rèn)為是一個(gè)非常具有挑戰(zhàn)性甚至可能不可行的問題。部分原因是圍棋游戲中的不同狀態(tài)數(shù)量呈指數(shù)級(jí)增長。例如,棋盤有19列和19行,如果我們把所有的東西加在一起,那么就會(huì)有361個(gè)位置,每個(gè)位置都可以有黑、白、空白三種選擇。那么這將得到3的361次方種不同狀態(tài)。這是一個(gè)巨大的數(shù)字,如果計(jì)算機(jī)算法要在這個(gè)狀態(tài)空間中進(jìn)行分析甚至枚舉或記憶,那么今天的計(jì)算機(jī)就無法使用這種表征來解決這個(gè)問題。
然而,如果真是這樣的話,那么我們可能永遠(yuǎn)無法解決計(jì)算機(jī)視覺或圖像識(shí)別問題。現(xiàn)在,讓我們考慮一個(gè)非常簡(jiǎn)單的計(jì)算機(jī)視覺案例。假設(shè)我們有一個(gè)非常小的圖像,即500像素x500像素,每個(gè)像素可能具有三種顏色通道:紅色、綠色和藍(lán)色,每個(gè)顏色通道可能有256個(gè)不同的值。如果我們把所有的東西放在一起,那么我們將得到256的3x500x500次方個(gè)不同的狀態(tài),只是為了一個(gè)非常小的圖像。如果我們的計(jì)算機(jī)視覺算法直接在這個(gè)原始像素空間上運(yùn)行,并且如果該算法要枚舉或記住這個(gè)狀態(tài)空間,那么我們永遠(yuǎn)無法解決計(jì)算機(jī)視覺問題,因?yàn)檫@個(gè)問題比圍棋問題更棘手。
然而,這并不是計(jì)算機(jī)視覺算法解決圖像識(shí)別問題的方式。我們不是直接在原始像素空間上工作,而是使用一個(gè)模型將原始像素轉(zhuǎn)換為一些表征形式。如今,我們做到這一點(diǎn)的最成功的模型是使用深度神經(jīng)網(wǎng)絡(luò),例如卷積神經(jīng)網(wǎng)絡(luò)。然后這些表征將為我們提供一些非常好的抽象或概念化壓縮。當(dāng)使用這些表征時(shí),計(jì)算機(jī)算法可以解決許多不同的問題,例如圖像分類、對(duì)象檢測(cè)或圖像分割。
類似地,回到圍棋的問題,我們可以將圍棋中的棋盤想象成一個(gè)非常小的圖像。該圖像只有19x19像素,每個(gè)像素只有三種可能的顏色:黑色、白色和空白。然后我們可以使用相同的想法。例如,我們可以使用卷積神經(jīng)網(wǎng)絡(luò)來處理游戲的狀態(tài)并獲得一些高級(jí)抽象。并且計(jì)算機(jī)算法可以直接在這個(gè)高級(jí)抽象空間上工作,做一些分析或做一些搜索。這將使圍棋問題更容易得到解決。這實(shí)際上是著名的AlphaGo算法背后的眾多基本思想之一。
![]()
這張圖來自AlphaGo Zero論文。在這張圖中,作者比較了四種不同版本的AlphaGo棋手。這些版本是按照L-low評(píng)級(jí)進(jìn)行比較的,通常評(píng)級(jí)越高意味著圍棋表現(xiàn)越好。這個(gè)圖簡(jiǎn)單地表明,通過將深度從例如12層增加到40層,我們可以輕松地享受圍棋表現(xiàn)方面的巨大提升。
![]()
事實(shí)上,如果我們不斷增加神經(jīng)網(wǎng)絡(luò)的深度,例如增加到80層,我們將看到圍棋性能的另一個(gè)巨大提升。有趣的是,這種表現(xiàn)甚至比世界上最好的人類玩家還要好。而AlphaGo算法可以在不使用任何人類知識(shí)的情況下實(shí)現(xiàn)這種性能。
還值得注意的是,對(duì)于這里比較的四五個(gè)不同的棋手,許多其他組件完全相同。例如,強(qiáng)化學(xué)習(xí)算法和蒙特卡羅樹搜索算法的用法是完全相同的。這五個(gè)不同版本中只是用于學(xué)習(xí)圍棋表征的神經(jīng)網(wǎng)絡(luò)架構(gòu)有所不同。因此,我希望這能讓您了解表征學(xué)習(xí)對(duì)于我們解決非常具有挑戰(zhàn)性的問題有多么重要。
![]()
現(xiàn)在,讓我們回到計(jì)算機(jī)視覺的問題,接下來我要講的是我們?nèi)绾伪碚鲌D像。在深度學(xué)習(xí)流行之前,計(jì)算機(jī)視覺領(lǐng)域就已經(jīng)出現(xiàn)了。假設(shè)我們有一張圖像,我們可以將其視為一堆像素,我們可以直接將這堆像素發(fā)送到分類器中。分類器可以是SVM分類器、支持向量機(jī),也可以是決策樹,也可以是隨機(jī)森林。通常這不是一個(gè)好的解決方案,因?yàn)榧词箤?duì)象的微小變化也會(huì)導(dǎo)致原始像素表征空間發(fā)生較大變化。
那么,為了解決這個(gè)問題,我們?nèi)绾伪碚鲌D像呢?我們可以通過觀察圖像,找出它們的相似之處。有人做過這個(gè)實(shí)驗(yàn)嗎?這是一個(gè)很好的問題。我不是一個(gè)好的圍棋手,但我知道有一些關(guān)于圍棋的非常奇特的術(shù)語。這是一個(gè)關(guān)于專業(yè)玩家的術(shù)語,他們對(duì)當(dāng)前狀態(tài)有自己的感覺。因此,圍棋手對(duì)于圍棋有自己的內(nèi)部表征,而且這些內(nèi)部表征可能與計(jì)算機(jī)算法可以學(xué)習(xí)到的表征不太一致。實(shí)際上,自AlphaGo的開發(fā)以來,我相信許多頂級(jí)玩家已經(jīng)開始利用人工智能來改善他們對(duì)人類內(nèi)在表現(xiàn)的理解。現(xiàn)在,讓我們回到我們的主題。
為了得到更好的表現(xiàn),我們可能會(huì)考慮計(jì)算像素頂部的邊緣,因?yàn)檫@將為我們提供更穩(wěn)定的表現(xiàn),以防輸入空間的照明或顏色發(fā)生變化。然后,再次為了得到更好的表現(xiàn),我們可能會(huì)考慮計(jì)算邊緣的方向或方向的直方圖,或者我們可以在直方圖上運(yùn)行一些聚類算法。
實(shí)際上,如果問題足夠簡(jiǎn)單,這個(gè)流程可以很好地工作。然而,在這個(gè)流程中,我們需要人類或者計(jì)算機(jī)視覺專家來定義什么是好的表現(xiàn)或者什么是好的特征來解決當(dāng)前的問題。因此,雖然特征設(shè)計(jì)問題對(duì)于一些低級(jí)表現(xiàn),如邊緣、紋理或顏色的定義,是相對(duì)可行的,但如果我們想定義一些高級(jí)表現(xiàn),這個(gè)問題將變得非常困難。例如,我們很難定義什么是魚,什么是貓,或者另一方面,什么是樹,或者什么是人。
![]()
實(shí)際上,在計(jì)算機(jī)視覺領(lǐng)域,過去幾十年里,定義高級(jí)抽象和表現(xiàn)一直是計(jì)算機(jī)視覺社區(qū)的主要瓶頸。深度學(xué)習(xí)為我們解決計(jì)算機(jī)視覺問題提供了另一種方法,如圖像識(shí)別等許多復(fù)雜問題。深度學(xué)習(xí)的一個(gè)關(guān)鍵思想是將一組簡(jiǎn)單的通用模塊組合成高度復(fù)雜的函數(shù),幫助我們解決高度復(fù)雜的問題。因此,如果你從我今天的演講中只能得到一個(gè)信息,那就是這個(gè)信息。我將在本次演講的以下部分中多次重復(fù)這一點(diǎn)。
因此,在一組通用模塊的幫助下,我們可以輕松地構(gòu)建多個(gè)抽象級(jí)別并學(xué)習(xí)多個(gè)表現(xiàn)級(jí)別。而這些模塊的具體實(shí)例,例如這些模塊的參數(shù)或權(quán)重,可以通過反向傳播來學(xué)習(xí)。因此,對(duì)人類知識(shí)的依賴大大減少。同樣,學(xué)習(xí)是在一些更大規(guī)模的數(shù)據(jù)上完成的,因此人類知識(shí)的要求已經(jīng)從設(shè)計(jì)特征轉(zhuǎn)移到收集與問題相關(guān)的數(shù)據(jù)的另一個(gè)問題。
總的來說,深度學(xué)習(xí)的所有這些關(guān)鍵思想或關(guān)鍵概念可以幫助我們大大減少我們解決手頭問題的領(lǐng)域知識(shí)。因此,深度學(xué)習(xí)可以成為我們解決許多領(lǐng)域許多問題的通用工具箱的原因有很多。
![]()
接下來,我將討論如何學(xué)習(xí)圖像識(shí)別的深度表征。我將回顧卷積神經(jīng)網(wǎng)絡(luò)發(fā)展史上的一些里程碑式且有影響力的步驟。我將從大約 30 年前開發(fā)的 LeNet 架構(gòu)開始。
![]()
LeNet 架構(gòu)是卷積神經(jīng)網(wǎng)絡(luò)(簡(jiǎn)稱 ConvNet 或 CNN)的成功實(shí)例之一。簡(jiǎn)單來說,卷積神經(jīng)網(wǎng)絡(luò)是一種平移不變的架構(gòu)。因此,通過平移不變性,我們通常意味著如果我們?cè)诨瑒?dòng)窗口內(nèi)進(jìn)行一些操作, 并且當(dāng)窗口平移幾個(gè)像素時(shí),我們?nèi)匀粫?huì)有或多或少相同的操作。平移不變性還意味著,如果我們將整個(gè)輸入圖像平移幾個(gè)像素,我們?nèi)匀豢梢該碛邢嗤妮敵鲱悩?biāo)簽,如果我們正在做分類問題。
然后,LeNet架構(gòu)引入了幾個(gè)基本元素對(duì)于卷積神經(jīng)網(wǎng)絡(luò)。這些元素包括卷積層、池化層的使用,全連接層,更重要的是,通過反向傳播端到端地訓(xùn)練整個(gè)架構(gòu)的想法。再說一遍,卷積神經(jīng)網(wǎng)絡(luò)只是深度學(xué)習(xí)方法的一個(gè)實(shí)例,即將簡(jiǎn)單的模塊組合成高度復(fù)雜的功能。接下來,我將介紹其中兩個(gè)簡(jiǎn)單的基礎(chǔ)模塊。
![]()
第一個(gè)模塊是卷積層。簡(jiǎn)單來說,卷積層只是局部連接加上空間權(quán)重共享。與卷積層相比,最流行的層類型之一是全連接層。在這種情況下,每個(gè)輸出神經(jīng)元都連接到該層中的每個(gè)輸入神經(jīng)元。在這里,每個(gè)連接代表一個(gè)權(quán)重或一個(gè)可以訓(xùn)練的參數(shù)。也就是說,如果我們有很多輸入神經(jīng)元,并且如果我們也有很多輸出神經(jīng)元,那么我們將有大量的可訓(xùn)練參數(shù)。這并不理想。
為了部分解決這個(gè)問題,人們開發(fā)了另一種層類型,稱為局部連接層。在這種情況下,每個(gè)輸出神經(jīng)元僅連接到輸入神經(jīng)元的一小部分。通常在實(shí)踐中,這些小子集將位于輸出神經(jīng)元周圍的滑動(dòng)窗口或局部鄰域中。并且引入局部連接層可以大大減少可訓(xùn)練參數(shù)的數(shù)量。卷積層僅領(lǐng)先一步。也就是說,當(dāng)我們?cè)谳斎雸D像空間的不同位置滑動(dòng)窗口時(shí),我們可以在不同的空間位置之間共享權(quán)重。
![]()
卷積神經(jīng)網(wǎng)絡(luò)的另一個(gè)重要模塊是池化層。池化層的作用是減小特征圖的大小,因此如果輸入圖像很大,可以大大減少所需的計(jì)算量。另一方面,池化層也可以幫助實(shí)現(xiàn)局部不變性。也就是說,如果我們的輸入內(nèi)容在一個(gè)小窗口內(nèi)經(jīng)歷一些局部抖動(dòng),我們?nèi)匀荒軌蛟谠摯翱谥蝎@得或多或少相同的表征。這可以幫助我們獲得更多的抽象表征,這是我們做分類問題所需的屬性。
![]()
然后給出這組簡(jiǎn)單的通用模塊,接下來我將逐步介紹學(xué)習(xí)架構(gòu)。盡管這種建筑的提出已經(jīng)有30多年了,但我們漫步在這座古典建筑中總是令人愉悅和鼓舞。在這種情況下,神經(jīng)網(wǎng)絡(luò)的輸入只有一個(gè)顏色通道,因?yàn)樗腔叶鹊摹T诖耸纠校臻g大小將為 32 x 32。然后它將執(zhí)行第一組卷積核,其空間大小為 5 x 5。
![]()
在本例中,它有六個(gè)不同的輸出通道。這將為我們提供第一組輸出特征圖。在本例中,空間大小為 28 x 28。因?yàn)槲覀兊木矸e層有六個(gè)輸出通道,那么這組特征圖也將有六個(gè)輸出通道。
![]()
然后我們可以應(yīng)用第一個(gè)池化操作,將每個(gè)維度的空間大小減少兩倍。然后我們將得到下一組空間特征圖,其空間大小為 14 x 14。
![]()
然后我們準(zhǔn)備再次應(yīng)用下一組卷積層,其內(nèi)核大小為 5 x 5。而此時(shí),它有16個(gè)不同的輸出通道。
![]()
然后我們將得到下一組特征圖,這里的空間大小為10x10。
![]()
再次,下一個(gè)池化層減少空間大小。
![]()
我們將得到最終的一組空間特征圖,其空間大小為 5 x 5。
![]()
之后,我們就可以展平這個(gè)特征圖。我們將使用第一組全連接層、第二組全連接層以及具有十個(gè)通道的輸出全連接層來處理它,
在本例中,針對(duì)十類分類問題。而在高層,整個(gè)架構(gòu)非常簡(jiǎn)單。它只是幾個(gè)基本模塊的組合,在本例中只是卷積層、池化層和全連接層。線性架構(gòu)實(shí)際上效果非常好,如果我們有數(shù)據(jù)來訓(xùn)練它。
![]()
不幸的是,這種架構(gòu)在提出后的 20 多年里一直被忽視。部分原因是我們沒有計(jì)算能力或沒有數(shù)據(jù)來充分展示該架構(gòu)的強(qiáng)大功能。當(dāng)時(shí)最大的數(shù)據(jù)集,令人驚訝的是,它是當(dāng)時(shí)最大的數(shù)據(jù)集,是 MNIST 數(shù)據(jù)集,其中包含 10 個(gè)類別的 50,000 張圖像。這個(gè)數(shù)據(jù)集足以訓(xùn)練一個(gè)非常小的模型,但還不足以完全說服計(jì)算機(jī)視覺社區(qū)在他們的問題中采用卷積神經(jīng)網(wǎng)絡(luò)。
![]()
然后深度學(xué)習(xí)真正的革命發(fā)生在 2012 年,這篇 AlexNet 論文介紹了它。據(jù)我了解,這篇 AlexNet 論文中只有一篇論文。本文旨在探討擴(kuò)大卷積神經(jīng)網(wǎng)絡(luò)規(guī)模的相關(guān)問題。規(guī)模化實(shí)際上涉及到幾個(gè)方面。
首先,我們要討論的是數(shù)據(jù)的問題。AlexNet在ImageNet數(shù)據(jù)集上進(jìn)行訓(xùn)練,該數(shù)據(jù)集擁有100萬張圖像和1,000個(gè)類別。實(shí)際上,這個(gè)數(shù)據(jù)集比當(dāng)時(shí)人們一直在研究的許多其他數(shù)據(jù)集要大得多。在那個(gè)時(shí)候,我們可以在原始像素上端到端地訓(xùn)練神經(jīng)網(wǎng)絡(luò)架構(gòu),這遠(yuǎn)遠(yuǎn)超出了人們的想象在如此大規(guī)模的數(shù)據(jù)集中。
其次,我們要討論的是架構(gòu)的問題。AlexNet的架構(gòu)實(shí)際上很大。在那篇論文的摘要中,作者特別表示這是一個(gè)巨大的架構(gòu),這個(gè)架構(gòu)有超過6000萬個(gè)參數(shù)和超過60萬個(gè)神經(jīng)元。該模型的尺寸實(shí)際上也比當(dāng)時(shí)的許多其他模型大得多。
然而,為了訓(xùn)練這么大的模型,即使借助更大規(guī)模的數(shù)據(jù),人們需要引入有效的技術(shù)來減少過度擬合。AlexNet論文在這方面探索了兩種非常有效的技術(shù):一是數(shù)據(jù)增強(qiáng),二是數(shù)據(jù)丟失。這兩種技術(shù)在當(dāng)今的神經(jīng)網(wǎng)絡(luò)訓(xùn)練技術(shù)中仍然廣泛使用。
AlexNet論文的另一個(gè)亮點(diǎn)是其出色的工程工作。它探索了使用GPU訓(xùn)練模型的潛力。事實(shí)上,他們已經(jīng)為未來10年的GPU訓(xùn)練奠定了基礎(chǔ)。他們介紹了關(guān)于GPU訓(xùn)練的兩個(gè)基本概念:一是數(shù)據(jù)分布,二是模型分布。在數(shù)據(jù)分布的情況下,同一小批量中的不同樣本可以由不同的GPU處理,從而大大減少每個(gè)GPU的計(jì)算量。在模型分布的情況下,不同的過濾器組或不同的層可以存儲(chǔ)在不同的GPU中,從而大大減少內(nèi)存消耗。這些仍然是當(dāng)今GPU實(shí)現(xiàn)的基礎(chǔ)。
![]()
接下來,我們將對(duì)比原始的LeNet架構(gòu)和AlexNet架構(gòu)。在高層次上,它們是同一件事,因?yàn)樗鼈冎皇窃S多簡(jiǎn)單通用模塊的組合,如卷積層、池化層和全連接層。那么,它們之間有什么區(qū)別呢?為什么AlexNet具有革命性呢?
首先,AlexNet更深。它還有三個(gè)卷積層和一個(gè)池化層。這些層可以幫助它從更大規(guī)模的數(shù)據(jù)中學(xué)習(xí)更高層次的抽象,這將比更淺的模型具有更強(qiáng)的表征能力。
![]()
其次,AlexNet首次開始探索使用ReLU激活函數(shù)來訓(xùn)練非常深的神經(jīng)網(wǎng)絡(luò)架構(gòu)。在ReLU的情況下,只有當(dāng)輸入信號(hào)小于零時(shí),它將具有零梯度。然后,當(dāng)您在非常深的神經(jīng)網(wǎng)絡(luò)架構(gòu)中擁有許多激活函數(shù)時(shí),您將有更高的機(jī)會(huì)在反向傳播過程中獲得非零梯度。事實(shí)證明,這可以在很大程度上促進(jìn)非常深的模型的訓(xùn)練。所以從某種意義上說,ReLU激活的引入是深度學(xué)習(xí)的一場(chǎng)革命。
![]()
這兩種架構(gòu)之間的另一個(gè)巨大差異在很大程度上被許多人忽視了,那就是AlexNet實(shí)際上是比原始LeNet更寬的架構(gòu)。在深度學(xué)習(xí)的術(shù)語中,“更寬”通常意味著模型有更多的通道。然后,通過為每個(gè)層提供更多通道,我們將擁有更豐富的特征集,然后它將比更窄的模型更具代表性。
![]()
AlexNet在ImageNet數(shù)據(jù)集中的成功引起了計(jì)算機(jī)視覺界的廣泛關(guān)注。在AlexNet提出后的第二年,計(jì)算機(jī)視覺界開始更加關(guān)注理解神經(jīng)網(wǎng)絡(luò)行為。計(jì)算機(jī)視覺社區(qū)獲得更好理解的一種方法是可視化。而一個(gè)非常成功的可視化方法就是回答下面的問題:什么輸入可以產(chǎn)生特定的特征呢?
為了回答這個(gè)問題,我們可以做以下兩個(gè)步驟。首先,我們只需要將特征圖設(shè)置為one-hot向量或one-hot張量。也就是說,對(duì)于這個(gè)特定的特征圖,只有一個(gè)元素非零,所有其他元素都將設(shè)置為零。然后我們可以使用完全相同的反向傳播算法將這個(gè)單熱特征圖從特征空間傳播回像素空間。然后我們將在像素空間上對(duì)這個(gè)特征進(jìn)行一些可視化。
接下來我將展示通過這種方式獲得的一些可視化效果。我將展示具有五個(gè)卷積層的卷積神經(jīng)網(wǎng)絡(luò)的可視化。
![]()
這是第一個(gè)卷積層的可視化。在這里我將展示左側(cè)的功能。我還將在右側(cè)展示一些刺激物。因此,通過刺激,我的意思是這些是在相應(yīng)特征中具有最強(qiáng)激活的補(bǔ)丁或輸入圖像。正如我們?cè)谶@個(gè)神經(jīng)網(wǎng)絡(luò)的第一層中看到的,它們通常是邊緣檢測(cè)器或一些顏色檢測(cè)器。這種行為與經(jīng)典圖像識(shí)別系統(tǒng)非常相似,其中第一層是邊緣檢測(cè)器。
![]()
這是同一網(wǎng)絡(luò)中第二個(gè)卷積層的一些可視化。在這種情況下,我們可以看到功能級(jí)別稍高一些比第一層的特征。我們可以看到一些特征顯示出一些紋理圖案。在其他一些情況下,它們顯示出一些局部形狀,例如圓形或角或細(xì)線的形狀。這就是為什么我們說這些特征可能比第一層中的特征(只是邊緣)更高級(jí)別。
![]()
接下來是第三層的可視化。在這種情況下,我們開始看到它開始顯示出一些語義模式。例如,對(duì)于這個(gè)特征,它開始顯示一些關(guān)于人類上半身的語義模式。在另一種情況下,它開始顯示出類似網(wǎng)或蜂窩的圖案。
![]()
再說一次,這是第四層的可視化。同樣,它比前一層的表征級(jí)別更高。還有一些狗頭的形狀,或者可能是兩條腿的鳥的身體形狀。
![]()
這些是最后一個(gè)卷積的可視化網(wǎng)絡(luò),該網(wǎng)絡(luò)中的卷積層。再說一次,這將是更高的水平。它并不完美。例如,在這一層中,它會(huì)將幾種東西混合在一起。但在其他一些例子中,例如對(duì)于這個(gè)過濾器,它將給出不同類型的狗的表征。對(duì)于這個(gè)過濾器,它將給出不同類型的有眼睛動(dòng)物的表征。
實(shí)際上,在計(jì)算機(jī)視覺中,這些高級(jí)抽象或高級(jí)表征很難手工設(shè)計(jì)。因此,這些高級(jí)表征正是計(jì)算機(jī)視覺社區(qū)在過去幾十年中一直在尋找的東西。因此,這種可視化有助于讓計(jì)算機(jī)視覺社區(qū)相信深度學(xué)習(xí)或深度卷積神經(jīng)網(wǎng)絡(luò)是正確的選擇。
![]()
作為這種可視化的副產(chǎn)品,當(dāng)時(shí)計(jì)算機(jī)視覺界開始做出一個(gè)非常重大的發(fā)現(xiàn)。當(dāng)時(shí),他們發(fā)現(xiàn)這些深層表征是可遷移的。在我看來,這實(shí)際上是深度學(xué)習(xí)革命中最重要的發(fā)現(xiàn)。
那么,可遷移或遷移學(xué)習(xí)意味著什么呢?在我看來,遷移學(xué)習(xí)是一個(gè)了不起的想法。假設(shè)我們是否可以在更大規(guī)模的數(shù)據(jù)集上訓(xùn)練更大規(guī)模的網(wǎng)絡(luò)。如果我們能夠發(fā)現(xiàn)這個(gè)網(wǎng)絡(luò)將學(xué)習(xí)一些高級(jí)表征或高級(jí)抽象,那么我們可以希望這種高級(jí)表征不僅僅與該數(shù)據(jù)集相關(guān)。這種高級(jí)表征也可以用于與該較大規(guī)模數(shù)據(jù)集有關(guān)的許多其他較小規(guī)模數(shù)據(jù)集。但為了享受這個(gè)福利,我們可以將這些特征轉(zhuǎn)移到一些較小規(guī)模的數(shù)據(jù)集。通常,我們可以通過微調(diào)來實(shí)現(xiàn)遷移學(xué)習(xí)。例如,我們可以只訓(xùn)練神經(jīng)網(wǎng)絡(luò)的一小部分,這只需要在小規(guī)模數(shù)據(jù)集上完成。這一發(fā)現(xiàn)使得深度學(xué)習(xí)模型可以在小規(guī)模數(shù)據(jù)集上得到應(yīng)用。因此,您的特定任務(wù)并不需要更大規(guī)模的數(shù)據(jù)集來訓(xùn)練超大規(guī)模的模型,您只需要少量與您的任務(wù)相關(guān)的數(shù)據(jù)集。
這個(gè)發(fā)現(xiàn)徹底改變了計(jì)算機(jī)視覺社區(qū),因?yàn)樵谶w移學(xué)習(xí)的幫助下,我們基本上可以在所有小規(guī)模數(shù)據(jù)集中享受深度學(xué)習(xí)的好處。它們可以在許多計(jì)算機(jī)視覺任務(wù)中實(shí)現(xiàn)前所未有的準(zhǔn)確性。這只是改變游戲規(guī)則。因此,一些規(guī)模較大的數(shù)據(jù)集,比如ImageNet數(shù)據(jù)集,不再是一個(gè)細(xì)粒度或繁瑣的細(xì)粒度分類問題,它有超過100萬張圖像或1000個(gè)類。ImageNet數(shù)據(jù)集成為我們學(xué)習(xí)的引擎,基本上可以幫助所有計(jì)算機(jī)視覺任務(wù)的通用表征。
![]()
遷移學(xué)習(xí)的這一發(fā)現(xiàn)影響如此之大,其影響遠(yuǎn)遠(yuǎn)超出了計(jì)算機(jī)視覺的范圍。例如,GPT或者ChatGPT模型也是按照完全相同的原理開發(fā)的。接下來我要談?wù)勎易钕矚g的另一部作品,這項(xiàng)工作被稱為VGG,是Visual Geometric Group的縮寫,該小組是牛津大學(xué)的一個(gè)小組。
VGG架構(gòu)非常簡(jiǎn)單,這只是關(guān)于我們?nèi)绾螛?gòu)建一個(gè)非常深入的神經(jīng)網(wǎng)絡(luò)架構(gòu)而不需要花哨的想法。所以VGG網(wǎng)絡(luò)是高度模塊化的設(shè)計(jì),它只有卷積層、池化層和全連接層。而且所有的卷積層實(shí)際上都是三乘三的,因此不需要仔細(xì)設(shè)計(jì)這些層。所以VGG網(wǎng)絡(luò)只是簡(jiǎn)單地堆疊相同類型的模塊,它們就可以構(gòu)建非常深的神經(jīng)網(wǎng)絡(luò)架構(gòu),例如最多90層,是之前最深模型的兩倍。
![]()
有趣的是,它第一次顯示出明確的證據(jù)表明更深的模型會(huì)比更淺的模型更好。這似乎是一個(gè)令人驚訝的說法,因?yàn)椋聦?shí)上,當(dāng)時(shí)幾乎沒有明確的證據(jù)表明更深的模型更好。一部分原因是在VGGNet論文之前,當(dāng)人們?cè)黾由窠?jīng)網(wǎng)絡(luò)的深度時(shí),他們同時(shí)還做其他事情。所以沒有明確的證據(jù)表明更深層次是網(wǎng)絡(luò)獲得更好準(zhǔn)確率的主要原因。
然后在VGGNet論文中,作者設(shè)計(jì)了非常仔細(xì)的控制實(shí)驗(yàn)。他們?cè)噲D消除架構(gòu)設(shè)計(jì)中的所有花里胡哨的東西。他們引入了很少的配置工程,并且開發(fā)了非常簡(jiǎn)單的規(guī)則來設(shè)置每個(gè)階段的通道數(shù)或?qū)訑?shù)。他們所做的一切只是添加越來越多的3x3卷積層。這是一個(gè)非常簡(jiǎn)單的設(shè)計(jì),這是非常優(yōu)雅的。然而,這些簡(jiǎn)單的基線很難被超越。事實(shí)上,在那些年里,VGG 神經(jīng)網(wǎng)絡(luò)是計(jì)算機(jī)視覺領(lǐng)域最先進(jìn)的架構(gòu)。它是我們解決很多不同問題的默認(rèn)主干架構(gòu),包括分類、檢測(cè)和分割。而且它們可以輕松超越使用較淺神經(jīng)網(wǎng)絡(luò)架構(gòu)的對(duì)手。實(shí)際上,VGGNetworks是之前最先進(jìn)的更深層次的神經(jīng)網(wǎng)絡(luò)。
![]()
關(guān)于VGGNetworks架構(gòu)只有一個(gè)警告,也就是說,這些模型沒有經(jīng)過端到端訓(xùn)練。令人驚訝的是,這些模型是通過一種稱為分階段訓(xùn)練的技術(shù)進(jìn)行訓(xùn)練的。例如,為了訓(xùn)練更深的神經(jīng)網(wǎng)絡(luò)架構(gòu),他們需要預(yù)先訓(xùn)練一個(gè)較淺的對(duì)應(yīng)部分。然后,他們?cè)谥暗哪P椭咸砑恿藘蓚€(gè)層,然后不斷對(duì)其進(jìn)行微調(diào)。所以這種分階段的訓(xùn)練策略其實(shí)并不理想。這實(shí)際上違背了深度學(xué)習(xí)的端到端訓(xùn)練理念。為了從頭開始訓(xùn)練這些模型架構(gòu),我們需要開發(fā)更好的初始化算法。
![]()
然后,在VGGNetworks論文發(fā)表的第二年,社區(qū)開始更加關(guān)注網(wǎng)絡(luò)初始化問題。然后,現(xiàn)在讓我們?cè)倏s小一點(diǎn),我們將討論為什么這些更深的神經(jīng)網(wǎng)絡(luò)更難訓(xùn)練。直觀地說,一個(gè)非常深的神經(jīng)網(wǎng)絡(luò)將具有許多構(gòu)建塊和許多模塊的堆棧。現(xiàn)在假設(shè),如果每一個(gè)積木都會(huì)做錯(cuò)事,或者會(huì)帶來一些麻煩,那么當(dāng)我們把這個(gè)積木堆放很多次之后,我們的麻煩就只會(huì)越來越多。所以在實(shí)踐中,我們會(huì)看到一些信號(hào)爆炸的問題,或者我們也可能會(huì)看到一些信號(hào)消失的問題。在這種情況下,我們可能需要一些網(wǎng)絡(luò)初始化幫助我們讓神經(jīng)網(wǎng)絡(luò)開始訓(xùn)練。接下來,我將更深入地研究網(wǎng)絡(luò)初始化算法。
![]()
這里我展示了一個(gè)簡(jiǎn)單的層,它在神經(jīng)網(wǎng)絡(luò)中是線性的。在這種情況下,輸入x將有x個(gè)節(jié)點(diǎn)或x個(gè)神經(jīng)元,輸出y將有m個(gè)節(jié)點(diǎn)。輸出只是輸入的線性變換,變換將由權(quán)重矩陣w表示。在神經(jīng)網(wǎng)絡(luò)架構(gòu)中這是一件簡(jiǎn)單的事情。
那么如果我們假設(shè)所有元素都在這里,例如x,y和w,彼此獨(dú)立,并且如果我們進(jìn)一步假設(shè)整個(gè)神經(jīng)網(wǎng)絡(luò)內(nèi)部只有線性激活,那么我們可以證明,信號(hào)經(jīng)過一層處理后,信號(hào)的方差將按縮放因子縮放。例如,該方程基本上表示該層輸出的方差等于輸入神經(jīng)元的數(shù)量乘以權(quán)重矩陣的方差乘以輸入信號(hào)的方差。因此該層將通過該縮放因子縮放信號(hào)的方差。
如果我們沒有任何激活或者我們的激活函數(shù)是線性的,我們可以在非常深的神經(jīng)網(wǎng)絡(luò)中多次應(yīng)用這個(gè)公式。好吧,我們將看到方差仍然按比例縮放許多縮放因子的乘積。這個(gè)方程基本上表示輸出,即網(wǎng)絡(luò)輸出的方差,等于這些數(shù)字乘以網(wǎng)絡(luò)輸入方差的乘積。這就是前向傳播的公式。
我們可以做一些數(shù)學(xué)計(jì)算,然后我們會(huì)得到一個(gè)逆向公式,向后的表述方式也非常相似。基本上這個(gè)方程表示,如果你想通過反向傳播計(jì)算淺層的梯度,那么這個(gè)梯度的方差將等于這些許多縮放因子的乘積乘以網(wǎng)絡(luò)輸出梯度的方差。這就是后向傳播公式。
![]()
那么基本上這很多因素的乘積基本上就是說,如果每個(gè)單層的縮放因子都小于1,那么這個(gè)效果會(huì)經(jīng)過很多層的積累之后,你將會(huì)遇到梯度消失的問題。也就是說,你的網(wǎng)絡(luò)不會(huì)進(jìn)行訓(xùn)練。它似乎已經(jīng)飽和,或者似乎已經(jīng)收斂。但真正的原因是它沒有收到足夠的梯度來進(jìn)行訓(xùn)練。另一方面,如果每個(gè)層的縮放因子都大于1,您將遇到梯度爆炸問題。也就是說,你的網(wǎng)絡(luò)可能會(huì)在第一次迭代中出現(xiàn)分歧。
![]()
然后為了讓網(wǎng)絡(luò)至少開始訓(xùn)練,我們需要開發(fā)良好的初始化算法。前面的推導(dǎo)將引導(dǎo)我們得到這種初始化方法,在PyTorch或TensorFlow包中稱為Xavier初始化。基本上,您希望將此縮放因子設(shè)置為每個(gè)單層的縮放因子。您可能想要將前向公式設(shè)置為1,或者將后向公式設(shè)置為1。這就是初始化神經(jīng)網(wǎng)絡(luò)中每一層權(quán)重的方法。通常在實(shí)踐中,您只需要設(shè)置一種或另一種形式即可。其實(shí)這并不重要。
![]()
這種網(wǎng)絡(luò)初始化可以幫助我們?cè)谛盘?hào)傳播過程中保留信號(hào)的方差。而之前的推導(dǎo)是基于激活函數(shù)是線性的假設(shè)。而在實(shí)踐中,通常這不是您想要的。您可能想引入ReLU激活。那么我們還可以證明,隨著ReLU的引入,您可能想稍微改變一下這個(gè)公式。意味著,您需要在這些方程中添加一個(gè)1/2的因子。直觀地講,ReLU激活可能會(huì)在訓(xùn)練過程中削減一半的信號(hào)。這就是為什么您需要引入1比2的比例因子。盡管這似乎是一個(gè)非常小的變化,但與之前的版本相比,事實(shí)證明它非常重要。這是因?yàn)椋绻诿恳粚佣家胍恍﹩栴}或一些麻煩,那么在很多層之后,如果您沒有做對(duì)事情,您將遇到梯度消失問題。這個(gè)初始化方法可以幫助我們訓(xùn)練VGG網(wǎng)絡(luò),從頭開始,無需階段性訓(xùn)練。這就是我們?nèi)绾握_初始化神經(jīng)架構(gòu)。
![]()
讓我們回到2014年。接下來我要講的是另外一個(gè)非常有趣的工作,這與VGG網(wǎng)絡(luò)并行。這一領(lǐng)域的研究通常被稱為GoogleNet或Inception。這項(xiàng)研究的一個(gè)共同主題是如何設(shè)計(jì)深度且同時(shí)經(jīng)濟(jì)的卷積神經(jīng)網(wǎng)絡(luò)。其中涉及到幾個(gè)有趣的想法。第一個(gè)想法是使用多個(gè)分支。例如,同一模塊中可能有1x1、3x3或5x5卷積。同時(shí),您可以使用1x1卷積作為瓶頸。也就是說,您可以使用這個(gè)1x1的卷積來靈活控制您的神經(jīng)網(wǎng)絡(luò)的通道數(shù)。在某些其他情況下,您可以減少通道數(shù)或增加通道數(shù)。同樣作為副產(chǎn)品,GoogleNet還引入了1x1卷積作為其模塊中的快捷方式。所以它是一個(gè)shortcut,因?yàn)檫@個(gè)1x1的卷積可以比同一個(gè)模塊中的其他分支更淺,所以它可以被稱為shortcut。
![]()
實(shí)際上,在我看來,Inception架構(gòu)簡(jiǎn)直太瘋狂了,而且有數(shù)百萬個(gè)不同設(shè)計(jì)的版本。大多數(shù)時(shí)候,如果你足夠幸運(yùn),那就太好了。它將在神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)方面為您提供非常引人注目的計(jì)算和準(zhǔn)確性權(quán)衡。然而,它也帶來了另一個(gè)問題。因此,這些架構(gòu)的瘋狂設(shè)計(jì)可能會(huì)打破我們開發(fā)初始化算法所需的簡(jiǎn)單假設(shè)。所以你可能想開發(fā)一些其他的初始化算法專門針對(duì)所有這些瘋狂的設(shè)計(jì),或者您可能想引入一些其他模塊來幫助您更改這些神經(jīng)網(wǎng)絡(luò)架構(gòu)。
![]()
受到這些Inception架構(gòu)的激勵(lì),人們開始看看另一類方法,它們?cè)谏窠?jīng)網(wǎng)絡(luò)中被稱為歸一化模塊。2015年,人們開始關(guān)注標(biāo)準(zhǔn)化模塊。其實(shí),早在這之前,人們就已經(jīng)意識(shí)到,如果我們想要訓(xùn)練一個(gè)非常好的神經(jīng)網(wǎng)絡(luò),如果我們想要這個(gè)神經(jīng)網(wǎng)絡(luò)開始收斂,您可能想要標(biāo)準(zhǔn)化輸入。事實(shí)上,即使在今天,這就是您需要對(duì)數(shù)據(jù)進(jìn)行預(yù)處理的操作。而另一方面,我們剛才講的網(wǎng)絡(luò)初始化方法也可以被認(rèn)為是歸一化的一種形式。這是因?yàn)槲覀兿M谛盘?hào)傳播過程中保持信號(hào)的方差或多或少保持不變。這種網(wǎng)絡(luò)初始化的歸一化是基于一些分析推導(dǎo)或分析假設(shè)。而這些假設(shè)只在訓(xùn)練開始時(shí)有效,在訓(xùn)練過程中就會(huì)被打破。這并不理想。
為了解決這個(gè)問題,人們想開發(fā)另一個(gè)模塊,它基本上是神經(jīng)網(wǎng)絡(luò)內(nèi)的一層。并且這些模塊會(huì)在整個(gè)訓(xùn)練過程中進(jìn)行歸一化。因此他們可以在整個(gè)過程中保持信號(hào)標(biāo)準(zhǔn)化。如果你想將這些模塊應(yīng)用于所有層,它們還可以幫助您保持指定的所有層的信號(hào)標(biāo)準(zhǔn)化。而且,該歸一化模塊可以通過反向傳播進(jìn)行端到端訓(xùn)練,因此它們只是深度學(xué)習(xí)方法工具箱中的另一個(gè)簡(jiǎn)單且通用的模塊。
![]()
這是可以由歸一化模塊執(zhí)行的典型計(jì)算的示例。通常會(huì)涉及三個(gè)步驟。在第一步中,我們可能想要計(jì)算該模塊的輸入信號(hào)的期望或方差。然后我們可以通過減去平均值和除以標(biāo)準(zhǔn)差。而這個(gè)操作可能會(huì)降低自由度,因?yàn)槲覀冞M(jìn)行了這種標(biāo)準(zhǔn)化。所以我們可能想要補(bǔ)償這種減少通過引入另一個(gè)線性變換,可以簡(jiǎn)單地是Ax加b。并且這三個(gè)操作可以放在一個(gè)層中,這是標(biāo)準(zhǔn)化模塊或標(biāo)準(zhǔn)化層。從概念上講,這一層基本上可以在神經(jīng)網(wǎng)絡(luò)架構(gòu)中的任何地方或任何地方使用。
![]()
在實(shí)踐中,規(guī)范化模塊有多種類型。這些模塊之間的區(qū)別之一在于它們計(jì)算均值和方差的支持集。例如,在本例中,我顯示了2D圖像的張量。這里,n是batch size的軸,c是通道數(shù),h和w是高度,即空間大小。而這個(gè)操作就代表了批量歸一化操作。基本上,它將計(jì)算整個(gè)空間域的統(tǒng)計(jì)數(shù)據(jù),并且還跨批處理域。這就是為什么它被稱為批量歸一化。然后還有許多其他類型的歸一化層。它們僅在支持集的定義上有所不同。今天,我們使用的最流行的選擇之一,或者也許是我們使用的默認(rèn)選擇,是層標(biāo)準(zhǔn)化操作。因此還值得注意的是,它在限制或Transformer中的定義可能略有不同。
![]()
那么,為什么這些標(biāo)準(zhǔn)化模塊很重要呢?所以首先,使用這些模塊可以使模型開始訓(xùn)練,否則他們就會(huì)停止訓(xùn)練,或者一開始就會(huì)出現(xiàn)分歧。另一方面,即使模型可以開始訓(xùn)練,歸一化模塊的引入有助于加快收斂速度,也有助于提高模型收斂時(shí)的精度。
![]()
接下來我要講一下ResNet。在此之前,讓我們稍微縮小一下我們來記錄一下深度學(xué)習(xí)的核心思想是什么。因此,關(guān)鍵思想是將一組簡(jiǎn)單的通用模塊組合成高度復(fù)雜的功能。所以為了組成大量簡(jiǎn)單的模塊,我們可能想要構(gòu)建一個(gè)不同的神經(jīng)網(wǎng)絡(luò)架構(gòu)。這是基礎(chǔ),也是ResNet架構(gòu)背后的基本動(dòng)機(jī)。
在殘差學(xué)習(xí)的這項(xiàng)工作中,我們證明了深度學(xué)習(xí)或深度神經(jīng)網(wǎng)絡(luò)架構(gòu)可以比人們想象的更深入。而且,有趣且令人驚訝的是,這可以通過一個(gè)非常簡(jiǎn)單的組件來完成,這只是一個(gè)身份快捷方式,從概念上講,基本上,它幾乎什么都不做。然而,這個(gè)簡(jiǎn)單組件的引入可以使數(shù)百層的神經(jīng)網(wǎng)絡(luò)從頭開始訓(xùn)練并達(dá)到更好的精度。接下來,我將講述一些關(guān)于ResNet的故事。
![]()
ResNet的靈感來自于一項(xiàng)經(jīng)驗(yàn)觀察,這就是所謂的退化問題。我們討論了非常好的初始化方法以及非常有效的標(biāo)準(zhǔn)化模塊。然后在這些模塊的幫助下,我們足以從頭開始訓(xùn)練非常深的神經(jīng)網(wǎng)絡(luò)架構(gòu)并獲得一定的準(zhǔn)確性。那么,深度學(xué)習(xí)是否只是堆疊越來越多的層那么簡(jiǎn)單呢?不幸的是,答案是否定的。實(shí)際上,事實(shí)證明,在20層之后模型會(huì)很快退化。而這種退化并不是因?yàn)檫^度擬合。也就是說,越深的模型不僅驗(yàn)證精度越差,他們?cè)趯?shí)踐中的訓(xùn)練準(zhǔn)確性也會(huì)較差。事實(shí)證明,這些不同的神經(jīng)網(wǎng)絡(luò)只是更難訓(xùn)練,這是違反直覺的。
![]()
現(xiàn)在讓我們來做一個(gè)思想實(shí)驗(yàn)。較深的模型實(shí)際上比較淺的模型具有更豐富的解空間。所以也就是說,越深的神經(jīng)網(wǎng)絡(luò)不應(yīng)該有越低的訓(xùn)練精度。我們很容易通過構(gòu)建得到更深層次的神經(jīng)網(wǎng)絡(luò)的解決方案。如果我們能做到的話,我們可以簡(jiǎn)單地訓(xùn)練一個(gè)較淺的神經(jīng)網(wǎng)絡(luò)來達(dá)到一定的精度。然后我們可以將訓(xùn)練后的層從這個(gè)較淺的模型復(fù)制到更深的對(duì)應(yīng)層中的相應(yīng)層。然后對(duì)于更深層特有的其他層,我們可以簡(jiǎn)單地將它們?cè)O(shè)置為身份映射。以及這種更深層神經(jīng)架構(gòu)解決方案的存在。建議至少應(yīng)該具備一些較淺的對(duì)應(yīng)物。然而,退化的經(jīng)驗(yàn)觀察表明,優(yōu)化可能無法找到該解決方案,或者優(yōu)化可能無法找到與該解決方案足夠相似的解決方案。這促使我們開發(fā)一個(gè)稱為深度殘差學(xué)習(xí)的框架。
![]()
再次,讓我們縮小一點(diǎn),想象一個(gè)非常深的神經(jīng)網(wǎng)絡(luò)架構(gòu)。然后讓我們關(guān)注一個(gè)非常深的神經(jīng)架構(gòu)內(nèi)的一個(gè)小子網(wǎng)。在此圖中,這個(gè)小子網(wǎng)只有兩層。然后我們使用函數(shù) hx 來表示要適合這個(gè)小子網(wǎng)的底層所需函數(shù)。在經(jīng)典的普通神經(jīng)網(wǎng)絡(luò)的情況下,我們唯一能做的就是希望這兩層能夠契合hx的底層功能。
![]()
然而,殘差學(xué)習(xí)的思想就不同了。我們不需要使用這個(gè)權(quán)重層來直接擬合這個(gè)函數(shù)hx。相反,我們可能希望它們適合另一個(gè)函數(shù),即 fx。這個(gè)函數(shù)將代表我們可以在這個(gè)小子網(wǎng)的輸入之上進(jìn)行的增量或更改。為了擁有原來想要的功能,我們只需要將 fx 添加到該子網(wǎng)的輸入中即可。并且這種加法可以很容易地實(shí)現(xiàn)為恒等映射,它將該子網(wǎng)的輸入連接到該子網(wǎng)的輸出。并且信號(hào)將通過逐元素相加來合并。這也將把這個(gè)子網(wǎng)變成一個(gè)殘差塊。
![]()
在這個(gè)殘差塊中,權(quán)重層將執(zhí)行一個(gè)稱為殘差函數(shù)的函數(shù)。基本上,殘差函數(shù)只是輸入之上的增量變化。現(xiàn)在讓我們將整個(gè)殘差塊視為我們要使用的函數(shù)。如果恒等映射對(duì)于該函數(shù)是最佳的,那么我們應(yīng)該很容易實(shí)現(xiàn)它。因?yàn)槲覀兛梢詫⑺袡?quán)重層設(shè)置為零。如果恒等映射幾乎是最優(yōu)的,那么我們也許也能有一個(gè)好的解決方案,因?yàn)槲覀兛梢詫?quán)重設(shè)置為一些小數(shù)字。
從這個(gè)意義上說,實(shí)際上,剩余學(xué)習(xí)的想法鼓勵(lì)進(jìn)行小的、保守的和漸進(jìn)的改變的基石。然而,通過將許多小的改變放在一起,我們?nèi)匀挥锌赡軐W(xué)習(xí)一個(gè)非常復(fù)雜的函數(shù)。這也遵循深度學(xué)習(xí)方法論。再次,作為引入殘差塊的副產(chǎn)品,我們很容易有另一種初始化方法。我們可以在訓(xùn)練開始時(shí)將權(quán)重設(shè)置為一些小數(shù)字或?qū)⑺鼈冊(cè)O(shè)置為零。
![]()
也就是說,整個(gè)殘差塊將只是恒等映射或類似于訓(xùn)練開始時(shí)的恒等映射。所以信號(hào)在前向過程中也是在后向過程中可以在訓(xùn)練開始時(shí)使用此恒等映射輕松傳播。所以你不需要太擔(dān)心初始化算法。
![]()
那么,我們很容易采用這個(gè)想法來構(gòu)建一個(gè)非常深的神經(jīng)網(wǎng)絡(luò)架構(gòu)。因此,從某種意義上說,您可能只需要將這么多身份連接添加到普通神經(jīng)網(wǎng)絡(luò)中,然后就可以將其變成殘差神經(jīng)網(wǎng)絡(luò)。或者等價(jià)地,這可以被認(rèn)為是簡(jiǎn)單地堆疊許多殘差塊來創(chuàng)建一個(gè)非常深的模型。所以從這個(gè)意義上來說,殘差塊的引入或者設(shè)計(jì)實(shí)際上成為我們構(gòu)建非常深的神經(jīng)網(wǎng)絡(luò)架構(gòu)的新通用設(shè)計(jì)或新通用模塊。
所以引入ResNet之后,人們開始關(guān)注每一個(gè)構(gòu)建模塊的設(shè)計(jì)。也許最成功的設(shè)計(jì)之一是Transformer塊。之后,您只需要多次堆疊相同類型的塊即可,當(dāng)您有更多層時(shí),您不需要仔細(xì)設(shè)計(jì)每個(gè)特定層。
![]()
這里是一些關(guān)于 ResNet 的結(jié)果。圖中,x軸是神經(jīng)網(wǎng)絡(luò)的深度,y軸是分類精度。這個(gè)數(shù)字基本上表明,例如,普通神經(jīng)網(wǎng)絡(luò)在 20 層之后將開始快速退化。而且ResNet可以在多層之后不斷改進(jìn)。同樣的模式也可能發(fā)生在 ImageNet 和許多其他數(shù)據(jù)集上。
![]()
而這個(gè)模式可以概括為這樣的形式:在沒有剩余連接的幫助下,神經(jīng)網(wǎng)絡(luò)將在某一點(diǎn)后開始退化,具體取決于您的場(chǎng)景。并且在殘差連接的幫助下,它可以不斷改進(jìn),當(dāng)你添加越來越多的層時(shí),這是一個(gè)非常理想的屬性。
![]()
這里列出了構(gòu)建和訓(xùn)練非常深層的神經(jīng)網(wǎng)絡(luò)架構(gòu)時(shí)可以執(zhí)行的幾項(xiàng)操作的清單。其中許多概念都是關(guān)于我們?nèi)绾螕碛薪】档挠?xùn)練過程中的信號(hào)傳播。這方面包括使用真實(shí)世界的激活或類似形狀的其他激活,以及適當(dāng)?shù)某跏蓟惴ǖ氖褂谩K€包括將歸一化模塊和殘差連接引入神經(jīng)網(wǎng)絡(luò)架構(gòu)中。
![]()
很好,我已經(jīng)討論過使用卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí) 2D 圖像的深度表征。接下來,我也會(huì)簡(jiǎn)單講一下我們?nèi)绾螐囊痪S序列中學(xué)習(xí)深度表征。
![]()
我們進(jìn)行一維序列建模的經(jīng)典模型是 循環(huán)神經(jīng)網(wǎng)絡(luò),簡(jiǎn)稱 RNN。循環(huán)神經(jīng)網(wǎng)絡(luò)是一種非常特殊的神經(jīng)網(wǎng)絡(luò),它的連接中有循環(huán)。也就是說,給定一個(gè)循環(huán)神經(jīng)網(wǎng)絡(luò)單元,它將獲取當(dāng)前時(shí)間步的輸入,比如說 xt,然后根據(jù)該輸入生成一個(gè)隱藏狀態(tài),例如 ht。這個(gè)隱藏狀態(tài)將用于確定該時(shí)間步的輸出。而這個(gè)隱藏狀態(tài)也將作為下一個(gè)時(shí)間步的輸入。
如果我們沿著時(shí)間軸展開這個(gè)循環(huán)神經(jīng)網(wǎng)絡(luò)架構(gòu),我們可以看到,它實(shí)際上是另一個(gè)權(quán)重共享模型,權(quán)重在時(shí)間維度上共享。而且,該架構(gòu)也是本地連接的表述。例如,對(duì)于每個(gè)單元, 它僅連接到該時(shí)間步的輸入,并且還連接到前一個(gè)時(shí)間步。因此,我們?cè)俅慰吹綑?quán)重共享和本地連接仍然是循環(huán)神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)中的兩個(gè)關(guān)鍵屬性。這在概念上與卷積神經(jīng)網(wǎng)絡(luò)非常相似。
![]()
我們?nèi)绾螛?gòu)建深度循環(huán)神經(jīng)網(wǎng)絡(luò)?事實(shí)證明它也非常簡(jiǎn)單。從某種意義上說,您只需將循環(huán)神經(jīng)網(wǎng)絡(luò)單元的狀態(tài)視為新序列,然后就可以使用另一個(gè)單元來處理該序列。也就是說,你可以將許多循環(huán)神經(jīng)網(wǎng)絡(luò)單元堆疊在一起,你將擁有一個(gè)更深的神經(jīng)網(wǎng)絡(luò)。例如,在這里,我展示了三層循環(huán)神經(jīng)網(wǎng)絡(luò)的情況。在這種情況下,如果我們考慮該神經(jīng)元的輸出,它將取決于所有較淺層的輸出。它還將取決于同一層中所有先前的時(shí)間步。這只是循環(huán)神經(jīng)網(wǎng)絡(luò)架構(gòu)的一個(gè)屬性。
![]()
這是深度循環(huán)神經(jīng)網(wǎng)絡(luò)在實(shí)踐中的一個(gè)例子。這個(gè)例子來自谷歌的神經(jīng)機(jī)器翻譯系統(tǒng),這是 2016 年為其產(chǎn)品開發(fā)的。在本例中,他們堆疊了多個(gè) LSTM 單元來構(gòu)建這個(gè)深度循環(huán)神經(jīng)網(wǎng)絡(luò)。LSTM 只是一種非常有效的 RNN 形式的特殊形式。在這項(xiàng)工作中,作者報(bào)告說,為了構(gòu)建這個(gè)非常深的 LSTM 模型,他們?nèi)匀恍枰褂檬S噙B接。他們報(bào)告說,在殘余連接的幫助下,他們可以訓(xùn)練多達(dá) 16 層的深度 LSTM,并享受更深層次的好處。如果他們不使用剩余連接,他們?cè)谒膶又缶陀^察到了降解問題。
有趣的是,這個(gè)觀察結(jié)果與我們?cè)诰矸e神經(jīng)網(wǎng)絡(luò)上所做的觀察非常相似。這再次證明了深度學(xué)習(xí)方法的強(qiáng)大功能和通用性。也就是說,如果我們從一個(gè)應(yīng)用程序開發(fā)出一個(gè)非常有效且非常通用的組件,那么您很可能會(huì)享受到其他一些應(yīng)用程序的好處。所以在這種情況下,就開發(fā)了原來的殘差連接在卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行2D圖像處理的場(chǎng)景中。但它的行為也可以在完全不同的場(chǎng)景中觀察到,使用遞歸神經(jīng)網(wǎng)絡(luò)進(jìn)行一維序列建模。
![]()
那么,循環(huán)神經(jīng)網(wǎng)絡(luò)并不是我們對(duì)一維序列進(jìn)行建模的唯一方法。我們?nèi)匀豢梢允褂媒?jīng)典的卷積神經(jīng)網(wǎng)絡(luò)來實(shí)現(xiàn)或多或少相同的目標(biāo)。我們只需在一維維度上應(yīng)用滑動(dòng)窗口,然后就可以對(duì)一維序列進(jìn)行卷積。如果我們想要進(jìn)行因果推理,可能需要在此處做一些微小的調(diào)整,也就是說,我們可能希望通過卷積來執(zhí)行一些因果計(jì)算。對(duì)于卷積核來說,它只能看到當(dāng)前時(shí)間步或任何先前的時(shí)間步,而無法看到任何未來的時(shí)間步長。
在卷積神經(jīng)網(wǎng)絡(luò)的情況下,局限性是非常明顯的。如果你想捕捉更長的上下文,你需要建立一個(gè)更深的神經(jīng)網(wǎng)絡(luò)架構(gòu)。這是因?yàn)閷?duì)于每個(gè)單層,上下文長度將受到內(nèi)核大小的限制。例如,對(duì)于某個(gè)神經(jīng)元,它的上下文僅取決于當(dāng)前時(shí)間步和前一個(gè)時(shí)間步。因此,為了擁有更長的上下文,你可能需要更多層。這個(gè)神經(jīng)元將取決于最多三個(gè)時(shí)間步的距離。這就是當(dāng)我們使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行序列建模時(shí),你可以獲得更長的上下文的方式。
![]()
接下來,我將討論另一個(gè)具體例子。這個(gè)例子來自 DeepMind 的 WaveNet 架構(gòu),這里的應(yīng)用程序是音頻生成。在這種情況下,他們不僅使用了因果卷積,而且還將其推廣到另一種操作,稱為擴(kuò)張。擴(kuò)張卷積意味著卷積核不需要依賴于前一步。它可能取決于可能相隔許多時(shí)間步的時(shí)間步。膨脹操作可以幫助我們大大增加卷積核的大小,并且它可以幫助我們捕獲更長的上下文。但即便如此,作者仍然需要堆疊很多卷積層來構(gòu)建一個(gè)非常深的卷積神經(jīng)網(wǎng)絡(luò)以捕獲長上下文。因此,他們?nèi)匀恍枰獨(dú)堄噙B接的幫助以便享受訓(xùn)練更深層神經(jīng)網(wǎng)絡(luò)的好處。
![]()
這里從概念上總結(jié)了不同的序列建模范例。在循環(huán)神經(jīng)網(wǎng)絡(luò)的情況下,對(duì)于每個(gè)單層和每個(gè)時(shí)間步長,它可以看到完整的上下文。也就是說,如果我們考慮這個(gè)神經(jīng)元,它的計(jì)算將取決于同一層中所有先前時(shí)間步的計(jì)算。如果你希望在應(yīng)用程序中進(jìn)行一些遠(yuǎn)程推理,這可能是一個(gè)理想的屬性。然而,另一方面,也因?yàn)檫@個(gè)屬性,循環(huán)神經(jīng)網(wǎng)絡(luò)的計(jì)算不是前饋的。也就是說,為了計(jì)算這個(gè)神經(jīng)元的輸出,你需要等待前面所有神經(jīng)元的輸出完成。所以這種行為對(duì)于GPU中的并行實(shí)現(xiàn)并不友好。因此在實(shí)踐中,循環(huán)神經(jīng)網(wǎng)絡(luò)在 GPU 實(shí)現(xiàn)上效率不高。
作為比較,卷積神經(jīng)網(wǎng)絡(luò)具有完全不同的行為。一方面,該模型是完全前饋的。因此,對(duì)于同一層中的每個(gè)神經(jīng)元,你不需要等待其他神經(jīng)元完成其計(jì)算。所以這對(duì)于GPU中的并行實(shí)現(xiàn)非常友好。所以通常情況下,卷積神經(jīng)網(wǎng)絡(luò)在 GPU 實(shí)現(xiàn)上非常高效。另一方面,正如我們所討論的,上下文長度將受到卷積核大小的限制。這不是一個(gè)理想的屬性。
那么我們?cè)鯓硬拍軆扇涿滥兀窟@就是引入注意力機(jī)制的原因。簡(jiǎn)單地說,在注意力機(jī)制中,我們?cè)试S每個(gè)神經(jīng)元或每個(gè)時(shí)間步驟看到序列中的每個(gè)其他時(shí)間步驟。因此,對(duì)于每一個(gè)神經(jīng)元,它將能夠看到上一層的完整上下文。因此,如果你想要對(duì)長期推理進(jìn)行建模,那么這是神經(jīng)網(wǎng)絡(luò)架構(gòu)中所需的屬性。另一方面,在注意力機(jī)制中,所有計(jì)算都是前饋的。所以你不需要等待。你不需要等待同一層上一個(gè)時(shí)間步的計(jì)算完成。所以這種前饋計(jì)算對(duì)于GPU實(shí)現(xiàn)來說也是非常友好的。
![]()
注意力機(jī)制是一種非常流行的架構(gòu)(稱為 Transformer)背后的核心思想。由于時(shí)間有限,我不打算深入研究Transformer的技術(shù)細(xì)節(jié)。但我將分享Transformer設(shè)計(jì)的一些有趣的特性。第一個(gè)屬性是在Transformer中,我們?cè)试S每個(gè)節(jié)點(diǎn)看到其他每個(gè)節(jié)點(diǎn),正如我們所討論的。還有另一個(gè)有趣的特性,令許多從業(yè)者感到驚訝的是,實(shí)際上注意力計(jì)算是無參數(shù)的。所以不需要引入任何參數(shù)。也就是說,如果給你三個(gè)序列,比如說 Q、K、V,它是查詢、鍵和值的縮寫,那么注意力計(jì)算不需要引入任何可訓(xùn)練的參數(shù)。所以這與經(jīng)典的全連接層不同,其中每個(gè)連接都可以代表一個(gè)可訓(xùn)練的參數(shù)。在注意力計(jì)算的情況下,每個(gè)連接都代表沒有可訓(xùn)練的參數(shù)。這只是意味著這兩件事是相互關(guān)聯(lián)的。
那么參數(shù)在哪里呢?有趣的是,在 Transformer 架構(gòu)中,所有參數(shù)層都是前饋的。參數(shù)層將用于我們獲得稱為 Q、K、V 的序列,它們還將用于 MLP 塊中,即在表征空間中變換這些序列。從某種意義上說,所有這些參數(shù)層都只是一種一對(duì)一的卷積層。再說一遍,所有這些層都是本地連接的,因?yàn)樗鼈冎贿B接到當(dāng)前時(shí)間步,所有這些層都有跨時(shí)間維度共享的方式。再次,我們可以看到本地連接和共享方式仍然是神經(jīng)網(wǎng)絡(luò)架構(gòu)中的兩個(gè)關(guān)鍵屬性。而且,Transformer架構(gòu)是一個(gè)非常深入的模型,所以我們需要依賴某種類型的標(biāo)準(zhǔn)化操作以及我們訓(xùn)練這些非常深的模型的剩余連接。
![]()
Transformer架構(gòu)有許多成功的應(yīng)用,也許最受歡迎和最著名的一種是生成式預(yù)訓(xùn)練 Transformer,簡(jiǎn)稱 GPT。簡(jiǎn)單來說,GPT模型是自然語言處理的表征學(xué)習(xí)模型。GPT 模型是為“下一個(gè)世界預(yù)測(cè)”的任務(wù)而設(shè)計(jì)的。在此任務(wù)中,模型被賦予一個(gè)句子的前綴,并要求預(yù)測(cè)該前綴之后的下一個(gè)單詞是什么。在這種情況下,該句子可以是,例如,學(xué)生打開一些東西,模型被要求預(yù)測(cè)一些東西,模型可能會(huì)說,有一定概率,書。而這個(gè)模型,GPT模型,是在從互聯(lián)網(wǎng)收集的更大規(guī)模的數(shù)據(jù)集上進(jìn)行訓(xùn)練的,因此它能夠?qū)W習(xí)關(guān)于自然語言的非常好的表示。它還將學(xué)習(xí)該語言數(shù)據(jù)中包含的知識(shí)。GPT 模型是許多語言應(yīng)用程序背后的基礎(chǔ),包括ChatGPT。事實(shí)上,為了享受這種好處,我們?nèi)匀恍枰蕾囘w移學(xué)習(xí)范式。也就是說,我們?cè)诟笠?guī)模的數(shù)據(jù)上預(yù)訓(xùn)練這個(gè)模型,然后我們需要在一些較小規(guī)模的數(shù)據(jù)集中微調(diào)或遷移這個(gè)模型。
![]()
Transformer 的另一個(gè)成功應(yīng)用是 AlphaFold 應(yīng)用。簡(jiǎn)單來說,AlphaFold 是一種表征學(xué)習(xí)方法,用于蛋白質(zhì)折疊的應(yīng)用。在這種情況下,神經(jīng)結(jié)構(gòu)的輸入是氨基酸序列,架構(gòu)的輸出只是蛋白質(zhì)結(jié)構(gòu)。這個(gè)架構(gòu)有 48 個(gè)Transformer塊,該架構(gòu)將在更大規(guī)模的蛋白質(zhì)結(jié)構(gòu)數(shù)據(jù)集上進(jìn)行訓(xùn)練,這是過去幾十年來通過人體實(shí)驗(yàn)收集到的。有趣的是,盡管其中許多組件,例如Transformer塊或剩余連接的使用,最初是為許多其他應(yīng)用程序開發(fā)的,例如自然語言處理或圖像識(shí)別,這組完全相同的構(gòu)建模塊可以應(yīng)用于完全不同的蛋白質(zhì)折疊問題。這再次證明了深度學(xué)習(xí)方法的通用性。如果你開發(fā)了一套非常有效的工具,那么你也許能夠享受這些工具的好處,也許是在完全不同的領(lǐng)域。
![]()
然后我們準(zhǔn)備好回到計(jì)算機(jī)視覺,我們接下來要介紹的另一個(gè)非常成功的作品,它叫做Vision Transformer,或者ViT。從概念角度來看,視覺Transformer(ViT)只是Transformer在二維圖像處理中的應(yīng)用。實(shí)踐證明,這個(gè)想法的實(shí)現(xiàn)過程可以非常簡(jiǎn)單。我們只需準(zhǔn)備一個(gè)輸入圖像,將其劃分為一系列不重疊的補(bǔ)丁。然后,我們可以將Transformer架構(gòu)應(yīng)用到這個(gè)一維序列上,就像處理任何其他一維序列一樣。這個(gè)簡(jiǎn)單的想法被證明非常成功且有效,如今它已經(jīng)成為我們?cè)谟?jì)算機(jī)視覺中進(jìn)行圖像識(shí)別的首選之一。
(城主注:ViT技術(shù)就是當(dāng)前大熱的Sora大模型的核心基礎(chǔ)!)
VIT架構(gòu)的意義并不僅僅在于計(jì)算機(jī)視覺領(lǐng)域,因?yàn)樗状巫C明了Transformer架構(gòu)可以成為解決許多問題的統(tǒng)一架構(gòu),包括自然語言處理、計(jì)算機(jī)視覺、音頻識(shí)別、3D處理,以及許多其他序列處理問題。這再次證明了深度學(xué)習(xí)方法的通用性。
![]()
這是本教程的結(jié)論,也是本部分的一些要點(diǎn)。在本教程中,我介紹了什么是表征學(xué)習(xí)以及為什么它是一個(gè)重要問題。表征學(xué)習(xí)可能是我們?cè)诓煌I(lǐng)域和不同應(yīng)用程序中可能遇到的常見問題。而深度學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)正是我們解決表征學(xué)習(xí)問題的非常有效的工具。
再次強(qiáng)調(diào),深度學(xué)習(xí)的關(guān)鍵思想是將一組簡(jiǎn)單的通用模塊組合成高度復(fù)雜的函數(shù)。深度學(xué)習(xí)的思想可以為我們提供通用的工具來解決不同領(lǐng)域的不同問題,我希望您將來能夠在您的領(lǐng)域使用這些工具。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.