我們的主題是開啟智能計(jì)算的研究之門,我想從一個(gè)研究者的角度跟大家討論一下我們還能做些什么,甚至是更有意義的是去做些什么。人工智能表面看起來很火,其實(shí)如果把這張魔術(shù)的臺(tái)布展開,你就會(huì)發(fā)現(xiàn)它千瘡百孔,各種各樣非?;A(chǔ)的問題其實(shí)并沒有解決,甚至有很多哲學(xué)的方法論的東西從我們的角度來看可能也不準(zhǔn)確。
面對(duì)這樣的情況,更有意義的事情可能是冷靜下來,去從事一些能夠改變?nèi)斯ぶ悄墁F(xiàn)狀以及未來的很本質(zhì)的基礎(chǔ)研究工作,甚至是去反思人工智能發(fā)展的路線圖,看看我們是不是應(yīng)該重啟一條道路。這些事情才能使得我們不僅僅是隨波逐流,不僅僅是變點(diǎn)現(xiàn),騙點(diǎn)錢,而是在人工智能發(fā)展的真正道路上留下我們自己的足跡,過了幾十年當(dāng)大家回憶的時(shí)候,另外一個(gè)人站在臺(tái)上講述人工智能一百年的時(shí)候,他會(huì)在那個(gè)圖上標(biāo)著一個(gè)星星,那里面講的是你的故事。
前面這些人工智能現(xiàn)象的背后是什么?說到技術(shù)層面,現(xiàn)在最火的兩個(gè)詞,一個(gè)叫Deep Learning(深度學(xué)習(xí)),一個(gè)叫Reinforcement Learning(增強(qiáng)學(xué)習(xí))。深度學(xué)習(xí)是什么?通俗地講,它就是一個(gè)端到端的學(xué)習(xí),我們不需要一些feature engineering,而是用一個(gè)非常復(fù)雜的、容量很大的模型去直接擬合輸入輸出,讓模型自己探索有意義的中間表達(dá)。
什么是增強(qiáng)學(xué)習(xí)?通俗地講,就是學(xué)習(xí)機(jī)器不斷地跟環(huán)境做自主的互動(dòng),在互動(dòng)的過程中用長(zhǎng)遠(yuǎn)的收益來指導(dǎo)當(dāng)下該做什么決策,通過不斷的跟環(huán)境互動(dòng)去調(diào)整決策的最優(yōu)性。
之所以現(xiàn)在深度學(xué)習(xí)和增強(qiáng)學(xué)習(xí)能夠取得很大的成功,背后有一個(gè)很大的原因,就是基于巨大的數(shù)據(jù)和巨大的運(yùn)算量訓(xùn)練出的擁有巨大容量的模型,所以它們的成功離不開硬件系統(tǒng),這也是為什么現(xiàn)在GPU這么火,包括云計(jì)算、多機(jī)協(xié)作已經(jīng)成了我們必不可少的環(huán)節(jié)。
這是現(xiàn)在人工智能的現(xiàn)狀。面對(duì)這樣的現(xiàn)狀,我們是按照大家指定的這條道路去走,多搞幾個(gè)GPU去訓(xùn)練一些模型跟別人PK,還是反思一下這條路對(duì)不對(duì),有沒有什么問題,接下來我想跟大家討論的就是人工智能的諸多問題。我只列了一些其中的代表,但其實(shí)問題遠(yuǎn)遠(yuǎn)不止這些。
第一件事,現(xiàn)今的人工智能技術(shù),尤其是以深度學(xué)習(xí)為代表的,需要大量的標(biāo)注數(shù)據(jù),來讓我們能夠訓(xùn)練一個(gè)有效的模型,它不太依賴于人的先驗(yàn)知識(shí),要learning from scratch。如果想從零開始學(xué)習(xí)就需要有大量的樣本提供規(guī)律。比如,圖像分類,現(xiàn)在通常會(huì)用上千萬張圖像來訓(xùn)練;語(yǔ)音識(shí)別,成千上萬小時(shí)的有標(biāo)注的語(yǔ)音數(shù)據(jù);機(jī)器翻譯一般都是在千萬量級(jí)的雙語(yǔ)語(yǔ)對(duì)上去做訓(xùn)練,這樣的數(shù)據(jù)之前是不可想象的,但是我們這個(gè)時(shí)代是大數(shù)據(jù)時(shí)代,所以有了這些數(shù)據(jù),就使得深度學(xué)習(xí)訓(xùn)練成為了可能。但這是不是一劑萬能的靈藥呢?其實(shí)在很多領(lǐng)域里是不可能或者是很難獲得類似的數(shù)據(jù)的。比如醫(yī)療上面,很多疑難雜癥,全世界也沒有幾例,那怎么能夠?qū)@個(gè)類別搜集大數(shù)據(jù)。所以從這個(gè)意義上講,如果我們能夠找到一種方法克服對(duì)大的標(biāo)注數(shù)據(jù)的需求,我們才能夠使得現(xiàn)在的人工智能技術(shù)突破目前數(shù)據(jù)給它劃定的邊界,才能夠深入到更多的領(lǐng)域里面去。
第二個(gè)挑戰(zhàn)是關(guān)于模型大小以及模型訓(xùn)練難度的問題,前面提到了深度神經(jīng)網(wǎng)絡(luò)有很多層,而且一般參數(shù)都很大,幾十億的參數(shù)是家常便飯。面對(duì)這樣的網(wǎng)絡(luò),至少有兩個(gè)困難,一個(gè)是我們經(jīng)常提到的梯度消減和梯度爆炸的問題,當(dāng)深層網(wǎng)絡(luò)有非常多層次的時(shí)候,輸出層和標(biāo)簽之間運(yùn)算出來的殘差或者是損失函數(shù),是很難有效地傳遞到底層去的。所以在用這種反向傳播訓(xùn)練的時(shí)候,底層的網(wǎng)絡(luò)參數(shù)通常不太容易被很有效的訓(xùn)練,表現(xiàn)不好。人們發(fā)明了各種各樣的手段來解決它,比如加一些skip-level connection,像我們微軟亞洲研究院發(fā)明的ResNet技術(shù)就是做這件事情的,還有很多各種各樣的技巧。但這些其實(shí)都只是去解決問題的技巧,回過頭來,原來的這個(gè)問題本身是不是必要的,是需要我們反思的。
再有就是模型爆炸。前面說了幾十億的參數(shù)是家常便飯,幾十億甚至上百億個(gè)參數(shù)意味著什么,意味著模型本身的存儲(chǔ)量是非常大的。舉一個(gè)簡(jiǎn)單的例子,如果我們用神經(jīng)網(wǎng)絡(luò)來做語(yǔ)言模型,給出的訓(xùn)練數(shù)據(jù)集是Clueweb整個(gè)網(wǎng)絡(luò)上的網(wǎng)頁(yè),大概有十億個(gè)網(wǎng)頁(yè)的量級(jí)。 這樣的一個(gè)數(shù)據(jù),如果要去用循環(huán)神經(jīng)網(wǎng)絡(luò)去訓(xùn)練一個(gè)語(yǔ)言模型,簡(jiǎn)單計(jì)算一下就會(huì)知道,它需要用到的模型的大小大概是80G到100G的大小,聽起來好像不太大,但是現(xiàn)在主流的GPU板上的存儲(chǔ)24G已經(jīng)算是高配,換句話說,80G到100G的大小已經(jīng)遠(yuǎn)遠(yuǎn)超過一個(gè)GPU卡的容量,那么就一定要做分布式的運(yùn)算,還要做模型并行,有很多技術(shù)難度在里面。即便有一個(gè)GPU卡,能夠放下這80G或100G的模型,如此大的訓(xùn)練數(shù)據(jù)過一遍也可能要用上百年的時(shí)間,這聽起來也相當(dāng)不靠譜。到底需不需要這么大的模型,有沒有必要我們非要把自己放在一個(gè)內(nèi)存也不夠用,計(jì)算時(shí)間也非常長(zhǎng),也不能忍受的境地呢,這個(gè)是值得思考的問題。
說到大模型,標(biāo)注數(shù)據(jù)很大,那必然要提到分布式運(yùn)算,分布式運(yùn)算聽起來是一個(gè)相對(duì)成熟的領(lǐng)域,因?yàn)橄到y(tǒng)領(lǐng)域已經(jīng)對(duì)分布式計(jì)算研究了很多年。但是回到我們分布式機(jī)器學(xué)習(xí)這件事情上是有所不同的:這里我們做分布式運(yùn)算的目的是為了讓我們能夠用更多的資源來容納更大的模型,使得運(yùn)算的時(shí)間縮短到能接受的程度,但是我們不想丟掉運(yùn)算的精度。
舉個(gè)例子,原來用上百年的時(shí)間可以得到一個(gè)非常精準(zhǔn)的語(yǔ)言模型,現(xiàn)在有100臺(tái)機(jī)器,雖然算的很快,但出來的語(yǔ)言模型不能用了,這件得不償失。
說到分布式運(yùn)算有兩個(gè)主流的方式,一個(gè)是同步的并行方式,一個(gè)是異步的并行方式。同步的并行方式是什么,就是很多機(jī)器都分了一個(gè)子任務(wù),大家每計(jì)算一步之后要互相等待,交換一下計(jì)算的結(jié)果,然后再往前走。這個(gè)過程能夠保證對(duì)整個(gè)分布式運(yùn)算的流程是可控的,可以知道發(fā)生了什么,在數(shù)學(xué)上可以做建模,能夠在理論上有所保證。但它的問題就是所謂的木桶原理,這個(gè)集群里面只要有一臺(tái)機(jī)器很慢,分布式運(yùn)算就會(huì)被這臺(tái)機(jī)器拖垮,就不會(huì)得到好的加速比。
所以人們開始做異步的并行方式,異步的意思就是每臺(tái)機(jī)器各自做自己的事情,互相不等待,把當(dāng)前按照各自的數(shù)據(jù)訓(xùn)練出來的模型更新推到某一個(gè)服務(wù)器上,再更新整體模型。但這時(shí)候又出現(xiàn)了一個(gè)新的問題,就是亂序更新的問題,這個(gè)過程是不能被我們?cè)瓉淼臄?shù)學(xué)模型所描述的,違背了優(yōu)化技術(shù)的一些基本假設(shè)。比如當(dāng)我們使用隨機(jī)梯度下降法的時(shí)候,可以證明當(dāng)時(shí)用一個(gè)不斷減小的學(xué)習(xí)率時(shí),優(yōu)化過程是有收斂性的。這是因?yàn)槲覀兠恳淮卧黾拥哪莻€(gè)梯度是在上一次計(jì)算的模型基礎(chǔ)上算出來的梯度。一旦加上去的梯度可能是舊的,不是依據(jù)前一個(gè)模型算出來的,到底優(yōu)化過還能不能收斂,就不那么清楚了,所以雖然速度快,精度卻可能沒有保證。
第四個(gè),我把它叫做調(diào)參黑科技,難言之隱。這件事情特別有趣,我前一段時(shí)間參加過一個(gè)論壇,一位嘉賓的一句話給我印象特別深,他說大家知道為什么現(xiàn)在很多公司都有深度學(xué)習(xí)實(shí)驗(yàn)室嗎,以前沒聽說過有一個(gè)叫支持向量機(jī)實(shí)驗(yàn)室的,為什么?這是因?yàn)橄馭VM這樣的技術(shù)訓(xùn)練過程非常簡(jiǎn)單,需要調(diào)節(jié)的超參數(shù)很少,基本上只要按部就班去做,得到的結(jié)果都差不多。
但深度學(xué)習(xí)這件事情,如果不來點(diǎn)調(diào)參黑科技,就得不到想要的結(jié)果。所謂深度學(xué)習(xí)實(shí)驗(yàn)室,就是一批會(huì)調(diào)參的人,沒有他們深度學(xué)習(xí)就沒那么好用。雖然是句玩笑,但是深度學(xué)習(xí)力要調(diào)的東西確實(shí)太多了,比如說訓(xùn)練數(shù)據(jù)怎么來,怎么選,如果是分布式運(yùn)算怎么劃分,神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)怎么設(shè)計(jì),10層、100層還是1000層,各層之間如何連接,模型更新的規(guī)則是什么,學(xué)習(xí)率怎么設(shè),如果是分布式運(yùn)算各個(gè)機(jī)器運(yùn)算出來的結(jié)果怎么聚合,怎么得到統(tǒng)一的模型,等等,太多需要調(diào)的東西,一個(gè)地方調(diào)不好,結(jié)果可能就大相徑庭。這就是為什么很多論文里的結(jié)果是不能重現(xiàn)的,不是說論文一定不對(duì),但至少人家沒有把怎么調(diào)參告訴你,他只告訴了你模型長(zhǎng)什么樣而已。
下一個(gè)挑戰(zhàn),叫做黑箱算法,不明就里。這不僅僅是神經(jīng)網(wǎng)絡(luò)的問題,更是統(tǒng)計(jì)機(jī)器學(xué)習(xí)多年來一直的頑疾,就是用一個(gè)表達(dá)能力很強(qiáng)的黑盒子來擬合想要研究的問題,里面參數(shù)很多。這樣一個(gè)復(fù)雜的黑盒子去做擬合的時(shí)候,結(jié)果好,皆大歡喜。如果結(jié)果不好,出現(xiàn)了反例,該怎么解決呢,這里面幾億、幾十億個(gè)參數(shù),是誰出了問題呢,其實(shí)是非常難排錯(cuò)的事情。相反,以前有很多基于邏輯推理的方法,雖然效果沒有神經(jīng)網(wǎng)絡(luò)好,但是我們知道每一步是為什么做了決策,容易分析、排錯(cuò)。所以最近幾年有一個(gè)趨勢(shì),就是把基于統(tǒng)計(jì)學(xué)習(xí)的方法和基于符號(hào)計(jì)算的方法進(jìn)行結(jié)合,造出一個(gè)灰盒子,它既具備很強(qiáng)的學(xué)習(xí)能力,又能在很大程度上是可理解、可支配、可調(diào)整的。
到現(xiàn)在為止,這幾件事都是現(xiàn)在人工智能技術(shù)層面的問題。接下來,談的是更像方法論和哲學(xué)的問題,僅為個(gè)人的觀點(diǎn),跟大家一起分享。
其中一條,我叫做蠻力解法,舍本逐末。這句話什么意思?剛才我提到過深度學(xué)習(xí)之所以這么成功,是因?yàn)樗幸粋€(gè)特別強(qiáng)的表達(dá)能力,在歷史上人們證明過深層神經(jīng)網(wǎng)絡(luò)有universal approximation theorem,只要隱結(jié)點(diǎn)的數(shù)目足夠多,任意給一個(gè)連續(xù)函數(shù),它都可以無限逼近這個(gè)函數(shù),換言之,有了很強(qiáng)的表達(dá)能力,什么問題都可以學(xué)的很好。聽起來好像是挺美好的事,但實(shí)際上它背后存在一個(gè)問題:它擬合的是數(shù)據(jù)的表象,數(shù)據(jù)表象可以非常復(fù)雜,但是數(shù)據(jù)背后驅(qū)動(dòng)的規(guī)律是不是真的那么復(fù)雜呢,如果我們只看到表象不去研究數(shù)據(jù)產(chǎn)生的本質(zhì),很可能你花了很大的力氣去擬合,但是浪費(fèi)了很多時(shí)間,得到的結(jié)果也不魯棒。
舉個(gè)例子,我們發(fā)現(xiàn)大自然也好,人類社會(huì)也好,其實(shí)沒有想象的那么復(fù)雜,雖然你看到的很多數(shù)據(jù)很復(fù)雜,它們背后的規(guī)律可能非常簡(jiǎn)單。像量子力學(xué)有薛定諤方程、量子化學(xué)、流體力學(xué)、生物遺傳學(xué)、經(jīng)濟(jì)學(xué)、社會(huì)學(xué)也都有類似的簡(jiǎn)單方程,科學(xué)家發(fā)現(xiàn)那么紛繁復(fù)雜的現(xiàn)象都可以被一個(gè)動(dòng)態(tài)系統(tǒng)所刻劃,而動(dòng)態(tài)系統(tǒng)背后的規(guī)律可能就是一個(gè)最高二階的偏微分方程。大家可以想象,如果不知道這些機(jī)理,不對(duì)動(dòng)態(tài)系統(tǒng)做建模,只對(duì)動(dòng)態(tài)系統(tǒng)的產(chǎn)出數(shù)據(jù)做建模,就會(huì)覺得這個(gè)問題非常復(fù)雜,要有一個(gè)容量非常大的神經(jīng)網(wǎng)絡(luò)去逼近這個(gè)數(shù)據(jù)。但反過來,如果目光焦點(diǎn)在這個(gè)動(dòng)態(tài)系統(tǒng)身上,可能就兩三個(gè)參數(shù)的一個(gè)二階微分方程就搞定了。
下面也是一個(gè)值得思考的問題——動(dòng)物智能,南轅北轍,雖然前面提到人工智能產(chǎn)生了很多的進(jìn)步,但其實(shí)目前所做的還主要是認(rèn)知的事情,做一個(gè)Pattern Recognition,聽聽聲音,看看圖像,這是動(dòng)物也能做的事。今天的人工智能沒有回答一個(gè)關(guān)鍵的問題,就是動(dòng)物和人的區(qū)別??赡苡腥藭?huì)講,據(jù)說猴子的大腦比人的大腦小很多,有可能是體量的不同。但人的祖先跟大猩猩在包容量上應(yīng)該沒有本質(zhì)的區(qū)別,那到底為什么經(jīng)過漫長(zhǎng)的進(jìn)化,人能成為萬物之靈主宰地球了呢?
我自己的觀點(diǎn)是因?yàn)槿祟惏l(fā)明了很多動(dòng)物界沒有的機(jī)制和規(guī)律。比如我們有文字,我們可以把我們對(duì)世界的認(rèn)知,總結(jié)出來的規(guī)律寫下來,把它變成書,變成資料傳給我們的下一代。當(dāng)老一輩的人去世之后,孩子們讀讀書,就掌握了之前幾百年幾千年人們對(duì)世界的認(rèn)識(shí)。但是老一代大猩猩死掉之后,它的孩子就要從頭學(xué)起。另外,我們?nèi)祟愑袕?qiáng)大的教育體系,人從幼兒園開始,小學(xué),中學(xué),一直進(jìn)入大學(xué),用了十幾年的時(shí)間,就把幾百年、幾千年的知識(shí)都掌握在身上了,可以站在巨人的肩膀上繼續(xù)往前走,這非常了不起。好的老師,會(huì)教出好的學(xué)生,教學(xué)相長(zhǎng),薪火相傳。
這些人類的精髓在今天的人工智能技術(shù)里面是并沒有充分體現(xiàn),而沒有它們我們?cè)趺茨苤竿疃壬窠?jīng)網(wǎng)絡(luò)達(dá)到人的智商呢?
前面列了很多方面,是我們對(duì)人工智能領(lǐng)域的一些看法,不管是從技術(shù)層面,還是方法論層面,都有很多值得進(jìn)一步挖掘的點(diǎn),只有這些問題真正解決了,人工智能才可能穩(wěn)穩(wěn)妥妥的往前走,而不只是曇花一現(xiàn)。