陽萌或許是我接觸過的最懂技術(shù)的CEO:他是北大計(jì)算機(jī)本科,碩博連讀機(jī)器學(xué)習(xí)專業(yè),但博士讀了一半就跑了;他是百億營收大廠安克創(chuàng)新的創(chuàng)始人,也曾在谷歌做搜索算法的研發(fā);他的公司主要做的是充電寶、掃地機(jī)器人這些消費(fèi)類電子產(chǎn)品,但我們聊的是人工智能、芯片等等硬科技。
我梳理了和他對談的全部內(nèi)容,我們聊了接近兩個(gè)小時(shí),本文是第一篇,他幫我梳理了人工智能的過去、現(xiàn)在、以及未來的發(fā)展方向,我深受啟發(fā)。內(nèi)容有點(diǎn)長,但相信肯定會(huì)對你有所幫助。我們對談的視頻版本可以看視頻號,或者點(diǎn)擊文末「閱讀原文」跳轉(zhuǎn)B站觀看。
Transformer只是中間態(tài)?
我本科就很喜歡做機(jī)器學(xué)習(xí),因?yàn)橛X得計(jì)算機(jī)能夠做決策是很酷的一件事情。后來03年博士也讀這個(gè),然后,非常痛苦。
我發(fā)現(xiàn),行業(yè)里每5-10年就會(huì)有個(gè)大牛出來,開天辟地地推出一個(gè)全新的范式。譬如最早的時(shí)候大家做專家系統(tǒng),后來做決策樹,再做Support Vector Machine (SVM)。這有點(diǎn)像大牛發(fā)現(xiàn)了一片礦脈,很多人去挖礦,那幾年大家都很開心,博士們都非常有成果。到2017年出現(xiàn)Transformer,這又是一個(gè)新的范式,大家又挖挖挖,又很感覺很有成果。這幾年我覺得還是一個(gè)比較井噴的狀態(tài),這個(gè)礦脈的大龍的部分還在被挖出來,但是總是會(huì)挖完的。
我覺得,Transformer只是一個(gè)中間狀態(tài)。比如10年、20年之后,大概率我們就不再用Transformer了。這是一個(gè)非常大膽的一個(gè)假設(shè),但我們可以把話放到這,20年以后我們再回來看。就像同樣20年以前,大家說的最多的就是SVM,但我們看今天還有多少人用SVM?
它真的就是長江后浪推前浪,每一浪都會(huì)有一個(gè)新的范式的出現(xiàn),然后都會(huì)把之前的范式拍死在沙灘上。
分治法:AI的經(jīng)典范式?
如果將所有的范式按照背后解決問題的思路進(jìn)行分類,主要有兩種:一種是基于數(shù)理邏輯和分治法,其目標(biāo)是將問題分解成人類可以理解、公式可以推導(dǎo)的形式,然后再進(jìn)行組合;另一種則是利用大量數(shù)據(jù)訓(xùn)練一個(gè)端到端的模型,類似于黑盒,即使我們能看到其中的參數(shù),但卻無法理解其內(nèi)在邏輯,這種模型是不可解釋的。
這兩種范式代表了兩種不同的派別:一派通過分析問題,使用邏輯和數(shù)學(xué)公式來解決問題;另一派則直接利用大數(shù)據(jù)訓(xùn)練出網(wǎng)絡(luò)模型來解決問題,而無需理解其內(nèi)部機(jī)制。
中國有句古話“知其然,知其所以然”,分治法可以被視為最通用的“知其所以然”的方式。當(dāng)人類使用自己能理解的方式解決問題時(shí),這似乎是其唯一的方法。
以計(jì)算機(jī)科學(xué)為例,如自然語言處理領(lǐng)域,搜索一個(gè)詞的第一步通常是進(jìn)行分詞,因?yàn)檎挝谋緹o法進(jìn)行檢索。分詞后,我們會(huì)對詞匯進(jìn)行特征提取,例如詞頻的高低,然后基于這些分詞和特征進(jìn)行搜索、翻譯等更高級的操作。
另一個(gè)例子是自動(dòng)駕駛技術(shù)。自動(dòng)駕駛本質(zhì)上是一種機(jī)器人技術(shù),第一步是感知,也就是識別周圍環(huán)境中的各種元素。第二步是規(guī)劃,也就是確定要執(zhí)行的任務(wù)以及如何與周圍環(huán)境協(xié)同或在其中移動(dòng)。第三步是控制,比如實(shí)際操作車輛怎么去加速、轉(zhuǎn)向等。
在深度學(xué)習(xí)或端到端算法出現(xiàn)之前,除了分治法,我們幾乎沒有其他方法來解決這些問題。
因此,我們發(fā)現(xiàn),如果沒有分治法,人類似乎無法解決問題。也就是說,分治法是人類理性解決問題的必經(jīng)之路。
大模型時(shí)代到來,為何端到端逐漸成為主流?
我在2003年攻讀博士學(xué)位時(shí)研究決策樹(Decision Tree),發(fā)現(xiàn)這是一個(gè)典型的分治法應(yīng)用。決策樹可以在一個(gè)數(shù)據(jù)集上輕易達(dá)到70%至80%的準(zhǔn)確率,但它的天花板就在那了。雖然可以通過各種各樣的技巧,比如增加擾動(dòng)、使用多個(gè)決策樹等方法來提高一些性能,但是再往上就上不去了。
這是因?yàn)榉种畏ǖ膭傂缘谋举|(zhì),打破了很多問題本身的一些柔性聯(lián)系。
當(dāng)我們在兩個(gè)步驟之間設(shè)定了一個(gè)非常明確和精確的邊界時(shí),這些柔性的聯(lián)系就被切斷了。我這個(gè)感受后來在工作里很多地方都被印證出來,比如做搜索時(shí),用的就是典型的分治法。當(dāng)時(shí)谷歌內(nèi)部有一套完整的評價(jià)體系,用百分制來評價(jià)一個(gè)搜索詞最后的效果。大約在2007年,谷歌的搜索效果可以達(dá)到64到65分,高出雅虎接近8分。但即使到了2024年,谷歌的分?jǐn)?shù)可能也還在70分左右。
換句話說就是,分治法可以迅速達(dá)到70%到80%的水平,但之后就會(huì)遇到瓶頸,再也上不去了。
在應(yīng)用分治法的過程里,我也發(fā)現(xiàn)很多有意思的事情。第一,分治法是一個(gè)非?!俺?a class="article-link" target="_blank" href="/tag/%E5%B7%A5%E7%A8%8B%E5%B8%88/">工程師”的方法。因?yàn)槿魏我粋€(gè)大問題,每向下細(xì)分一層,就意味著需要更多的團(tuán)隊(duì)和工程師來研究更細(xì)分的問題。所以,我當(dāng)年在谷歌時(shí),知道很多冷知識,例如日語的某些詞如何分詞、阿拉伯語的一些特殊情況應(yīng)該怎么處理等。今天你會(huì)發(fā)現(xiàn),換到自動(dòng)駕駛領(lǐng)域里邊也是一樣的。
使用分治法的時(shí)候,問題被細(xì)分后就變成了一個(gè)小眾領(lǐng)域,很容易進(jìn)入牛角尖,然后在牛角尖里面再往里面鉆,其實(shí)花了可能很多博士的很多時(shí)間,研究了很多數(shù)據(jù),去寫一篇論文。但是,今天隨著端到端算法的出現(xiàn),這些博士們當(dāng)時(shí)的很多工作可能就失去了意義,變得不再重要。就像今天,我那些冷門的、怎么把詞分好的知識已經(jīng)沒有人會(huì)感興趣去購買了。
再來看自然語言處理,這是一個(gè)龐大的領(lǐng)域,過去至少培養(yǎng)了3萬個(gè)以上的博士(按每年1000個(gè)算,30年3萬個(gè))。但這些博士都是在分治法的框架下,解決了很多具體問題,可能也掌握了許多冷門知識。但是,隨著端到端的大模型的出現(xiàn),這些冷門知識不再被需要了。這3萬個(gè)博士投入了幾年、十幾年不等的人生,可能就再也沒有價(jià)值了。
所以我也很慶幸,當(dāng)時(shí)博士讀了一半就跑了。
英偉達(dá)和GPU的遇到的困難?
前幾次算法的迭代并沒有摧毀一個(gè)行業(yè),比如在深度學(xué)習(xí)時(shí)代,自然語言處理仍然存在。只是這一輪基于Transformer的大語言模型出來,才真正把自然語言處理這個(gè)行業(yè)給“摧毀”了。所以,我們發(fā)現(xiàn)最近這一輪算法范式的迭代實(shí)際上跟芯片和硬件息息相關(guān)。
或者應(yīng)該這么說,就這一輪“毀天滅地”的算法迭代,是跟GPU這樣的硬件互為因果的。
因?yàn)闆]有GPU,就不可能產(chǎn)生Transformer。換句話說,只有在GPU上,Transformer這樣的算法才能在大規(guī)模數(shù)據(jù)上得到實(shí)現(xiàn)。
之前黃仁勛請了Transformer 的所有的發(fā)明人,他們在一起同臺相互惺惺相惜了一下,有點(diǎn)像是兩組人一起開創(chuàng)歷史,然后在今天這個(gè)歷史時(shí)刻大家在一起擁抱一下那種感覺。
如果你打開英偉達(dá)的 GPU ,會(huì)發(fā)現(xiàn)現(xiàn)在GPU中間貼著一小塊運(yùn)算核心,主要負(fù)責(zé)計(jì)算矩陣乘法;外面貼著4塊或8塊高帶寬內(nèi)存HBM。這個(gè)架構(gòu)就是把幾十億、幾百億個(gè)模型參數(shù)存在兩端的內(nèi)存里。
當(dāng)任務(wù)進(jìn)來的時(shí)候,這些參數(shù)被搬到中間的計(jì)算核心去做矩陣乘法計(jì)算,計(jì)算完之后然后再寫回去。所以,每一次計(jì)算都是要經(jīng)歷把所有的參數(shù)從內(nèi)存里搬到計(jì)算中心,算完然后再拿出來的過程。
馮諾依曼架構(gòu)在大模型時(shí)代的困境?
馮諾依曼架構(gòu)和分治法就是一對最佳搭檔。我們通過分治法解決問題,然后把它表達(dá)成為程序,編寫出來的就是一行行的代碼,分成一個(gè)個(gè)的函數(shù),它們會(huì)相互調(diào)用。但在分治法中,一段時(shí)間內(nèi)實(shí)際上只運(yùn)行一段代碼,也就是說,一段時(shí)間內(nèi)我們只在解決某一個(gè)子問題。所以,當(dāng)年馮諾依曼發(fā)明了這樣的架構(gòu),就是把數(shù)據(jù)和程序都寫在內(nèi)存里,然后分治法每運(yùn)行到哪一步,就把對應(yīng)的程序和數(shù)據(jù)加載到CPU里中。
所以,馮諾依曼架構(gòu)的核心,就是區(qū)分了計(jì)算器和存儲(chǔ)器。代碼存儲(chǔ)在存儲(chǔ)器中,分治法運(yùn)行到哪一步,就把那一步的代碼加載到計(jì)算器里去運(yùn)行,運(yùn)算完成后再取出來。
這么多年過去,我們的計(jì)算機(jī)越來越先進(jìn),但它的L1 Cache 始終維持在幾百KB,因?yàn)闆]有必要再增加,任何一段程序也不會(huì)超過這個(gè)大小。每次加載到處理器中的程序,幾十KB、100KB就足夠了。
但你會(huì)發(fā)現(xiàn),今天的Transformer大模型是截然相反的。因?yàn)門ransformer是基于分治法的反面,也就是黑盒的端到端解法。它表現(xiàn)出來的不是一段一段去解決問題,而是表現(xiàn)出了整體800億個(gè)參數(shù);也不是每次都從800億個(gè)參數(shù)里面加載一小部分去運(yùn)算,而是每次都需要將800億個(gè)參數(shù)完整地加載進(jìn)去,然后算完再出來。
所以,這個(gè)過程實(shí)際上不應(yīng)該再使用之前的馮諾依曼架構(gòu)了,否則就會(huì)遇到英偉達(dá)今天面臨的困難和挑戰(zhàn)。英偉達(dá)現(xiàn)在90%以上的時(shí)間都在做數(shù)據(jù)搬運(yùn),只有不到10%的時(shí)間真正用于矩陣乘法計(jì)算。
前段時(shí)間還聽到一個(gè)有趣的段子,說英偉達(dá)推出了算力經(jīng)過嚴(yán)重“閹割”的顯卡,但如果你把足夠多的顯卡并聯(lián)起來去做訓(xùn)練,它的整體算力是不會(huì)下降的。因?yàn)楸M管單卡的算力降低了,但當(dāng)很多卡連接在一起時(shí),大部分功夫都花在了數(shù)據(jù)搬運(yùn)上,因此即使算力降低,性能也不會(huì)受到影響。因?yàn)槠款i在數(shù)據(jù)搬運(yùn)而不在計(jì)算上。
Scaling Law能否延續(xù)?
當(dāng)前GPU技術(shù)正向更先進(jìn)的制程走,從5納米到3納米,再到1納米,還能提高多少是需要打一個(gè)問號的。我對這條路線整體比較悲觀,并不是說性能提升已達(dá)極限,而是覺得目前處理問題的方法在本質(zhì)上存在誤區(qū)。
對大型模型來說,尤其是在推理端,還要再沿用馮諾依曼架構(gòu)把數(shù)據(jù)和處理分開嗎?我們可以類比人腦:人腦同樣擁有約800億個(gè)神經(jīng)元,但運(yùn)作起來功耗只有不到20瓦,而在英偉達(dá)的芯片上運(yùn)行具有800億參數(shù)的模型,耗電量至少在兩三千瓦以上。這中間的核心差異在于,人腦不需要搬移數(shù)據(jù)的。
假設(shè)人腦采用馮諾依曼架構(gòu),所有知識和記憶存在左腦,所有的處理活動(dòng)發(fā)生在右腦,每次你看見、聽到的東西在右腦進(jìn)來,然后把數(shù)據(jù)從左腦搬到右腦去處理,再將處理結(jié)果寫回去,覺得這樣的腦子會(huì)燒掉嗎?所以我想說,馮諾依曼架構(gòu)最適合解決我們說的分制法的算法問題,但它不適合解決端到端的問題。
人類過去用分治法解決問題,在計(jì)算機(jī)里表現(xiàn)出來就是程序。而馮諾伊曼架構(gòu)把所有的程序存在存儲(chǔ)器里邊,然后每次執(zhí)行到一步就加載一部分到計(jì)算器里邊去運(yùn)行,這樣的架構(gòu)非常適合去運(yùn)行分治法產(chǎn)生的程序。
如果我們分三層,最底下一層是解題思路分治法,往上一層是對應(yīng)的表現(xiàn)形式,也就是程序,最上面硬件,過去 70 年里就是馮諾依曼架構(gòu)的CPU。所以,分治法、程序和馮諾依曼架構(gòu)的CPU,共同構(gòu)成了一個(gè)時(shí)代。
從這個(gè)視角看的話,英偉達(dá)和Transformer模型開創(chuàng)了一個(gè)新時(shí)代。它的底層不再是分治法了,而是端到端的算法。中間的表現(xiàn)層是大模型,再往上一層運(yùn)行這些模型的芯片已經(jīng)不再是傳統(tǒng)的馮諾依曼架構(gòu)了,而是把內(nèi)存與計(jì)算單元緊密結(jié)合的近存計(jì)算架構(gòu),也就是我們今天所說的GPU。
為什么我們說中間這樣的時(shí)代也大概率會(huì)被被拍死在沙灘上呢?其實(shí)大模型和幾百億個(gè)參數(shù)的端到端模型,是否應(yīng)該被運(yùn)行在一個(gè)存和算分離的芯片上,這仍存在疑問。它最理想的運(yùn)行方式一定是像我們的大腦一樣,在同一個(gè)神經(jīng)元里邊存著知識和做計(jì)算,也就是存算一體。所以,我們相信,在未來幾年內(nèi),一定會(huì)出現(xiàn)存和算一體的芯片。
什么是存算一體?
人腦的一個(gè)神經(jīng)元其實(shí)是存著一些信息的,每一次計(jì)算的話,電信號又會(huì)通過它進(jìn)行計(jì)算。也就是說,存儲(chǔ)信息和進(jìn)行計(jì)算在同一個(gè)神經(jīng)元里發(fā)生。
所以如果在現(xiàn)在計(jì)算機(jī)的存儲(chǔ)單元上,能再加上計(jì)算的邏輯,也就是同一個(gè)單元既存儲(chǔ)又計(jì)算,那我想這樣結(jié)構(gòu)的芯片其實(shí)是非常適合運(yùn)行大模型算法的。
我相信運(yùn)行一個(gè)幾百億參數(shù)的大模型,最好的架構(gòu)一定是存算一體的架構(gòu),因?yàn)樗苊饬怂械臄?shù)據(jù)的搬運(yùn)。過去為什么我們沒有做出存算一體的架構(gòu)?其實(shí)也是因?yàn)檫^去都是分治法。它其實(shí)不太需要在存儲(chǔ)單元里邊進(jìn)行計(jì)算。但當(dāng)你去認(rèn)真地研究怎么在存儲(chǔ)單元里做計(jì)算的時(shí)候,這件事情我相信幾年下來就會(huì)有很大的突破。
我其實(shí)是很相信仿生的。無論從大模型、還是像存算一體的芯片算法和硬件的發(fā)展,其實(shí)都是在朝一個(gè)仿生的方向在走。那觀察人腦的時(shí)候不難發(fā)現(xiàn),其實(shí)腦子不只是在存儲(chǔ)知識,不只是在推理,腦子還在每一次推理的過程中間訓(xùn)練自己,所以它本質(zhì)上是一個(gè)存算訓(xùn)一體的東西。
但今天的芯片在不停搬運(yùn)數(shù)據(jù)的時(shí)候,其實(shí)我們是沒有功夫再去修改這個(gè)模型的參數(shù)的,因?yàn)槲覀兯械墓Ψ蛞呀?jīng)花在把那800億個(gè)參數(shù)搬來搬去上面了。所以我們沒有功夫再去操心說怎么調(diào)整一下參數(shù),讓它變得更好。但一旦出現(xiàn)存算一體的芯片,也就是那些參數(shù)再也不搬了,然后每次推理就是走一遍的時(shí)候,我們是不是空出的腦子就可以利用積累的知識來更新一下模型的參數(shù)。
所以,我相信在存算一體的芯片上,一定會(huì)誕生新一代的、不再是Transformer的全新算法,而這一代全新的算法可能會(huì)超越存算的界限,可能會(huì)一邊運(yùn)行一邊進(jìn)化自己,但這也是個(gè)非??植赖氖虑?。
下一篇,我們會(huì)討論AI的落地、應(yīng)用、以及為何陽萌和安克會(huì)對AI有這么深入的思考。關(guān)注我,下篇見。
(注:本文不代表老石任職單位的觀點(diǎn)。)