原文:What Is ChatGPT Doing … and Why Does It Work?
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
序言
這本簡短的書試圖從第一原理解釋 ChatGPT 是如何工作的。在某種程度上,這是關于技術的故事。但它也是關于科學的故事。以及關于哲學的故事。為了講述這個故事,我們將不得不匯集許多世紀以來的想法和發(fā)現。
對我來說,看到我長期以來感興趣的許多事物在突然進展的一陣中匯聚在一起,真是令人興奮。從簡單程序的復雜行為到語言和意義的核心特征,以及大型計算機系統(tǒng)的實際情況—所有這些都是 ChatGPT 故事的一部分。
ChatGPT 基于神經網絡的概念——最初在 1940 年代作為對大腦操作的理想化而發(fā)明。我自己在 1983 年首次編寫了一個神經網絡——但它并沒有做出任何有趣的事情。但是 40 年后,隨著計算機的速度實際上快了一百萬倍,互聯網上有數十億頁的文本,并經過一系列工程創(chuàng)新,情況大不相同。而且—令所有人驚訝的是—一個比我 1983 年擁有的神經網絡大一億倍的神經網絡能夠做到被認為是獨特的人類生成有意義的人類語言的事情。
這本書由我在 ChatGPT 推出后不久寫的兩篇文章組成。第一篇是關于 ChatGPT 及其生成語言的非常人性化能力的解釋。第二篇展望了 ChatGPT 能夠利用計算工具超越人類所能做到的,并且特別能夠利用我們的 Wolfram|Alpha 系統(tǒng)的計算知識“超能力”。
ChatGPT 推出僅僅三個月,我們才剛開始理解它的實際和智力意義。但目前它的到來提醒我們,即使在已經發(fā)明和發(fā)現了一切之后,驚喜仍然是可能的。
史蒂芬·沃爾夫勒姆
2023 年 2 月 28 日
ChatGPT 在做什么… 為什么會有效?
它只是一次添加一個單詞
ChatGPT 能夠自動生成類似人類編寫文本的東西,這是令人驚訝且意想不到的。但它是如何做到的?為什么有效?我在這里的目的是大致概述 ChatGPT 內部發(fā)生的事情,然后探討為什么它能夠在產生我們可能認為有意義的文本方面做得如此出色。我應該在一開始就說,我將專注于正在發(fā)生的大局,并且雖然我會提到一些工程細節(jié),但我不會深入探討它們。(我將說的要點同樣適用于其他當前的“大型語言模型” [LLMs],就像適用于 ChatGPT 一樣。)
首先要解釋的是,ChatGPT 始終試圖做的基本上是生成“合理的延續(xù)”,無論它目前已經有了什么文本,這里的“合理”意味著“在看到人們在數十億網頁等上寫了什么之后,我們可能期望某人寫下的內容”。
所以,假設我們有文本“AI 最好的地方在于”。想象一下掃描數十億頁人類編寫的文本(比如網絡上和數字化書籍中的文本),找到所有這個文本的實例,然后看看接下來的詞是什么,以及在多大程度上。ChatGPT 實際上做的就是這樣一件事,只是(我將解釋)它不看文字本身;它尋找的是在某種意義上“意義匹配”的東西。但最終的結果是它生成了一個排名列表,列出了可能跟隨的單詞,以及“概率”:
令人驚訝的是,當 ChatGPT 做類似寫一篇文章的事情時,它實際上只是一遍又一遍地問“在目前的文本中,下一個詞應該是什么?” ——然后每次添加一個單詞。(更準確地說,正如我將解釋的那樣,它添加的是一個“標記”,這可能只是一個單詞的一部分,這就是為什么它有時“編造新詞”的原因。)
但是,在每一步,它都會得到一個帶有概率的單詞列表。但它應該選擇哪一個添加到正在寫的文章(或其他內容)中呢?人們可能認為應該選擇“排名最高”的單詞(即分配了最高“概率”的單詞)。但這就是一些巫術開始悄悄滲入的地方。因為出于某種原因——也許有一天我們會對此有科學式的理解——如果我們總是選擇排名最高的單詞,我們通常會得到一篇非?!捌降钡奈恼?,似乎從不“展現任何創(chuàng)造力”(甚至有時會逐字重復)。但如果有時(隨機地)選擇排名較低的單詞,我們會得到一篇“更有趣”的文章。
這里存在隨機性意味著,如果我們多次使用相同提示,每次可能會得到不同的文章。并且,與巫術的概念一致,有一個特定的所謂“溫度”參數,決定了使用較低排名單詞的頻率,對于文章生成來說,0.8 的“溫度”似乎最好。(值得強調的是這里沒有使用“理論”;這只是根據實踐中發(fā)現的有效方法。例如,“溫度”概念之所以存在是因為指數分布熟悉于統(tǒng)計物理學正被使用,但沒有“物理”聯系——至少據我們所知。)
在繼續(xù)之前,我應該解釋一下,為了說明的目的,我大多不會使用ChatGPT 中的完整系統(tǒng);相反,我通常會使用一個更簡單的GPT-2 系統(tǒng),它具有一個很好的特點,即它足夠小,可以在標準臺式計算機上運行。因此,對于我展示的幾乎所有內容,我都能夠包含您可以立即在計算機上運行的明確的Wolfram 語言代碼。(單擊這里的任何圖片以復制其背后的代碼。)
例如,這里是如何獲取上述概率表的方法。首先,我們必須檢索基礎的“語言模型”神經網絡:
后來,我們將深入研究這個神經網絡,并討論它的工作原理。但現在我們可以將這個“網絡模型”作為一個黑匣子應用到我們迄今為止的文本中,并要求模型說應該跟隨的前 5 個單詞的概率最高:
這將該結果制作成明確格式的“數據集”:
如果一個人反復“應用模型”,每一步都添加具有最高概率的單詞(在此代碼中指定為模型的“決策”),會發(fā)生什么:
如果繼續(xù)下去會發(fā)生什么?在這種(“零溫度”)情況下,很快輸出的內容會變得相當混亂和重復:
但是,如果不總是選擇“頂部”單詞,而是有時隨機選擇“非頂部”單詞(“隨機性”對應于“溫度”0.8)呢?同樣可以構建文本:
每次這樣做時,都會做出不同的隨機選擇,文本也會不同,就像這 5 個例子中的情況:
值得指出,即使在第一步,也有很多可能的“下一個詞”可供選擇(在溫度為 0.8 時),盡管它們的概率迅速下降(是的,在這個對數-對數圖上的直線對應于* n * ^(-1)“冪律”衰減,這是語言的一般統(tǒng)計特征):
那么如果繼續(xù)下去會發(fā)生什么?這里是一個隨機示例。它比頂部詞(零溫度)情況要好,但仍然至少有點奇怪:
這是使用最簡單的 GPT-2 模型(來自 2019 年)完成的。使用更新和更大的 GPT-3 模型結果更好。這是使用相同“提示”生成的頂部詞(零溫度)文本,但使用最大的 GPT-3 模型:
這里是一個“溫度 0.8”的隨機示例:
概率是從哪里來的?
好的,ChatGPT 總是根據概率選擇下一個詞。但這些概率是從哪里來的呢?讓我們從一個更簡單的問題開始。讓我們考慮一次生成英文文本一個字母(而不是單詞)。我們如何計算每個字母的概率呢?
我們可以做的一個非常簡單的事情就是只取一段英文文本的樣本,并計算其中不同字母出現的頻率。例如,這里計算了維基百科文章中“cats”中字母的頻率:
這也對“dogs”做了同樣的事情:
結果是相似的,但并不完全相同(“o”在“dogs”文章中無疑更常見,因為畢竟它出現在單詞“dog”中)。不過,如果我們取足夠大的英文文本樣本,我們最終可以期望得到至少相當一致的結果:
這是我們只根據這些概率生成一系列字母時得到的樣本:
我們可以通過按照一定概率添加空格來將其分解為“單詞”:
通過強制“單詞長度”的分布與英語中的實際情況一致,我們可以更好地生成“單詞”:
在這里我們沒有得到任何“實際單詞”,但結果看起來稍微好一些。不過,要進一步,我們需要做的不僅僅是隨機選擇每個字母。例如,我們知道如果有一個“q”,下一個字母基本上必須是“u”。
這是字母單獨出現的概率的圖表:
這里是一個顯示典型英文文本中字母對(“2-grams”)概率的圖表。可能的第一個字母橫跨頁面顯示,第二個字母縱向顯示:
例如,我們在這里看到,“q”列是空白的(概率為零),除了“u”行。好的,現在我們不再一次生成我們的“單詞”,而是一次查看兩個字母,使用這些“2-gram”概率來生成它們。這里是結果的一個樣本—其中包括一些“實際單詞”:
通過足夠多的英文文本,我們不僅可以對單個字母或字母對(2-grams)的概率得到相當好的估計,還可以對更長的字母序列進行估計。如果我們使用逐漸更長的n-gram 概率生成“隨機單詞”,我們會看到它們逐漸變得“更現實”:
但現在讓我們假設—更多或更少地像 ChatGPT 一樣—我們正在處理整個單詞,而不是字母。英語中大約有 40,000 個常用單詞。通過查看大量的英文文本(比如幾百萬本書,總共幾百億字),我們可以得到每個單詞有多常見的估計。利用這一點,我們可以開始生成“句子”,其中每個單詞都是獨立隨機選擇的,具有它在語料庫中出現的相同概率。這里是我們得到的一個樣本:
毫不奇怪,這是無意義的。那么我們怎么能做得更好呢?就像處理字母一樣,我們可以開始考慮不僅是單個單詞的概率,而是對單詞對或更長的n-gram 單詞的概率。對于成對的情況,以下是我們得到的 5 個示例,所有情況都從單詞“cat”開始:
它看起來稍微更“合理”了。我們可以想象,如果我們能夠使用足夠長的n-grams,我們基本上會“得到一個 ChatGPT”—在這個意義上,我們會得到一些會生成具有“正確整體文章概率”的單詞序列的東西。但問題在于:甚至沒有足夠接近的英文文本被寫過,以便推斷這些概率。
在網絡爬蟲中可能有數百億字;在已數字化的書籍中可能還有另外數百億字。但是,即使有 40,000 個常用詞,可能的 2-gram 數量已經達到了 16 億,而可能的 3-gram 數量則達到了 60 萬億。因此,我們無法從已有的文本中估計所有這些的概率。當我們到達“20 個詞的文章片段”時,可能性的數量已經超過了宇宙中的粒子數量,因此從某種意義上說,它們永遠無法全部被記錄下來。
那么我們能做什么?大的想法是制定一個模型,讓我們能夠估計序列應該發(fā)生的概率——即使我們從未在我們查看的文本語料庫中明確看到過這些序列。而 ChatGPT 的核心正是所謂的“大語言模型”(LLM),它被構建為很好地估計這些概率。
什么是模型?
假設你想知道(就像加利略在 16 世紀末所做的那樣)從比薩斜塔的每層樓掉下的炮彈到達地面需要多長時間。嗯,你可以在每種情況下測量它并制作一個結果表?;蛘吣憧梢宰隼碚摽茖W的本質:制定一個給出某種計算答案的程序的模型,而不僅僅是測量和記住每種情況。
讓我們想象我們有(有些理想化的)數據,表明炮彈從各個樓層掉下所需的時間:
我們如何確定從我們沒有明確數據的樓層掉下來需要多長時間?在這種特殊情況下,我們可以利用已知的物理定律來計算。但是假設我們只有數據,而不知道支配它的基本定律。那么我們可能會做一個數學猜測,比如也許我們應該使用一條直線作為模型:
我們可以選擇不同的直線。但這是平均最接近我們所給出的數據的直線。從這條直線我們可以估計任何樓層掉落的時間。
我們怎么知道在這里嘗試使用一條直線呢?在某種程度上,我們并不知道。這只是數學上簡單的東西,我們習慣于許多我們測量的數據結果很適合數學上簡單的東西。我們可以嘗試一些數學上更復雜的東西——比如 a + b x + c x 2 ——在這種情況下我們做得更好:
事情可能會出現問題。就像這里我們用 a + b /x + c sin(x )做的最好的嘗試:
值得理解的是,從來沒有“無模型的模型”。你使用的任何模型都有一定的基本結構——然后一組“你可以轉動的旋鈕”(即你可以設置的參數)來擬合你的數據。在 ChatGPT 的情況下,使用了許多這樣的“旋鈕”——實際上有 1750 億個。
但值得注意的是,ChatGPT 的基本結構——僅僅有那么多參數——足以構建一個計算下一個詞概率“足夠好”的模型,從而給我們合理長度的文章。
人類任務的模型
我們上面給出的例子涉及制作一個模型,用于來自簡單物理的數值數據——幾個世紀以來,我們已經知道“簡單的數學適用”。但對于 ChatGPT,我們必須制作一個模型,用于人類大腦產生的文本。對于這樣的東西,我們(至少目前)沒有類似于“簡單的數學”。那么,這樣的模型可能是什么樣子呢?
在討論語言之前,讓我們先談談另一個類似人類任務:識別圖像。作為一個簡單的例子,讓我們考慮數字的圖像(是的,這是一個經典的機器學習例子):
我們可以做的一件事是為每個數字獲取一堆樣本圖像:
然后,為了找出我們輸入的圖像是否對應于特定的數字,我們可以將其與我們擁有的樣本進行像素級比較。但作為人類,我們似乎做得更好——因為我們仍然能夠識別數字,即使它們是手寫的,而且經過各種修改和扭曲:
當我們?yōu)樯厦娴臄底謹祿⒛P蜁r,我們能夠拿到給定的數值x,然后只需計算特定a和b的a + b x。那么,如果我們將每個像素的灰度值視為某個變量x[i],是否存在某個函數,當評估時告訴我們圖像是哪個數字的?事實證明,構建這樣的函數是可能的。毫不奇怪,這并不特別簡單,一個典型的例子可能涉及大約五十萬次數學運算。
但最終結果是,如果我們將圖像的像素值集合輸入到這個函數中,輸出將是指定我們擁有的圖像是哪個數字。稍后,我們將討論如何構建這樣一個函數,以及神經網絡的概念。但現在讓我們將這個函數視為黑匣子,我們輸入手寫數字的圖像(作為像素值數組),然后得到對應的數字:
但這里真正發(fā)生了什么?假設我們逐漸模糊一個數字。有一段時間我們的函數仍然“識別”它,這里是一個“2”。但很快它“失去了”,開始給出“錯誤”的結果:
但為什么我們說這是“錯誤”的結果?在這種情況下,我們知道我們通過模糊“2”得到了所有這些圖像。但如果我們的目標是產生一個模型,模擬人類在識別圖像方面的能力,真正要問的問題是,如果向人類展示其中一張模糊的圖像,而不知道它來自哪里,人類會做什么。
如果我們從我們的函數得到的結果通常與人類的判斷一致,那么我們就有一個“好模型”。而非平凡的科學事實是,對于像這樣的圖像識別任務,我們現在基本上知道如何構建能夠實現這一點的函數。
我們能“數學證明”它們有效嗎?嗯,不行。因為要做到這一點,我們必須對我們人類正在做什么有一個數學理論。拿“2”圖像并改變幾個像素。我們可能會想象,即使只有幾個像素“錯位”,我們仍應該認為這是一個“2”。但這應該持續(xù)到什么程度?這是一個關于人類視覺感知的問題。是的,答案無疑對蜜蜂或章魚可能不同,對假設的外星人可能完全不同。
神經網絡
好吧,那么我們用于圖像識別等任務的典型模型實際上是如何工作的呢?目前最流行且最成功的方法使用神經網絡。神經網絡是在 20 世紀 40 年代發(fā)明的,其形式與今天的使用非常接近,可以被認為是對大腦工作方式的簡單理想化。
人類大腦中有大約 1000 億個神經元(神經細胞),每個神經元每秒最多能產生一次電脈沖。這些神經元連接成一個復雜的網絡,每個神經元都有樹狀的分支,使其能夠向其他數千個神經元傳遞電信號。在一個粗略的近似中,任何給定的神經元在某一時刻是否產生電脈沖取決于它從其他神經元接收到的脈沖,不同的連接具有不同的“權重”。
當我們“看到一幅圖像”時,光子從圖像上落在我們眼睛后面的“光感受器”細胞上時,它們會在神經細胞中產生電信號。這些神經細胞連接到其他神經細胞,最終信號通過一系列神經元層。在這個過程中,我們“識別”圖像,最終“形成思維”我們“看到一個 2”(最終可能做一些像大聲說“兩”這樣的事情)。
前一節(jié)中的“黑匣子”函數是這樣一個神經網絡的“數學化”版本。它恰好有 11 層(盡管只有 4 個“核心層”):
這種神經網絡并沒有什么特別“理論推導”的地方;它只是一種在 1998 年作為一種工程構建出來并被發(fā)現有效的東西。當然,這與我們描述大腦是通過生物進化過程產生的方式并沒有太大不同。
好的,但是這樣的神經網絡如何“識別事物”呢?關鍵在于吸引子的概念。想象一下我們有手寫的 1 和 2 的圖像:
我們希望所有的 1 都“被吸引到一個地方”,所有的 2 都“被吸引到另一個地方”。換句話說,如果一幅圖像在某種程度上“更接近于 1”,而不是 2,我們希望它最終出現在“1 的位置”,反之亦然。
作為一個簡單的類比,假設我們在平面上有某些位置,用點表示(在現實生活中,它們可能是咖啡店的位置)。然后我們可以想象,從平面上的任意點開始,我們總是希望最終到達最近的點(即我們總是去最近的咖啡店)。我們可以通過將平面分成由理想化的“分水嶺”分隔的區(qū)域(“吸引子盆地”)來表示這一點:
我們可以將這看作是實現一種“識別任務”的過程,我們不是在識別給定圖像“看起來最像哪個數字”之類的事情,而是直接看一個給定點最接近哪個點。(我們在這里展示的“Voronoi 圖”設置將二維歐幾里得空間中的點分開;數字識別任務可以被認為是在一個由每個圖像中所有像素的灰度級組成的 784 維空間中做類似的事情。)
那么我們如何讓神經網絡“執(zhí)行識別任務”呢?讓我們考慮這個非常簡單的情況:
我們的目標是接受一個對應于位置{x,y}的“輸入”,然后將其“識別”為最接近的三個點之一。換句話說,我們希望神經網絡計算出一個關于{x,y}的函數,如下所示:
那么我們如何用神經網絡實現這一點呢?最終,神經網絡是一組理想化的“神經元”連接在一起的集合,通常排列成層,一個簡單的例子如下:
每個“神經元”實際上被設置為評估一個簡單的數值函數。為了“使用”網絡,我們只需在頂部輸入數字(如我們的坐標x和y),然后讓每一層的神經元“評估它們的函數”并將結果向前傳遞通過網絡——最終在底部產生最終結果:
在傳統(tǒng)(受生物啟發(fā)的)設置中,每個神經元實際上具有來自前一層神經元的一定數量的“傳入連接”,每個連接被分配一個特定的“權重”(可以是正數或負數)。給定神經元的值由將“前一神經元”的值乘以它們對應的權重,然后相加并加上一個常數——最后應用“閾值化”(或“激活”)函數來確定。在數學術語中,如果一個神經元有輸入x = {x[1],x[2]…},那么我們計算f [w。x + b],其中權重w和常數b通常對網絡中的每個神經元選擇不同;函數f通常是相同的。
計算w。x + b只是矩陣乘法和加法的問題。 “激活函數”f引入了非線性(最終導致非平凡行為)。通常會使用各種激活函數;在這里我們將使用[Ramp](http://reference.wolfram.com/language/ref/Ramp.html)
(或 ReLU):
對于我們希望神經網絡執(zhí)行的每個任務(或者等效地,對于我們希望它評估的每個整體函數),我們將有不同的權重選擇。(并且——正如我們稍后將討論的那樣——這些權重通常是通過使用機器學習從我們想要的輸出示例中“訓練”神經網絡來確定的。)
最終,每個神經網絡只是對應于某個整體數學函數——盡管可能很難寫出來。對于上面的例子,它將是:
ChatGPT 的神經網絡也只是對應于這樣一個數學函數——但實際上有數十億個項。
但讓我們回到單個神經元。以下是具有兩個輸入(代表坐標x和y)的神經元可以使用各種權重和常數(以及[Ramp](https://reference.wolfram.com/language/ref/Ramp.html)
作為激活函數)計算的一些函數示例:
那么上面的更大網絡呢?嗯,這是它計算的內容:
它并不完全“正確”,但它接近我們上面展示的“最近點”函數。
讓我們看看其他一些神經網絡會發(fā)生什么。在每種情況下,正如我們稍后將解釋的那樣,我們使用機器學習來找到最佳的權重選擇。然后我們在這里展示這些權重的神經網絡計算的內容:
更大的網絡通常在逼近我們的目標函數時表現更好。在每個吸引子盆地的“中心”位置,我們通常會得到我們想要的確切答案。但是,在邊界處——神經網絡“難以做出決定”的地方——情況可能會更加混亂。
通過這種簡單的數學風格的“識別任務”,“正確答案”是明確的。但在識別手寫數字的問題上,情況就不那么明確了。如果有人寫的“2”看起來像“7”等等呢?盡管如此,我們可以詢問神經網絡如何區(qū)分數字——這給出了一個指示:
我們能“數學上”說出網絡是如何做出區(qū)分的嗎?實際上不行。它只是“做神經網絡所做的事情”。但事實證明,這通常似乎與我們人類所做的區(qū)分相當一致。
讓我們舉一個更詳細的例子。假設我們有貓和狗的圖片。我們有一個經過訓練來區(qū)分它們的神經網絡。以下是它在一些示例上可能會做的事情:
現在“正確答案”甚至更不明確了。穿著貓服的狗呢?等等。無論輸入什么,神經網絡都會生成一個答案。而且,事實證明,它以一種與人類可能做的相當一致的方式來做。正如我上面所說的,這不是我們可以“從第一原則推導出來”的事實。這只是一種經驗上被發(fā)現在某些領域至少是真實的東西。但這是神經網絡有用的一個關鍵原因:它們以某種方式捕捉到了一種“類似人類”的做事方式。
給自己展示一張貓的圖片,并問“為什么那是一只貓?”。也許你會開始說“嗯,我看到了它尖尖的耳朵等等”。但解釋你如何認出這張圖片是一只貓并不容易。只是你的大腦以某種方式弄清楚了。但對于大腦來說,沒有辦法(至少目前還沒有)“進入內部”并看看它是如何弄清楚的。那么對于(人造)神經網絡呢?當你展示一張貓的圖片時,看到每個“神經元”做什么是很???接的。但即使要獲得基本的可視化通常也是非常困難的。
在我們用于上面“最近點”問題的最終網絡中有 17 個神經元。在用于識別手寫數字的網絡中有 2190 個。而在我們用于識別貓和狗的網絡中有 60,650 個。通常很難想象 60,650 維空間的情況。但因為這是一個用于處理圖像的網絡,它的許多神經元層都組織成數組,就像它正在查看的像素數組一樣。
如果我們拿一張典型的貓的圖片
那么我們可以通過一系列衍生圖像來表示第一層神經元的狀態(tài)——其中許多我們可以輕松解釋為“沒有背景的貓”,或者“貓的輪廓”:
到了第 10 層,很難解釋發(fā)生了什么:
但總的來說,我們可以說神經網絡“挑選出某些特征”(也許尖耳朵是其中之一),并使用這些特征來確定圖像的內容。但這些特征是否是我們有名稱的特征,比如“尖耳朵”?大多數情況下不是。
我們的大腦是否使用類似的特征?大多數情況下我們不知道。但值得注意的是,像我們在這里展示的神經網絡的前幾層似乎挑選出了圖像的一些方面(如物體的邊緣),這些方面似乎與我們知道的大腦視覺處理的第一層挑選出的方面相似。
但假設我們想要一個關于神經網絡中貓識別的“理論”。我們可以說:“看,這個特定的網絡可以做到”——這立即讓我們對“這是多么困難的問題”有了一些概念(例如,可能需要多少神經元或層)。但至少目前為止,我們沒有辦法“描述網絡正在做什么”。也許這是因為它真的是計算上不可簡化的,除非通過明確追蹤每一步,否則沒有一般方法可以找到它在做什么?;蛘呖赡苤皇且驗槲覀冞€沒有“弄清楚科學”,并且確定了允許我們總結正在發(fā)生的事情的“自然規(guī)律”。
當我們討論使用 ChatGPT 生成語言時,我們將遇到相同類型的問題。而且不清楚是否有方法“總結它在做什么”。但語言的豐富性和細節(jié)(以及我們對它的經驗)可能使我們比處理圖像時走得更遠。
機器學習和神經網絡的訓練
到目前為止,我們一直在談論“已經知道”如何執(zhí)行特定任務的神經網絡。但神經網絡如此有用的原因(可能也適用于大腦)不僅在于它們原則上可以執(zhí)行各種任務,而且可以通過“逐步從示例中訓練”來執(zhí)行這些任務。
當我們制作一個神經網絡來區(qū)分貓和狗時,我們不需要編寫一個明確查找胡須的程序;相反,我們只展示大量貓和狗的示例,然后讓網絡從中“機器學習”如何區(qū)分它們。
關鍵在于訓練后的網絡從所展示的特定示例中“泛化”。正如我們之前所見,網絡不僅僅是識別所展示的示例貓圖像的特定像素模式;相反,神經網絡以某種“一般貓的特性”為基礎來區(qū)分圖像。
那么神經網絡訓練實際上是如何工作的呢?基本上,我們一直在嘗試找到使神經網絡成功復制我們給定示例的權重。然后我們依賴神經網絡以“合理”的方式在這些示例之間“插值”(或“泛化”)。
讓我們看一個比上面的最近點問題更簡單的問題。讓我們嘗試讓神經網絡學習函數:
對于這個任務,我們需要一個只有一個輸入和一個輸出的網絡,就像:
但是我們應該使用什么權重等等?對于每組可能的權重,神經網絡將計算一些函數。例如,這里是它對一些隨機選擇的權重集的處理結果:
是的,我們可以清楚地看到,在這些情況下,它甚至都沒有接近我們想要的函數。那么我們如何找到能夠復制函數的權重呢?
基本思想是提供大量“輸入→輸出”示例來“學習”—然后嘗試找到能夠復制這些示例的權重。這是逐漸增加示例的結果:
在這個“訓練”的每個階段,網絡中的權重逐漸調整—我們看到最終我們得到了一個成功復制我們想要的函數的網絡。那么我們如何調整權重呢?基本思想是在每個階段看“我們離得到我們想要的函數有多遠”—然后以使其更接近的方式更新權重。
為了找出“我們有多遠”,我們計算通常稱為“損失函數”(有時稱為“成本函數”)的東西。在這里,我們使用一個簡單的(L2)損失函數,它只是我們得到的值與真實值之間差值的平方和。我們看到隨著訓練過程的進行,損失函數逐漸減少(遵循不同任務的特定“學習曲線”)—直到我們達到一個點,網絡(至少在很大程度上)成功地復制了我們想要的函數:
好了,最后一個必要解釋的要點是如何調整權重以減少損失函數。正如我們所說,損失函數給出了我們得到的值與真實值之間的“距離”。但是“我們得到的值”在每個階段都由當前版本的神經網絡確定—以及其中的權重。但現在想象一下權重是變量—比如w[i]。我們想找出如何調整這些變量的值以最小化依賴于它們的損失。
例如,想象(在實踐中使用的典型神經網絡的極端簡化中)我們只有兩個權重w [1]和w [2]。那么我們可能會有一個損失函數,作為w [1]和w [2]的函數看起來像這樣:
數值分析提供了各種技術來找到這種情況下的最小值。但是一個典型的方法就是從我們之前的w [1],w [2]開始逐漸沿著最陡下降的路徑前進:
就像水流向下山一樣,這個過程保證的只是最終會到達表面的某個局部最小值(“山湖”);它很可能不會達到最終的全局最小值。
很難說是否能夠找到在“權重景觀”上最陡下降的路徑。但微積分來拯救。正如我們上面提到的,我們總是可以將神經網絡看作計算一個依賴于其輸入和權重的數學函數。但現在考慮對這些權重進行微分。事實證明,微積分的鏈式法則實際上讓我們能夠“解開”神經網絡中各層所做的操作。結果是,我們至少在某種局部近似中可以“反轉”神經網絡的操作,并逐漸找到最小化與輸出相關聯的損失的權重。
上面的圖片展示了在只有 2 個權重的不切實際簡單情況下可能需要做的最小化。但事實證明,即使有更多的權重(ChatGPT 使用了 1750 億個),仍然可以進行最小化,至少在某種程度上的近似。事實上,圍繞 2011 年發(fā)生的“深度學習”重大突破與發(fā)現相關,發(fā)現在某種意義上,當涉及許多權重時,進行(至少近似)最小化可能比涉及相當少的權重更容易。
換句話說,有點反直覺的是,用神經網絡解決更復雜的問題可能比解決更簡單的問題更容易。這似乎是因為當有很多“權重變量”時,就有一個高維空間,有“許多不同的方向”可以引導我們到達最小值——而當變量較少時,很容易陷入局部最小值(“山湖”),從中沒有“出路的方向”。
值得指出的是,在典型情況下,有許多不同的權重集合都會給出幾乎相同性能的神經網絡。通常在實際的神經網絡訓練中會做出許多隨機選擇——導致“不同但等效的解決方案”,就像這些:
但是每個“不同的解決方案”都會有至少稍微不同的行為。如果我們要求在我們提供訓練示例的區(qū)域之外進行“外推”,我們可能會得到截然不同的結果:
但哪一個是“正確”的?真的沒有辦法說。它們都“與觀察到的數據一致”。但它們都對應于不同的“固有”思考方式,以“超越常規(guī)”的方式去思考該做什么。對我們人類來說,有些可能比其他的“更合理”。
神經網絡訓練的實踐和傳統(tǒng)
尤其是在過去的十年里,神經網絡訓練的藝術取得了許多進展。是的,這基本上是一門藝術。有時候——尤其是事后看來——人們可以看到至少有一點“科學解釋”來解釋正在做的事情。但大多數情況下,這些都是通過試錯發(fā)現的,逐漸積累了關于如何處理神經網絡的重要知識。
有幾個關鍵部分。首先,關于在特定任務中應該使用什么樣的神經網絡架構的問題。然后是如何獲取用于訓練神經網絡的數據的關鍵問題。而且越來越多的情況下,我們不是從頭開始訓練一個網絡:相反,一個新網絡可以直接整合另一個已經訓練好的網絡,或者至少可以利用該網絡為自己生成更多的訓練樣本。
人們可能會認為,對于每種特定的任務,都需要不同的神經網絡架構。但事實上發(fā)現,即使對于看似完全不同的任務,同樣的架構通常也能起作用。在某種程度上,這讓人想起了通用計算的概念(以及我的計算等價原理),但正如我稍后將討論的那樣,我認為這更多地反映了我們通常試圖讓神經網絡執(zhí)行的任務是“類似人類”的任務,而神經網絡可以捕捉相當一般的“類人過程”。
在神經網絡的早期階段,人們傾向于認為應該“讓神經網絡盡可能少地做事情”。例如,在將語音轉換為文本時,人們認為應該先分析語音,將其分解為音素等。但發(fā)現的是,至少對于“類人任務”,通常最好只是嘗試在“端到端問題”上訓練神經網絡,讓它“發(fā)現”必要的中間特征、編碼等。
還有一個想法,即應該將復雜的個別組件引入神經網絡中,以使其實際上“明確實現特定的算法思想”。但再次,這在大多數情況下都被證明不值得;相反,最好只處理非常簡單的組件,并讓它們“自組織”(盡管通常以我們無法理解的方式)來實現(可能是)這些算法思想的等效物。
這并不是說對于神經網絡沒有相關的“結構性思想”。因此,例如,具有具有局部連接的 2D 神經元數組在處理圖像的早期階段至少似乎非常有用。并且具有集中于“向后查看序列”的連接模式似乎很有用——正如我們稍后將看到的——在處理諸如人類語言之類的事物時,例如在 ChatGPT 中。
但神經網絡的一個重要特征是——就像一般的計算機一樣——它們最終只是在處理數據。而當前的神經網絡——使用當前的神經網絡訓練方法——具體處理數字數組。但在處理過程中,這些數組可以被完全重新排列和重塑。例如,我們用于識別上述數字的網絡從一個 2D“類似圖像”的數組開始,迅速“加厚”到許多通道,然后“集中”到一個 1D 數組,最終包含代表不同可能輸出數字的元素:
但是,好吧,一個人如何能夠確定為特定任務需要多大的神經網絡呢?這在某種程度上是一門藝術。關鍵是要知道“任務有多難”。但對于類似人類的任務,通常很難估計。是的,可能有一種系統(tǒng)的方法可以通過計算機“機械地”完成任務。但很難知道是否有可以讓人以“類似人類水平”更輕松地完成任務的技巧或捷徑??赡苄枰信e一個巨大的游戲樹來“機械地”玩某個游戲;但可能有一種更簡單(“啟發(fā)式”)的方法來實現“人類水平的游戲”。
當處理微小的神經網絡和簡單的任務時,有時可以明確看到自己“無法從這里到達那里”。例如,以下是在上一節(jié)中使用幾個小型神經網絡時似乎能夠完成的任務的最佳結果:
如果神經網絡太小,我們發(fā)現它就無法復現我們想要的功能。但是在某個大小以上,只要訓練足夠長時間,提供足夠的例子,它就沒有問題。順便說一句,這些圖片展示了神經網絡傳說的一部分:如果中間有一個“擠壓”,強制所有東西通過較小數量的中間神經元,通??梢杂幂^小的網絡來解決問題。(值得一提的是,“無中間層”或所謂的“感知器”網絡只能學習基本線性函數,但只要有一個中間層,原則上就可以任意精確地逼近任何函數,至少如果有足夠多的神經元,盡管為了使其可行地訓練,通常會有某種正則化或歸一化。)
好的,假設我們已經確定了某種神經網絡架構?,F在問題是獲取用于訓練網絡的數據。許多關于神經網絡以及機器學習的實際挑戰(zhàn)集中在獲取或準備必要的訓練數據上。在許多情況下(“監(jiān)督學習”),人們希望獲得輸入的明確示例以及預期的輸出。因此,例如,人們可能希望對圖像進行標記,標記它們的內容或其他屬性。也許人們將不得不明確地經過一番努力進行標記。但很多時候,事實證明可以依靠已經完成的工作,或將其用作某種代理。因此,例如,人們可能會使用網絡上提供的圖像的 alt 標簽?;蛘?,在不同的領域,人們可能會使用為視頻創(chuàng)建的閉路字幕?;蛘摺獙τ谡Z言翻譯訓練—人們可能會使用存在于不同語言中的網頁或其他文檔的平行版本。
你需要展示多少數據給神經網絡來訓練它完成特定任務?再次強調,從第一原則出發(fā)很難估計。當然,通過使用“遷移學習”將已經在另一個網絡中學習過的重要特征列表等內容“遷入”,可以大大減少需求量。但通常神經網絡需要“看到很多例子”才能訓練良好。對于一些任務來說,神經網絡傳統(tǒng)知識中的一個重要部分是例子可能會非常重復。事實上,一個標準策略就是反復向神經網絡展示所有已有的例子。在每個“訓練輪次”(或“時代”)中,神經網絡至少會處于稍微不同的狀態(tài),某種程度上“提醒它”某個特定例子對于讓它“記住那個例子”是有用的。(是的,也許這類似于人類記憶中重復的有用性。)
但通常僅僅反復展示同一個例子是不夠的。還需要展示例子的變化給神經網絡。神經網絡傳統(tǒng)知識中的一個特點是,這些“數據增強”變化并不需要很復雜就能起到作用。只需用基本圖像處理稍微修改圖像,就可以使它們在神經網絡訓練中基本“一樣好”。同樣地,當用于自動駕駛汽車的實際視頻等訓練數據用盡時,可以繼續(xù)在模擬類似視頻游戲環(huán)境中運行模擬,并從中獲取數據,而無需所有實際現實場景的細節(jié)。
那么像 ChatGPT 這樣的東西呢?它有一個很好的特點,即可以進行“無監(jiān)督學習”,這樣更容易為其提供訓練例子?;叵胍幌拢珻hatGPT 的基本任務是找出如何繼續(xù)給定的一段文本。因此,要獲得“訓練例子”,我們只需獲取一段文本,將其末尾遮蓋,然后將其用作“訓練輸入”,而“輸出”則是完整的、未遮蓋的文本。我們稍后會更詳細地討論這一點,但主要觀點是,與學習圖像內容不同,ChatGPT 不需要“顯式標記”;它實際上可以直接從給定的文本例子中學習。
那么,在神經網絡中的實際學習過程是怎樣的呢?最終,一切都是關于確定哪些權重能最好地捕捉已給出的訓練示例。有各種詳細的選擇和“超參數設置”(所謂的因為權重可以被視為“參數”)可以用來調整如何完成這項工作。有不同的損失函數選擇(平方和、絕對值和等)。有不同的損失最小化方法(在每一步中在權重空間中移動多遠等)。然后還有諸如展示多大“批量”示例以獲得每個連續(xù)估計的損失等問題。是的,人們可以應用機器學習(例如我們在 Wolfram 語言中所做的)來自動化機器學習,并自動設置諸如超參數之類的事物。
但最終,整個訓練過程可以通過觀察損失如何逐漸減少來描述(如在這個Wolfram 語言小訓練進度監(jiān)視器中):
通常情況下,人們會看到損失在一段時間內減少,但最終會在某個固定值上趨于平緩。如果該值足夠小,則可以認為訓練是成功的;否則,這可能是需要嘗試改變網絡架構的跡象。
一個人能否判斷“學習曲線”何時趨于平緩?就像許多其他事情一樣,似乎存在依賴于所使用的神經網絡大小和數據量的近似冪律縮放關系。但總的結論是,訓練神經網絡很困難,需要大量的計算工作。作為一個實際問題,其中絕大部分工作是在數字數組上進行操作,這正是 GPU 擅長的——這就是為什么神經網絡訓練通常受到 GPU 可用性的限制。
未來,是否會有根本更好的方法來訓練神經網絡,或者一般來說做神經網絡所做的事情?我?guī)缀蹩梢钥隙ǎ堑?。神經網絡的基本思想是利用大量簡單(基本上相同)的組件創(chuàng)建一個靈活的“計算結構”,并使這個“結構”能夠逐步修改以從示例中學習。在當前的神經網絡中,基本上是使用微積分的思想——應用于實數——來進行這種逐步修改。但越來越清楚的是,高精度的數字并不重要;即使使用當前的方法,8 位或更少可能足夠。
使用細胞自動機等計算系統(tǒng)基本上在許多個體位上并行運行,從來沒有清楚過如何進行這種漸進式修改,但沒有理由認為這是不可能的。 事實上,就像“2012 年的深度學習突破”一樣,也許在更復雜的情況下,這種漸進式修改實際上會比簡單情況更容易。
神經網絡——或許有點像大腦——被設置為具有基本固定的神經元網絡,修改的是它們之間連接的強度(“權重”)。 (也許至少在年輕的大腦中,完全新的連接也可以增長。)但是,雖然這對生物學來說可能是一個方便的設置,但目前還不清楚這是否接近我們需要實現功能的最佳方式。 而且,涉及到類似于漸進式網絡重寫的東西(也許讓人想起我們的物理項目)最終可能會更好。
但即使在現有神經網絡框架內,目前存在一個關鍵限制:神經網絡訓練目前是基本上順序進行的,每批示例的影響被傳播回來更新權重。 而且,即使考慮到 GPU,當前計算機硬件——在訓練過程中,大部分神經網絡大部分時間都是“空閑”的,只有一部分在更新。 從某種意義上說,這是因為我們當前的計算機往往具有與其 CPU(或 GPU)分開的內存。 但在大腦中,這可能是不同的——每個“記憶元素”(即神經元)也可能是一個潛在的活躍計算元素。 如果我們能夠這樣設置未來的計算機硬件,可能會更有效地進行訓練。
“當然,足夠大的網絡可以做任何事情!”
像 ChatGPT 這樣的東西的能力看起來非常令人印象深刻,以至于人們可能會想象,如果能夠“繼續(xù)下去”并訓練越來越大的神經網絡,那么它們最終將能夠“做任何事情”。 如果一個人關心的是那些對立即人類思維可獲得的事物,那么這種情況很可能是真實的。 但是過去幾百年科學的教訓是,有些事情可以通過正式過程找出,但并不容易立即被人類思維所理解。
非平凡數學就是一個很好的例子。但一般情況下,真正的問題是計算。最終問題在于計算不可簡化性現象。有些計算可能需要很多步驟才能完成,但實際上可以“簡化”為相當直接的事情。但計算不可簡化性的發(fā)現意味著這并不總是奏效。相反,有一些過程——可能類似于下面的過程——需要基本上追蹤每個計算步驟才能弄清楚發(fā)生了什么:
我們通常用大腦做的事情可能是特意選擇的,以避免計算不可簡化性。在大腦中進行數學運算需要特殊的努力。而在大腦中“思考”任何非平凡程序的運行步驟在實踐中幾乎是不可能的。
當然,我們有計算機。有了計算機,我們可以輕松地進行長時間的、計算不可簡化的事情。關鍵在于,通常沒有這方面的捷徑。
是的,我們可以記住許多特定計算系統(tǒng)中發(fā)生的事例。也許我們甚至能看到一些(“計算可簡化的”)模式,使我們能夠進行一些泛化。但關鍵在于,計算不可簡化性意味著我們永遠無法保證不會發(fā)生意外——只有通過明確進行計算,你才能知道在任何特定情況下實際發(fā)生了什么。
最終,學習能力和計算不可簡化性之間存在根本的張力。學習實際上涉及通過利用規(guī)律來壓縮數據。但計算不可簡化性意味著最終存在著規(guī)律性的限制。
作為一個實際問題,人們可以想象將小型計算設備——比如細胞自動機或圖靈機——構建到像神經網絡這樣的可訓練系統(tǒng)中。實際上,這樣的設備可以作為神經網絡的良好“工具”——就像Wolfram|Alpha 可以成為 ChatGPT 的好工具。但是計算不可簡化性意味著我們不能指望“進入”這些設備并讓它們學習。
或者換個說法,能力和可訓練性之間存在著最終的權衡:你希望系統(tǒng)充分利用其計算能力,它就會展現出計算不可簡化性,而可訓練性就會降低。而基本上可訓練性越強,它就越無法進行復雜的計算。
(對于當前的 ChatGPT 系統(tǒng)來說,情況實際上更加極端,因為用于生成每個輸出標記的神經網絡是一個純“前饋”網絡,沒有循環(huán),因此無法進行任何具有非平凡“控制流”計算。)
當然,人們可能會想知道是否能夠進行不可約計算實際上很重要。事實上,在人類歷史的大部分時間里,這并不特別重要。但我們現代的技術世界是建立在至少利用數學計算的工程基礎上的,而且越來越多地也利用更一般的計算。如果我們看看自然界,它充滿了不可約計算——我們正在逐漸理解如何模擬并利用它們來實現我們的技術目的。
是的,神經網絡當然可以注意到自然界中我們可能也可以輕松注意到的“無輔助人類思維”中的規(guī)律。但是,如果我們想解決數學或計算科學范圍內的問題,神經網絡是做不到的——除非它有效地“作為工具”使用一個“普通”的計算系統(tǒng)。
但所有這些可能會讓人感到困惑。過去有很多任務,包括寫文章,我們認為計算機在某種程度上“基本上太難了”。現在我們看到像 ChatGPT 這樣的系統(tǒng)完成這些任務,我們突然認為計算機必須變得更加強大——特別是超越了它們已經基本能夠做到的事情(比如逐步計算細胞自動機等計算系統(tǒng)的行為)。
但這并不是正確的結論。計算上不可約的過程仍然是計算上不可約的,對于計算機來說仍然是基本困難的,即使計算機可以輕松計算它們的各個步驟。我們應該得出的結論是,我們人類可以做到的任務,比如寫文章,我們以前認為計算機無法做到,實際上在某種意義上比我們想象的要容易一些。
換句話說,神經網絡能夠成功地寫一篇文章的原因是因為寫一篇文章事實上是一個比我們想象的“計算上更淺”的問題。在某種意義上,這使我們更接近于“擁有一個理論”,解釋我們人類如何做到像寫文章這樣的事情,或者一般地處理語言。
如果你有一個足夠大的神經網絡,那么,是的,你可能能夠做任何人類可以輕松做到的事情。但你不會捕捉到自然界一般可以做到的事情——或者我們從自然界中制造的工具可以做到的事情。正是這些工具的使用——無論是實際的還是概念上的——在近幾個世紀里使我們超越了“純粹無助的人類思維”所能接觸到的邊界,并為人類目的捕捉到更多物理和計算宇宙中的東西。
嵌入的概念
神經網絡——至少在它們當前的設置中——基本上是基于數字的。因此,如果我們要用它們來處理類似文本這樣的東西,我們需要一種方法來用數字來表示我們的文本。當然,我們可以開始(基本上就像 ChatGPT 一樣)只是給字典中的每個單詞分配一個數字。但有一個重要的想法——比如 ChatGPT 中的核心想法——超越了這一點。這就是“嵌入”的概念。人們可以將嵌入看作是一種嘗試用一系列數字來表示某物的“本質”的方式,具有“附近的事物”由附近的數字表示的屬性。
因此,例如,我們可以將單詞嵌入視為試圖在一種“意義空間”中展示單詞,在這個空間中,某種程度上“意義相近”的單詞會在嵌入中附近出現。實際使用的嵌入——比如在 ChatGPT 中——往往涉及大量的數字列表。但如果我們投影到 2D,我們可以展示單詞如何被嵌入布局:
是的,我們看到的確實很好地捕捉了典型的日常印象。但是我們如何構建這樣的嵌入呢?大致的想法是查看大量文本(這里是來自網絡的 50 億個單詞),然后看看不同單詞出現在其中的“環(huán)境”有多相似。因此,例如,“鱷魚”和“鱷魚”通常會幾乎可以互換地出現在其他類似的句子中,這意味著它們會在嵌入中附近放置。但“蘿卜”和“老鷹”不太可能出現在其他類似的句子中,因此它們會在嵌入中遠離放置。
但是,如何使用神經網絡實際實現這樣的東西呢?讓我們首先討論不是針對單詞而是針對圖像的嵌入。我們希望找到一種方法,以列表的數字來表征圖像,這樣“我們認為相似的圖像”被分配相似的數字列表。
我們如何判斷是否應該“認為圖像相似”呢?嗯,如果我們的圖像是手寫數字,我們可能會“認為兩個圖像相似”如果它們是相同的數字。早些時候,我們討論過一個訓練用于識別手寫數字的神經網絡。我們可以將這個神經網絡看作是設置成在最終輸出中將圖像放入 10 個不同的箱子中,每個箱子代表一個數字。
但是如果我們在最終“這是一個‘4’”決定被做出之前“攔截”神經網絡內部發(fā)生的事情呢?我們可能期望在神經網絡內部有一些數字,用來表征圖像“大部分像 4 但有點像 2”之類的特征。這個想法是挑選這樣的數字用作嵌入的元素。
所以這里是概念。我們不是直接試圖表征“哪個圖像靠近哪個圖像”,而是考慮一個明確定義的任務(在這種情況下是數字識別),我們可以獲得明確的訓練數據,然后利用這個事實,神經網絡在執(zhí)行這個任務時隱含地必須做出“接近決策”。因此,我們不需要明確討論“圖像的接近程度”,我們只是在討論圖像代表什么數字這個具體問題,然后“交給神經網絡”隱含地確定這對“圖像的接近程度”意味著什么。
那么這種方法在數字識別網絡中是如何更詳細地工作的呢?我們可以將網絡看作由 11 個連續(xù)層組成,我們可以用這種方式圖標化地總結(激活函數顯示為單獨的層):
在開始時,我們將實際圖像(由像素值的 2D 數組表示)輸入到第一層中。而在最后一層,我們得到一個包含 10 個值的數組,我們可以認為這個數組表示網絡對圖像與數字 0 到 9 的對應關系的“確定程度”。
輸入圖像 ,那最后一層神經元的值是:
換句話說,到這一點,神經網絡“非常確定”這個圖像是一個 4—為了實際得到輸出“4”,我們只需挑選出具有最大值的神經元的位置。
但如果我們再往前看一步呢?網絡中的最后一個操作是所謂的softmax,它試圖“強制確定性”。但在應用之前,神經元的值是:
代表“4”的神經元仍然具有最高的數值。但其他神經元的值也包含信息。我們可以期望這些數字列表在某種意義上可以用來表征圖像的“本質”,從而提供我們可以用作嵌入的東西。因此,例如,這里的每個 4 都有略微不同的“簽名”(或“特征嵌入”)—都與 8 完全不同:
這里我們基本上使用 10 個數字來描述我們的圖像。但通常最好使用更多的數字。例如,在我們的數字識別網絡中,我們可以通過訪問前一層獲得一個包含 500 個數字的數組。這可能是一個合理的“圖像嵌入”數組。
如果我們想要對手寫數字的“圖像空間”進行明確的可視化,我們需要“降低維度”,有效地將我們得到的 500 維向量投影到,比如,3D 空間中:
我們剛剛討論了基于識別圖像相似性有效地創(chuàng)建圖像的表征(從而嵌入)的內容,通過確定(根據我們的訓練集)它們是否對應于相同的手寫數字。如果我們有一個訓練集,可以更一般地對圖像執(zhí)行相同的操作,識別出每個圖像屬于哪種 5000 種常見對象(貓、狗、椅子,…)。通過這種方式,我們可以創(chuàng)建一個由我們對常見對象的識別“錨定”的圖像嵌入,但然后根據神經網絡的行為“泛化”。關鍵在于,只要這種行為與我們人類感知和解釋圖像的方式一致,這將最終成為一個對我們“看起來正確”的嵌入,并且在實踐中對執(zhí)行“類似人類判斷”的任務非常有用。
好的,那么我們如何遵循相同的方法來為單詞找到嵌入?關鍵是從一個關于單詞的任務開始,我們可以很容易進行訓練。標準的這種任務是“單詞預測”。想象一下,我們得到了“the ___ cat”。根據大量文本語料庫(比如,網絡的文本內容),不同可能“填空”的單詞的概率是多少?或者,另一種情況是,給定“___ black ___”,不同“兩側單詞”的概率是多少?
我們如何為神經網絡設置這個問題?最終,我們必須用數字來表達一切。一種方法就是為英語中的大約 50,000 個常見單詞中的每一個分配一個唯一的數字。因此,例如,“the” 可能是 914,而“cat”(前面帶有空格)可能是 3542。 (這些是 GPT-2 實際使用的數字。)因此,對于“the ___ cat”問題,我們的輸入可能是 {914, 3542}。輸出應該是什么樣的呢?嗯,它應該是一個包含大約 50,000 個數字的列表,有效地給出每個可能的“填充”單詞的概率。再一次,為了找到一個嵌入,我們希望在神經網絡“達成結論”之前“攔截”其“內部”,然后獲取出現在那里的數字列表,并且我們可以將其視為“表征每個單詞”。
好的,那么這些特征看起來是什么樣子的呢?在過去的 10 年里,已經開發(fā)了一系列不同的系統(tǒng)(word2vec,GloVe,BERT,GPT,…),每個系統(tǒng)都基于不同的神經網絡方法。但最終,它們都將單詞通過數百到數千個數字的列表來表征。
在它們的原始形式中,這些“嵌入向量”并不具有信息量。例如,這里是 GPT-2 為三個特定單詞生成的原始嵌入向量:
如果我們像測量這些向量之間的距離這樣的事情,那么我們可以找到詞語之間的“接近度”。稍后我們將更詳細地討論這些嵌入的“認知”意義。但現在的主要觀點是,我們有一種有用的方法,可以將單詞轉化為“神經網絡友好”的數字集合。
但實際上,我們可以進一步,不僅僅通過數字集合來表征單詞;我們也可以對單詞序列,甚至整個文本塊進行這樣的操作。在 ChatGPT 內部,它就是這樣處理事情的。它獲取到目前為止的文本,并生成一個嵌入向量來代表它。然后,它的目標是找到可能出現的下一個單詞的概率。它將其答案表示為一系列數字,這些數字基本上給出了大約 50,000 個可能單詞的概率。
(嚴格來說,ChatGPT 不處理單詞,而是處理“標記”—方便的語言單位,可能是整個單詞,也可能只是像“pre”或“ing”或“ized”這樣的部分。使用標記使 ChatGPT 更容易處理罕見、復合和非英語單詞,有時,好或壞,也更容易創(chuàng)造新單詞。)
在 ChatGPT 內部
好的,我們終于準備好討論 ChatGPT 內部的內容了。是的,最終,它是一個巨大的神經網絡—目前是一個擁有 1750 億個權重的所謂 GPT-3 網絡的版本。在許多方面,這是一個與我們討論過的其他神經網絡非常相似的神經網絡。但它是一個特別用于處理語言的神經網絡。它最顯著的特點是一種名為“transformer”的神經網絡架構。
在上面討論的第一個神經網絡中,每個神經元在任何給定層上基本上都與前一層的每個神經元連接(至少具有一定的權重)。但是,如果處理具有特定已知結構的數據,這種全連接網絡(據推測)可能是過度的。因此,例如,在處理圖像的早期階段,通常使用所謂的卷積神經網絡(“卷積網絡”),其中神經元實際上布置在類似于圖像中的像素的網格上,并且僅與網格上附近的神經元連接。
變壓器的理念是對構成一段文本的標記序列做出至少在某種程度上類似的事情。但是,變壓器不是僅僅定義一個固定區(qū)域,使得在該區(qū)域內可以建立連接,而是引入了“注意力”的概念——以及“更多地關注”序列的某些部分的想法。也許有一天,直接啟動一個通用神經網絡并通過訓練進行所有定制會有意義。但至少目前來看,在實踐中“模塊化”事物似乎至關重要——就像變壓器所做的,也可能是我們的大腦所做的。
好的,那么 ChatGPT(或者說,它基于的 GPT-3 網絡)實際上是做什么的呢?回想一下,它的總體目標是以“合理”的方式繼續(xù)文本,基于它從訓練中看到的內容(這包括查看來自網絡等的數十億頁文本)。因此,在任何給定時刻,它都有一定量的文本—它的目標是提出適當的選擇,以添加下一個標記。
它分為三個基本階段。首先,它獲取與迄今為止的文本相對應的標記序列,并找到代表這些標記的嵌入(即一組數字數組)。然后,它以“標準神經網絡方式”在這個嵌入上操作,數值“通過”網絡中的連續(xù)層產生一個新的嵌入(即一個新的數字數組)。然后,它取這個數組的最后部分,并從中生成大約 50,000 個值的數組,這些值轉化為不同可能的下一個標記的概率。(是的,碰巧使用的標記數量與英語中常用單詞的數量大致相同,盡管只有大約 3000 個標記是完整的單詞,其余是片段。)
一個關鍵點是,這個流水線的每個部分都由一個神經網絡實現,其權重由網絡的端到端訓練確定。換句話說,實際上除了整體架構之外,沒有任何部分是“明確設計”的;一切都只是從訓練數據中“學習”而來。
然而,架構設置中有很多細節(jié)—反映了各種經驗和神經網絡傳說。即使這顯然是深入細節(jié)了—我認為談論一些這些細節(jié)是有用的,至少可以讓人了解構建像 ChatGPT 這樣的東西需要付出多少努力。
首先是嵌入模塊。這里是 GPT-2 的 Wolfram 語言示意圖表示:
輸入是一個由n個標記組成的向量(如前一節(jié)中所示,由 1 到約 50,000 的整數表示)。這些標記中的每一個都被(通過單層神經網絡)轉換為一個嵌入向量(對于 GPT-2 為長度 768,對于 ChatGPT 的 GPT-3 為長度 12,288)。同時,還有一個“次要路徑”,它獲取標記的(整數)位置序列,并從這些整數創(chuàng)建另一個嵌入向量。最后,來自標記值和標記位置的嵌入向量被相加在一起 —生成來自嵌入模塊的最終嵌入向量序列。
為什么要將標記值和標記位置嵌入向量簡單相加?我認為這并沒有什么特別的科學依據。只是嘗試了各種不同的方法,這種方法似乎有效。而神經網絡的傳說部分是—在某種意義上—只要所擁有的設置“大致正確”,通??梢酝ㄟ^足夠的訓練來逐步細化細節(jié),而無需真正需要“在工程層面上理解”神經網絡是如何配置自己的。
這是嵌入模塊的操作,作用于字符串hello hello hello hello hello hello hello hello hello hello bye bye bye bye bye bye bye bye bye bye:
每個標記的嵌入向量的元素顯示在頁面下方,橫跨頁面我們首先看到一系列“hello”嵌入,然后是一系列“bye”嵌入。上面的第二個數組是位置嵌入—其看起來有些隨機的結構只是“學到的”(在這種情況下是 GPT-2)。
好的,所以在嵌入模塊之后是變壓器的“主要事件”:一系列所謂的“注意力塊”(GPT-2 有 12 個,ChatGPT 的 GPT-3 有 96 個)。這一切都相當復雜,讓人想起典型的難以理解的大型工程系統(tǒng),或者說生物系統(tǒng)。但無論如何,這里是 GPT-2 的單個“注意力塊”的示意圖表示:
在每個這樣的注意力塊中,有一組“注意力頭”(對于 GPT-2 有 12 個,對于 ChatGPT 的 GPT-3 有 96 個)——每個頭在嵌入向量中的不同值塊上獨立操作。 (是的,我們不知道為什么將嵌入向量分割開是個好主意,或者它的不同部分“意味著”什么;這只是那些“發(fā)現有效”的事情之一。)
好的,注意頭是做什么的?基本上,它們是一種“回顧”標記序列(即迄今為止生成的文本),并以對于找到下一個標記有用的形式“打包過去”。在上面的第一節(jié)中,我們討論了使用 2-gram 概率根據它們的直接前導詞選擇單詞。變壓器中的“注意力”機制所做的是允許“注意力”甚至更早的單詞——因此潛在地捕捉到動詞可以指代在句子中出現在它們之前許多單詞的名詞的方式。
在更詳細的層面上,注意頭所做的是重新組合與不同標記相關的嵌入向量中的塊,具有一定的權重。因此,例如,在第一個注意力塊中的 12 個注意力頭(在 GPT-2 中)對于上述“hello,bye”字符串的“回溯到標記序列開始”的“重新組合權重”模式如下:
在被注意力頭處理后,生成的“重新加權嵌入向量”(對于 GPT-2 長度為 768,對于 ChatGPT 的 GPT-3 長度為 12,288)通過一個標準的“全連接”神經網絡層。很難理解這一層在做什么。但這里是它使用的 768×768 權重矩陣的繪圖(這里是 GPT-2 的):
通過 64×64 的移動平均值,一些(類似隨機漫步的)結構開始顯現:
是什么決定了這種結構?最終,這可能是人類語言特征的某種“神經網絡編碼”。但目前,這些特征可能是相當未知的。實際上,我們正在“打開 ChatGPT 的大腦”(或至少是 GPT-2),發(fā)現,是的,里面很復雜,我們并不理解它——盡管最終它產生了可識別的人類語言。
好的,所以經過一個注意力塊后,我們得到了一個新的嵌入向量——然后依次通過額外的注意力塊傳遞(對于 GPT-2 共有 12 個;對于 GPT-3 共有 96 個)。每個注意力塊都有自己特定的“注意力”和“全連接”權重模式。這里是 GPT-2 中“hello, bye”輸入的第一個注意力頭的注意力權重序列:
這里是完全連接層的(移動平均)“矩陣”:
有趣的是,即使在不同的注意力塊中,這些“權重矩陣”看起來相似,權重大小的分布可能有所不同(并且并非總是高斯分布):
經過所有這些注意力塊后,變壓器的凈效果是什么?基本上是將一系列令牌的原始嵌入轉換為最終集合。而 ChatGPT 的特定工作方式是選擇這個集合中的最后一個嵌入,并對其進行“解碼”,以生成下一個應該出現的令牌的概率列表。
所以這就是 ChatGPT 內部的大致概況。這可能看起來很復雜(主要是因為其中許多不可避免的“工程選擇”有些隨意),但實際上所涉及的最終元素非常簡單。因為最終我們所處理的只是一個由“人工神經元”組成的神經網絡,每個神經元都執(zhí)行著將一組數字輸入進行簡單操作,然后與特定權重結合的操作。
ChatGPT 的原始輸入是一組數字數組(迄今為止令牌的嵌入向量),當 ChatGPT“運行”以生成一個新令牌時,這些數字只是“漣漪”通過神經網絡的各層,每個神經元“做自己的事情”并將結果傳遞給下一層的神經元。沒有循環(huán)或“回溯”。一切都只是通過網絡“前饋”。
這與典型的計算系統(tǒng)(如圖靈機)的設置非常不同,其中結果會被相同的計算元素重復“重新處理”。在這里——至少在生成給定輸出令牌時——每個計算元素(即神經元)只使用一次。
但在某種意義上,即使在 ChatGPT 中,仍然存在一個“外部循環(huán)”重復使用計算元素。因為當 ChatGPT 要生成一個新令牌時,它總是“讀取”(即將其作為輸入)之前出現的所有令牌序列,包括 ChatGPT 自己之前“寫入”的令牌。我們可以將這種設置看作是意味著 ChatGPT 至少在其最外層涉及一個“反饋循環(huán)”,盡管每次迭代都明確可見為出現在其生成文本中的令牌。
但讓我們回到 ChatGPT 的核心:被反復用來生成每個標記的神經網絡。在某種程度上,它非常簡單:一整套相同的人工神經元。網絡的一些部分只是由(“全連接”)層組成的神經元,在這些層中,給定層上的每個神經元都與前一層上的每個神經元連接(帶有一些權重)。但特別是在其變壓器架構中,ChatGPT 具有更多結構的部分,其中只有不同層上的特定神經元相連。 (當然,人們仍然可以說“所有神經元都相連”——但有些只是權重為零。)
此外,在 ChatGPT 中的神經網絡中有一些方面,并不是最自然地被認為只是由“同質”層組成。例如——正如上面的標志性摘要所示——在一個注意力塊內,有一些地方會“制作”傳入數據的“多個副本”,然后每個副本都會通過不同的“處理路徑”進行,可能涉及不同數量的層,只有在稍后才重新組合。但是雖然這可能是對正在發(fā)生的事情的一個方便的表示,但至少原則上總是可能想象“密集填充”層,只是有一些權重為零。
如果我們看一下通過 ChatGPT 的最長路徑,涉及到大約 400 個(核心)層——在某種程度上并不是一個巨大的數字。但是有數百萬個神經元——總共有 1750 億個連接,因此有 1750 億個權重。有一件事要意識到的是,每當 ChatGPT 生成一個新的標記時,它都必須進行一次涉及所有這些權重的計算。在實現上,這些計算可以在高度并行的數組操作中有些組織“按層”進行,這些操作可以方便地在 GPU 上完成。但是對于每個生成的標記,仍然必須進行 1750 億次計算(最后還要多一點)——所以,是的,生成一段長文本可能需要一段時間。
但最終,值得注意的是,所有這些操作——盡管它們各自都很簡單——卻可以一起完成如此出色的“類人”生成文本的工作。必須再次強調(至少就我們所知),沒有“終極理論原因”說明為什么類似這樣的東西會起作用。事實上,正如我們將討論的那樣,我認為我們必須將這視為一項——可能令人驚訝的——科學發(fā)現:在像 ChatGPT 這樣的神經網絡中,以某種方式能夠捕捉到人類大腦在生成語言方面所能做到的本質。
ChatGPT 的訓練
好了,現在我們已經概述了 ChatGPT 在設置后的工作原理。但是它是如何設置的呢?它的神經網絡中的所有那 1750 億個權重是如何確定的呢?基本上,它們是基于由人類撰寫的大量文本的巨大語料庫進行的大規(guī)模訓練的結果——在網絡上,書籍中等等。正如我們所說,即使考慮到所有這些訓練數據,神經網絡能夠成功產生“類似人類”的文本顯然并不明顯。而且,再次,似乎需要詳細的工程細節(jié)才能實現這一點。但是 ChatGPT 的大驚喜和發(fā)現是,這是可能的。實際上,一個“僅有”1750 億個權重的神經網絡可以制作出人類撰寫的“合理模型”文本。
在現代,有大量由人類撰寫的文本以數字形式存在。公共網絡上至少有數十億人類撰寫的頁面,總共可能有萬億字的文本。如果包括非公開網頁,數字可能至少大 100 倍。到目前為止,已經提供了超過 500 萬本數字化書籍(大約有 1 億本曾經出版的書籍),提供了另外約 1000 億字的文本。甚至沒有提到從視頻中的語音中衍生的文本。(作為個人比較,我一生中發(fā)表的總產出大約不到 300 萬字,過去30 年來我寫了約 1500 萬字的電子郵件,總共可能打了大約 5000 萬字,僅在過去幾年里我在直播中說了超過 1000 萬字。是的,我將從所有這些內容中訓練一個機器人。)
但是,好吧,考慮到所有這些數據,如何從中訓練神經網絡呢?基本過程與我們在上面的簡單示例中討論的非常相似。您提供一批示例,然后調整網絡中的權重,以最小化網絡在這些示例上產生的錯誤(“損失”)。關于從錯誤“反向傳播”的主要昂貴之處在于,每次執(zhí)行此操作時,網絡中的每個權重通常至少會發(fā)生微小變化,并且有很多權重需要處理。(實際的“反向計算”通常只比前向計算難一點點。)
使用現代 GPU 硬件,可以輕松并行計算成千上萬個示例的批次的結果。但是,當涉及實際更新神經網絡中的權重時,當前的方法要求基本上是逐批次進行的。(是的,這可能是實際大腦目前至少在架構上具有優(yōu)勢的地方,因為它們具有結合計算和存儲元素。)
即使在我們之前討論的學習數值函數的看似簡單的情況下,我們發(fā)現我們經常需要使用數百萬個示例才能成功地訓練一個網絡,至少是從頭開始。那么這意味著我們需要多少示例才能訓練一個“類似人類語言”的模型呢?似乎沒有任何基本的“理論”方法可以知道。但實際上,ChatGPT 成功地在數千億字的文本上進行了訓練。
它被喂入的文本有些是多次,有些是只有一次。但不知何故,它從看到的文本中“得到了所需的內容”。但考慮到這么多文本要學習,它需要多大的網絡才能“學得好”呢?同樣,我們還沒有一個基本的理論方法來說。最終——正如我們將在下面進一步討論的那樣——人類語言和人類通常用它說的內容可能存在一定的“總算法內容”。但接下來的問題是神經網絡在基于該算法內容的模型上實現時會有多有效率。同樣,我們不知道——盡管 ChatGPT 的成功表明它是相當有效率的。
最后我們可以注意到,ChatGPT 使用了數千億個權重來完成它的任務——與它所接收的訓練數據的總詞數(或標記)相當。在某種程度上,也許令人驚訝的是(盡管在 ChatGPT 的較小模擬中也經驗觀察到),似乎“工作良好的網絡大小”與“訓練數據大小”是如此相近。畢竟,ChatGPT 內部肯定不是以某種方式“直接存儲”所有來自網絡、書籍等的文本。因為實際上 ChatGPT 內部是一堆數字——精度略低于 10 位數——這些數字是對所有文本的總體結構的某種分布式編碼。
換句話說,我們可以問一下人類語言的“有效信息內容”是什么,以及通常用它說了些什么。有語言示例的原始語料庫。然后是 ChatGPT 神經網絡中的表示。這種表示很可能遠離“算法上最小”表示(如下面我們將討論的)。但這是一個神經網絡可以輕松使用的表示。在這種表示中,訓練數據似乎最終沒有太多的“壓縮”;平均來看,基本上只需要不到一個神經網絡權重來攜帶一個訓練數據中的單詞的“信息內容”。
當我們運行 ChatGPT 生成文本時,基本上是必須使用每個權重一次。因此,如果有n個權重,我們需要大約n個計算步驟來完成——盡管在實踐中,許多計算步驟通??梢栽?GPU 中并行執(zhí)行。但是,如果我們需要大約n個單詞的訓練數據來設置這些權重,那么根據我們上面所說的,我們可以得出結論,我們將需要大約n2個計算步驟來進行網絡的訓練——這就是為什么,使用當前的方法,人們最終需要談論數十億美元的培訓工作。
超越基礎訓練
訓練 ChatGPT 的大部分工作都花在“展示”大量來自網絡、書籍等現有文本的過程中。但事實證明,還有另一個——顯然相當重要的——部分。
一旦 ChatGPT 從它展示的原始文本語料庫中完成了“原始訓練”,內部的神經網絡就準備好開始生成自己的文本,繼續(xù)從提示中生成等等。但是,盡管這些結果通??雌饋砗侠恚鼈兺貏e是對于較長的文本——會以一種相當不像人類的方式“偏離”。這不是通過對文本進行傳統(tǒng)統(tǒng)計分析就能輕易檢測到的事情。但實際閱讀文本的人很容易注意到這一點。
ChatGPT 構建中的一個關鍵思想是在“被動閱讀”諸如網絡之類的內容之后再進行另一步:讓實際人類積極與 ChatGPT 互動,看看它產生了什么,實際上給予它“如何成為一個好的聊天機器人”的反饋。但神經網絡如何利用這些反饋呢?第一步只是讓人類評價神經網絡的結果。然后建立另一個神經網絡模型,試圖預測這些評分。但現在這個預測模型可以運行——本質上像一個損失函數——在原始網絡上,實際上允許該網絡通過給出的人類反饋進行“調整”。實踐中的結果似乎對系統(tǒng)成功產生“類似人類”的輸出有很大影響。
一般來說,有趣的是,“最初訓練”的網絡似乎需要很少的“刺激”就能讓它有目的地前進。人們可能會認為,為了讓網絡表現得好像“學到了新東西”,就必須進入并運行訓練算法,調整權重等等。
但事實并非如此。相反,似乎只需基本告訴 ChatGPT 一次——作為您給出的提示的一部分——然后它在生成文本時就能成功利用您告訴它的內容。而且再次,這種方法奏效的事實,我認為,是理解 ChatGPT“真正做了什么”以及它與人類語言和思維結構之間關系的重要線索。
這個確實有點像人類:至少在經過所有的預訓練之后,你只需告訴它一次,它就能“記住”——至少“足夠長時間”以生成一段文本。那么在這種情況下到底發(fā)生了什么呢?可能是“你可能告訴它的一切都已經在那里某個地方了”——你只是引導它到正確的位置。但這似乎不太可能。相反,更有可能的是,是的,元素已經在那里了,但具體內容由類似于“這些元素之間的軌跡”之類的東西定義,當你告訴它時,你引入的就是這個。
而且,就像對于人類一樣,如果你告訴它一些奇怪和意想不到的完全不符合它已知框架的東西,它似乎無法成功地“整合”這些信息。只有當它基本上是在已有框架的基礎上以一種相當簡單的方式運行時,它才能“整合”它。
還值得再次指出,神經網絡能夠“捕捉”的內容不可避免地存在“算法限制”。告訴它“這個轉換為那個”等形式的“淺層”規(guī)則,神經網絡很可能能夠很好地表示和復制這些規(guī)則——實際上,它從語言中“已知的”將給它一個立即要遵循的模式。但是,嘗試為涉及許多潛在計算不可簡化步驟的實際“深層”計算提供規(guī)則,它就無法工作了。(請記住,在每一步中,它總是在其網絡中“向前傳遞數據”,除了生成新的標記外,永遠不會循環(huán)。)
當然,網絡可以學習特定“不可簡化”計算的答案。但是一旦存在組合數量的可能性,這種“查表式”方法就行不通了。因此,是的,就像人類一樣,現在是神經網絡“伸手”并使用實際計算工具的時候了。(而且,是的,Wolfram|Alpha 和 Wolfram Language 是獨特合適的,因為它們被構建為“談論世界中的事物”,就像語言模型神經網絡一樣。)
到底是什么讓 ChatGPT 起作用?
人類語言——以及生成它所涉及的思維過程——一直似乎代表著一種復雜性的巔峰。事實上,人類大腦——其“僅僅”擁有大約 1000 億個神經元(也許有 100 萬億個連接)的網絡——能夠負責這一切似乎有些令人驚訝。也許,人們可能會想象,大腦除了神經元網絡之外還有一些未被發(fā)現的物理新層面。但現在有了 ChatGPT,我們獲得了一項重要的新信息:我們知道,一個純粹的人工神經網絡,具有與大腦神經元數量相當的連接數,能夠出奇地成功地生成人類語言。
是的,這仍然是一個龐大且復雜的系統(tǒng)——大約有與當前世界上可用的文字數量相當的神經網絡權重。但在某種程度上,仍然很難相信語言的豐富性以及它所能談論的事物可以被封裝在這樣一個有限的系統(tǒng)中。部分原因無疑是由于無處不在的現象(最初在規(guī)則 30 的例子中首次顯現),即計算過程實際上可以大大放大系統(tǒng)的表面復雜性,即使它們的基本規(guī)則很簡單。但實際上,正如我們上面討論的那樣,ChatGPT 中使用的神經網絡往往是專門構建的,以限制這種現象及與之相關的計算不可簡化性,以便使它們的訓練更易于理解。
那么,像 ChatGPT 這樣的系統(tǒng)是如何在語言方面取得如此大的進展的呢?我認為,基本答案是,語言在某種基本層面上似乎比它看起來要簡單。這意味著,即使 ChatGPT 最終的神經網絡結構相對直接,它仍能成功地“捕捉到”人類語言及其背后的思維的本質。而且,在訓練過程中,ChatGPT 不知何故“隱含地發(fā)現”了使這一切成為可能的語言(和思維)中的規(guī)律性。
ChatGPT 的成功,我認為,為我們提供了一項基礎且重要的科學證據:它表明我們可以期待發(fā)現一些全新的“語言法則”——以及有效的“思維法則”。在 ChatGPT 中——作為一個神經網絡構建的系統(tǒng)——這些法則最多只是隱含的。但如果我們能夠以某種方式使這些法則明確化,就有潛力以更加直接、高效和透明的方式做到 ChatGPT 所做的那些事情。
但是,好吧,這些規(guī)則可能是什么樣的呢?最終它們必須給我們一些關于語言——以及我們用語言表達的東西——如何組合的指導。稍后我們將討論“查看 ChatGPT 內部”可能能夠給我們一些關于這一點的提示,以及我們從構建計算語言中所知的內容暗示了一條前進的道路。但首先讓我們討論兩個長期已知的類似于“語言規(guī)律”的例子——以及它們如何與 ChatGPT 的運作相關。
第一個是語言的語法。語言不只是一堆隨機的詞匯。相反,有(相當)明確的語法規(guī)則規(guī)定了不同類型的詞匯如何組合在一起:例如,在英語中,名詞可以由形容詞前置和動詞后置,但通常兩個名詞不能直接相鄰。這種語法結構可以(至少近似地)通過一組規(guī)則來捕捉,這些規(guī)則定義了如何組合“解析樹”:
ChatGPT 并沒有對這些規(guī)則有明確的“知識”。但在其訓練中,它以某種方式隱式“發(fā)現”了它們,然后似乎擅長遵循這些規(guī)則。那么這是如何運作的呢?從“宏觀”層面來看并不清楚。但為了獲得一些見解,也許看一個更簡單的例子會有幫助。
考慮一個由(’s 和)’s 序列組成的“語言”,其語法規(guī)定括號應始終保持平衡,如下所示的解析樹:
我們能訓練一個神經網絡生成“語法正確”的括號序列嗎?神經網絡中有各種處理序列的方法,但讓我們使用變壓器網絡,就像 ChatGPT 一樣。給定一個簡單的變壓器網絡,我們可以開始將語法正確的括號序列作為訓練樣本輸入。一個微妙之處(實際上也出現在 ChatGPT 生成人類語言的過程中)是,除了我們的“內容標記”(這里是“(”和“)”)之外,我們還必須包括一個“結束”標記,用于指示輸出不應繼續(xù)(即對于 ChatGPT,表示已經到達“故事的結尾”)。
如果我們設置一個只有一個注意力塊、8 個頭和長度為 128 的特征向量的變壓器網絡(ChatGPT 也使用長度為 128 的特征向量,但有 96 個注意力塊,每個塊有 96 個頭),那么似乎不可能讓它學習太多關于括號語言的知識。但是通過 2 個注意力塊,學習過程似乎會收斂——至少在提供了大約 1000 萬個例子之后(并且,與變壓器網絡一般情況一樣,提???更多的例子似乎只會降低其性能)。
因此,通過這個網絡,我們可以做類似于 ChatGPT 的事情,并詢問下一個標記應該是什么的概率——在一個括號序列中:
在第一種情況下,網絡“非常確定”序列不能在這里結束——這是好事,因為如果結束了,括號就會不平衡。然而,在第二種情況下,它“正確地認識到”序列可以在這里結束,盡管它也“指出”可以“重新開始”,放下一個“(”,可能會跟著一個“)”。但是,哎呀,即使經過了大約 40 萬個辛苦訓練的權重,它說下一個標記是“)”的概率為 15%——這是不正確的,因為這必然會導致括號不平衡。
如果我們要求網絡為逐漸變長的('s)序列提供最高概率的完成情況,我們會得到以下結果:
是的,直到一定長度,網絡表現得很好。但然后它開始失敗。這在像這樣的“精確”情況下與神經網絡(或者一般的機器學習)是一種相當典型的情況。人類“一眼就能解決的情況”神經網絡也能解決。但是需要做一些“更算法化”的情況(例如明確計算括號以查看它們是否關閉),神經網絡往往在某種程度上“計算上不夠深入”以可靠地執(zhí)行。 (順便說一句,即使是完整的當前 ChatGPT 在長序列中也很難正確匹配括號。)
那么這對像 ChatGPT 和英語這樣的語言的語法意味著什么呢?括號語言是“嚴肅的”—更像是一個“算法故事”。但在英語中,根據單詞的局部選擇和其他提示,能夠“猜測”在語法上什么樣的內容更合適,這更現實。而且,是的,神經網絡在這方面要好得多——盡管也許它可能會錯過一些“形式上正確”的情況,嗯,人類也可能會錯過。但主要觀點是,語言存在整體的句法結構——帶有所有這意味著的規(guī)律性——在某種意義上限制了神經網絡需要學習的“程度”。一個關鍵的“類似自然科學”的觀察是,像 ChatGPT 中的變壓器架構這樣的神經網絡似乎成功地學會了類似嵌套樹狀句法結構的語法結構,這種結構似乎存在于所有人類語言中(至少在某種程度上)。
語法對語言提供了一種約束。但顯然還有更多。像“好奇的電子吃藍色的理論來換取魚”這樣的句子在語法上是正確的,但不是人們通常會說的東西,如果 ChatGPT 生成了這樣的句子,也不會被認為是成功的——因為,嗯,根據其中的單詞的正常含義,它基本上是毫無意義的。
但是有沒有一種通用的方法來判斷一個句子是否有意義?對此并沒有傳統(tǒng)的整體理論。但可以將 ChatGPT 視為在通過來自網絡等地方的數十億(據推測有意義的)句子進行訓練后,隱含地“發(fā)展出了一個理論”。
這個理論可能是什么樣的?嗯,有一個微小的角落基本上已知了兩千年,那就是邏輯。當然,在亞里士多德發(fā)現它的三段論形式中,邏輯基本上是一種說法,即遵循某些模式的句子是合理的,而其他句子則不是。因此,例如,說“所有 X 都是 Y。這不是 Y,所以它不是 X”是合理的(如“所有魚都是藍色。這不是藍色,所以它不是魚?!保?。就像人們可以略帶幽默地想象亞里士多德通過大量修辭例子(“機器學習風格”)發(fā)現了三段論邏輯一樣,人們也可以想象在 ChatGPT 的訓練中,它將能夠通過查看網絡上的大量文本等內容“發(fā)現三段論邏輯”(是的,雖然因此可以期望 ChatGPT 生成包含基于三段論邏輯等內容的“正確推理”的文本,但當涉及更復雜的形式邏輯時情況就大不相同了——我認為可以期望它在括號匹配方面失敗的原因也會導致它在這里失?。?/p>
但除了邏輯這個狹窄的例子之外,如何系統(tǒng)地構建(或識別)甚至可能有意義的文本?是的,有像Mad Libs^(®)這樣使用非常具體的“短語模板”的東西。但不知何故,ChatGPT 隱含地有一種更通用的方法來做到這一點。也許除了“當你有 1750 億個神經網絡權重時,某種方式會發(fā)生”之外,我們無法說出如何做到這一點。但我強烈懷疑有一個更簡單更強大的故事。
意義空間和語義運動規(guī)律
我們之前討論過,在 ChatGPT 中,任何文本片段實際上都被一組數字表示,我們可以將其視為某種“語言特征空間”中某點的坐標。因此,當 ChatGPT 繼續(xù)一個文本片段時,這相當于在語言特征空間中描繪出一條軌跡。但現在我們可以問,是什么使得這條軌跡對應于我們認為有意義的文本。也許在語言特征空間中有一些“語義運動規(guī)律”,定義了——或者至少約束了——點在其中如何移動以保持“有意義性”?
那么這個語言特征空間是什么樣的?這里是一個示例,展示了如果我們將這樣一個特征空間投影到 2D 中,單詞(這里是常見名詞)可能會被布置的樣子:
我們在上面看到了另一個例子,基于代表植物和動物的單詞。但兩種情況的共同點是“語義相似的單詞”被放置在附近。
舉個例子,這里展示了不同詞性對應的單詞是如何排列的:
當然,一個給定的單詞通常不只有“一個含義”(或者不一定對應于一個詞性)。通過查看包含一個單詞的句子在特征空間中的排列方式,人們通常可以“區(qū)分出”不同的含義——就像這里對于“起重機”這個詞的例子一樣(鳥還是機器?):
好吧,至少可以認為我們可以將這個特征空間看作是將“意義相近的單詞”放在這個空間中靠近的地方。但在這個空間中我們能夠識別出什么樣的額外結構呢?例如,是否存在某種“平行傳輸”的概念,反映了空間中的“平坦性”?了解這一點的一種方法是看類比:
是的,即使我們投影到 2D,通常至少會有一些“平坦的跡象”,盡管這當然并非普遍可見。
那么軌跡呢?我們可以看看 ChatGPT 的提示在特征空間中遵循的軌跡,然后我們可以看看 ChatGPT 是如何繼續(xù)的:
這里顯然沒有“幾何上明顯的運動規(guī)律”。這一點一點也不令人驚訝;我們完全預期這將是一個相當復雜的故事。例如,即使存在“語義運動規(guī)律”,也不明顯會以何種嵌入(或者實際上以何種“變量”)最自然地陳述。
在上面的圖片中,我們展示了“軌跡”中的幾個步驟——在每一步中,我們選擇 ChatGPT 認為最有可能的單詞(“零溫度”情況)。但我們也可以詢問在給定點上下一個可能出現的單詞及其概率是什么:
在這種情況下,我們看到有一個“高概率詞”的“扇形”,在特征空間中似乎沿著一個更或多或少明確的方向前進。如果我們繼續(xù)前進會發(fā)生什么?以下是我們“沿著”軌跡“移動”時出現的連續(xù)“扇形”:
這是一個 3D 表示,共進行了 40 步:
是的,這看起來像一團亂麻,并且并沒有特別鼓勵人們期望通過經驗研究“ChatGPT 內部正在做什么”來確定“類似數學物理的”“語義運動定律”。但也許我們只是在看“錯誤的變量”(或錯誤的坐標系),如果我們只看正確的變量,我們會立刻看到 ChatGPT 正在做一些“數學物理簡單”的事情,比如遵循測地線。但目前,我們還沒有準備好從其“內部行為”中“經驗性地解碼”ChatGPT 已經“發(fā)現”有關人類語言“如何組合”的內容。
語義語法和計算語言的力量
產生“有意義的人類語言”需要什么?過去,我們可能認為這只能由人類大腦完成。但現在我們知道,ChatGPT 的神經網絡也可以相當體面地完成這項任務?;蛟S這已經是我們能達到的極限了,沒有更簡單、更易理解的方法可以實現。但我強烈懷疑 ChatGPT 的成功隱含地揭示了一個重要的“科學”事實:有關有意義的人類語言的結構和簡單性遠比我們所知道的要多,最終可能存在著描述如何組合這種語言的相當簡單的規(guī)則。
正如我們上面提到的,句法語法規(guī)定了詞語如何在人類語言中組合在一起,對應不同的詞類。但要處理意義,我們需要更進一步。如何做到這一點的一個版本是不僅考慮語言的句法語法,還要考慮語義語法。
就句法而言,我們識別諸如名詞和動詞之類的事物。但就語義而言,我們需要“更細微的分級”。因此,例如,我們可能識別“移動”的概念,以及“保持其獨立于位置的身份的對象”的概念。每個“語義概念”都有無數具體的例子。但就我們的語義語法而言,我們只需有一些基本規(guī)則,基本上說“對象”可以“移動”。關于這一切可能如何運作,有很多可以說的(其中一些我之前已經說過)。但在這里我只會滿足于簡單地提出一些邁向前進的潛在途徑。
值得一提的是,即使一句話在語義語法上完全沒問題,也不意味著它已經在實踐中實現(甚至可能無法實現)?!按笙笕ピ虑蚵眯小睙o疑會“通過”我們的語義語法,但它在我們實際的世界中肯定還沒有實現(至少目前還沒有)—盡管這絕對適用于虛構世界。
當我們開始談論“語義語法”時,我們很快就會問:“它的底層是什么?”它假設了什么“世界模型”?句法語法實際上只是關于從單詞構建語言。但語義語法必然涉及某種“世界模型”——一種作為“骨架”的東西,語言可以在其上層疊而成。
直到最近,我們可能會想象(人類)語言將是描述我們“世界模型”的唯一通用方式。幾個世紀前,開始對特定類型的事物進行形式化,特別是基于數學。但現在有了一種更通用的形式化方法:計算語言。
是的,這是我在四十多年的時間里的大項目(現在體現在Wolfram 語言中):開發(fā)一個精確的符號表示,可以盡可能廣泛地談論世界上的事物,以及我們關心的抽象事物。因此,例如,我們有關于城市、分子、圖像和神經網絡的符號表示,并且我們內置了關于如何計算這些事物的知識。
經過幾十年的工作,我們以這種方式涵蓋了許多領域。但在過去,我們并沒有特別處理“日常話語”。在“我買了兩磅蘋果”中,我們可以很容易地表示(并對其進行營養(yǎng)和其他計算)“兩磅蘋果”。但我們(還)沒有“我買了”這樣的符號表示。
這一切都與語義語法的概念有關,以及擁有一個通用的符號“構建工具包”來構建概念的目標,這將為我們提供關于什么可以與什么結合以及我們可能轉化為人類語言的“流動”規(guī)則。
但假設我們有了這種“符號話語語言”。我們可以開始做一些生成“局部有意義文本”的事情。但最終,我們可能會希望獲得更多“全局有意義”的結果——這意味著“計算”更多關于實際存在或發(fā)生在世界中的事物(或者在某個一致的虛構世界中)。
目前在 Wolfram 語言中,我們擁有大量關于各種事物的內置計算知識。但對于一個完整的符號性論述語言,我們將不得不構建關于世界一般事物的額外“演算法”:如果一個物體從 A 移動到 B,然后從 B 移動到 C,那么它就從 A 移動到 C,等等。
給定一個符號性論述語言,我們可以用它來做出“獨立的陳述”。但我們也可以用它來問世界問題,“Wolfram|Alpha 風格”?;蛘呶覀兛梢杂盟鼇黻愂鑫覀儭跋胍獙崿F的事情”,可能有一些外部執(zhí)行機制?;蛘呶覀兛梢杂盟鼇碜龀鰯嘌浴苍S是關于實際世界,或者是關于我們正在考慮的某個特定世界,無論是虛構的還是其他。
人類語言基本上是不精確的,至少因為它沒有與特定計算實現“捆綁”,其含義基本上僅由其用戶之間的“社會契約”定義。但計算語言,由于其本質,具有一定的基本精度——因為最終它指定的內容總是可以在計算機上“無歧義地執(zhí)行”。人類語言通??梢匀萑桃欢ǖ哪:?。(當我們說“行星”時,是否包括系外行星等?)但在計算語言中,我們必須準確清晰地表達我們所做的所有區(qū)分。
在構建計算語言中,通常方便利用普通人類語言來構建名稱。但它們在計算語言中的含義必須是精確的,可能或可能不涵蓋典型人類語言用法中的某些特定內涵。
如何確定適用于一般符號性論述語言的基本“本體論”?嗯,這并不容易。這也許是為什么自兩千多年前亞里士多德做出原始開端以來,這方面的工作很少有所進展。但今天我們對如何以計算方式思考世界有了如此多的了解,這確實有所幫助(而且從我們的物理項目和ruliad 的概念中得到“基本形而上學”也不會有害)。
但在 ChatGPT 的背景下,所有這些意味著什么呢?從其訓練中,ChatGPT 已經有效地“拼湊”了相當(相當令人印象深刻)數量的語義語法。但它的成功讓我們有理由認為,構建更完整的計算語言形式是可行的。與我們迄今為止對 ChatGPT 內部的了解不同,我們可以期望設計計算語言,使其對人類容易理解。
當我們談論語義語法時,我們可以將其類比為三段論邏輯。起初,三段論邏輯本質上是關于用人類語言表達的陳述的一系列規(guī)則。但是(是的,兩千年后)當形式邏輯被發(fā)展出來時,三段論邏輯的最初基本構造現在可以用來構建包括現代數字電路操作在內的巨大“形式塔”。因此,我們可以期待,更一般的語義語法也會如此。起初,它可能只能處理簡單模式,例如以文本形式表達。但是一旦建立了整個計算語言框架,我們可以期待它將被用于建立“廣義語義邏輯”的高塔,使我們能夠以精確和正式的方式處理以前從未可及的各種事物,除了通過人類語言的“地面層”以及其模糊性。
我們可以將計算語言的構建和語義語法視為一種代表事物的終極壓縮。因為它使我們能夠談論可能性的本質,而無需處理普通人類語言中存在的所有“措辭”。我們可以將 ChatGPT 的巨大優(yōu)勢視為有點類似:因為它也在某種意義上“深入研究”到了可以“以語義上有意義的方式組合語言”的程度,而不必擔心不同可能的措辭。
那么,如果我們將 ChatGPT 應用于基礎計算語言會發(fā)生什么?計算語言可以描述可能發(fā)生的事情。但可以添加的是“流行的”感覺,例如基于閱讀網絡上所有內容。但是,通過計算語言操作意味著像 ChatGPT 這樣的東西立即且根本地可以訪問潛在不可簡化計算的終極工具。這使得它不僅可以“生成合理的文本”,還可以期望解決關于該文本是否實際提出“正確”陳述的問題,或者它應該談論的內容。
那么…ChatGPT 在做什么,為什么有效?
ChatGPT 的基本概念在某種程度上相當簡單。從網絡、書籍等人類創(chuàng)作文本的大樣本開始。然后訓練神經網絡生成“類似于這樣”的文本。特別是,使其能夠從“提示”開始,然后繼續(xù)生成“與其訓練內容相似”的文本。
正如我們所看到的,ChatGPT 中的實際神經網絡由非常簡單的元素組成,盡管有數十億個。神經網絡的基本操作也非常簡單,基本上是將從生成的文本中派生的輸入“通過其元素一次”(沒有任何循環(huán)等)傳遞給每個新單詞(或單詞的一部分)。
但值得注意的,也是意想不到的是,這個過程可以產生成功地“類似于”網絡上或書籍中的文本。它不僅是連貫的人類語言,還“說出”了“遵循其提示”的內容,利用了它“閱讀”的內容。它并不總是說出“全局意義上有意義的”東西(或對應于正確計算)—因為(例如,沒有訪問“沃爾夫拉姆|阿爾法的計算超能力”),它只是根據在其訓練材料中的東西“聽起來像什么”來說出“聽起來正確”的東西。
ChatGPT 的具體工程使其非常引人注目。但最終(至少在它可以使用外部工具之前),ChatGPT 只是從其積累的“常識統(tǒng)計”中提取出一些“連貫的文本”。但令人驚訝的是結果多么類似于人類。正如我所討論的,這表明了至少在科學上非常重要的一點:人類語言(以及其背后的思維模式)在結構上比我們想象的要簡單和更“法則化”。ChatGPT 已經隱含地發(fā)現了這一點。但我們可能可以通過語義語法、計算語言等明確地揭示它。
ChatGPT 在生成文本方面的表現非常令人印象深刻,結果通常非常類似于我們人類會產生的結果。那么這是否意味著 ChatGPT 像大腦一樣工作?它的基礎人工神經網絡結構最終是根據對大腦的理想化建模的。當我們人類生成語言時,很可能許多方面的情況都非常相似。
當涉及培訓(又稱學習)時,大腦和當前計算機的不同“硬件”(以及可能一些未開發(fā)的算法思想)迫使 ChatGPT 使用一種可能相當不同(在某些方面遠不如大腦高效)的策略。還有另一點:與典型的算法計算甚至不同,ChatGPT 內部沒有“循環(huán)”或“在數據上重新計算”。這不可避免地限制了它的計算能力—即使與當前計算機相比,但絕對是相對于大腦。
不清楚如何“修復這個問題”并仍然保持以合理效率訓練系統(tǒng)的能力。但這樣做很可能會讓未來的 ChatGPT 能夠做更多“類似大腦的事情”。當然,大腦也有很多做得不太好的事情,特別是涉及到不可簡化計算的事情。對于這些,無論是大腦還是像 ChatGPT 這樣的東西都必須尋求“外部工具”—比如Wolfram Language。
但目前看到 ChatGPT 已經能夠做到的事情令人興奮。在某種程度上,它是一個很好的例子,說明大量簡單的計算元素可以做出令人驚訝和意想不到的事情。但它也可能提供了我們兩千年來最好的動力,來更好地理解人類語言的核心特征和原則,以及背后的思維過程。
謝謝
我已經關注神經網絡的發(fā)展大約 43 年了,在這段時間里我與許多人交流過關于它們的話題。其中—一些是很久以前的,一些是最近的,還有一些是跨越多年的—有:Giulio Alessandrini, Dario Amodei, Etienne Bernard, Taliesin Beynon, Sebastian Bodenstein, Greg Brockman, Jack Cowan, Pedro Domingos, Jesse Galef, Roger Germundsson, Robert Hecht-Nielsen, Geoff Hinton, John Hopfield, Yann LeCun, Jerry Lettvin, Jerome Louradour, Marvin Minsky, Eric Mjolsness, Cayden Pierce, Tomaso Poggio, Matteo Salvarezza, Terry Sejnowski, Oliver Selfridge, Gordon Shaw, Jonas Sj?berg, Ilya Sutskever, Gerry Tesauro 和 Timothee Verdier。在撰寫本文時,我特別要感謝 Giulio Alessandrini 和 Brad Klee 的幫助。
Wolfram|Alpha 作為將計算知識超能力帶入 ChatGPT 的途徑
ChatGPT 和 Wolfram|Alpha
當事情突然“奏效”時總是令人驚訝。2009 年我們與Wolfram|Alpha合作時發(fā)生了這種情況。2020 年我們的物理項目也是如此。現在,OpenAI的ChatGPT也是如此。
我已經追蹤神經網絡技術很長時間了(實際上大約 43 年)。即使在過去幾年里觀察到的發(fā)展,我發(fā)現 ChatGPT 的表現非常出色。最終,突然間,這是一個可以成功生成幾乎任何內容的系統(tǒng),非常類似于人類可能寫的內容。這令人印象深刻,也很有用。而且,正如我在其他地方討論的,我認為它的成功可能告訴我們一些關于人類思維本質的非?;镜氖虑?。
但是,雖然 ChatGPT 在自動執(zhí)行類似人類的重要任務方面取得了顯著成就,但并非所有有用的任務都是如此“類似人類”。其中一些更加正式和結構化。事實上,我們文明在過去幾個世紀中取得的偉大成就之一就是建立數學、精確科學——最重要的是現在的計算——的范式,并創(chuàng)造了一個與純人類思維所能實現的完全不同的能力之塔。
我自己多年來一直深度參與計算范式,致力于構建一種計算語言,以盡可能多地以形式符號方式表示世界上的事物。在這樣做的過程中,我的目標是構建一個可以“計算輔助”——并增強——我和其他人想要做的事情的系統(tǒng)。我像一個人類一樣思考事物。但我也可以立即調用Wolfram 語言和 Wolfram|Alpha,利用一種獨特的“計算超能力”,讓我做各種超越人類能力的事情。
這是一種非常強大的工作方式。重點是,這不僅對我們人類重要。對于類似人類的人工智能來說同樣重要,甚至更重要——立即賦予它們我們可以稱之為計算知識超能力,利用結構化計算和結構化知識的非人類力量。
我們剛剛開始探索這對 ChatGPT 意味著什么。但很明顯,可能會發(fā)生一些奇妙的事情。Wolfram|Alpha 與 ChatGPT 做的事情非常不同,方式也截然不同。但它們有一個共同的接口:自然語言。這意味著 ChatGPT 可以像人類一樣“與”Wolfram|Alpha 交流——Wolfram|Alpha 將從 ChatGPT 獲取的自然語言轉化為精確的符號計算語言,以便應用其計算知識能力。
數十年來,人們在思考人工智能方面存在著一種“統(tǒng)計方法”(像 ChatGPT 使用的那種)和“符號方法”(實際上是 Wolfram|Alpha 的起點)之間的二分法。但現在——多虧了 ChatGPT 的成功,以及我們在讓 Wolfram|Alpha 理解自然語言方面所做的所有工作——終于有機會將這兩者結合起來,創(chuàng)造出比任何一種方法都更強大的東西。
一個基本示例
在其核心,ChatGPT 是一個生成語言輸出的系統(tǒng),其“遵循”了網絡上和書籍以及其他訓練中使用的材料中存在的模式。值得注意的是,輸出的人類化程度是多么驚人,不僅僅是在小規(guī)模上,而且在整篇文章中都是如此。它有連貫的論點,引入了它學到的概念,往往以有趣和意想不到的方式。它產生的內容在語言層面上總是“統(tǒng)計上可信的”。但是——盡管最終結果令人印象深刻——這當然并不意味著它自信地提出的所有事實和計算都一定是正確的。這里有一個我剛剛注意到的例子(是的,ChatGPT 具有固有的內置隨機性,所以如果你嘗試這個,你可能不會得到相同的結果):
這聽起來相當令人信服。但事實證明這是錯誤的,因為 Wolfram|Alpha 可以告訴我們:
當然,公平地說,這正是 Wolfram|Alpha 擅長的事情:可以將其轉化為可以基于其結構化、策劃知識進行的精確計算。但有趣的是,人們可以考慮 Wolfram|Alpha 自動幫助 ChatGPT 完成這項任務。人們可以通過編程方式向 Wolfram|Alpha 提問(也可以使用web API,等等):
現在再次向 ChatGPT 提問這個問題,并附上這個結果:
ChatGPT 非常禮貌地接受了更正,如果你再次提出問題,它會給出正確的答案。顯然,處理與 Wolfram|Alpha 的來回可能有更簡潔的方式,但很高興看到即使這種非常直接的純自然語言方法基本上已經起作用。
但是 ChatGPT 為什么會在第一次就犯這個特定的錯誤呢?如果它在訓練中的某個地方(例如來自網絡)看到了芝加哥和東京之間的具體距離,它當然可以做對。但這是一個神經網絡可以輕松做到的泛化的情況——比如從許多城市之間的距離的例子中——這是不夠的;這里需要一個實際的計算算法。Wolfram|Alpha 處理事情的方式完全不同。它接受自然語言,然后——假設可能的話——將其轉換為精確的計算語言(即 Wolfram 語言),在這種情況下:
城市的坐標和計算它們之間距離的算法隨后成為 Wolfram 語言中內置的計算知識的一部分。是的,Wolfram 語言擁有大量內置的計算知識——這是我們數十年工作的結果,精心策劃了現在一個龐大的持續(xù)更新的數據量,實施(并經常發(fā)明)方法和模型和算法——并系統(tǒng)地建立了一個涵蓋一切的計算語言。
還有一些例子
ChatGPT 和 Wolfram|Alpha 的工作方式非常不同,具有非常不同的優(yōu)勢。但為了了解 ChatGPT 如何利用 Wolfram|Alpha 的優(yōu)勢,讓我們討論一些情況,在這些情況下,單獨 ChatGPT 并不能完全做對。ChatGPT 和人類一樣,經常在數學方面遇到困難。
這是一個有趣的、散文風格的回答。但實際結果是錯誤的:
但如果 ChatGPT“咨詢”Wolfram|Alpha,它當然能夠做對。讓我們嘗試一些稍微復雜的東西:
乍一看,這個結果看起來很棒,我會傾向于相信它。然而,事實證明,這是錯誤的,因為 Wolfram|Alpha 可以告訴我們:
而且,使用 ChatGPT 做數學作業(yè)(而不能請教 Wolfram|Alpha)可能是一個壞主意。它可以給出一個非常合理的答案:
但是,如果 ChatGPT 沒有“真正理解數學”,它基本上不可能可靠地得到正確答案。在這種情況下,答案再次是錯誤的:
盡管如此,ChatGPT 甚至可以編造一個看起來非常合理的“得出答案的方式”(并不是它真正“做到的方式”)。而且,相當迷人(也很有趣)的是,它給出的解釋與一個不理解數學的人可能犯的錯誤非常相似:
有各種各樣的情況會導致“不真正理解事物含義”帶來麻煩:
聽起來很有說服力。但是這是不正確的:
ChatGPT 似乎在某處正確地學到了這些基礎數據,但???并不“理解其含義”足以正確排列這些數字:
而且,可以想象找到一種方法來“修復這個特定的錯誤”。但關鍵是,像 ChatGPT 這樣基于生成語言的人工智能系統(tǒng)在需要進行結構化計算時并不適用。換句話說,要“修復”幾乎無限數量的“錯誤”才能彌補即使是 Wolfram|Alpha 的幾乎無限小的一部分所能實現的結構化方式。
而且“計算鏈”越復雜,你越可能需要借助 Wolfram|Alpha 來正確解決問題。在這里,ChatGPT 給出了一個相當混亂的答案:
而且,正如 Wolfram|Alpha 告訴我們的那樣,它的結論是不正確的(因為它在某種程度上已經“知道”):
每當涉及具體(例如數量化)數據,即使是相當原始的形式,很多時候往往更像是“Wolfram|Alpha 的故事”。以下是一個例子,靈感來自長期以來備受喜愛的 Wolfram|Alpha 測試查詢“土耳其有多少只火雞?”:
再次,這似乎(起初)完全合理,并且甚至引用了相關來源。然而,事實證明,這些數據基本上只是“憑空捏造”的:
不過,非常好的一點是,ChatGPT 可以輕松地“要求核實事實”:
現在將這些通過 Wolfram|Alpha API 進行處理:
現在我們可以要求 ChatGPT 修正其原始回答,注入這些數據(甚至以粗體顯示注入的位置):
當涉及實時(或位置等相關)數據或計算時,“注入事實”的能力尤為重要。ChatGPT 不會立即回答這個問題:
但這里有一些相關的 Wolfram|Alpha API 輸出:
如果我們將這些輸入到 ChatGPT 中,它將生成一個漂亮的“論文風格”結果:
有時,計算機和人類之間會有一些有趣的互動。以下是一個相當異想天開的問題,向 Wolfram|Alpha 提出的(甚至還會詢問您是否想要“軟冰淇淋”):
ChatGPT 起初對體積的概念有點困惑:
但后來似乎“意識到”那么多冰淇淋相當荒謬:
未來之路
機器學習是一種強大的方法,特別是在過去的十年中,它取得了一些顯著的成功——其中 ChatGPT 是最新的例子。圖像識別。語音轉文本。語言翻譯。在每一個案例中,以及許多其他案例中,都突破了一個門檻——通常是相當突然的。并且某些任務從“基本上不可能”變?yōu)椤盎旧峡尚小薄?/p>
但結果基本上永遠不會是“完美的”。也許有些事情有 95%的成功率。但無論如何努力,另外的 5%仍然難以捉摸。對于某些目的,人們可能認為這是一個失敗。但關鍵點在于,通常有各種重要的用例,對于這些用例,95%已經“足夠好”。也許是因為輸出是某種情況下根本沒有“正確答案”的東西。也許是因為人們只是試圖呈現一些可能性,然后由人類或系統(tǒng)算法選擇或完善。
完全值得注意的是,一個數百億參數的神經網絡,一次生成一個標記的文本,可以做 ChatGPT 可以做的事情。鑒于這種戲劇性的——以及意想不到的——成功,人們可能會認為,如果只是“訓練一個足夠大的網絡”,就能做任何事情。但事實并非如此。關于計算的基本事實——尤其是計算不可簡化的概念——清楚地表明最終是不可能的。但更重要的是我們在機器學習的實際歷史中看到的。會有一個重大突破(就像 ChatGPT)。改進不會停止。但更重要的是,會發(fā)現一些成功的用例,這些用例可以成功完成可以做的事情,而不會被不能做的事情所阻礙。
是的,會有很多情況下,“原始的 ChatGPT”可以幫助人們寫作,提供建議,或生成對各種文檔或互動有用的文本。但當涉及到必須完美的事情時,機器學習并不是解決問題的方法——就像人類也不是一樣。
正是我們在上面的例子中看到的。ChatGPT 在“類似人類的部分”表現出色,在那里沒有確切的“正確答案”。但當它被“置于困境”需要精確的東西時,它經常失敗。但這里的重點是有一個很好的方法來解決這個問題——將 ChatGPT 連接到 Wolfram|Alpha 及其所有計算知識“超能力”。
在 Wolfram|Alpha 內部,一切都被轉化為計算語言,并轉化為精確的 Wolfram 語言代碼,這在某種程度上必須是“完美的”才能可靠地發(fā)揮作用。但關鍵點在于 ChatGPT 不必生成這些。它可以生成其通常的自然語言,然后 Wolfram|Alpha 可以利用其自然語言理解能力將該自然語言翻譯為精確的 Wolfram 語言。
在許多方面,有人可能會說 ChatGPT 從未“真正理解”事物;它只是“知道如何生成有用的東西”。但對于 Wolfram|Alpha 來說情況就不同了。因為一旦 Wolfram|Alpha 將某事轉換為 Wolfram 語言,它所得到的是一個完整、精確、正式的表示,從中可以可靠地計算事物。不用說,有許多“人類感興趣的”事物,我們沒有正式的計算表示 —盡管我們仍然可以用自然語言談論它們,盡管可能不夠精確。對于這些事物,ChatGPT 就只能靠自己,憑借其非常出色的能力。
但就像我們人類一樣,有時候 ChatGPT 需要更正式和精確的“動力輔助”。但關鍵是它不必在表達自己想要的內容時“正式和精確”。因為 Wolfram|Alpha 可以用類似于 ChatGPT 的母語——自然語言與其交流。當它轉換為其母語——Wolfram 語言時,Wolfram|Alpha 會負責“添加形式和精確性”。我認為這是一個非常好的情況,具有巨大的實際潛力。
這種潛力不僅僅局限于典型的聊天機器人或文本生成應用程序。它延伸到諸如進行數據科學或其他形式的計算工作(或編程)等事物。在某種意義上,這是一種立即獲得兩全其美的方式:ChatGPT 的人類化世界和 Wolfram 語言的計算精確世界。
那么 ChatGPT 直接學習 Wolfram 語言呢?是的,它可以這樣做,事實上它已經開始了。最終,我完全期待類似 ChatGPT 的東西將能夠直接在 Wolfram 語言中運行,并且在這樣做時非常強大。這是一個有趣且獨特的情況,這是由于 Wolfram 語言的計算語言特性,它可以廣泛地用計算術語討論世界和其他地方的事物。
沃爾夫拉姆語言的整個概念是將我們人類所思考的事物,能夠以計算方式表示和處理。普通的編程語言旨在提供告訴計算機具體要做什么的方法。沃爾夫拉姆語言——作為一種全面的計算語言——涉及的范圍遠遠超出了這個。實際上,它旨在成為一種語言,人類和計算機都可以在其中“以計算方式思考”。
許多世紀以前,當數學符號被發(fā)明時,它首次提供了一個簡化的媒介,用于“數學思考”事物。它的發(fā)明很快導致了代數、微積分,最終導致了各種數學科學的產生。沃爾夫拉姆語言的目標是為計算思維做類似的事情,盡管現在不僅僅是為了人類,還為了啟用計算范式所能開啟的所有“計算 X”領域。
我自己從擁有沃爾夫拉姆語言作為“思考語言”中受益匪淺,過去幾十年來,通過人們通過沃爾夫拉姆語言“以計算方式思考”,取得了許多進展,這是令人欣喜的。那么,ChatGPT 呢?嗯,它也可以做到這一點。至于它將如何運作,我還不太確定。但這不是關于 ChatGPT 學習如何進行沃爾夫拉姆語言已經知道如何做的計算。這是關于 ChatGPT 學習如何像人類一樣使用沃爾夫拉姆語言。這是關于 ChatGPT 提出“創(chuàng)造性論文”的類比,但現在不是用自然語言而是用計算語言寫成。
我長期以來一直討論人類撰寫的計算性文章的概念——這些文章以自然語言和計算語言的混合形式進行交流?,F在的問題是 ChatGPT 能否寫出這些文章,并能夠使用沃爾夫拉姆語言作為傳遞“有意義溝通”的方式,不僅僅是對人類,還包括對計算機。是的,這里涉及到一個潛在有趣的反饋循環(huán),涉及到沃爾夫拉姆語言代碼的實際執(zhí)行。但關鍵點在于,沃爾夫拉姆語言代碼所代表的“思想”的豐富性和流暢性——與普通編程語言不同——更接近于 ChatGPT 在自然語言中“神奇地”成功處理的內容。
或者換個說法,沃爾夫拉姆語言——就像自然語言一樣——是足夠表達的,人們可以想象用它為 ChatGPT 編寫一個有意義的“提示”。是的,沃爾夫拉姆語言可以直接在計算機上執(zhí)行。但作為 ChatGPT 的提示,它可以用來“表達一個想法”,其“故事”可以繼續(xù)。它可能描述一些計算結構,讓 ChatGPT 來“即興創(chuàng)作”關于該結構的計算性描述,這將根據它通過閱讀人類寫的許多東西所學到的東西,對人類來說會是“有趣的”。
由于 ChatGPT 意外成功,突然打開了各種令人興奮的可能性。但目前有一個即時的機會,通過 Wolfram|Alpha 為 ChatGPT 賦予計算知識超能力。這樣它不僅可以產生“似乎合理的類人輸出”,而且可以利用 Wolfram|Alpha 和沃爾夫拉姆語言中封裝的整個計算和知識體系來輸出。
附加資源
“ChatGPT 在做什么……為什么有效?”
在線版本,可運行代碼
wolfr.am/SW-ChatGPT
“中學生的機器學習”(作者:斯蒂芬·沃爾夫)
對機器學習基本概念的簡短介紹
wolfr.am/ML-for-middle-schoolers
機器學習簡介(作者:埃蒂安·貝爾納)
一本關于現代機器學習的書籍指南,附有可運行的代碼
印刷版:wolfr.am/IML-book;在線版:wolfr.am/IML
沃爾夫機器學習
沃爾夫語言中的機器學習能力
wolfr.am/core-ML
沃爾夫 U 的機器學習
交互式的機器學習課程,適用于各種不同水平
wolfr.am/ML-courses
“我們應該如何與人工智能交流?”(作者:斯蒂芬·沃爾夫)
2015 年關于用自然語言和計算語言與人工智能交流的短文
wolfr.am/talk-AI
沃爾夫語言 wolfram.com/language
沃爾夫|阿爾法 wolframalpha.com文章來源:http://www.zghlxwxcb.cn/news/detail-844922.html
所有資源的在線鏈接:
wolfr.am/ChatGPT-resources文章來源地址http://www.zghlxwxcb.cn/news/detail-844922.html
到了這里,關于ChatGPT 在做什么,為什么有效?的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!