0
本文作者: 谷磊 | 2017-03-20 12:23 |
雷鋒網(wǎng)[AI科技評論]按:本文是雷鋒網(wǎng)編輯根據(jù)劉鐵巖博士在中國人工智能學(xué)會AIDL第二期人工智能前沿講習(xí)班*機器學(xué)習(xí)前沿所作報告《迎接深度學(xué)習(xí)的“大”挑戰(zhàn)》編輯整理而來,發(fā)文前已得到劉鐵巖博士的親自刪減校正。
該報告分(上)、(下)兩部分,上半部分傳送門:微軟亞洲研究院劉鐵巖博士:迎接深度學(xué)習(xí)的“大”挑戰(zhàn)(上)
劉鐵巖
劉鐵巖博士,微軟亞洲研究院首席研究員,領(lǐng)導(dǎo)機器學(xué)習(xí)和人工智能方向的研究工作。同時他也是美國卡內(nèi)基-梅隆大學(xué)(CMU)客座教授、英國諾丁漢大學(xué)榮譽教授、中國科技大學(xué)、中山大學(xué)、南開大學(xué)的博士生導(dǎo)師。劉博士的先鋒性工作促進(jìn)了機器學(xué)習(xí)與信息檢索之間的融合,被國際學(xué)術(shù)界公認(rèn)為“排序?qū)W習(xí)”領(lǐng)域的代表人物,他在該領(lǐng)域的學(xué)術(shù)論文已被引用近萬次,并受Springer出版社之邀撰寫了該領(lǐng)域的首部學(xué)術(shù)專著(并成為Springer計算機領(lǐng)域華人作者十大暢銷書之一)。近年來,劉博士在博弈機器學(xué)習(xí)、深度學(xué)習(xí)、分布式機器學(xué)習(xí)等方面也頗有建樹,他的研究工作多次獲得最佳論文獎、最高引用論文獎、研究突破獎;被廣泛應(yīng)用在微軟的產(chǎn)品和在線服務(wù)中、并通過微軟認(rèn)知工具包(CNTK)、微軟分布式機器學(xué)習(xí)工具包(DMTK)、微軟圖引擎(Graph Engine)等項目開源。他曾受邀擔(dān)任了包括SIGIR、WWW、KDD、ICML、NIPS、AAAI、ACL在內(nèi)的頂級國際會議的組委會主席、程序委員會主席、或領(lǐng)域主席;以及包括ACM TOIS、ACM TWEB、Neurocomputing在內(nèi)的國際期刊副主編。他是國際電子電氣工程師學(xué)會(IEEE)院士,美國計算機學(xué)會(ACM)杰出會員,中國計算機學(xué)會(CCF)學(xué)術(shù)工委,中文信息學(xué)會(CIPS)信息檢索專委會副主任。
以下為雷鋒網(wǎng)編輯整理的劉鐵巖博士所做的現(xiàn)場演講的第二部分,主要介紹了深度學(xué)習(xí)的訓(xùn)練方法和技巧、深度學(xué)習(xí)的挑戰(zhàn)和應(yīng)對方法等問題。文末,劉博士結(jié)合眼下AI的研究進(jìn)展,對深度學(xué)習(xí)領(lǐng)域深刻的“吐槽”了一番,妙趣橫生且發(fā)人深省。
前面提到的BN方法還不能解決所有的問題。 因為即便做了白化,激活函數(shù)的導(dǎo)數(shù)的最大值也只有0.25,如果層數(shù)成百上千,0.25不斷連乘以后,將很快衰減為0。所以后來又涌現(xiàn)出一些更加直接、更加有效的方法。其基本思路是在各層之間建立更暢通的渠道,讓信息流繞過非線性的激活函數(shù)。這類工作包含Highway Network、LSTM、ResNet等。
Highway Network和LSTM一脈相承,除了原來的非線性通路以外,增加了一個由門電路控制的線性通路。兩個通路同時存在,而這兩個通路到底誰開啟或者多大程度開啟,由另外一個小的神經(jīng)網(wǎng)絡(luò)進(jìn)行控制。
相比之下,ResNet的做法更加直接,它不用門電路控制,而是直接增加總是開通的線性通路。雖然這些方法的操作方式不同,但是它們的基本出發(fā)點是一樣的,就是在一定程度上跳過非線性單元,以線性的方式把殘差傳遞下去,對神經(jīng)網(wǎng)絡(luò)模型的參數(shù)進(jìn)行有效的學(xué)習(xí)。
在前面提到的各項技術(shù)的幫助下,深層神經(jīng)網(wǎng)絡(luò)的訓(xùn)練效果有了很大的提升。這張圖展示了網(wǎng)絡(luò)不斷加深、效果不斷變好的歷史演變過程。2012年ImageNet比賽中脫穎而出的AlexNet只有8層,后來變成19層、22層,到2015年,ResNet以152層的復(fù)雜姿態(tài)出場,贏得了ImageNet比賽的冠軍。
從這張圖上可以看出,隨著層數(shù)的不斷變深,圖像的識別錯誤率不斷下降,由此看來,網(wǎng)絡(luò)變深還是很有價值的。
到此為止,我們把深度學(xué)習(xí)及其訓(xùn)練方法和技巧給大家做了一個非常簡短的介紹。
深度學(xué)習(xí)的挑戰(zhàn)
接下來我們進(jìn)入下一個主題:深度學(xué)習(xí)的挑戰(zhàn)和機遇。很多人都在討論為什么深度學(xué)習(xí)會成功,說起來無外乎來源于機器學(xué)習(xí)優(yōu)化過程的三個方面。
基本上所有的有監(jiān)督機器學(xué)習(xí)都是在最小化所謂的經(jīng)驗風(fēng)險。在這個最小化的式子里包含以下幾個元素:
一個是數(shù)據(jù):X是數(shù)據(jù)的輸入、Y是數(shù)據(jù)的標(biāo)簽;
二是模型,用f表示(L是loss function);
三是針對f的尋優(yōu)過程。
首先對數(shù)據(jù)X、Y而言,深度學(xué)習(xí)通常會利用非常大量的數(shù)據(jù)進(jìn)行訓(xùn)練。舉個例子,機器翻譯的訓(xùn)練數(shù)據(jù)通常包含上千萬個雙語句對,語音識別常常使用幾千或者上萬個小時的標(biāo)注數(shù)據(jù),而圖像,則會用到幾百萬甚至幾千萬張有標(biāo)簽的圖像進(jìn)行訓(xùn)練。前面還提到了下圍棋的AlphaGo,它使用了3千萬個棋局進(jìn)行訓(xùn)練??梢赃@么說,現(xiàn)在主流的深度學(xué)習(xí)系統(tǒng)動輒就會用到千萬量級的有標(biāo)簽訓(xùn)練數(shù)據(jù)。這對于十幾年前的機器學(xué)習(xí)領(lǐng)域是無法想象的。
其次,深度學(xué)習(xí)通常會使用層次很深、參數(shù)眾多的大模型。很多應(yīng)用級的深層神經(jīng)網(wǎng)絡(luò)會包含十億或者更多的參數(shù)。使用如此大的模型,其好處是可以具備非常強的逼近能力,因此可以解決以往淺層機器學(xué)習(xí)無法解決的難題。
當(dāng)然當(dāng)我們有那么大的數(shù)據(jù)、那么大的模型,就不得不使用一個計算機集群來進(jìn)行優(yōu)化,所以GPU集群的出現(xiàn)成為了深度學(xué)習(xí)成功的第三個推手。
成也蕭何敗也蕭何,深度學(xué)習(xí)受益于大數(shù)據(jù)、大模型、和基于計算機集群的龐大計算能力,但這些方面對于普通的研究人員而言,都蘊含著巨大的挑戰(zhàn)。我們今天要探討的是如何解決這些挑戰(zhàn)。
首先,讓我們來看看大數(shù)據(jù)。即便在語音、圖像、機器翻譯等領(lǐng)域我們可以收集到足夠的訓(xùn)練數(shù)據(jù),在其他的一些領(lǐng)域,想要收集到千萬量級的訓(xùn)練數(shù)據(jù)卻可能是mission impossible。比如在醫(yī)療行業(yè),有些疑難雜癥本身的樣例就很少,想要獲取大數(shù)據(jù)也無從下手。在其他一些領(lǐng)域,雖然有可能獲取大數(shù)據(jù),但是代價昂貴,可能要花上億的成本。那么對于這些領(lǐng)域,在沒有大的標(biāo)注數(shù)據(jù)的情況下,我們還能使用深度學(xué)習(xí)嗎?
其次,在很多情況下,模型如果太大會超出計算資源的容量。比如,簡單計算一下要在10億量級的網(wǎng)頁上訓(xùn)練一個基于循環(huán)神經(jīng)網(wǎng)絡(luò)的語言模型,其模型尺寸會在100GB的量級。這會遠(yuǎn)遠(yuǎn)超過主流GPU卡的容量。這時候可能就必須使用多卡的模型并行,這會帶了很多額外的通信代價,無法實現(xiàn)預(yù)期的加速比。(GPU很有意思,如果模型能塞進(jìn)一張卡,它的運算并行度很高,訓(xùn)練很快??梢坏┠P头挪贿M(jìn)一張卡,需要通過PCI-E去訪問遠(yuǎn)端的模型,則GPU的吞吐量會被拖垮,訓(xùn)練速度大打折扣。)
最后,即便有一些公司擁有強大的計算資源,同時調(diào)度幾千塊GPU來進(jìn)行計算不成問題,也并表示這樣可以取得預(yù)期的加速比。如果這些GPU卡之間互相等待、內(nèi)耗,則可能被最慢的GPU拖住,只達(dá)到了很小的加速比,得不償失。如何保證取得線性或者準(zhǔn)線性加速比,并且還不損失模型訓(xùn)練的精度,這是一個重要且困難的研究問題。
深度學(xué)習(xí)“大”挑戰(zhàn)的應(yīng)對策略
接下來我會介紹我們研究組是如何解決前面提到的有關(guān)大數(shù)據(jù)、大模型、大規(guī)模訓(xùn)練的技術(shù)挑戰(zhàn)的。為此,我會簡要介紹我們最近從事的三項研究工作:
一個對偶學(xué)習(xí)Dual Learning;
二是輕量級算法LightRNN;
三是Delay-Compensated ASGD。
對偶學(xué)習(xí)Dual Learning
對偶學(xué)習(xí)是我們?nèi)ツ昴甑装l(fā)表在NIPS(NIPS是機器學(xué)習(xí)領(lǐng)域最頂級的學(xué)術(shù)會議)上的一篇論文,發(fā)表之后收到了很大的反響。這個論文提出了一個聽起來很簡單的思路,有效地解決了缺乏有標(biāo)簽訓(xùn)練數(shù)據(jù)的問題。那我們是如何做到這一點的呢?
我們的基本思路是在沒有人工標(biāo)注數(shù)據(jù)的情況下,利用其它的結(jié)構(gòu)信息,建立一個閉環(huán)系統(tǒng),利用該系統(tǒng)中的反饋信號,實現(xiàn)有效的模型訓(xùn)練。這里提到的結(jié)構(gòu)信息,其實是人工智能任務(wù)的對偶性。
什么是人工智能任務(wù)的對偶性呢?讓我們來看幾個例子。比如機器翻譯,我們關(guān)心中文到英文的翻譯,同時也關(guān)心從英文到中文的翻譯。比如語音方面,我們關(guān)心語音識別,同時也關(guān)心語音合成。同樣,我們關(guān)心圖像分類,也關(guān)心圖像生成。如此這般,我們發(fā)現(xiàn),很多人工智能任務(wù)都存在一個有意義的相反的任務(wù)。能不能利用這種對偶性,讓兩個任務(wù)之間互相提供反饋信號,把深度學(xué)習(xí)模型訓(xùn)練出來呢?
這是完全可行的。舉一個簡單的例子,比如左邊的Agent很懂中文,并且想把中文翻譯成英文,他有一點關(guān)于英文的基礎(chǔ)知識,換句話說他擁有一個中到英翻譯的弱模型。右邊這個agent則相反,他精通英文并想把英文翻譯成中文,但只擁有一個英到中翻譯的弱模型。
現(xiàn)在左邊的agent拿到了一個中文句子,用他的弱模型將其翻譯成了英文,丟給右邊的agent。右邊的agent做的第一判斷是她收到的句子是否是個合理的英文句子?如果從英文語法的角度看,這個句子亂七八糟的看不懂,她就會給出一個負(fù)反饋信號:之前的中到英的翻譯肯定出錯了。如果這個句子從語法上來看沒啥問題,她就會用自己的弱翻譯模型將其翻譯回中文,并且傳給左邊的agent。同樣,左邊的agent可以通過語法判斷這個翻譯是否靠譜,也可以通過這個翻譯回來的句子和原本的中文句子的比較來給出進(jìn)一步的反饋信號。雙方可以通過這些反饋信號來更新模型參數(shù)。這就是對偶學(xué)習(xí),是不是特別簡單?
這個過程聽起來簡單,但真正做起來不那么容易。因為這個閉環(huán)中很多的反饋信號都是離散的,不容易通過求導(dǎo)的方式加以利用,我們需要用到類似強化學(xué)習(xí)中Policy Gradient這樣的方法實現(xiàn)模型參數(shù)的優(yōu)化。我們把對偶學(xué)習(xí)應(yīng)用在機器翻譯中,在標(biāo)準(zhǔn)的測試數(shù)據(jù)上取得了非常好的效果。我們從一個只用10%的雙語數(shù)據(jù)訓(xùn)練出的弱模型出發(fā),通過無標(biāo)簽的單語數(shù)據(jù)和對偶學(xué)習(xí)技術(shù),最終超過了利用100%雙語數(shù)據(jù)訓(xùn)練出的強模型。
除了前面提到的機器翻譯的例子,還有很多對偶學(xué)習(xí)的例子:比如說語音信號處理、圖像信號處理、對話等等,都可以做對偶學(xué)習(xí)。這幾張PPT分別展示了在這些應(yīng)用里如何定義反饋信號,實現(xiàn)有效的參數(shù)優(yōu)化。
其實人工智能任務(wù)的對偶性是非常本質(zhì)的,用好了在很多地方都會取得意想不到的結(jié)果。它不僅可以幫助我們把無標(biāo)簽數(shù)據(jù)用起來,還可以顯著地提高有標(biāo)簽數(shù)據(jù)的學(xué)習(xí)效果。接下來我們將會展示對偶學(xué)習(xí)的各種擴展應(yīng)用。
首先,有人可能會問,你舉的這些例子里確實存在天然的對偶性,可以也有些任務(wù)并沒有這種天然的對偶性,那能不能使用對偶學(xué)習(xí)技術(shù)來改善它們呢?答案是肯定的。如果沒有天然的對偶性,我們可以通過類似“畫輔助線”的方法,構(gòu)建一個虛擬的對偶任務(wù)。只不過在完成對偶學(xué)習(xí)之后,我們僅僅使用主任務(wù)的模型罷了。大家可能也聽過這幾年很火的GAN(Generative Adversarial Nets),它就可以看做一種虛擬的對偶學(xué)習(xí)。
其次,還有人可能會問,對偶學(xué)習(xí)主要是解決無標(biāo)簽數(shù)據(jù)的學(xué)習(xí)問題,那我如果只關(guān)心有監(jiān)督的學(xué)習(xí)問題,這個結(jié)構(gòu)對偶性還有幫助嗎?答案也是肯定的。
以前人們在訓(xùn)練一對對偶任務(wù)的時候,通常是獨立進(jìn)行的,也就是各自利用自己的訓(xùn)練數(shù)據(jù)來訓(xùn)練,沒有在訓(xùn)練過程考慮到還存在另一個有結(jié)構(gòu)關(guān)系的訓(xùn)練任務(wù)存在。其實,這兩個訓(xùn)練任務(wù)是存在深層次內(nèi)在聯(lián)系的。大家學(xué)過機器學(xué)習(xí)原理的話,就知道我們訓(xùn)練的分類模型其實是去逼近條件概率P(Y|X)。那么一對對偶任務(wù)的模型分別逼近的是P(Y|X)和P(X|Y)。他們之間是有數(shù)學(xué)聯(lián)系的:P(X)P(Y|X)=P(Y)P(X|Y)。其中的先驗分布P(X)和P(Y)可以很容易通過無標(biāo)簽數(shù)據(jù)獲得。
因此,我們在訓(xùn)練兩個模型的時候,如果由他們算出的聯(lián)合概率不相等的話,就說明模型訓(xùn)練還不充分。換言之,前面的等式可以作為兩個對偶任務(wù)訓(xùn)練的正則項使用,提高算法的泛化能力,在未知的測試集上取得更好的分類效果。
我們把這個正則項應(yīng)用到機器翻譯中,再次取得了明顯的提升,從英法互譯的數(shù)據(jù)上看,BLEU score提高了2個點。
同樣,加入這個正則項,在圖像分類、圖像生成、情感分類、情感生成等方面都取得了很好的效果。我們舉個例子,傳統(tǒng)技術(shù)在做情感生成的時候,出來的語句是似然比較大的句子,通常是訓(xùn)練數(shù)據(jù)里最多出現(xiàn)的詞語和句式。而引入了情感分類的對偶正則項,生成的句子就會更多地包含那些明顯攜帶感情色彩的詞語。這樣生成的句子就會既有內(nèi)容、又有情感,效果更好。
第三,或許有人還可能會問:如果我無法改變模型訓(xùn)練的過程,別人已經(jīng)幫我訓(xùn)練好了兩個模型,對偶性還能幫我改善推斷的過程嗎?答案還是肯定的。假設(shè)我們之前已經(jīng)獨立地訓(xùn)練了兩個模型,一個叫f,一個叫g(shù)(比如f是做語音識別的,g是做語音合成的),現(xiàn)在要用他們來做inference。這個時候,其實前面說的概率約束還在。我們可以通過貝葉斯公式,把兩個對偶任務(wù)的模型聯(lián)系起來,實現(xiàn)共同的推斷。具體細(xì)節(jié)如圖所示。我們做了大量實驗,效果非常好。比如在機器翻譯方面,聯(lián)合推斷又會帶來幾個點的BLEU score的提升。
總結(jié)一下,我們認(rèn)為對偶學(xué)習(xí)是一個新的學(xué)習(xí)范式,它和co-training、Transfer learning等既有聯(lián)系又有區(qū)別。它開啟了看待人工智能任務(wù)的新視角,應(yīng)用價值遠(yuǎn)遠(yuǎn)不止前面的具體介紹,如果大家有興趣可以跟我們一起挖掘。
輕量級算法LightRNN
接下來,我們來討論一下如何處理大模型的挑戰(zhàn)。舉個例子,假設(shè)我們要利用clueweb這樣的互聯(lián)網(wǎng)數(shù)據(jù)集來訓(xùn)練語言模型。這種大數(shù)據(jù)集通常有千萬量級的詞表,其中包含很多生僻的人名、地名、公司名,新詞、衍生詞、甚至是用戶輸入的錯詞。如果使用前面提到的循環(huán)神經(jīng)網(wǎng)絡(luò)來訓(xùn)練語言模型,經(jīng)過非常簡單的運算就可以得出,其模型規(guī)模大約80G,也就是說你需要有80G的內(nèi)存才能放下這個RNN模型,這對于CPU不是什么問題,但是對GPU而言就是非常大的挑戰(zhàn)了,主流的GPU只有十幾二十G的內(nèi)存,根本放不下這么大的模型。 就算真的可以,以目前主流GPU的運算速度,也要將近200年才能完成訓(xùn)練。
那這個問題怎么解決呢?接下來我們要介紹的LightRNN算法是一種解決的辦法,我相信還有很多別的方法,但是這個方法很有啟發(fā)意義。它的具體思路是什么呢?首先,讓我們來看看為什么模型會那么大,其主要原因是我們假設(shè)每個詞都是相互獨立的,因而如果有1千萬個詞,就會訓(xùn)練出1千萬個向量參數(shù)來。顯然這種假設(shè)是不正確的,怎么可能這1千萬個詞之間沒有關(guān)系呢?如果我們打破這個假設(shè),試圖在學(xué)習(xí)過程中發(fā)現(xiàn)詞匯之間的相關(guān)性,就可能極大地壓縮模型規(guī)模。特別地,我們用2個向量來表達(dá)每個詞匯,但是強制某些詞共享其中的一個分量,這樣雖然還是有那么多詞匯,我們卻不需要那么多的向量來進(jìn)行表達(dá),因此可以縮小模型尺寸。
具體而言,我們建立了一張映射表,在這張表里面每一個詞對應(yīng)兩個參數(shù)向量(x和y),表里所有同一行的詞共享x,所有同一列的詞共享y。相應(yīng)地,我們需要把RNN的結(jié)構(gòu)做一些調(diào)整,如下圖所示。
這樣我們就可以把一個80G的模型,壓縮到只有50M那么大。這么小的模型,不僅訓(xùn)練起來很快,還可以隨便塞到移動終端里,實現(xiàn)高效的inference。
那么有人會問了,前面的LightRNN算法嚴(yán)重依賴于這個二維映射表,可是怎么才能構(gòu)建出一個合理的表格,使得有聯(lián)系的詞共享參數(shù),沒有聯(lián)系的詞就不共享參數(shù)呢?其實這是一個經(jīng)典的問題。假設(shè)我給每個詞都已經(jīng)有一個參數(shù)表達(dá),x、y已經(jīng)有了,就可以通過求解一個最優(yōu)二分圖匹配的問題實現(xiàn)二維映射表的構(gòu)造。而一旦有了映射表,我們又可以通過RNN的訓(xùn)練更新參數(shù)表達(dá)。這是一個循環(huán)往復(fù)的過程,最終收斂的時候,我們不但有了好的映射表,也有了好的參數(shù)模型。
我們在標(biāo)準(zhǔn)數(shù)據(jù)集上測試了LightRNN算法。神奇的是,雖然模型變小了,語言模型的Perplexity竟然變好了。這個效果其實有點出乎我們的預(yù)期,但是卻也在情理之中。因為LightRNN打破了傳統(tǒng)RNN關(guān)于每個詞都是獨立的假設(shè),主動挖掘了詞匯之間的語義相似性,因此會學(xué)到更加有意義的模型參數(shù)。這對inference是很有幫助的。
其實LightRNN的思想遠(yuǎn)遠(yuǎn)超過語音模型本身,機器翻譯里、文本分類里難道就沒有這個問題嗎?這個技術(shù)可以推廣到幾乎所有文本上的應(yīng)用問題。甚至,除了文本以外,它還可以用來解決大規(guī)模圖像分類的問題。只要模型的輸出層特別大,而且這些輸出類別存在某些內(nèi)在的聯(lián)系,都可以采用LightRNN的技術(shù)對模型進(jìn)行簡化,對訓(xùn)練過程進(jìn)行加速。
除此之外,模型變小了,對分布式訓(xùn)練也很有意義。分布式運算的時候,各個worker machine之間通常要傳遞模型或者模型梯度。當(dāng)模型比較小的時候,這種傳輸?shù)耐ㄐ糯鷥r就比較小,分布式訓(xùn)練就 比較容易取得較高的加速比。
Delay-Compensated ASGD
說到分布式訓(xùn)練,我們順便就講講第三個挑戰(zhàn)。我們這里討論的主要是數(shù)據(jù)并行,也就是數(shù)據(jù)太多了,一臺機器或者放不下、或者訓(xùn)練速度太慢。假設(shè)我們把這些數(shù)據(jù)分成N份,每份放在一臺機器上,然后各自在本地計算,一段時間以后把本地的運算結(jié)果和參數(shù)服務(wù)器同步一下,然后再繼續(xù)本地的運算,這就是最基本的數(shù)據(jù)并行的模式。
數(shù)據(jù)并行模式有兩個常用的做法:
一是同步;
二是異步。
同步并行指的是本地將模型更新后發(fā)給參數(shù)服務(wù)器,然后進(jìn)入等待狀態(tài)。直到所有模型更新都發(fā)到參數(shù)服務(wù)器以后,參數(shù)服務(wù)器將模型進(jìn)行平均和回傳,大家再各自以平均模型為起點,進(jìn)行下一輪的本地訓(xùn)練。這個過程是完全可控的,而且在數(shù)學(xué)上是可以清晰描述的。但是,它的問題是由于互相等待,整個系統(tǒng)的速度會被最慢的機器拖垮。雖然使用了很多機器一起進(jìn)行并行運算,但通常無法達(dá)到很高的加速比。為了解決這個問題,異步并行被大量使用。
所謂異步并行指的是,本地機器各自進(jìn)行自己的訓(xùn)練工作,一段時間以后將模型更新推送到參數(shù)服務(wù)器上,然后并不等待其他機器,而是把當(dāng)前參數(shù)服務(wù)器上的全局模型拿下來,以此為起點馬上進(jìn)行下一輪的本地訓(xùn)練。這個過程的好處就是快,因為各個機器之間不需要互相等待,但是訓(xùn)練過程在數(shù)學(xué)上的描述是不清晰的,因為包含很多亂序更新,它和單機串行訓(xùn)練的過程相去甚遠(yuǎn),所以訓(xùn)練的結(jié)果沒有很好的理論保證,會受到各個機器之間速度差的影響。我們用延遲來描述這種速度差。具體來說,假設(shè)我們一共有10臺機器參與運算,對于其中的一臺機器,當(dāng)我從參數(shù)服務(wù)器上取得一個模型,并且根據(jù)本地數(shù)據(jù)求出模型梯度以后,在我打算將這個梯度回傳給參數(shù)服務(wù)器之前,可能其他的機器已經(jīng)把他們的模型梯度推送給了參數(shù)服務(wù)器,也就是說參數(shù)服務(wù)器上的全局模型可能已經(jīng)發(fā)生了多次版本變化。那么我推送上去的模型梯度就不再適用了,因為它對應(yīng)于一個舊模型,我們稱之為延遲的梯度。當(dāng)延遲的梯度被加到全局模型以后,可能毀掉全局模型,因為它已經(jīng)違背了梯度下降的基本數(shù)學(xué)定義,因此收斂性沒法得到很好的保障。
為了解決這個問題,人們使用了很多手段,包括SSP、AdaDelay等等。他們或者強制要求跑的快的機器停下來等待比較慢的機器,或者給延遲的梯度一個較小的學(xué)習(xí)率。
也有人證明其實這個延遲和Momentum有某種關(guān)系,只需要調(diào)整momentum的系數(shù)就可以平衡這個延遲。這些工作都很有意義,但是他們并沒有非常正面地分析延遲的來源,并且針對性地解決延遲的問題。
我們研究組對這么問題進(jìn)行了正面的回答。其實這個事說起來也很簡單。
大家想想,我們本來應(yīng)該加上這個梯度才是標(biāo)準(zhǔn)的梯度下降法,可是因為延遲的存在,我們加卻把t時刻的梯度加到了t+τ時刻的模型上去。正確梯度和延遲梯度的關(guān)系可以用泰勒展開來進(jìn)行刻畫:它們之間的差別就是這些一階、二階、和高階項。如果我們能把這些項有效地利用起來,就可以把延遲補償?shù)簟_@事看起來好像簡單,做起來卻不容易。
首先,泰勒展開在什么時候有意義呢?Wt和Wt+τ距離不能太遠(yuǎn),如果相差太遠(yuǎn),那些高階項就不是小量,有限泰勒展開就不準(zhǔn)了。這決定了在訓(xùn)練的哪個階段使用這項技術(shù):在訓(xùn)練的后半程,當(dāng)模型快要收斂,學(xué)習(xí)率較小的時候,可以保證每次模型變化不太大,從而安全地使用泰勒展開。
其次,即便是多加上一個一階項,運算量也是很大的。因為梯度函數(shù)的一階導(dǎo)數(shù)對應(yīng)于原目標(biāo)函數(shù)的二階導(dǎo)數(shù),也就是對應(yīng)于海森陣。我們知道海森陣計算和存儲的復(fù)雜度都很高,在模型很大的時候,實操性不強。
那么怎么解決這個挑戰(zhàn)呢?我們證明了一個定理,在特定情況下,Hessen陣可以幾乎0代價地計算出來,而且近似損失非常之小。具體而言,我們證明了對于一些特定的損失函數(shù)(負(fù)對數(shù)似然的形式),二階導(dǎo)可以被一階導(dǎo)的外積進(jìn)行無偏估計。無偏估計雖然均值相同,方差可能仍然很大,為了進(jìn)一步提升近似效果,我們通過最小化MSE來控制方差。做完之后我們就得到了一個新的公式,這個公式除了以前的異步的梯度下降以外還多引入一項,其中包含一個神奇的Φ函數(shù)和λ因子,只要通過調(diào)節(jié)他們就可以有效的補償延遲。
在此基礎(chǔ)上,我們進(jìn)一步證明,使用延遲補償?shù)漠惒讲⑿兴惴梢匀〉酶玫氖諗啃再|(zhì),其對延遲的敏感性大大降低。
這一點被我們所做的大量實驗驗證。實驗表明,我們不僅可以取得線性加速比,還能達(dá)到幾乎和單機串行算法一樣的精度。
到這兒為止我們針對大數(shù)據(jù)、大模型、大計算的挑戰(zhàn),分別討論了相應(yīng)的技術(shù)解決方案。
如果大家對這些研究工作感興趣,可以看一下我們的論文,也歡迎大家使用微軟的開源工具包CNTK和DMTK,其中已經(jīng)包含了我們很多的研究工作。
在報告的最后,和大家聊點開腦洞的話題。這幾張PPT是中文的,其實是我之前在一次報告中和大家分享的關(guān)于AI的觀點時使用的。其中前三個觀點已經(jīng)在今天的講座中提到了。我們再來看看后面幾條:
首先是關(guān)于深度學(xué)習(xí)的調(diào)參問題?,F(xiàn)在深度學(xué)習(xí)技術(shù)非常依賴于調(diào)參黑科技。即便是公開的算法,甚至開源的代碼,也很難實現(xiàn)完美復(fù)現(xiàn),因為其背后的調(diào)參方法通常不會公開。那么,是否可以用更牛的黑科技來解決這個調(diào)參黑科技的問題呢?這幾年炒的很火的Learning to Learn技術(shù),正是為了實現(xiàn)這個目的。大家可以關(guān)注一下這個方向。
其次,深度學(xué)習(xí)是個黑箱方法。很多人都在吐槽,雖然效果很好,就是不知道為什么,這使得很多敏感行業(yè)不敢用,比如醫(yī)療、軍工等等。怎樣才能讓這個黑盒子變灰甚至變白呢?我們組目前在從事一項研究,試圖把符號邏輯和深度學(xué)習(xí)進(jìn)行深度集成,為此開發(fā)了一個新系統(tǒng)叫g(shù)raph machine,今年晚些時候可能會開源,到時候大家就可以進(jìn)一步了解我們的具體做法。
最后,我來吐槽一下整個深度學(xué)習(xí)領(lǐng)域吧 :).
我覺得現(xiàn)在所謂的AI其實不配叫做 Artificial Intelligence,更像是animal Intelligence。因為它不夠智能,它解決的絕大部分問題都是動物智能做的事情。關(guān)鍵原因是,它沒有抓到人和動物的關(guān)鍵差別。人和動物的差別是腦容量的大小嗎?是大數(shù)據(jù)、大計算、大模型能解決的嗎?我個人并不這樣認(rèn)為。我覺得人和動物主要的差別是在于人是社會動物,人有一套非常有效的機制,使人變得越來越聰明。
我給大家舉個簡單的例子,雖然動物也會通過強化學(xué)習(xí)適應(yīng)世界,學(xué)得一身本事。但是,一旦成年動物死掉,他們積累的技能就隨之消失,幼崽需要從頭再來,他們的智能進(jìn)化就被復(fù)位了。而人則完全不同,我們?nèi)藭偨Y(jié)知識,通過文字記錄知識、傳承知識;人有學(xué)校,有教育體系(teaching system),可以在短短十幾年的時間里教會自己的孩子上下五千年人類積累的知識。所以說,我們的智能進(jìn)化過程從未復(fù)位,而是站在前人的肩膀上繼續(xù)增長。這一點秒殺一切動物,并且使得人類的智能越來越強大,從而成為了萬物之靈。
可是現(xiàn)在的人工智能研究并沒有對這些關(guān)鍵的機制進(jìn)行分析和模擬。我們有deep learning,但是沒有人研究deep teaching。所以我才說現(xiàn)在的人工智能技術(shù)是南轅北轍,做來做去還是動物智能,只有意識到人和動物的差別才能有所突破?;蛟S,Deep Teaching才是人工智能的下一個春天。
前面這些思考引導(dǎo)我在微軟亞洲研究院組織研究項目的時候進(jìn)行合理的布局,比如我們正在從事著對偶學(xué)習(xí),Light machine learning,符號學(xué)習(xí),分布式學(xué)習(xí)、群體學(xué)習(xí)等研究工作。我們拒絕跟風(fēng),而是追隨內(nèi)心對人工智能的認(rèn)識不斷前行。今天的講座目的不僅是教會大家了解什么是深度學(xué)習(xí),更重要的是啟發(fā)大家一起努力,把人工智能這個領(lǐng)域、深度學(xué)習(xí)這個領(lǐng)域推向新的高度,為人工智能的發(fā)展做出我們中國人獨特的貢獻(xiàn)!
這就是今天分享的所有內(nèi)容。謝謝大家!
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。