編譯/房曉楠
從監(jiān)督學(xué)習(xí)到強化學(xué)習(xí),四種深度學(xué)習(xí)方式原理知多少
編譯/房曉楠
一般說來,訓(xùn)練深度學(xué)習(xí)網(wǎng)絡(luò)的方式主要有四種:監(jiān)督、無監(jiān)督、半監(jiān)督和強化學(xué)習(xí)。本文編譯自硅谷著名的風(fēng)險投資機構(gòu)安德森·霍洛維茨基金,接下來,作者Frank Chen將逐個解釋這些方法背后所蘊含的理論知識。除此之外,還將分享文獻(xiàn)中經(jīng)常碰到的術(shù)語,并提供與數(shù)學(xué)相關(guān)的更多資源。有關(guān)數(shù)學(xué)相關(guān)問題,請參閱斯坦福大學(xué)的這個教程,其中包含監(jiān)督和無監(jiān)督學(xué)習(xí),內(nèi)含代碼示例。
監(jiān)督學(xué)習(xí)是使用已知正確答案的示例來訓(xùn)練網(wǎng)絡(luò)的。想象一下,我們可以訓(xùn)練一個網(wǎng)絡(luò),讓其從照片庫中(其中包含你父母的照片)識別出你父母的照片。以下就是我們在這個假設(shè)場景中所要采取的步驟。
步驟1:數(shù)據(jù)集的創(chuàng)建和分類
首先,我們要瀏覽你的照片(數(shù)據(jù)集),確定所有有你父母的照片,并對其進(jìn)行標(biāo)注,從而開始此過程。然后我們將把整堆照片分成兩堆。我們將使用第一堆來訓(xùn)練網(wǎng)絡(luò)(訓(xùn)練數(shù)據(jù)),而通過第二堆來查看模型在選擇我們父母照片操作上的準(zhǔn)確程度(驗證數(shù)據(jù))。
等到數(shù)據(jù)集準(zhǔn)備就緒后,我們就會將照片提供給模型。在數(shù)學(xué)上,我們的目標(biāo)就是在深度網(wǎng)絡(luò)中找到一個函數(shù),這個函數(shù)的輸入是一張照片,而當(dāng)你的父母不在照片中時,其輸出為0,否則輸出為1。
此步驟通常稱為分類任務(wù)(categorization task)。在這種情況下,我們進(jìn)行的通常是一個結(jié)果為yes or no的訓(xùn)練,但事實是,監(jiān)督學(xué)習(xí)也可以用于輸出一組值,而不僅僅是0或1。例如,我們可以訓(xùn)練一個網(wǎng)絡(luò),用它來輸出一個人償還信用卡貸款的概率,那么在這種情況下,輸出值就是0到100之間的任意值。這些任務(wù)我們稱之為回歸。
步驟2:訓(xùn)練
為了繼續(xù)該過程,模型可通過以下規(guī)則(激活函數(shù))對每張照片進(jìn)行預(yù)測,從而決定是否點亮工作中的特定節(jié)點。這個模型每次從左到右在一個層上操作——現(xiàn)在我們將更復(fù)雜的網(wǎng)絡(luò)忽略掉。當(dāng)網(wǎng)絡(luò)為網(wǎng)絡(luò)中的每個節(jié)點計算好這一點后,我們將到達(dá)亮起(或未亮起)的最右邊的節(jié)點(輸出節(jié)點)。
既然我們已經(jīng)知道有你父母的照片是哪些圖片,那么我們就可以告訴模型它的預(yù)測是對還是錯。然后我們會將這些信息反饋(feed back)給網(wǎng)絡(luò)。
該算法使用的這種反饋,就是一個量化“真實答案與模型預(yù)測有多少偏差”的函數(shù)的結(jié)果。這個函數(shù)被稱為成本函數(shù)(cost function),也稱為目標(biāo)函數(shù)(objective function),效用函數(shù)(utility function)或適應(yīng)度函數(shù)(fitness function)。然后,該函數(shù)的結(jié)果用于修改一個稱為反向傳播(backpropagation)過程中節(jié)點之間的連接強度和偏差,因為信息從結(jié)果節(jié)點“向后”傳播。
我們會對每個圖片都重復(fù)一遍此操作,而在這種情況下,算法都在盡量最小化成本函數(shù)。
其實,我們有多種數(shù)學(xué)技術(shù)可以用來驗證這個模型是正確還是錯誤的,但我們用的是一個非常常見的方法,我們稱之為梯度下降(gradient descent)。Algobeans上有一個“門外漢”理論可以很好地解釋它是如何工作的。邁克爾·尼爾森(M ichael N ielsen)用數(shù)學(xué)知識完善了這個方法,其中包括微積分和線性代數(shù)。
步驟3:驗證
一旦我們處理了第一個堆棧中的所有照片,我們就應(yīng)該準(zhǔn)備去測試該模型。我們應(yīng)充分利用好第二堆照片,并使用它們來驗證訓(xùn)練有素的模型是否可以準(zhǔn)確地挑選出含有你父母在內(nèi)的照片。
我們通常會通過調(diào)整和模型相關(guān)的各種事物(超參數(shù))來重復(fù)步驟2和3,諸如里面有多少個節(jié)點,有多少層,哪些數(shù)學(xué)函數(shù)用于決定節(jié)點是否亮起,如何在反向傳播階段積極有效地訓(xùn)練權(quán)值,等等。而你可以通過瀏覽Quora上的相關(guān)介紹來理解這一點,它會給你一個很好的解釋。
步驟4:使用
最后,一旦你有了一個準(zhǔn)確的模型,你就可以將該模型部署到你的應(yīng)用程序中。你可以將模型定義為API調(diào)用,例如Parents In Picture(photo),并且可以從軟件中調(diào)用該方法,從而導(dǎo)致模型進(jìn)行推理并給出相應(yīng)的結(jié)果。
稍后我們將詳細(xì)介紹一下這個確切的過程,編寫一個識別名片的iPhone應(yīng)用程序。
得到一個標(biāo)注好的數(shù)據(jù)集可能會很難(也就是很昂貴),所以你需要確保預(yù)測的價值能夠證明獲得標(biāo)記數(shù)據(jù)的成本是值得的,并且我們首先要對模型進(jìn)行訓(xùn)練。例如,獲得可能患有癌癥的人的標(biāo)簽X射線是非常昂貴的,但是獲得產(chǎn)生少量假陽性和少量假陰性的準(zhǔn)確模型的值,這種可能性顯然是非常高的。
無監(jiān)督學(xué)習(xí)適用于你具有數(shù)據(jù)集但無標(biāo)簽的情況。無監(jiān)督學(xué)習(xí)采用輸入集,并嘗試查找數(shù)據(jù)中的模式。比如,將其組織成群(聚類)或查找異常值(異常檢測)。例如:
·想像一下,如果你是一個T恤制造商,擁有一堆人的身體測量值。那么你可能就會想要有一個聚類算法,以便將這些測量組合成一組集群,從而決定你生產(chǎn)的XS,S,M,L和XL號襯衫該有多大。
·如果你是一家安全初創(chuàng)企業(yè)的首席技術(shù)官(CTO),你希望找出計算機之間網(wǎng)絡(luò)連接歷史中的異常:網(wǎng)絡(luò)流量看起來不正常,這可能會幫助你通過下載員工們的所有CRM歷史記錄來找到那名該為此事負(fù)責(zé)的員工,因為他們可能即將退出或有人正在將大量的錢轉(zhuǎn)移到一個新的銀行賬戶。如果你對這種事情感興趣的話,那么我相信你會很喜歡這種對無監(jiān)督異常檢測算法的調(diào)查。
·假設(shè)一下,你是Google Brain團(tuán)隊中的一員,你想知道YouTube視頻中有什么。谷歌通過人工智能在視頻網(wǎng)站中找到貓的真實故事,喚起了大眾對AI的熱忱。在諸如這篇論文中,Google Brain團(tuán)隊與斯坦福大學(xué)研究人員Quoc Le和吳恩達(dá)一起描述了一種將YouTube視頻分為多種類別的算法,其中一種包含了貓的類別。當(dāng)然他們并沒有真正開始尋找貓,但算法自動將包含貓的視頻(以及ImageNet中定義的22000個對象類別中的數(shù)千個其他對象)組合在一起,而不需要任何明確的訓(xùn)練數(shù)據(jù)。
你將在文獻(xiàn)中閱讀到的一些無監(jiān)督的學(xué)習(xí)技術(shù)包括:
·自編碼(Autoencoding)
·主成分分析(Principal components analysis)
·隨機森林(Random forests)
·K均值聚類(K-means clustering)
如果你想要了解有關(guān)無監(jiān)督學(xué)習(xí)的更多信息,可以觀看Udacity的課程。
無監(jiān)督學(xué)習(xí)中最有前景的最新發(fā)展之一是Ian Goodfellow(當(dāng)時在Yoshua Bengio的實驗室工作時提出)的一個想法,稱為“生成對抗網(wǎng)絡(luò)(generative adversarial netw orks)”,其中我們將兩個神經(jīng)網(wǎng)絡(luò)相互聯(lián)系:一個網(wǎng)絡(luò),我們稱之為生成器,負(fù)責(zé)生成旨在嘗試欺騙另一個稱之為鑒別器的網(wǎng)絡(luò)數(shù)據(jù)。這種方法實現(xiàn)了一些令人驚奇的結(jié)果,例如可以從文本字符串或手繪草圖生成如照片版逼真圖片的AI技術(shù)。
半監(jiān)督學(xué)習(xí)在訓(xùn)練階段結(jié)合了大量未標(biāo)記的數(shù)據(jù)和少量標(biāo)簽數(shù)據(jù)。與使用所有標(biāo)簽數(shù)據(jù)的模型相比,使用訓(xùn)練集的訓(xùn)練模型在訓(xùn)練時可以更為準(zhǔn)確,而且訓(xùn)練成本更低。舉個例子來說明,我們的朋友Delip Rao在AI咨詢公司Joostware工作,他構(gòu)建了一個使用半監(jiān)督學(xué)習(xí)的解決方案,每個類中只需使用30個標(biāo)簽,就可以達(dá)到與使用監(jiān)督學(xué)習(xí)訓(xùn)練的模型相同的準(zhǔn)確度,而在這個監(jiān)督學(xué)習(xí)模型中,每個類中需要1360個左右的標(biāo)簽。因此,這個半監(jiān)督學(xué)習(xí)方案使得他們的客戶能夠非常快地將其預(yù)測功能從20個類別擴展到110個類別。
為什么使用未標(biāo)記數(shù)據(jù)有時可以幫助模型更準(zhǔn)確,關(guān)于這一點的體會就是:即使你不知道答案,但你也可以通過學(xué)習(xí)來知曉,有關(guān)可能的值是多少以及特定值出現(xiàn)的頻率。
數(shù)學(xué)愛好者的福利:如果你對半監(jiān)督學(xué)習(xí)很感興趣的話,可以來閱讀朱小津教授的幻燈片教程和2008年回顧的文獻(xiàn)隨筆文章。
強化學(xué)習(xí)是針對你沒有標(biāo)注數(shù)據(jù)集的情況而言的,但你還是有辦法來區(qū)分是否越來越接近目標(biāo)(回報函數(shù)(reward function))。經(jīng)典的兒童游戲——“hotter or colder”。(Huckle Buckle Beanstalk的一個變體)是這個概念的一個很好的例證。你的任務(wù)是找到一個隱藏的目標(biāo)物件,然后你的朋友會喊出你是否越來越hotter(更接近)或colder(遠(yuǎn)離)目標(biāo)物件。“Hotter/colder”就是回報函數(shù),而算法的目標(biāo)就是最大化回報函數(shù)。你可以把回報函數(shù)當(dāng)做是一種延遲和稀疏的標(biāo)簽數(shù)據(jù)形式:而不是在每個數(shù)據(jù)點中獲得特定的“right/w rong”答案,你會得到一個延遲的反應(yīng),而它只會提示你是否在朝著目標(biāo)方向前進(jìn)。
·DeepM ind在Nature上發(fā)表了一篇文章,描述了一個將強化學(xué)習(xí)與深度學(xué)習(xí)結(jié)合起來的系統(tǒng),該系統(tǒng)學(xué)會該如何去玩一套Atari視頻游戲。一些取得了巨大成功(如Breakout),而另一些就沒那么幸運了(如M ontezuma’s Revenge《蒙特祖瑪?shù)膹?fù)仇》)。
·Nervana團(tuán)隊(現(xiàn)在在英特爾)發(fā)表了一個很好的解惑性博客文章,對這些技術(shù)進(jìn)行了詳細(xì)介紹,大家有興趣可以閱讀一番。
·Russell Kaplan,Christopher Sauer和Alexander Sosa舉辦的創(chuàng)意性斯坦福學(xué)生項目說明了強化學(xué)習(xí)的挑戰(zhàn)之一,并提出了一個聰明的解決方案。而你將在DeepM ind論文中了解到,算法未能學(xué)習(xí)如何去玩M ontezuma’s Revenge。其原因是什么呢?正如斯坦福的大學(xué)生所描述的那樣,“在稀缺回報函數(shù)的環(huán)境中,強化學(xué)習(xí)agent仍然在努力學(xué)習(xí)”。當(dāng)你沒有得到足夠的“hotter”或者“colder”的提示時,你是很難找到隱藏的“鑰匙”的。斯坦福大學(xué)的學(xué)生基礎(chǔ)性地教導(dǎo)系統(tǒng)去了解和回應(yīng)自然語言提示,例如“climb down the ladder”或“get the key”,從而使該系統(tǒng)成為OpenAI gym中的最高評分算法。可以點擊算法視頻觀看算法演示。
·觀看這個關(guān)于強化學(xué)習(xí)的算法,好好學(xué)習(xí),然后像一個大boss一樣去玩超級馬里奧吧。
理查德·薩頓和安德魯·巴托寫了關(guān)于強化學(xué)習(xí)的書。更多信息,可以通過查看其第二版書稿進(jìn)行深入了解。
房曉楠 本刊編輯