0
本文作者: 奕欣 | 2017-05-16 14:25 |
雷鋒網(wǎng)[AI科技評(píng)論]按:中國(guó)人工智能學(xué)會(huì)AIDL第二期【人工智能前沿講習(xí)班】在北京中科院自動(dòng)化所舉行,主題為【機(jī)器學(xué)習(xí)前沿】。周志華教授擔(dān)任學(xué)術(shù)主任,前來授課的嘉賓均為中國(guó)機(jī)器學(xué)習(xí)界一流專家、資深科研人員和企業(yè)精英,包括:耿新、郭天佑、劉鐵巖、王立威、葉杰平、于劍、余揚(yáng)、張長(zhǎng)水、鄭宇、朱軍。
來自清華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系的朱軍副教授做了題為《貝葉斯學(xué)習(xí)前沿進(jìn)展》的開場(chǎng)分享課,總時(shí)長(zhǎng)為兩個(gè)小時(shí),內(nèi)容主要分為三大部分:貝葉斯基本理論、模型和算法;可擴(kuò)展的貝葉斯方法;深度生成模型。本文乃三大內(nèi)容中的第二及第三部分,由雷鋒網(wǎng)AI科技評(píng)論編輯。
傳送門: 清華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系朱軍教授:機(jī)器學(xué)習(xí)里的貝葉斯基本理論、模型和算法
朱軍
清華大學(xué)計(jì)算機(jī)系長(zhǎng)聘副教授、智能技術(shù)與系統(tǒng)國(guó)家重點(diǎn)實(shí)驗(yàn)室副主任、深度學(xué)習(xí)技術(shù)與應(yīng)用國(guó)家工程實(shí)驗(yàn)室副主任、國(guó)家萬人計(jì)劃青年拔尖人才、中國(guó)自然科學(xué)基金優(yōu)秀青年基金獲得者、中國(guó)計(jì)算機(jī)學(xué)會(huì)青年科學(xué)家、IEEE AI's 10 to Watch入選者。
以下是根據(jù)朱軍副教授現(xiàn)場(chǎng)分享整理的文字報(bào)告,雷鋒網(wǎng)[AI科技評(píng)論]做編輯整理。
我們先看一下這個(gè)經(jīng)典的貝葉斯定理,它有一個(gè)很好的性質(zhì)是序列更新的,這對(duì)于處理流式數(shù)據(jù)非常適合。比如:用B1,…,Bt表示第一個(gè)時(shí)刻到第t個(gè)時(shí)刻的數(shù)據(jù)集,我們可以得到一個(gè)遞推公式:假設(shè)已經(jīng)算出來了第t-1時(shí)刻的后驗(yàn)分布,那么下一個(gè)時(shí)刻t的后驗(yàn)分布正比于第t-1時(shí)刻的后驗(yàn)分布乘上新來數(shù)據(jù)集Bt的似然函數(shù),這個(gè)迭代過程實(shí)際上是把上一時(shí)刻的后驗(yàn)作為當(dāng)前時(shí)刻的先驗(yàn)分布了。這是非常漂亮的遞推公式,可以實(shí)時(shí)處理流式數(shù)據(jù)。
但它有一個(gè)前提是你可以算出來每個(gè)時(shí)刻的后驗(yàn)分布。這對(duì)于簡(jiǎn)單的模型是可行的,比如:線性動(dòng)態(tài)系統(tǒng)。但是,對(duì)于一般的模型,每一步都很難算出精確的后驗(yàn)分布,所以這個(gè)更新公式并不好算。需要一些好的算法。
最近,在算法上大家做了很多的工作,有一個(gè)叫在線(流式)變分貝葉斯的算法,采用的是我們前面所提到的變分近似的思想實(shí)現(xiàn)在線貝葉斯推理。假設(shè)有一個(gè)算法A,它的輸入是一個(gè)數(shù)據(jù)集和先驗(yàn),輸出是一個(gè)近似的后驗(yàn)分布。在第一個(gè)時(shí)刻可以用第一個(gè)數(shù)據(jù)值加上先驗(yàn)來更新,得到一個(gè)近似的后驗(yàn)。在接下來一個(gè)新的數(shù)據(jù)集,可以用t-1時(shí)刻的近似后驗(yàn)來做新的先驗(yàn),隨著時(shí)間的推移你會(huì)得到t+1、t+2……時(shí)刻的后驗(yàn)分布,這就是流式計(jì)算的方法。
貝葉斯公式還有另外一個(gè)好的性質(zhì),適合多個(gè)機(jī)器的分布式計(jì)算。比如,假設(shè)現(xiàn)在有100臺(tái)機(jī)器,每個(gè)機(jī)器有1%的數(shù)據(jù)。我們先并行的在每個(gè)機(jī)器上處理這1%的數(shù)據(jù)得到100個(gè)局部后驗(yàn)分布;然后,再把它們集成在一起,就會(huì)得到我們想要的精確后驗(yàn)分布。同樣,這是非常漂亮的性質(zhì)。
但是,它存在同樣的挑戰(zhàn):對(duì)于一般的貝葉斯模型,我們得不到局部后驗(yàn)分布的解析解。為了處理這個(gè)困難,我們會(huì)考慮用一個(gè)近似的算法去做,再集合在一起。
它的適用范圍非常廣泛,這里有一套公式,具體的細(xì)節(jié)我不說了,如果感興趣的話,大家可以研究一下:如果這個(gè)算法輸出的是一個(gè)指數(shù)族分布,你集成在一起還是指數(shù)族分布,只要把參數(shù)變化一下就行了,這是它的最大好處。
我們組也在這些方面做了一些工作,包括:在線/隨機(jī)算法和分布式算法等;大家也可以閱讀我在演講開頭提及的綜述文章,以供參考。
我現(xiàn)在給大家介紹一個(gè)在線學(xué)習(xí)的例子。我們考慮用貝葉斯模型做在線的分類。這是一個(gè)有監(jiān)督的學(xué)習(xí)任務(wù),因此會(huì)有一個(gè)損失函數(shù)。
我們先看一下在線學(xué)習(xí)的基本過程。假設(shè)有一個(gè)初始的模型,我可以用它對(duì)新來的數(shù)據(jù)做預(yù)測(cè),判斷它屬于哪類。預(yù)測(cè)完之后會(huì)有兩個(gè)結(jié)論,一個(gè)是預(yù)測(cè)準(zhǔn)確了,另外一個(gè)是預(yù)測(cè)錯(cuò)了。
如果預(yù)測(cè)準(zhǔn)確的話,我們可以不做任何事情,這個(gè)模型已經(jīng)比較好了。
如果預(yù)測(cè)錯(cuò)了的話,我們可以把當(dāng)前的模型送到學(xué)習(xí)算法里面做一次更新。
這是很基本的一個(gè)在線學(xué)習(xí)的框架。
其中,有一個(gè)很經(jīng)典的具體算法,叫Online Passive—Aggressive Learning,它是針對(duì)SVM提出的在線學(xué)習(xí)算法。因?yàn)镾VM是學(xué)一個(gè)特定的模型,假設(shè)當(dāng)前的模型參數(shù)是Wt,新數(shù)據(jù)出現(xiàn)后會(huì)做一個(gè)判斷,結(jié)果可能是正確的或錯(cuò)誤的。如果判斷正確就是說你的模型足夠好,那么可以采用Passive Update的策略,所謂的消極是指:我不更新,直接把這個(gè)模型拷貝到下一個(gè)時(shí)刻;還有另外一種情況,如果判斷錯(cuò)了,就采取一個(gè)激進(jìn)(Aggressive)的方法,比如:剛才的模型不夠好,我就做一個(gè)投影,投影到好的模型的區(qū)域里,得到一個(gè)新的模型。這是兩種操作,每一個(gè)數(shù)據(jù)都進(jìn)行判斷,再選擇Passive或是Aggressive的策略,然后不斷地迭代,這種很簡(jiǎn)單的策略實(shí)際上還有一些好的性質(zhì),實(shí)際應(yīng)用的效果也挺好。
現(xiàn)在,我們可以做一個(gè)很簡(jiǎn)單的類比,把上述更新過程擴(kuò)展到貝葉斯模型,在線地學(xué)習(xí)貝葉斯SVM,每個(gè)時(shí)刻都學(xué)到所有模型的一個(gè)后驗(yàn)分布。這個(gè)想法實(shí)際上和前面的更新過程基本上是一樣的,差別在于我們更新的是后驗(yàn)分布。假設(shè)當(dāng)前的后驗(yàn)分布是 qt(W),新來的數(shù)據(jù)可以用一個(gè)準(zhǔn)則判斷它到底是正確還是錯(cuò)誤,同樣對(duì)應(yīng)到兩種情況,如果正確的話,表明當(dāng)前的后驗(yàn)分布足夠好了,我可以不去更新,實(shí)際操作時(shí)如果有似然函數(shù),我可以用貝葉斯定理做一次更新,不會(huì)影響這個(gè)結(jié)果。當(dāng)我們犯錯(cuò)誤的時(shí)候,可以做一個(gè)Aggressive的更新,得到新的分布。
在錯(cuò)誤發(fā)生時(shí),我們可以做硬約束或是允許一定錯(cuò)誤的軟約束,來優(yōu)化這個(gè)錯(cuò)誤率。理論分析我這里就不細(xì)說了。
這種在線貝葉斯學(xué)習(xí)的最大好處時(shí)它可以處理隱含變量(數(shù)據(jù)中沒有觀察到的變量),挖掘數(shù)據(jù)中的隱含結(jié)構(gòu)。在這種情況下,只需要對(duì)前面講的在線更新的過程稍加擴(kuò)展即可,基本流程保持不變。
這里講一個(gè)話題模型的例子。比如:我明天要出差,現(xiàn)在想訂一個(gè)賓館,那么我可能會(huì)打開網(wǎng)站去看它的評(píng)論和打分;現(xiàn)在,這方面的數(shù)據(jù)有很多。假設(shè)我們拿到了很多評(píng)論文檔數(shù)據(jù),我們可以做兩件事情,一個(gè)是挖掘大家關(guān)心的主題是哪些,另一個(gè)是看看某個(gè)具體的評(píng)論是傾向于正面還是負(fù)面,這實(shí)際上是做一個(gè)判別。這就可以用我剛才所講的在線貝葉斯學(xué)習(xí)來實(shí)現(xiàn)。
具體過程我就不講了。這里給大家看一個(gè)效果,橫軸是時(shí)間,縱軸是分類的正確率(F1值)。這里列出來多個(gè)算法,大家顯然能看出來,基于在線貝葉斯學(xué)習(xí)的算法要比使用批處理的方法大約有100倍的性能提升,同時(shí),分類的精度沒有下降(甚至可能有提升)。
這里邊道理是什么呢?實(shí)際上,大數(shù)據(jù)里邊通常有很多冗余,在做模型更新的時(shí)候沒必要把所有的數(shù)據(jù)都處理一遍,尤其當(dāng)你的數(shù)據(jù)集特別大的時(shí)候完全沒有必要,現(xiàn)在大家訓(xùn)練的深度學(xué)習(xí)也是一樣,最常用的方法是用隨機(jī)梯度,思想是一樣的。我們沒必要把上萬張圖片掃描一遍,再更新模型的權(quán)重,少量圖片其實(shí)就足夠了。由于每次計(jì)算的數(shù)據(jù)量非常少,因此,總體時(shí)間上有很大優(yōu)勢(shì)。
我們前面講貝葉斯方法本身有一個(gè)很好的性質(zhì)做分布式計(jì)算,但是,難點(diǎn)在于我們?cè)趺慈プ鲇?jì)算。我們?cè)谶@方面做了一個(gè)工作,是基于MCMC蒙特卡洛采樣的,發(fā)表在NIPS 2014。它的基本思路是,我們把數(shù)據(jù)劃分到多個(gè)機(jī)器,先采用MCMC的方法去估算局部后驗(yàn)分布(的一些統(tǒng)計(jì)量),然后采用期望傳播(EP)的框架在多個(gè)機(jī)器之間傳遞信息,把采樣的樣本聚集合在一起,以解決近似后驗(yàn)分布的問題。這個(gè)算法收斂之后,每個(gè)局部的分布實(shí)際上就是我們想要的全局分布。這個(gè)算法支持同步更新、異步更新以及去中心化的更新方式,配置非常靈活。
我接下來講一些大家可能都很關(guān)心的深度學(xué)習(xí)。我主要介紹一些深度生成模型,包括無監(jiān)督和半監(jiān)督學(xué)習(xí)的模型。
通常情況下,大家做深度學(xué)習(xí)時(shí),用的更多的是所謂的判別式深度學(xué)習(xí),比如深度卷積網(wǎng)絡(luò),它的目的是學(xué)習(xí)一個(gè)從輸入到輸出的影射函數(shù),在測(cè)試時(shí),判斷測(cè)試樣本屬于哪個(gè)類。這種網(wǎng)絡(luò)已經(jīng)在人臉識(shí)別、語音識(shí)別或者自然語言(處理)的很多任務(wù)中應(yīng)用。當(dāng)然,在實(shí)際做的時(shí)候,還要注意一些細(xì)節(jié),包括一些保護(hù)模型、避免過擬合的機(jī)制。
深度卷積網(wǎng)絡(luò)已經(jīng)被廣泛應(yīng)用,包括發(fā)展出來的一些變種的網(wǎng)絡(luò)結(jié)構(gòu)。最近,這種網(wǎng)絡(luò)也用于強(qiáng)化學(xué)習(xí),比如AlphaGo。細(xì)節(jié)這里就不說了,我今天想和大家分享一下,除了這種判別式學(xué)習(xí),深度學(xué)習(xí)實(shí)際上還有許多問題值得我們關(guān)注。
簡(jiǎn)單來說,深度學(xué)習(xí)現(xiàn)在的應(yīng)用場(chǎng)景有以下三點(diǎn)。大模型;大數(shù)據(jù);大集群。
首先,現(xiàn)在的模型比較大,主要體現(xiàn)在它有很多參數(shù)。這是2012年的一個(gè)例子,它大概有10億個(gè)參數(shù)。其次,訓(xùn)練數(shù)據(jù)比較多,當(dāng)時(shí)的訓(xùn)練使用了1000萬的圖片。最后,需要很大的計(jì)算資源,我可以用CPU或者GPU集群來運(yùn)算,這幾乎成了現(xiàn)在做深度學(xué)習(xí)的標(biāo)配。
在這種場(chǎng)景下,往往有一個(gè)誤解:如果有大數(shù)據(jù),過擬合就不再是問題了。實(shí)際上,我們說,大數(shù)據(jù)情況下過擬合可能變得更嚴(yán)重。
具體來說,對(duì)于一個(gè)機(jī)器學(xué)習(xí)算法,我們實(shí)際上不是在關(guān)心數(shù)據(jù)的個(gè)數(shù)有多大,10萬也好,100萬也罷;我們更關(guān)心的是,這個(gè)數(shù)據(jù)里包含的信息有多少,給我們模型訓(xùn)練所帶來的統(tǒng)計(jì)信息有多大。數(shù)據(jù)量多會(huì)給我們帶來很大的處理負(fù)擔(dān)。
這有一個(gè)研究結(jié)果,它衡量了當(dāng)數(shù)據(jù)大小增加時(shí),數(shù)據(jù)中的相關(guān)信息(relevant information)是如何增加的。
該圖呈現(xiàn)了常見的三個(gè)情況:
第一個(gè)是水平線:數(shù)據(jù)增加時(shí),信息沒有增加。這個(gè)場(chǎng)景很容易理解,如果你的數(shù)據(jù)是周期性的、不斷重復(fù)的,當(dāng)你知道一個(gè)周期的數(shù)據(jù)之后,基本上覆蓋了全部的信息,那么再增加更多周期,對(duì)訓(xùn)練模型沒有太大幫助。
再一個(gè)是Log N的曲線:當(dāng)數(shù)據(jù)的產(chǎn)生過程可以用有限的參數(shù)刻畫時(shí),信息量大概是Log N的速度增加。
還有更快一些的曲線,N0.5,它描述的是更復(fù)雜的情況,數(shù)據(jù)不能用有限闡述的模型刻畫,這種情況下信息量也會(huì)更多。
總體上,這三種情況下的信息增加速度都遠(yuǎn)低于線性,充分反映了數(shù)據(jù)中存在很多冗余。所以,在這種大數(shù)據(jù)下,過擬合是一個(gè)更值得關(guān)注的問題。
另外,深度學(xué)習(xí)還有其他的問題,比如:不夠魯棒。對(duì)于一個(gè)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò),正常情況下識(shí)別精度很高,但如果對(duì)輸入圖片加一些少量干擾(人甚至識(shí)別不出來),可能同一個(gè)圖像卻完全識(shí)別錯(cuò)了。我們也可以隨意地用樣本誤導(dǎo)它,比如:通過添加噪聲,可以誘導(dǎo)一個(gè)網(wǎng)絡(luò)把特定圖像識(shí)別成指定的類別。這種特性對(duì)于關(guān)鍵領(lǐng)域的應(yīng)用是非常危險(xiǎn)的。
因此,對(duì)深度學(xué)習(xí)來說,避免過擬合,增加魯棒性是本質(zhì)的問題。Dropout就是一個(gè)非常簡(jiǎn)單,但很有效的避免過擬合的策略。它是一個(gè)隨機(jī)策略:我們?cè)谟?xùn)練網(wǎng)絡(luò)時(shí),每次迭代都隨機(jī)丟掉一些節(jié)點(diǎn)(或權(quán)重)的更新。這種方法對(duì)結(jié)果的提升是比較顯著的。
Dropout剛提出時(shí),大家并不清楚如何解釋它。后來,大家在類似的框架下來解釋dropout,包括我們自己在SVM方面的工作。最新的進(jìn)展是Gal和Ghahramani去年的工作,把dropout理解成貝葉斯推理的近似,這也體現(xiàn)了貝葉斯方法在保護(hù)模型,避免過擬合方面的效用。
Dropout只是一個(gè)例子。事實(shí)上,貝葉斯和深度學(xué)習(xí)之間還存在很多的關(guān)聯(lián),甚至互補(bǔ)的關(guān)系,如果能夠?qū)⒍哂袡C(jī)融合,將更好地推動(dòng)人工智能的發(fā)展。
這里有一個(gè)很好的貝葉斯的最新進(jìn)展。2015年Science的一篇封面文章介紹了貝葉斯程序?qū)W習(xí)(BPL),它本質(zhì)上是一個(gè)多層的貝葉斯生成模型,具有層次的結(jié)構(gòu),因此,也可以看成是一個(gè)深度模型。它和深度學(xué)習(xí)不一樣的地方在于,每一層的隨機(jī)過程都有清晰的定義,比較容易解釋,比如說:在刻畫手寫體字?jǐn)?shù)生成的過程是,最上層是一些基本筆畫,然后,通過隨機(jī)采樣會(huì)組合出一些部件(parts),再按照一定的規(guī)則組合在一起,形成字符的基本框架;最后是按照一定的噪聲模型,生成所觀察的具體數(shù)據(jù)。
這是一個(gè)典型的主觀貝葉斯模型,通過對(duì)手寫體字符生成過程的相對(duì)精細(xì)的描述,構(gòu)造了一個(gè)有意義的層次化結(jié)構(gòu),這樣的好處是可以實(shí)現(xiàn)小樣本下的學(xué)習(xí)——通過主觀先驗(yàn)知識(shí)彌補(bǔ)數(shù)據(jù)上的不足。
這個(gè)文章展示的是單示例學(xué)習(xí)(one-shot learning):只給模型一個(gè)有標(biāo)注的訓(xùn)練數(shù)據(jù),讓它識(shí)別其他沒有識(shí)別的數(shù)據(jù)。實(shí)驗(yàn)結(jié)果是非常好的,BPL遠(yuǎn)好于一般的深度學(xué)習(xí)網(wǎng)絡(luò)以及針對(duì) one-shot learning做過改進(jìn)的深度網(wǎng)絡(luò)。同時(shí),BPL的結(jié)果比人做的錯(cuò)誤率還要低。
這是一個(gè)很好但也很極端的例子。它把主觀貝葉斯的想法發(fā)揮到了極致,它的先驗(yàn)分布是基于對(duì)問題的深入理解而構(gòu)建的。雖然在特定任務(wù)上表現(xiàn)很好,但問題是與特定領(lǐng)域的結(jié)合太強(qiáng),如果換到另外一個(gè)領(lǐng)域,整個(gè)BPL要重新設(shè)計(jì)。
實(shí)際上,深度學(xué)習(xí)和貝葉斯可以看成一個(gè)譜(spectrum)的兩個(gè)極端?;跀?shù)據(jù)驅(qū)動(dòng)的深度學(xué)習(xí)需要大量的標(biāo)注數(shù)據(jù)來訓(xùn)練網(wǎng)絡(luò);而貝葉斯方法通過引入知識(shí),加上小的訓(xùn)練樣本也可以達(dá)到很好的效果。大家可以想想,兩者的中間是什么?事實(shí)上,越來越多的人在思考,我們能不能朝中間靠攏一些?處在中間的模型應(yīng)該具有兩方面的優(yōu)點(diǎn):
能夠利用深度學(xué)習(xí)的長(zhǎng)處,對(duì)復(fù)雜特性進(jìn)行建模和擬合,利用數(shù)據(jù)驅(qū)動(dòng)的方式進(jìn)行訓(xùn)練;
能夠融合貝葉斯方法的優(yōu)點(diǎn),刻畫數(shù)據(jù)中存在不確定性,以及小樣本學(xué)習(xí)等。
我們把融合了二者優(yōu)點(diǎn)的方法稱為貝葉斯深度學(xué)習(xí)。
事實(shí)上,已經(jīng)有不少工作將貝葉斯方法用在深度學(xué)習(xí)上。早在神經(jīng)網(wǎng)絡(luò)時(shí)期,MacKay、Neal等人已經(jīng)開始用貝葉斯來保護(hù)網(wǎng)絡(luò)避免過擬合。后來,也有了一些深入分析。近期的結(jié)果也有不少,其中一個(gè)是用非參數(shù)化貝葉斯來學(xué)深度神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),并且獲得了2010年的AISTATS最佳論文獎(jiǎng)。
接下來,我們來看一下一類重要的,最近進(jìn)展很快的貝葉斯深度學(xué)習(xí)模型——深度生成模型。
它們和判別式模型不一樣,其主要目標(biāo)是構(gòu)建一個(gè)能夠刻畫數(shù)據(jù)分布的模型,通過逼近數(shù)據(jù)的真實(shí)分布,提取數(shù)據(jù)中的結(jié)構(gòu)。有了這個(gè)模型之后,我們可以對(duì)它做采樣,產(chǎn)生新的樣本,比如:這是一個(gè)手寫體的數(shù)據(jù)集,是從真實(shí)分布里采樣得到的。我們學(xué)完生成模型之后,可以得到一個(gè)逼近真實(shí)分布的模型。我對(duì)這個(gè)模型再次采樣后會(huì)得到一些新的樣本(一些在訓(xùn)練數(shù)據(jù)里面沒有出現(xiàn)過的樣本)。
生成模型有很多用處。首先,是生成新的樣本,即:創(chuàng)作,在學(xué)習(xí)完之后,可以“舉一反三”。其次,可以充分利用無監(jiān)督數(shù)據(jù)進(jìn)行學(xué)習(xí),挖掘數(shù)據(jù)中的結(jié)構(gòu)規(guī)律。再次,可以做半監(jiān)督學(xué)習(xí),融合一小部分有標(biāo)注的數(shù)據(jù)和一大部分未標(biāo)注的數(shù)據(jù)。最后,可以做有條件的生成,比如:從文本到語言的生成、從一種語言到另外一種語言的生成、從圖片到文本的生成等。
最近有很多進(jìn)展,包括比較流行的GAN、VAE等,都是生成模型。
這是對(duì)生成模型的一個(gè)抽象描述。基本框架是一個(gè)概率模型,可以隨機(jī)采樣。X是我們的觀察變量,在訓(xùn)練集里觀察到一些具體的取值。為了解釋X,生成模型假設(shè)它是由一些隱含的變量產(chǎn)生的,這里用Z表示隱含變量,服從某種分布。從Z生成X的過程可以是隨機(jī)的,比如:p(X|Z),也可以是某種退化的確定性變換X=f(Z)。由于Z的隨機(jī)性,兩種定義都是可以描述X的隨機(jī)性,并對(duì)X進(jìn)行采樣。后面會(huì)看到一些具體的例子。這里我們先關(guān)注前者。
除了使用有向的貝葉斯網(wǎng)絡(luò)來刻畫,生成模型還可以用無向圖的隨機(jī)場(chǎng)來定義,典型的例子是受限玻爾茲曼機(jī)(RBM)。
這兩類模型都定義了X和Z的聯(lián)合分布。在給定數(shù)據(jù)X的具體值時(shí),我們希望推斷出隱含變量Z的信息,即:后驗(yàn)分布。這可以通過貝葉斯公式實(shí)現(xiàn)。
下面是一些典型的例子,在機(jī)器學(xué)習(xí)或模式識(shí)別的課上可能都講過。最上邊是一個(gè)簡(jiǎn)單的混合模型,下邊是一個(gè)因子分析模型。這些基本模型是構(gòu)建深度生成模型的基本單元。
深度生成模型的概念其實(shí)很直接,就是,隱含變量Z可以有多層,不同層之間存在連接關(guān)系,這里的連接比深度神經(jīng)網(wǎng)絡(luò)中的要更廣泛,我們即支持確定性的函數(shù)變換(比如:ReLu),也支持隨機(jī)的變換??傮w上,Z是隨機(jī)的,服從某種先驗(yàn)分布。
在給定觀察樣本時(shí),我們希望反向推斷出來Z的后驗(yàn)分布。這和一般的神經(jīng)網(wǎng)絡(luò)是完全一樣的,希望Z具有一定的語義,且越高層的Z其語義也高級(jí),以至于能解釋觀察到的現(xiàn)象。
這有一個(gè)簡(jiǎn)單的例子,來說明深度生成模型的定義和靈活性。
這個(gè)Z是一個(gè)非常簡(jiǎn)單的分布:標(biāo)準(zhǔn)高斯。通過隨機(jī)采樣,我們得到一個(gè)Z的具體值,然后經(jīng)過一個(gè)非線性的網(wǎng)絡(luò)(比如:一個(gè)簡(jiǎn)單的MLP全連接網(wǎng)絡(luò))變換,我們把該網(wǎng)絡(luò)的輸出定義為刻畫X分布的參數(shù),比如:我們假設(shè)X的兩個(gè)維度是獨(dú)立的,分布服從高斯分布,那么,MLP的四個(gè)輸出神經(jīng)元分布對(duì)應(yīng)這兩個(gè)高斯分布的均值和方差。
這是一個(gè)非常直觀的定義方式,但是,非常有效。我們知道,一個(gè)簡(jiǎn)單分布的隨機(jī)變量通過函數(shù)變換之后,會(huì)得到一個(gè)復(fù)雜分布的隨機(jī)變量。這里是使用參數(shù)化的深度神經(jīng)網(wǎng)絡(luò)來定義函數(shù)變換,它的參數(shù)可以通過訓(xùn)練數(shù)據(jù)自動(dòng)學(xué)習(xí)出來,因此,比人為選擇的特定函數(shù)具有更好的適應(yīng)性。它充分利用了神經(jīng)網(wǎng)絡(luò)強(qiáng)大的函數(shù)擬合能力。
定義完模型之后,接下來的問題是如何學(xué)習(xí)參數(shù)。根據(jù)前面的介紹,我們的主要目標(biāo)是讓模型分布與數(shù)據(jù)分布盡量接近。因此,需要一個(gè)合適的度量,來衡量?jī)蓚€(gè)分布的遠(yuǎn)近。目前,已經(jīng)發(fā)展了多個(gè)性質(zhì)較好的準(zhǔn)則學(xué)習(xí)深度生成模型。
最直接常用的方法是最大似然估計(jì)(MLE),它適用于定義了數(shù)據(jù)似然函數(shù)的模型。我們后面會(huì)有一個(gè)典型的例子。
另一種方法是矩匹配(Moment-matching),它實(shí)際上歷史比MLE還要早,最早用于估計(jì)高斯分布。最近,被用來學(xué)習(xí)深度生成模型,它適用于所有深度生成模型。只要我們能從模型中采樣,就可以通過某種矩匹配的準(zhǔn)則,對(duì)模型進(jìn)行優(yōu)化。對(duì)于復(fù)雜分布,需要用到核方法。
另外一種是GAN,它是基于博弈論的思路,定義了一個(gè)minimax對(duì)抗游戲。其中一個(gè)玩家是生成模型G,可以產(chǎn)生一些數(shù)據(jù);另一個(gè)玩家是判別模型D。G的目的是“以假亂真”,盡量生成不被D檢測(cè)出來的“真實(shí)”樣本。D的目的是區(qū)分真實(shí)數(shù)據(jù)和虛假數(shù)據(jù)。二者在對(duì)抗過程中,不斷學(xué)習(xí)進(jìn)步,最終達(dá)到“均衡”——G分布與真實(shí)分布吻合。最近,對(duì)GAN的關(guān)注比較多,出現(xiàn)了很多變種。
下面,我們主要介紹MLE的思想,關(guān)于GAN和矩匹配,可以參考其他材料深入了解。
變分推斷是一種常用的對(duì)復(fù)雜模型做后驗(yàn)推斷的工具。為了處理深度生成模型,最近在算法上有一些根本的變化。這里有一個(gè)典型的叫AEVB。
深度生成模型的特點(diǎn)在于隱含變量存在復(fù)雜的函數(shù)變換(比如:用神經(jīng)網(wǎng)絡(luò)來刻畫的非線性變換),所以,這種模型的后驗(yàn)分布p有很多局部概率比較大的點(diǎn),一般的方法是很難逼近的。AEVB的基本思想是:采用另一個(gè)神經(jīng)網(wǎng)絡(luò)定義一個(gè)深度產(chǎn)生模型q,來反向逼近目標(biāo)。
這里是一個(gè)構(gòu)造從X到Z的變分分布q的例子。我們從數(shù)據(jù)X出發(fā),通過神經(jīng)網(wǎng)絡(luò)變換,其輸出當(dāng)作Z的后驗(yàn)分布的參數(shù),比如:高斯分布的均值和方差。同樣的,這種定義也是充分利用了神經(jīng)網(wǎng)絡(luò)強(qiáng)大的函數(shù)擬合能力。這個(gè)網(wǎng)絡(luò)叫做Q網(wǎng)絡(luò)。相應(yīng)的,生成數(shù)據(jù)的網(wǎng)絡(luò)稱為P網(wǎng)絡(luò)。這網(wǎng)絡(luò)的參數(shù)可以一起優(yōu)化,比如:使用隨機(jī)梯度的方法。
把Q-P網(wǎng)絡(luò)放在一起,我們可以構(gòu)成如下的圖示。它看上去和一個(gè)標(biāo)準(zhǔn)的Auto-Encoder是類似的結(jié)構(gòu),差別在于這里的變量是隨機(jī)的,我們要處理的目標(biāo)是概率分布。正因?yàn)檫@種類似,這種方法被稱為Auto-Encoding Variational Bayes (AEVB)。
上面是AEVB的基本框架,當(dāng)然,在具體做的時(shí)候,還有一些細(xì)節(jié),比如:如何計(jì)算隨機(jī)梯度?如何控制隨機(jī)梯度的方差?如何自適應(yīng)調(diào)整步長(zhǎng)等等。這里就不在一一介紹了。
下面還有一點(diǎn)時(shí)間,快速看一些具體的例子。
首先,在AEVB中,Q-P 網(wǎng)絡(luò)一般是對(duì)稱的,P怎么生成的,Q網(wǎng)絡(luò)就反過來。但是,實(shí)際上非對(duì)稱的網(wǎng)絡(luò)可能更適合。我們知道,用于識(shí)別的網(wǎng)絡(luò)Q,其主要目的是從底層輸入中逐層抽象,提取高層的特征表示。但是,在提取過程中,我們會(huì)丟失細(xì)節(jié)信息。所以,到了高層的Z之后,再反過來生成X,實(shí)際上細(xì)節(jié)信息就沒有了,而且沒辦法恢復(fù)。一個(gè)簡(jiǎn)單的解決思路是打破這種對(duì)稱結(jié)構(gòu),讓生產(chǎn)網(wǎng)絡(luò)具有某種機(jī)制,把細(xì)節(jié)信息記下來,在生成新樣本時(shí),可以使用。
這里我們做了一個(gè)初步嘗試,在生成網(wǎng)絡(luò)上引入可以學(xué)習(xí)的記憶(memory)單元,這個(gè)memory是記細(xì)節(jié)信息的。在生成具體圖像時(shí),通過一個(gè)有選擇性的模型,得到一個(gè)稀疏的權(quán)重向量,對(duì)memory中的單元進(jìn)行加權(quán)求和,并且與高層表示結(jié)合在一起,就可以生成底層想要的細(xì)節(jié)信息,基本的結(jié)構(gòu)如下圖所示,多個(gè)基本層疊加在一起,可以構(gòu)造一個(gè)深度生成模型。
這個(gè)想法很簡(jiǎn)單,受到了腦科學(xué)的啟發(fā),它的實(shí)際效果很顯著?;旧显诓辉黾泳W(wǎng)絡(luò)參數(shù)的情況下,用memory記得信息得到的恢復(fù)結(jié)果要比不用的好很多,生成質(zhì)量會(huì)更好。
深度生成模型最主要的任務(wù)是做樣本生成,從未標(biāo)注數(shù)據(jù)中學(xué)習(xí)。最近,也被用來做半監(jiān)督學(xué)習(xí),其主要目的是利用大量未標(biāo)注數(shù)據(jù),學(xué)習(xí)更好的分類器。這里面有兩個(gè)問題需要回答,首先,深度生成模型的識(shí)別精度如何?其次,如何將未標(biāo)注和有標(biāo)注數(shù)據(jù)很好地融合在一起?我們課題組做了一些探索,發(fā)現(xiàn)深度生成模型在適當(dāng)訓(xùn)練的情況下,其識(shí)別精度可以與判別式神經(jīng)網(wǎng)絡(luò)類似,而且產(chǎn)生新樣本的能力沒有受影響,這在一些困難場(chǎng)景下具有優(yōu)勢(shì),比如:當(dāng)輸入樣本被污染,或者存在缺失數(shù)據(jù)時(shí),可以用生成模型對(duì)數(shù)據(jù)進(jìn)行恢復(fù),其識(shí)別性能往往不會(huì)受到很大影響;相反,判別式的神經(jīng)網(wǎng)絡(luò)是不具備這些能力的,其精度往往惡化嚴(yán)重。在識(shí)別任務(wù)中,深度生成模型也可以利用卷積運(yùn)算以及池化操作等,處理復(fù)雜的圖像。
對(duì)于第二個(gè)問題,最近也有不少進(jìn)展,包括我們自己的工作,半監(jiān)督的深度生成模型在很多任務(wù)上都獲得了當(dāng)前最好的識(shí)別精度。更有趣的是,在半監(jiān)督任務(wù)下,我們可以把類別信息和風(fēng)格(style)信息區(qū)分開,生成特定變化的樣本。例如:在生成的時(shí)候,可以先給定一個(gè)類,通過變化Style,得到同一個(gè)類的不同Style的圖像(如MNIST字符);也可以通過固定Style,變化類別得到不同類別的相同Style的圖像。因此,可以從兩個(gè)維度刻畫生成的樣本。
以上是我想跟大家分享的。我想說的主要觀點(diǎn)是:即使在做深度學(xué)習(xí)或者大數(shù)據(jù)時(shí),經(jīng)典的貝葉斯方法還是非常有用的,而且應(yīng)該得到大家的重視?,F(xiàn)在比較活躍的一個(gè)發(fā)展方向。從歷史上看,人工智能的基本原理很大層度上依賴于概率統(tǒng)計(jì)。深度學(xué)習(xí)也會(huì)一樣。我相信會(huì)有越來越多的工作在這方面深入探索。
最后,我們還做了一個(gè)事情,值得和大家分享。我們知道,深度神經(jīng)網(wǎng)絡(luò)的快速發(fā)展離不開開源平臺(tái)的貢獻(xiàn),比如TensorFlow、Caffe、Theano等等。這些平臺(tái)都是支持神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和測(cè)試,目前仍然缺乏一個(gè)有效的平臺(tái),支持貝葉斯深度學(xué)習(xí)、深度生成模型等。如果每個(gè)模型都從底層開始實(shí)現(xiàn),將會(huì)是一個(gè)非常痛苦的事情。為了降低深度生成模型的使用和開發(fā)門檻,我們研發(fā)了“珠算”(ZhuSuan)Python庫(kù),已經(jīng)在Github上開源,歡迎大家試用( https://zhusuan.readthedocs.io)。珠算是基于TensorFlow的,充分支持TensorFlow中的各種運(yùn)算,非常好用,實(shí)現(xiàn)一個(gè)深度生成模型就像一個(gè)普通的神經(jīng)網(wǎng)絡(luò)一樣方便。
以上為朱軍老師的《貝葉斯學(xué)習(xí)前沿進(jìn)展》分享,更多干貨請(qǐng)關(guān)注雷鋒網(wǎng)。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。