AI News HubLIVE
站内改写4 分鐘閱讀

AI即計算

本文認為,人工智能(尤其是大語言模型)應被理解為一種計算形式,而非人造智能體。文章探討了循環、組合性和代理框架在實現計算中的作用,引入了“Verplankalkül”作為非正式編程語言的概念,並分析了將計算結構整合到訓練中的未來方向。

來源Hacker News AI作者: snoren

我們最初通過ChatGPT產品中的大語言模型(LLM)接觸AI時,它就像一個神諭:你提問,神諭回答,交易完成。然而,隨着我們邁向代理AI的輝煌未來,這種描述越來越不適用——代理AI以某種方式執行操作,甚至進行計算。

機器學習的原始框架是函數逼近。這一框架固然準確,但未能捕捉當前階段的本質,機器學習已演變為更應被稱為“人工智能”的東西。我記得當我對機器學習同事抱怨特定模型無法進行通用計算時,他們投來疑惑的目光。當時我們在討論詞嵌入——Word2Vec剛出現,在連續語義空間中對詞語進行操作的可能性顯而易見。然而,缺乏超越簡單概念算術的組合性,語義空間僅是有趣的,或許對搜索有用,但遠不足以進行有意義的計算。一本組織良好的字典仍然只是字典。

過去我常問的一個面試問題(從未被滿意回答過)是:如何將可變大小的輸入壓縮到固定大小向量中,並通過神經網絡而不遭遇梯度消失?循環神經網絡是眾所周知的非解決方案。Transformer徹底回答了這個問題:你根本不需要這樣做(即壓縮到固定大小向量)。你維持一個隨輸入增長的表示,代價是計算複雜度呈二次增長。從此,我們不再受制於神經網絡雖在理論上可以是通用函數逼近器,但原始設計並未處理可變大小數據或可變計算量的事實。

樸素函數逼近給出了映射,但忽略了代數組合性的固有尺度。非正式地説,計算就是代數組合性的化身。這個差異在需要後者之前可能顯得學究氣。

循環與組合性

LLM顯然可以計算。按“正確”理解,計算通過遵循形式語言的規則建模——LLM只是將此概念擴展到遵循非正式語言的非正式規則。這可能不符合邏輯學家約一百年前制定的嚴格定義,但很可能比我們通常認為的更好地捕捉了他們試圖定義的精神。

與我們所熟悉的物理計算機一樣,語言模型受限於有限的上下文和記憶。它們是不完美的模型。(一個有趣的旁註是:不完美在於理論還是實現?)

關於計算史值得記住的事實是:我們做過的最強大(甚至過度強大)的事情是引入任意循環。原始遞歸函數已經很了不起——你可以在有界遞歸內計算大量內容,並保證每次調用終止。但決定性的飛躍,打開完全可計算景觀的是無界迭代:μ算子、WHILE循環、能夠説“繼續直到條件滿足”而不承諾何時完成。

現在考慮語言模型單次前向傳遞在計算上究竟是什麼。具有固定上下文窗口和有限精度算術的Transformer計算從輸入序列到輸出分佈的有界函數。架構是固定深度的電路,而非具有無界工作內存的機器。每個token關注先前的token,但計算在由層數、上下文窗口和實現約束決定的固定操作次數後終止。這不是批評——這種約束使訓練易於處理。但在詢問這些系統結構上能做什麼時,這是需要清晰認識的事實。單次前向傳遞並非具有任意深度的計算——它是非常複雜的有界函數應用。

這就是代理AI在技術上變得有趣的地方,而不僅僅是產品類別。使計算強大的循環正在被引入——只是被引入在框架層。模型被調用,產生輸出,輸出修改某些狀態(文件、工具調用結果、內存存儲、計劃、測試日誌),然後模型以更新的上下文再次被調用,而模型本身保持不變。計算發生在包裝器中。框架提供了模型本身無法實現的WHILE循環。

這也解釋了為什麼代理框架看起來如此經典。上下文壓縮、子代理和可發現上下文指向原始論點:只要擁有非指數算法,一旦達到原始設置針對特定工作負載的極限,你總是可以添加更多——更多內存、更多處理能力和機器。目前,我們使用的只是參與者模型、樹、Unix文件系統和操作系統狀態、外殼以及執行任意代碼的能力。幾乎沒有額外的機器學習花招。

這凸顯了當前AI的基本計算特性。LLM在執行計算(儘管是非正式定義的)方面,比做人們歷史上與AI關聯的另一件事——模仿、冒充甚至成為一個人——要好得多。記憶、持續學習、關心任何事、擁有持久意向性——這些可能在短局部上下文中可模擬,但在中尺度下更引人注目的是它們的缺失。而在這個時代,像我這樣的程序員仍然對這些系統在我(一個真實的人)定義、預謀和設定的任務上能完成的事情感到由衷驚訝。

我們今天的AI更像是非正式計算而非人造人——我們現在實例化非正式計算的能力正在凸顯這一區別,就像GOFAI時代的國際象棋計算機向我們展示了形式推理與實際智能之間的微妙差異。

熵即摩擦

對隨機系統循環的標準反對意見是錯誤會累積。有時這正是你得到的。在確定性程序中,循環執行你所寫的內容。在隨機解碼器中運行數百步,通過語義空間的軌跡可能漂移、捲曲或發散,這在經典軟件中沒有乾淨的對等物——第三步的幻覺可能影響後續一切。樸素地説,你應該預期在長代理運行中出現災難性退化。

但經驗記錄比加性誤差模型預測的更有趣。當有外部反饋時,長代理運行有時會自我修正——模型寫代碼、運行測試、看到失敗、更新任務表示並修復錯誤。它搜索、發現矛盾證據並修改計劃。失敗的工具調用產生錯誤消息流回上下文,模型進行調整。熵是真實的,但並不總是單調遞增。測試、工具、搜索結果、執行軌跡和持久狀態約束了軌跡——它們通過迫使系統與真實世界碰撞來防止任意漂移。

所以熵問題是真實的,但並非硬牆。它更像是摩擦——降低性能、設定實際限制並需要工程關注,但不阻止有用的長時計算發生。

訓練循環

更難的問題是將計算結構整合到優化層面而非框架層面意味着什麼。目前,循環存在於梯度之外。模型主要訓練於下一個token預測或指令遵循,而循環和狀態管理發生在推理時,在訓練過程從未見過的腳手架中——模型必須從其訓練分佈泛化到架構上不同於其明確優化的任何執行上下文,而它的表現比預期更好。

但存在明顯的錯配——梯度下降的強大之處在於它在確切的訓練分佈上找到結構。如果你關心的分佈是多步代理執行——帶狀態的過程、循環、錯誤恢復、回溯、工具使用——那麼在該分佈上訓練,計算結構內建而非附加,應該產生質上更好的結果。優化壓力將應用於正確的地方。

有實際原因使得這尚未大規模實現。循環、有狀態執行的訓練基礎設施比固定上下文下一個token預測複雜得多——計算在長展開中而非孤立前向傳遞中擴展糟糕,跨數十或數百步的信用分配確實困難。你需要知道哪些早期決策導致了後來的成功或失敗,而信號會迅速稀釋。這些是真正的障礙,而非藉口。

因此我們默認了更清晰的分解:在下一個token預測上訓練模型,事後添加循環,並希望能力泛化。這一希望已部分得到證實。“部分”是關鍵詞。我們尚未擁有一個其內部表示被迭代、失敗、自我修正和成功跨長計算軌跡的經驗深刻塑造的模型。循環仍然主要存在於Python文件、外殼工具、編排代碼和提示約定中。我們訓練了轉換器,然後將其包裝在程序中。

Verplankalkül

這引出了編程語言——一個與計算緊密交織且我深愛的話題。Andrej Karpathy以指出英語現在是最大的編程語言而聞名。在很多時候我同意,或者至少:一個可計算的、以計算為中心的英語子集。但讓我們仔細分析。英語不是形式語言。它沒有嚴格的語法,沒有形式定義的計算語義。要捕捉與編程語言等價的東西,我們需要重新措辭。

為此,我想介紹一種新型編程語言,我稱之為Verplankalkül——一個混成詞。Konrad Zuse,製造了第一台可編程計算機的人,將他的第一種編程語言命名為Plankalkül,字面意思是“計劃演算”。德語口語詞verplant意味着混亂、凌亂——字面意思是“計劃錯誤”。因此Verplankalkül:混亂的計劃演算。一種非正式編程語言。