AI 的未來發展:分治法在左,端到端在右

陽萌或許是我接觸過的最懂技術的CEO:他是北大計算機本科,碩博連讀機器學習專業,但博士讀了一半就跑了;他是百億營收大廠安克創新的創始人,也曾在谷歌做搜索算法的研發;他的公司主要做的是充電寶、掃地機器人這些消費類電子產品,但我們聊的是人工智能、芯片等等硬科技。

我梳理了和他對談的全部內容,我們聊了接近兩個小時,本文是第一篇,他幫我梳理了人工智能的過去、現在、以及未來的發展方向,我深受啓發。內容有點長,但相信肯定會對你有所幫助。我們對談的視頻版本可以看視頻號,或者點擊文末「閱讀原文」跳轉B站觀看。

Transformer只是中間態?

我本科就很喜歡做機器學習,因爲覺得計算機能夠做決策是很酷的一件事情。後來03年博士也讀這個,然後,非常痛苦。

我發現,行業裡每5-10年就會有個大牛出來,開天闢地地推出一個全新的範式。譬如最早的時候大家做專家系統,後來做決策樹,再做Support Vector Machine (SVM)。這有點像大牛發現了一片礦脈,很多人去挖礦,那幾年大家都很開心,博士們都非常有成果。到2017年出現Transformer,這又是一個新的範式,大家又挖挖挖,又很感覺很有成果。這幾年我覺得還是一個比較井噴的狀態,這個礦脈的大龍的部分還在被挖出來,但是總是會挖完的。

我覺得,Transformer只是一箇中間狀態。比如10年、20年之後,大概率我們就不再用Transformer了。這是一個非常大膽的一個假設,但我們可以把話放到這,20年以後我們再回來看。就像同樣20年以前,大家說的最多的就是SVM,但我們看今天還有多少人用SVM?

它真的就是長江後浪推前浪,每一浪都會有一個新的範式的出現,然後都會把之前的範式拍死在沙灘上。

分治法:AI的經典範式?

如果將所有的範式按照背後解決問題的思路進行分類,主要有兩種:一種是基於數理邏輯和分治法,其目標是將問題分解成人類可以理解、公式可以推導的形式,然後再進行組合;另一種則是利用大量數據訓練一個端到端的模型,類似於黑盒,即使我們能看到其中的參數,但卻無法理解其內在邏輯,這種模型是不可解釋的。

這兩種範式代表了兩種不同的派別:一派通過分析問題,使用邏輯和數學公式來解決問題;另一派則直接利用大數據訓練出網絡模型來解決問題,而無需理解其內部機制。

中國有句古話“知其然,知其所以然”,分治法可以被視爲最通用的“知其所以然”的方式。當人類使用自己能理解的方式解決問題時,這似乎是其唯一的方法。

以計算機科學爲例,如自然語言處理領域,搜索一個詞的第一步通常是進行分詞,因爲整段文本無法進行檢索。分詞後,我們會對詞彙進行特徵提取,例如詞頻的高低,然後基於這些分詞和特徵進行搜索、翻譯等更高級的操作。

另一個例子是自動駕駛技術。自動駕駛本質上是一種機器人技術,第一步是感知,也就是識別周圍環境中的各種元素。第二步是規劃,也就是確定要執行的任務以及如何與周圍環境協同或在其中移動。第三步是控制,比如實際操作車輛怎麼去加速、轉向等。

在深度學習或端到端算法出現之前,除了分治法,我們幾乎沒有其他方法來解決這些問題。

因此,我們發現,如果沒有分治法,人類似乎無法解決問題。也就是說,分治法是人類理性解決問題的必經之路。

大模型時代到來,爲何端到端逐漸成爲主流?

我在2003年攻讀博士學位時研究決策樹(Decision Tree),發現這是一個典型的分治法應用。決策樹可以在一個數據集上輕易達到70%至80%的準確率,但它的天花板就在那了。雖然可以通過各種各樣的技巧,比如增加擾動、使用多個決策樹等方法來提高一些性能,但是再往上就上不去了。

這是因爲分治法的剛性的本質,打破了很多問題本身的一些柔性聯繫。

當我們在兩個步驟之間設定了一個非常明確和精確的邊界時,這些柔性的聯繫就被切斷了。我這個感受後來在工作裡很多地方都被印證出來,比如做搜索時,用的就是典型的分治法。當時谷歌內部有一套完整的評價體系,用百分制來評價一個搜索詞最後的效果。大約在2007年,谷歌的搜索效果可以達到64到65分,高出雅虎接近8分。但即使到了2024年,谷歌的分數可能也還在70分左右。

換句話說就是,分治法可以迅速達到70%到80%的水平,但之後就會遇到瓶頸,再也上不去了。

在應用分治法的過程裡,我也發現很多有意思的事情。第一,分治法是一個非常“吃工程師”的方法。因爲任何一個大問題,每向下細分一層,就意味着需要更多的團隊和工程師來研究更細分的問題。所以,我當年在谷歌時,知道很多冷知識,例如日語的某些詞如何分詞、阿拉伯語的一些特殊情況應該怎麼處理等。今天你會發現,換到自動駕駛領域裡邊也是一樣的。

使用分治法的時候,問題被細分後就變成了一個小衆領域,很容易進入牛角尖,然後在牛角尖裡面再往裡面鑽,其實花了可能很多博士的很多時間,研究了很多數據,去寫一篇論文。但是,今天隨着端到端算法的出現,這些博士們當時的很多工作可能就失去了意義,變得不再重要。就像今天,我那些冷門的、怎麼把詞分好的知識已經沒有人會感興趣去購買了。

再來看自然語言處理,這是一個龐大的領域,過去至少培養了3萬個以上的博士(按每年1000個算,30年3萬個)。但這些博士都是在分治法的框架下,解決了很多具體問題,可能也掌握了許多冷門知識。但是,隨着端到端的大模型的出現,這些冷門知識不再被需要了。這3萬個博士投入了幾年、十幾年不等的人生,可能就再也沒有價值了。

所以我也很慶幸,當時博士讀了一半就跑了。

英偉達和GPU的遇到的困難?

前幾次算法的迭代並沒有摧毀一個行業,比如在深度學習時代,自然語言處理仍然存在。只是這一輪基於Transformer的大語言模型出來,才真正把自然語言處理這個行業給“摧毀”了。所以,我們發現最近這一輪算法範式的迭代實際上跟芯片和硬件息息相關。

或者應該這麼說,就這一輪“毀天滅地”的算法迭代,是跟GPU這樣的硬件互爲因果的。

因爲沒有GPU,就不可能產生Transformer。換句話說,只有在GPU上,Transformer這樣的算法才能在大規模數據上得到實現。

之前黃仁勳請了Transformer 的所有的發明人,他們在一起同臺相互惺惺相惜了一下,有點像是兩組人一起開創歷史,然後在今天這個歷史時刻大家在一起擁抱一下那種感覺。

如果你打開英偉達的 GPU ,會發現現在GPU中間貼着一小塊運算核心,主要負責計算矩陣乘法;外面貼着4塊或8塊高帶寬內存HBM。這個架構就是把幾十億、幾百億個模型參數存在兩端的內存裡。

當任務進來的時候,這些參數被搬到中間的計算核心去做矩陣乘法計算,計算完之後然後再寫回去。所以,每一次計算都是要經歷把所有的參數從內存裡搬到計算中心,算完然後再拿出來的過程。

馮諾依曼架構在大模型時代的困境?

馮諾依曼架構和分治法就是一對最佳搭檔。我們通過分治法解決問題,然後把它表達成爲程序,編寫出來的就是一行行的代碼,分成一個個的函數,它們會相互調用。但在分治法中,一段時間內實際上只運行一段代碼,也就是說,一段時間內我們只在解決某一個子問題。所以,當年馮諾依曼發明了這樣的架構,就是把數據和程序都寫在內存裡,然後分治法每運行到哪一步,就把對應的程序和數據加載到CPU裡中。

所以,馮諾依曼架構的核心,就是區分了計算器和存儲器。代碼存儲在存儲器中,分治法運行到哪一步,就把那一步的代碼加載到計算器裡去運行,運算完成後再取出來。

這麼多年過去,我們的計算機越來越先進,但它的L1 Cache 始終維持在幾百KB,因爲沒有必要再增加,任何一段程序也不會超過這個大小。每次加載到處理器中的程序,幾十KB、100KB就足夠了。

但你會發現,今天的Transformer大模型是截然相反的。因爲Transformer是基於分治法的反面,也就是黑盒的端到端解法。它表現出來的不是一段一段去解決問題,而是表現出了整體800億個參數;也不是每次都從800億個參數裡面加載一小部分去運算,而是每次都需要將800億個參數完整地加載進去,然後算完再出來。

所以,這個過程實際上不應該再使用之前的馮諾依曼架構了,否則就會遇到英偉達今天面臨的困難和挑戰。英偉達現在90%以上的時間都在做數據搬運,只有不到10%的時間真正用於矩陣乘法計算。

前段時間還聽到一個有趣的段子,說英偉達推出了算力經過嚴重“閹割”的顯卡,但如果你把足夠多的顯卡並聯起來去做訓練,它的整體算力是不會下降的。因爲儘管單卡的算力降低了,但當很多卡連接在一起時,大部分功夫都花在了數據搬運上,因此即使算力降低,性能也不會受到影響。因爲瓶頸在數據搬運而不在計算上。

Scaling Law能否延續?

當前GPU技術正向更先進的製程走,從5納米到3納米,再到1納米,還能提高多少是需要打一個問號的。我對這條路線整體比較悲觀,並不是說性能提升已達極限,而是覺得目前處理問題的方法在本質上存在誤區。

對大型模型來說,尤其是在推理端,還要再沿用馮諾依曼架構把數據和處理分開嗎?我們可以類比人腦:人腦同樣擁有約800億個神經元,但運作起來功耗只有不到20瓦,而在英偉達的芯片上運行具有800億參數的模型,耗電量至少在兩三千瓦以上。這中間的核心差異在於,人腦不需要搬移數據的。

假設人腦採用馮諾依曼架構,所有知識和記憶存在左腦,所有的處理活動發生在右腦,每次你看見、聽到的東西在右腦進來,然後把數據從左腦搬到右腦去處理,再將處理結果寫回去,覺得這樣的腦子會燒掉嗎?所以我想說,馮諾依曼架構最適合解決我們說的分製法的算法問題,但它不適合解決端到端的問題。

人類過去用分治法解決問題,在計算機裡表現出來就是程序。而馮諾伊曼架構把所有的程序存在存儲器裡邊,然後每次執行到一步就加載一部分到計算器裡邊去運行,這樣的架構非常適合去運行分治法產生的程序。

如果我們分三層,最底下一層是解題思路分治法,往上一層是對應的表現形式,也就是程序,最上面硬件,過去 70 年裡就是馮諾依曼架構的CPU。所以,分治法、程序和馮諾依曼架構的CPU,共同構成了一個時代。

從這個視角看的話,英偉達和Transformer模型開創了一個新時代。它的底層不再是分治法了,而是端到端的算法。中間的表現層是大模型,再往上一層運行這些模型的芯片已經不再是傳統的馮諾依曼架構了,而是把內存與計算單元緊密結合的近存計算架構,也就是我們今天所說的GPU。

爲什麼我們說中間這樣的時代也大概率會被被拍死在沙灘上呢?其實大模型和幾百億個參數的端到端模型,是否應該被運行在一個存和算分離的芯片上,這仍存在疑問。它最理想的運行方式一定是像我們的大腦一樣,在同一個神經元裡邊存着知識和做計算,也就是存算一體。所以,我們相信,在未來幾年內,一定會出現存和算一體的芯片。

什麼是存算一體?

人腦的一個神經元其實是存着一些信息的,每一次計算的話,電信號又會通過它進行計算。也就是說,存儲信息和進行計算在同一個神經元裡發生。

所以如果在現在計算機的存儲單元上,能再加上計算的邏輯,也就是同一個單元既存儲又計算,那我想這樣結構的芯片其實是非常適合運行大模型算法的。

我相信運行一個幾百億參數的大模型,最好的架構一定是存算一體的架構,因爲它避免了所有的數據的搬運。過去爲什麼我們沒有做出存算一體的架構?其實也是因爲過去都是分治法。它其實不太需要在存儲單元裡邊進行計算。但當你去認真地研究怎麼在存儲單元裡做計算的時候,這件事情我相信幾年下來就會有很大的突破。

我其實是很相信仿生的。無論從大模型、還是像存算一體的芯片算法和硬件的發展,其實都是在朝一個仿生的方向在走。那觀察人腦的時候不難發現,其實腦子不只是在存儲知識,不只是在推理,腦子還在每一次推理的過程中間訓練自己,所以它本質上是一個存算訓一體的東西。

但今天的芯片在不停搬運數據的時候,其實我們是沒有功夫再去修改這個模型的參數的,因爲我們所有的功夫已經花在把那800億個參數搬來搬去上面了。所以我們沒有功夫再去操心說怎麼調整一下參數,讓它變得更好。但一旦出現存算一體的芯片,也就是那些參數再也不搬了,然後每次推理就是走一遍的時候,我們是不是空出的腦子就可以利用積累的知識來更新一下模型的參數。

所以,我相信在存算一體的芯片上,一定會誕生新一代的、不再是Transformer的全新算法,而這一代全新的算法可能會超越存算的界限,可能會一邊運行一邊進化自己,但這也是個非常恐怖的事情。

下一篇,我們會討論AI的落地、應用、以及爲何陽萌和安克會對AI有這麼深入的思考。關注我,下篇見。

(注:本文不代表老石任職單位的觀點。)