作者|Seth Weidman 譯者|大愚若智 編輯|Emily 為何閱讀本文? 無(wú)論該領(lǐng)域中的從業(yè)者,或是企業(yè)組織,為了運(yùn)用深度學(xué)習(xí)技術(shù),首先需要做好兩個(gè)準(zhǔn)備: “能做什么”:了解深度學(xué)習(xí)領(lǐng)域的最新進(jìn)展能夠用來做什么。 “怎么做”:訓(xùn)練新模型,或?qū)F(xiàn)有模型用于生產(chǎn)環(huán)境的技術(shù)能力。 在開源社區(qū)的努力下,第二個(gè)問題正變得越來越容易。目前已經(jīng)有大量?jī)?yōu)秀的教程在告訴大家,如何使用諸如 TensorFlow 等庫(kù)訓(xùn)練并使用深度學(xué)習(xí)模型,很多教程甚至每周都會(huì)發(fā)布新的內(nèi)容,例如 Towards Data Science。 因此一旦你明確了自己打算如何使用深度學(xué)習(xí)技術(shù),那么就可以努力讓想法變?yōu)楝F(xiàn)實(shí),雖然這一過程不那么簡(jiǎn)單,但只需要進(jìn)行標(biāo)準(zhǔn)化的“開發(fā)”工作,例如按照本文介紹的各種教程按圖索驥,結(jié)合自己的特定用途和 / 或數(shù)據(jù)進(jìn)行修改,根據(jù)大家在 StackOverflow 等網(wǎng)站進(jìn)行的討論進(jìn)行排錯(cuò),這就可以實(shí)現(xiàn)了。這也可以避免很多麻煩的事情,例如并不需要成為(或者雇傭)能夠從零開始自行開發(fā)神經(jīng)網(wǎng)絡(luò)的專家,而且還必須同時(shí)具備嫻熟的軟件工程經(jīng)驗(yàn)。 這一系列隨筆會(huì)試圖解答上文提出的第一個(gè)問題:從較高層面概括談?wù)勆疃葘W(xué)習(xí)技術(shù)到底能夠做些什么,同時(shí)會(huì)為希望進(jìn)一步了解的人提供一些資源,并 / 或通過展示代碼進(jìn)一步解決第二個(gè)問題。更具體來說,本文將涉及: 那些使用開源的架構(gòu)和數(shù)據(jù)集所取得的最新成果。 那些促成這些成果的重要架構(gòu)或其他見解。 如果要在你自己的項(xiàng)目中使用類似技術(shù),著手進(jìn)行前可能需要的最佳資源。 這些突破的共同之處 這些重大突破雖然涉及很多新的架構(gòu)和創(chuàng)意,但都是從機(jī)器學(xué)習(xí)中常見的“監(jiān)督式學(xué)習(xí)(Supervised Learning)”過程中涌現(xiàn)的。尤其是,都涉及下列步驟: 收集一個(gè)足夠龐大,并且恰當(dāng)?shù)挠?xùn)練數(shù)據(jù)集。 搭建一個(gè)神經(jīng)網(wǎng)絡(luò)架構(gòu)(一種復(fù)雜的方程組,可通過松散的方式模擬我們的大腦),網(wǎng)絡(luò)中通常會(huì)包含數(shù)百萬(wàn)個(gè)名為“權(quán)重(Weight)”的參數(shù)。 將數(shù)據(jù)反復(fù)不斷送入神經(jīng)網(wǎng)絡(luò),并對(duì)每次迭代后神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)結(jié)果與正確結(jié)果進(jìn)行比較,根據(jù)差異的具體程度和方向?qū)ι窠?jīng)網(wǎng)絡(luò)的每個(gè)權(quán)重進(jìn)行調(diào)整。 神經(jīng)網(wǎng)絡(luò)就是這樣訓(xùn)練的:這一過程將重復(fù)很多很多次。圖源。 類似的過程已經(jīng)應(yīng)用于很多領(lǐng)域,并且都已產(chǎn)生了非常“博學(xué)”的神經(jīng)網(wǎng)絡(luò)。每個(gè)領(lǐng)域我們將涉及: 訓(xùn)練模型所需的數(shù)據(jù) 所使用的模型架構(gòu) 結(jié)果 圖片分類 神經(jīng)網(wǎng)絡(luò)通過訓(xùn)練可以識(shí)別圖片中包含的物體。 所需數(shù)據(jù) 圖片分類器的訓(xùn)練需要用到帶標(biāo)簽的圖片,其中每張圖片均屬于數(shù)量有限的類別中的一種或幾種。例如,CIFAR 10 數(shù)據(jù)就是訓(xùn)練圖片分類器所用的一種標(biāo)準(zhǔn)化數(shù)據(jù)集,其中已正確添加了標(biāo)簽的圖片共屬于 10 個(gè)類別: CIFAR-10 數(shù)據(jù)中的圖片示例。圖源 深度學(xué)習(xí)架構(gòu) 本文涉及的所有神經(jīng)網(wǎng)絡(luò)架構(gòu)都源自對(duì)人類學(xué)著解決問題的方法所進(jìn)行的思考。人類是如何檢測(cè)圖片的?當(dāng)人類看到一張圖片后,我們首先會(huì)查看一些最頂層的視覺特征,例如分支、鼻子或車輪。然而為了檢測(cè)出這些特征,我們需要在潛意識(shí)里確定一些底層特征,例如顏色、線條以及其他形狀。實(shí)際上,為了從原始像素中識(shí)別出人類可以認(rèn)出的復(fù)雜特征,例如眼睛,我們必須首先檢測(cè)像素特征,隨后檢測(cè)像素特征的特征,以此類推。 在深度學(xué)習(xí)技術(shù)誕生前,研究人員會(huì)嘗試手工提取這些特征,并將其用于預(yù)測(cè)。就在深度學(xué)習(xí)技術(shù)誕生前一刻,研究人員還在試圖使用技術(shù)手段(主要是 SVM)找出這些手工提取的特征之間蘊(yùn)含的復(fù)雜的非線性關(guān)系,據(jù)此才能確定圖片中包含的到底是貓還是狗。 卷積神經(jīng)網(wǎng)絡(luò)(CNN)在每一層提取的特征。圖源 現(xiàn)在,研究人員開發(fā)的神經(jīng)網(wǎng)絡(luò)架構(gòu)可以從原始像素中學(xué)習(xí)這些特征,尤其是深度卷積神經(jīng)網(wǎng)絡(luò)更是非常適合此類任務(wù)。這些網(wǎng)絡(luò)可以提取像素特征,隨后提取像素特征的特征,以此類推,最終將結(jié)果送入常規(guī)的神經(jīng)網(wǎng)絡(luò)層(類似于邏輯回歸)并做出最終預(yù)測(cè)。 針對(duì) ImageNet 數(shù)據(jù)集中的圖片進(jìn)行預(yù)測(cè)的 CNN 架構(gòu)預(yù)測(cè)結(jié)果范例。 隨后我還將另行撰文,深入介紹如何將卷積神經(jīng)網(wǎng)絡(luò)用于圖片分類。 重大突破 這些技術(shù)催生的結(jié)果在于,對(duì)于這些架構(gòu)著力所要解決的問題,即圖片分類,可以通過算法實(shí)現(xiàn)遠(yuǎn)勝于人類的效果。例如著名的 ImageNet 數(shù)據(jù)集已被廣泛用作卷積架構(gòu)的評(píng)測(cè)基準(zhǔn),經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)絡(luò)可以獲得比人類更準(zhǔn)確的圖片分類效果: 早在 2015 年,計(jì)算機(jī)經(jīng)過訓(xùn)練已可實(shí)現(xiàn)比人類更出色的圖中物體分類能力。圖源 此外,研究人員已經(jīng)明白如何拍攝一張圖片但不立即進(jìn)行分類,而是首先將圖片中最有可能代表物體的區(qū)域劃分為多個(gè)矩形,將每個(gè)矩形送入 CNN 架構(gòu),隨后對(duì)圖片中的每個(gè)物體進(jìn)行分類,并在圖片中框出每個(gè)物體的位置(這種做法也叫做“邊界框 [Bounding box]”): 使用“Mask R-CNN”進(jìn)行物體檢測(cè)。圖源 這一系列過程可從技術(shù)上總稱為“物體檢測(cè)”,不過大部分最困難的環(huán)節(jié)都用到了“圖片分類”技術(shù)。 資源 理論:如果要深入理解 CNN 的工作原理等理論知識(shí),可參加 Andrej Karpathy 的 Stanford 課程。如果希望從更偏重?cái)?shù)學(xué)知識(shí)的角度進(jìn)一步了解,可參考 Chris Olah 有關(guān)卷積的文章。 代碼:如果希望盡快著手構(gòu)建圖片分類器,可以參閱 TensorFlow 文檔提供的這篇介紹范例。 文本生成 神經(jīng)網(wǎng)絡(luò)通過訓(xùn)練可以模仿輸入的內(nèi)容生成文本。 所需數(shù)據(jù) 任何類型的文本均可,例如莎士比亞作品全集。 深度學(xué)習(xí)架構(gòu) 神經(jīng)網(wǎng)絡(luò)可以對(duì)一系列元素中的下一個(gè)元素建模,可以查看序列中的上一個(gè)字符,并且對(duì)于指定的過往序列,還可以判斷隨后最有可能出現(xiàn)哪個(gè)字符。 解決這個(gè)問題所用的架構(gòu)與圖片分類所用的架構(gòu)有很大差異。由于架構(gòu)本身的差異,我們需要讓網(wǎng)絡(luò)學(xué)習(xí)不同的東西。之前,我們讓網(wǎng)絡(luò)學(xué)習(xí)圖片中的重要特征,但現(xiàn)在,我們需要讓網(wǎng)絡(luò)關(guān)注字符序列并預(yù)測(cè)序列中的下一個(gè)字符。因此網(wǎng)絡(luò)需要采取與圖片分類不同的做法,通過某種方式持續(xù)追蹤自己的“狀態(tài)”。例如,如果看到的前序字符分別是“c-h-a-r-a-c-t-e”,此時(shí)網(wǎng)絡(luò)應(yīng)“存儲(chǔ)”該信息,并預(yù)測(cè)下一個(gè)字符應(yīng)該是“r”。 遞歸神經(jīng)網(wǎng)絡(luò)架構(gòu)可以做到這一點(diǎn):可在下一次迭代時(shí)將每個(gè)神經(jīng)元的狀態(tài)重新裝入網(wǎng)絡(luò),借此學(xué)習(xí)整個(gè)序列(實(shí)際過程遠(yuǎn)比這個(gè)復(fù)雜,下文再詳述)。 遞歸神經(jīng)網(wǎng)絡(luò)架構(gòu)圖。圖源 然而為了真正勝任文本生成的任務(wù),網(wǎng)絡(luò)還必須能決定要在序列中“回顧”到多遠(yuǎn)的位置。有時(shí)候,例如正處在某個(gè)單詞中間時(shí),網(wǎng)絡(luò)只需要“回顧”前面的幾個(gè)字符就可以確定隨后出現(xiàn)的字符,但有時(shí)候可能需要“回顧”很多字符才能做出決定,例如正處在句子末尾時(shí)。 有一種名叫“LSTM”(Long Short Term Memory,長(zhǎng)短期記憶)的特殊 Cell 很適合這種任務(wù)。每個(gè) Cell 可根據(jù) Cell 本身的內(nèi)部權(quán)重決定是否要“記住”還是“忘記”,而網(wǎng)絡(luò)每看到一個(gè)新字符后,這個(gè)權(quán)重都會(huì)更新。 LSTM Cell 的內(nèi)部工作原理。圖源 重大突破 簡(jiǎn)而言之:我們可以生成類似于“characature”這樣的文本,不過需要解決一些拼寫錯(cuò)誤和其他問題,讓生成的結(jié)果看起來是正確的英語(yǔ)。Andrej Karpathy 的這篇文章舉了幾個(gè)有趣的例子,通過莎士比亞的劇本生成了 Paul Graham 風(fēng)格的隨筆。 這樣的架構(gòu)還可用于通過連續(xù)生成的橫軸和縱軸坐標(biāo)生成手寫文字,這種做法與通過一個(gè)個(gè)字符生成語(yǔ)言的方法不謀而合。感興趣的讀者可以試試這個(gè)演示。 神經(jīng)網(wǎng)絡(luò)的手寫筆跡。不過,真的還能叫“手”寫嗎?圖源 隨后我還將另行撰文,深入介紹遞歸神經(jīng)網(wǎng)絡(luò)和 LSTM 的工作原理。 資源 理論:Chris Olah 有關(guān) LSTM 的這篇文章是經(jīng)典中的經(jīng)典。同樣經(jīng)典的還有 Andrej Karpathy 這篇有關(guān) RNN 的文章,此文介紹了 RNN 的功能和工作原理。 代碼:這里提供了詳細(xì)的指導(dǎo),可以告訴我們?nèi)绾沃謽?gòu)建端到端文本生成模型,以及數(shù)據(jù)的預(yù)處理操作。這個(gè) GitHub 代碼庫(kù)可以幫助我們用訓(xùn)練好的 RNN-LSTM 模型生成手寫文字。 語(yǔ)言翻譯 機(jī)器翻譯(翻譯為另一種語(yǔ)言的能力)?長(zhǎng)久以來一直是人工智能領(lǐng)域研究人員最大的夢(mèng)想。深度學(xué)習(xí)讓這個(gè)夢(mèng)想距離現(xiàn)實(shí)更進(jìn)一步。 所需數(shù)據(jù) 使用不同語(yǔ)言寫出的詞句對(duì)。例如“I am a student”和“je suis étudiant”這樣成對(duì)句子組成的數(shù)據(jù)集,可以訓(xùn)練神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)英語(yǔ)和法語(yǔ)的互譯。 深度學(xué)習(xí)架構(gòu) 與其他深度學(xué)習(xí)架構(gòu)類似,研究人員已經(jīng)從“理論上”確定了計(jì)算機(jī)學(xué)習(xí)翻譯語(yǔ)言的最佳方式,并開發(fā)出一種可以模仿這種方式的架構(gòu)。對(duì)于語(yǔ)言翻譯,從本質(zhì)上來說需要將一句話(由一系列單詞編碼而成)翻譯為所要表達(dá)的基本“含義”,隨后將翻譯出來的含義翻譯為使用另一種語(yǔ)言的單詞組成的序列。 句子從單詞“轉(zhuǎn)換”成含義的方式必須使用能勝任序列處理的架構(gòu),也就是上文提到的“遞歸神經(jīng)網(wǎng)絡(luò)”。 編碼器 - 解碼器架構(gòu)示意圖。圖源 人們最初在 2014 年發(fā)現(xiàn)這種架構(gòu)非常適合用于語(yǔ)言翻譯,隨后以此為基礎(chǔ)在不同方向上進(jìn)行了擴(kuò)展,尤其是對(duì)“注意力”的處理,隨后我們將單獨(dú)撰文介紹。 重大突破 Google 的這篇博客文章介紹了這種架構(gòu)在語(yǔ)言翻譯方面所實(shí)現(xiàn)的效果,這一技術(shù)讓其他語(yǔ)言翻譯技術(shù)顯得大為遜色。當(dāng)然,畢竟 Google 有大量資源,可以將豐富的訓(xùn)練數(shù)據(jù)用于這種任務(wù)! ![]() Google Sequence to Sequence 模型的表現(xiàn)。圖源 資源 代碼和理論:Google 發(fā)布了一篇非常精彩的 Sequence to Sequence 技術(shù)架構(gòu)教程,可參閱這里。該教程概括介紹了 Google Sequence to Sequence 模型的大致目標(biāo)和背后的理論,并介紹了 TensorFlow 編寫相關(guān)代碼的步驟。此外還本文還涉及“注意力”,這是對(duì)最基礎(chǔ)的 Sequence to Sequence 架構(gòu)進(jìn)行的擴(kuò)展,后續(xù)發(fā)布的另一篇有關(guān) Sequence to Sequence 的文章將會(huì)詳細(xì)介紹。 生成對(duì)抗網(wǎng)絡(luò)(Generative Adversarial Network) 神經(jīng)網(wǎng)絡(luò)通過訓(xùn)練可以生成看似屬于特定類型(例如人臉),但并非實(shí)拍結(jié)果的圖片。 所需數(shù)據(jù) 特性類型的圖片,例如一大批人臉圖片。 深度學(xué)習(xí)架構(gòu) GAN 是一種讓人驚訝并且非常重要的技術(shù)產(chǎn)物。?全球頂尖人工智能研究人員之一的 Yann LeCun 曾經(jīng)說,這是“在他看來,機(jī)器學(xué)習(xí)領(lǐng)域過去十年里最有趣的創(chuàng)意”。借助這種技術(shù),我們竟然可以生成看起來類似訓(xùn)練圖片,但實(shí)際上并非訓(xùn)練集中實(shí)際內(nèi)容的圖片,例如生成看起來是人臉,但并非真正人臉的圖片。這是通過同時(shí)訓(xùn)練兩個(gè)神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)的:一個(gè)網(wǎng)絡(luò)負(fù)責(zé)生成看似逼真的假圖片,一個(gè)負(fù)責(zé)檢測(cè)圖片是真是假。如果同時(shí)訓(xùn)練這兩個(gè)網(wǎng)絡(luò),讓它們“以相同速度”學(xué)習(xí)(這是 GAN 的構(gòu)建過程中最困難的部分),那么負(fù)責(zé)生成假圖片的網(wǎng)絡(luò)就可以生成非常逼真的結(jié)果。 略微深入一些來看,這種技術(shù)是這樣的:GAN 中,我們需要訓(xùn)練的主網(wǎng)絡(luò)叫做生成器(Generator),它會(huì)學(xué)習(xí)接受隨機(jī)噪音矢量,并將其轉(zhuǎn)換為逼真的圖片。這種網(wǎng)絡(luò)采取了與卷積神經(jīng)網(wǎng)絡(luò)相“反轉(zhuǎn)”的結(jié)構(gòu),因此可稱之為“逆卷積(deconvolutional)”架構(gòu)。另一個(gè)負(fù)責(zé)區(qū)分真假圖片的網(wǎng)絡(luò)是一種卷積網(wǎng)絡(luò),這一點(diǎn)與圖片分類所用的架構(gòu)類似,這個(gè)網(wǎng)絡(luò)也叫做“鑒別器(Discriminator)”。 ![]() “生成器”的逆卷積架構(gòu)。圖源 ![]() “鑒別器”的卷積架構(gòu)。圖源 GAN 中的兩個(gè)神經(jīng)網(wǎng)絡(luò)其實(shí)都是卷積神經(jīng)網(wǎng)絡(luò),因?yàn)檫@些神經(jīng)網(wǎng)絡(luò)都很擅長(zhǎng)從圖片中提取特征。 重大突破和資源 ![]() GAN 通過名人面孔數(shù)據(jù)集生成的圖片。圖源 代碼:這個(gè) GitHub 代碼庫(kù)提供了使用 TensorFlow 訓(xùn)練 GAN 的教程,同時(shí)還提供了一些由 GAN 生成的令人驚艷的結(jié)果圖片,例如上圖就來自該代碼庫(kù)。 理論:Irmak Sirer 的這場(chǎng)講話可以幫助大家對(duì) GAN 入門,同時(shí)其中還涉及很多監(jiān)督式學(xué)習(xí)概念,可以幫助大家理解上述結(jié)論。 最后,Arthur Juliani 還用另一篇風(fēng)趣直觀的文章介紹了 GAN,并提供了在 TensorFlow 中實(shí)現(xiàn)所用的代碼。 總結(jié) 本文概括介紹了過去五年來,深度學(xué)習(xí)技術(shù)取得重大成果的幾個(gè)領(lǐng)域。本文涉及的模型有很多開源的實(shí)現(xiàn),因此任何人都可以下載一個(gè)“訓(xùn)練完成的”模型,并用于處理自己的數(shù)據(jù),例如我們可以下載訓(xùn)練好的圖片分類器,隨后將其用于圖片分類處理,或識(shí)別圖片中框出的物體。由于大部分工作已經(jīng)事先完成了,因此若要使用這些最前沿的技術(shù),完全不需要自己成為“深度學(xué)習(xí)專家”,畢竟研究人員已經(jīng)把最困難的工作搞定了,我們只需要從事最普通的“開發(fā)”工作,即可順利使用他人創(chuàng)建的模型解決自己遇到的問題。 希望通過閱讀本文,你已經(jīng)對(duì)深度學(xué)習(xí)模型有了一些基本的深入了解,當(dāng)然也更希望你能距離實(shí)用更近一步! 閱讀英文原文: https:///the-5-deep-learning-breakthroughs-you-should-know-about-df27674ccdf2 |
|