495-ChatGPT的工作原理分享_第1頁
495-ChatGPT的工作原理分享_第2頁
495-ChatGPT的工作原理分享_第3頁
495-ChatGPT的工作原理分享_第4頁
495-ChatGPT的工作原理分享_第5頁
已閱讀5頁,還剩113頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

ChatGPT能夠自動生成一些讀起來表面上甚至像人寫的文字的東西,這非常了不起,而且出乎意料。但它是如何做到的?為什么它能發(fā)揮作用?我在這里的目的是大致介紹一下ChatGPT內(nèi)部的情況,然后探討一下為什還沒使用過ChatGPT的伙伴可以點擊下面鏈接直接使用(不需要科學(xué)上網(wǎng)工具,后臺對接的是OpenAI和微軟的官方接口):https://chatgpt.zntjxt.c我首先要說明一下,我將把重點放在正在發(fā)生的事情的大的方向上,雖然我會提到一些工程細節(jié),但我不會深入研究它們。(我所說的實質(zhì)內(nèi)容也同樣適用于目前其他的“大型語言模型”LLM和ChatGPT)。首先要解釋的是,ChatGPT從根本上說總是試圖對它目前得到的任何文本進行“合理的延續(xù)”,這里的“合理”是指“在看到人們在數(shù)十億個網(wǎng)頁上所寫的東西之后,人們可能會期望某人寫出什么”。因此,假設(shè)我們已經(jīng)得到了“人工智能最好的是它能去做……”的文本(“ThebestthingaboutAIisitsabilityto”)。想象一下,掃描數(shù)十億頁的人類書寫的文本(例如在網(wǎng)絡(luò)上和數(shù)字化書籍中),并找到這個文本的所ChatGPT有效地做了類似的事情,除了(正如我將解釋的)它不看字面文本;它尋找在某種意義上“意義匹配”的東西。但最終的結(jié)果是,它產(chǎn)生了一個可能出現(xiàn)在后面的詞的排序列表,以及“概率”。值得注意的是,當(dāng)ChatGPT做一些事情,比如寫一篇文章時,它所做的基本上只是反復(fù)詢問“鑒于到目前為止的文本,下一個詞應(yīng)該是什么?”——而且每次都增加一個詞。(更準(zhǔn)確地說,正如我將解釋的那樣,它在添加一個“標(biāo)記”,這可能只是一個詞的一部分,這就是為什么它有時可以“編造新詞”)。在每一步,它得到一個帶有概率的單詞列表。但是,它究竟應(yīng)該選擇哪一個來添加到它正在寫的文章(或其他什么)中呢?人們可能認為它應(yīng)該是“排名最高”的詞(即被分配到最高“概率”的那個)。但是,這時就會有一點巫術(shù)開始悄悄出現(xiàn)。因為出于某種原因——也許有一天我們會有一個科學(xué)式的理解——如果我們總是挑選排名最高的詞,我們通常會得到一篇非?!捌降钡奈恼?似乎從來沒有“顯示出任何創(chuàng)造力”(甚至有時一字不差地重復(fù))。但是,如果有時(隨機的)我們挑選排名較低的詞,我們會得到一篇“更有趣”的文章。這里有隨機性的事實意味著,假如我們多次使用同一個提示,我們也很可能每次都得到不同的文章。而且,為了與巫術(shù)的想法保持一致,有一個特(temperatureparameter),它決定了以什么樣的頻率使用排名較低的詞,而對于論文的生成,事實證明,0.8的“溫度”似乎是最好的。(值得強調(diào)的是,這里沒有使用任何“理論”;這只是一個在實踐中被發(fā)現(xiàn)可行的問題)。例如,“溫度”的概念之所以存在,是因為恰好使用了統(tǒng)計物理學(xué)中熟悉的指數(shù)分布,但沒有“物理”聯(lián)系——至少到目前為止我們?nèi)绱苏J為。)在我們繼續(xù)之前,我應(yīng)該解釋一下,為了論述的目的,我大多不會使用ChatGPT中的完整系統(tǒng);相反,我通常會使用更簡單的GPT-2系統(tǒng),它有一個很好的特點,即它足夠小,可以在標(biāo)準(zhǔn)的臺式電腦上運行。因此,對于我展示的所有內(nèi)容,包括明確的沃爾弗拉姆語言(Language)代碼,你可以立即在你的計算機上運行。例如,這里是如何獲得上述概率表的。首先,我們必須檢索底層的“語言模型”神經(jīng)網(wǎng):稍后,我們將看看這個神經(jīng)網(wǎng)的內(nèi)部,并談?wù)勊侨绾喂ぷ鞯?。但現(xiàn)在我們可以把這個“網(wǎng)絡(luò)模型”作為一個黑匣子應(yīng)用于我們迄今為止的文本,并要求按概率計算出該模型認為應(yīng)該選擇的前五個詞:這就把這個結(jié)果變成了一個明確的格式化的如果重復(fù)“應(yīng)用模型”——在每一步中加入概率最高的詞(在此代碼中被指定為模型的“決定”),會發(fā)生什么:如果再繼續(xù)下去會發(fā)生什么?在這種情況下(“零溫度”),很快就會出現(xiàn)相當(dāng)混亂和重復(fù)的情況:但是,如果不總是挑選“頂級”詞,而是有時隨機挑選“非頂級”詞(機性”對應(yīng)“溫度”為0.8)呢?人們又可以建立起文本:而每次這樣做,都會有不同的隨機選擇,文本也會不同——如這5個例子:值得指出的是,即使在第一步,也有很多可能的“下一個詞”可供選擇(溫度為0.8),盡管它們的概率下降得很快(是的,這個對數(shù)圖上的直線對應(yīng)于n-1的“冪律”衰減,這是語言的一般統(tǒng)計的特點):那么,如果繼續(xù)下去會發(fā)生什么?這里有一個隨機的例子。它比頂層詞(零溫度)的情況要好,但頂多還是有點奇怪:這是用最簡單的GPT-2模型(來自2019年)做的。用較新和較大的GPT-3模型,結(jié)果更好。這里是用同樣的“提示”產(chǎn)生的頂部文字(零溫度),但用最大的GPT-3模型:這是“溫度為0.8”時的一個隨機例子:—1—概率從何而來?好吧,ChatGPT總是根據(jù)概率來選擇下一個詞。但是這些概率從何而來?讓我們從一個更簡單的問題開始。讓我們考慮一次生成一個字母(而不是單詞)的英語文本。我們怎樣才能算出每個字母的概率呢?我們可以做的一個非常簡單的事情就是取一個英語文本的樣本,然后計算不同字母在其中出現(xiàn)的頻率。因此,舉例來說,這是計算維基百科上關(guān)于“貓”(cat)的文章中的字母:(結(jié)果相似,但不一樣(“o”在“dogs”文章中無疑更常見,因為畢竟它出現(xiàn)在“dog”這個詞本身)。盡管如此,如果我們采取足夠大的英語文本樣本,我們可以期待最終得到至少是相當(dāng)一致的結(jié)果。下面是我們得到的一個樣本,如果我們用這些概率生成一個字母序列:我們可以通過添加空格將其分解為“單詞”,就像它們是具有一定概率的字母一樣:我們可以通過強迫“字長”的分布與英語中的分布相一致,在制造“單詞”方面做得稍微好一點:我們在這里沒有碰巧得到任何“實際的詞”,但結(jié)果看起來稍好一些。不過,要想更進一步,我們需要做的不僅僅是隨機地分別挑選每個字母。例如,我們知道,如果我們有一個“q”,下一個字母基本上必須是“u”:這里有一個字母本身的概率圖:這是一個顯示典型英語文本中成對字母(“2-grams”)概率的圖??赡艿牡谝粋€字母顯示在頁面上,第二個字母顯示在頁面下:例如,我們在這里看到,除了“u”行,“q”列是空白的(概率為零)。好了,現(xiàn)在我們不再是一次生成一個字母的“單詞”,而是使用這些“2-gram”概率,一次看兩個字母來生成它們。下面是一個結(jié)果的樣本——有了足夠多的英語文本,我們不僅可以對單個字母或成對字母(grams)的概率進行很好的估計,而且還可以對較長的字母進行估計。如果我們用逐漸變長的n-gram概率生成“隨機詞”,我們就會發(fā)現(xiàn)它們逐漸個單詞,而不是字母。英語中大約有40,000個合理的常用詞。通過查看大型英語文本語料庫(比如幾百萬本書,總共有幾千億個單詞),我們可以得到每個單詞的常見程度的估計。利用這一點,我們可以開始生成“句子”,其中每個詞都是獨立隨機抽取的,其出現(xiàn)的概率與語料庫中的相同。下面是我們得到的一個樣本:顯然,這是一派胡言。那么,我們?nèi)绾尾拍茏龅酶媚?就像對待字母一樣,我們可以開始考慮的不僅僅是單個詞的概率,還有成對的或更長的詞的n-grams的概率。在成對的情況下,以下是我們得到的5個例子,所有情況都是從“貓”這個詞開始的:它變得稍微“看起來很合理”了。我們可以想象,如果我們能夠使用足夠長的n-grams,我們基本上會“得到一個ChatGPT”——在這個意義上,我們會得到一些東西,以“正確的總體論文概率”生成論文長度的單詞序列。但問題是:沒有足夠的英文文本可以推導(dǎo)出這些概率。在網(wǎng)絡(luò)的抓取中,可能有幾千億個單詞;在已經(jīng)數(shù)字化的書籍中,可能有另外幾千億個單詞。但是有了4萬個常用詞,即使是可能的2-grams的數(shù)量也已經(jīng)是16億了,可能的3-grams的數(shù)量是60萬億。所以我們沒有辦法從現(xiàn)有的文本中估計出所有這些的概率。而當(dāng)我們達到20個字的“文章片段”時,可能性的數(shù)量比宇宙中的粒子數(shù)量還要多,所以從某種意義上說,它們永遠不可能全部被寫下來。那么我們能做什么呢?最大的想法是建立一個模型,讓我們估計序列出現(xiàn)(LLM),它的建立可—2—什么是模型?假設(shè)你想知道(就像伽利略在15世紀(jì)末所做的那樣),從比薩塔的每一層落下的炮彈要多長時間才能落地。那么,你可以在每一種情況下測量它,并將結(jié)果制成表格?;蛘吣憧梢宰隼碚摽茖W(xué)的精髓:建立一個模型,給出某種計算答案的程序,而不是僅僅測量和記住每個案例。讓我們想象一下,我們有(有點理想化的)數(shù)據(jù),說明炮彈從不同樓層落我們?nèi)绾斡嬎愠鏊鼜囊粋€我們沒有明確數(shù)據(jù)的樓層落下需要多長時間?在這種特殊情況下,我們可以用已知的物理學(xué)定律來計算。但是,如果說我們所得到的只是數(shù)據(jù),而我們不知道有什么基本定律在支配它。那么我們可以做一個數(shù)學(xué)上的猜測,比如說,也許我們應(yīng)該用一條直線作為模型。而根據(jù)這條直線,我們可以估算出任何樓層的下降時間。我們怎么知道要在這里嘗試使用一條直線呢?在某種程度上我們不知道。這只是數(shù)學(xué)上簡單的東西,而我們已經(jīng)習(xí)慣了這樣的事實:我們測量的很多數(shù)據(jù)都被數(shù)學(xué)上簡單的東西很好地擬合了。我們可以嘗試一些數(shù)學(xué)上更復(fù)雜的東西——比如說a+bx+cx2,然后在這種情況下,我們做得更好:不過,事情可能會出大問題。比如這里是我們用a+b/c+xsin(x)最多也就做成:值得理解的是,從來沒有一個“無模型的模型”。你使用的任何模型都有一些特定的基礎(chǔ)結(jié)構(gòu),然后有一組“你可以轉(zhuǎn)動的旋鈕”(即你可以設(shè)置的參數(shù))來適應(yīng)你的數(shù)據(jù)。而在ChatGPT的案例中,使用了很多這樣的“旋鈕”——實際上,有1750億個。但令人矚目的是,ChatGPT的底層結(jié)構(gòu)——“僅僅”有這么多的參數(shù)——足以使一個計算下一個單詞概率的模型“足夠好”,從而為我們提供合理—3—我們上面舉的例子涉及到為數(shù)字數(shù)據(jù)建立模型,這些數(shù)據(jù)基本上來自于簡ChatGPT來說,我們必須為人類語言文本建立一個模型,即由人腦產(chǎn)生的那種模型。而對于這樣的東西,我們(至少現(xiàn)在)還沒有類似“簡單數(shù)學(xué)”的東西。那么,它的模型可能是什么樣的呢?在我們談?wù)撜Z言之前,讓我們先談?wù)劻硪豁楊愃迫祟惖娜蝿?wù):識別圖像。而作為一個簡單的例子,讓我們考慮數(shù)字的圖像(是的,這是一個經(jīng)典的機器學(xué)習(xí)例子):我們可以做的一件事是為每個數(shù)字獲取一堆樣本圖像:然后,為了找出我們輸入的圖像是否對應(yīng)于某個特定的數(shù)字,我們只需與我們擁有的樣本進行明確的逐像素比較。但作為人類,我們似乎可以做得更好——因為我們?nèi)匀豢梢宰R別數(shù)字,即使它們是手寫的,并且有各種當(dāng)我們?yōu)樯厦娴臄?shù)字數(shù)據(jù)建立一個模型時,我們能夠取一個給定的數(shù)字值x,然后為特定的a和b計算a+bx。因此,如果我們把這里的每個像素的灰度值當(dāng)作某個變量xi,是否有一些所有這些變量的函數(shù),在評估時告訴我們這個圖像是什么數(shù)字?事實證明,有可能構(gòu)建這樣一個函數(shù)。不足為奇的是,這并不特別簡單。一個典型的但最終的結(jié)果是,如果我們把一幅圖像的像素值集合輸入這個函數(shù),就會得出一個數(shù)字,指定我們的圖像是哪個數(shù)字。稍后,我們將討論如何構(gòu)建這樣一個函數(shù),以及神經(jīng)網(wǎng)絡(luò)的概念。但現(xiàn)在讓我們把這個函數(shù)當(dāng)作黑匣子,我們輸入例如手寫數(shù)字的圖像(作為像素值的陣列),然后我們得到這些數(shù)字對應(yīng)的數(shù)字:但這里到底發(fā)生了什么?比方說,我們逐步模糊一個數(shù)字。有一段時間,我們的函數(shù)仍然“識別”它,在這里是一個“2”。但很快它就“失去”了,并開始給出“錯誤”的結(jié)果:但為什么我們說這是一個“錯誤”的結(jié)果呢?在這種情況下,我們知道我們通過模糊一個“2”得到所有的圖像。但是,如果我們的目標(biāo)是制作一個人類識別圖像的模型,那么真正要問的問題是,如果遇到這些模糊的圖像,在不知道其來源的情況下,人類會做什么。如果我們從我們的功能中得到的結(jié)果通常與人類會說的話一致,我們就有一個“好的模型”。而非微不足道的科學(xué)事實是,對于像這樣的圖像識別任務(wù),我們現(xiàn)在基本上知道如何構(gòu)建這樣的函數(shù)。我們能“從數(shù)學(xué)上證明”它們的作用嗎?嗯,不能。因為要做到這一點,我們必須有一個關(guān)于我們?nèi)祟愓谧鍪裁吹臄?shù)學(xué)理論。以“2”圖像為例,改變幾個像素。我們可以想象,只有幾個像素“不合適”,我們還是應(yīng)該認為這個圖像是“2”。但這應(yīng)該到什么程度呢?這是一個關(guān)于人類視覺感知的問題。而且,是的,對于蜜蜂或章魚來說,答案無疑是不同的——對于假定的外星人來說,可能完全不同?!?—好吧,那么我們用于圖像識別等任務(wù)的典型模型究竟是如何工作的呢?目前最流行、最成功的方法是使用神經(jīng)網(wǎng)絡(luò)。在20世紀(jì)40年代,神經(jīng)網(wǎng)絡(luò)的發(fā)明形式與今天的使用非常接近,它可以被認為是大腦似乎工作方式的在人類的大腦中,有大約1000億個神經(jīng)元(神經(jīng)細胞),每個神經(jīng)元都能產(chǎn)生電脈沖,每秒可能有一千次。這些神經(jīng)元在一個復(fù)雜的網(wǎng)絡(luò)中連接起來,每個神經(jīng)元都有樹狀的分支,允許它將電信號傳遞給可能有成千上粗略估計,任何給定的神經(jīng)元是否在某一時刻產(chǎn)生電脈沖,取決于它從其當(dāng)我們“看到一個圖像”時,所發(fā)生的事情是,當(dāng)圖像的光子落在眼睛后面的(“光感受器”)細胞上時,它們在神經(jīng)細胞中產(chǎn)生電信號。這些神經(jīng)細胞與其他神經(jīng)細胞相連,最終信號通過一整層的神經(jīng)元。而正是在這個過程中,我們“識別”了圖像,最終“形成了一個想法”,即我們“看到了一個2”(也許最后會做一些事情,如大聲說“2”這個詞)。有11層(雖然只有4個“核心層”)。這個神經(jīng)網(wǎng)并沒有什么特別的“理論推導(dǎo)”;它只是在1998年作為一項工程而構(gòu)建的東西,并且被發(fā)現(xiàn)是有效的。(當(dāng)然,這與我們描述我們的大腦是通過生物進化過程產(chǎn)生的沒有什么不同)。好吧,但是像這樣的神經(jīng)網(wǎng)絡(luò)是如何“識別事物”的?關(guān)鍵在于吸引器的概念。想象一下,我們有1和2的手寫圖像:我們希望所有的1都“被吸引到一個地方”,而所有的2都“被吸引到另一個地方”?;蛘?換一種方式,如果一個圖像在某種程度上“更接近于1”,而不是2,我們希望它最終出現(xiàn)在“1的地方”,反之亦然。作為一個直接的類比,我們假設(shè)在平面上有某些位置,用點表示(在現(xiàn)實生活中,它們可能是咖啡店的位置)。那么我們可以想象,從平面上的任何一點開始,我們總是想在最近的點結(jié)束(即我們總是去最近的咖啡店)。我們可以通過將平面劃分為由理想化的“分水嶺”分隔的區(qū)域(地”)來表示這一點:我們可以認為這是在執(zhí)行一種“識別任務(wù)”,我們不是在做類似于識別給哪個點。(我們在這里展示的“Voronoi圖”設(shè)置是在二維歐幾里得空間中分離點;數(shù)字識別任務(wù)可以被認為是在做非常類似的事情——但卻是在一個由每張圖像中所有像素的灰度等級形成的784維空間中。)那么,我們?nèi)绾问挂粋€神經(jīng)網(wǎng)絡(luò)“完成一個識別任務(wù)”?讓我們考慮這個非常簡單的案例:我們的目標(biāo)是獲取一個對應(yīng)于{x,y}位置的“輸入”,然后將其“識別”為它最接近的三個點中的任何一個。或者,換句話說,我們希望神經(jīng)網(wǎng)絡(luò)能那么,我們?nèi)绾斡蒙窠?jīng)網(wǎng)絡(luò)做到這一點呢?歸根結(jié)底,神經(jīng)網(wǎng)是一個理想化的“神經(jīng)元”的連接集合——通常按層排列——一個簡單的例子是:每個“神經(jīng)元”都被有效地設(shè)置為評估一個簡單的數(shù)字函數(shù)。為了“使用”這個網(wǎng)絡(luò),我們只需在頂部輸入數(shù)字(如我們的坐標(biāo)x和y),然后讓每一層的神經(jīng)元“評估它們的功能”,并通過網(wǎng)絡(luò)向前輸入結(jié)果——最終在在傳統(tǒng)的(受生物啟發(fā)的)設(shè)置中,每個神經(jīng)元實際上都有一組來自上一層神經(jīng)元的“傳入連接”,每個連接都被賦予一定的“權(quán)重”(可以是一個正數(shù)或負數(shù))。一個給定的神經(jīng)元的值是以其相應(yīng)的權(quán)重來確定的,然后將這些值相加并乘以一個常數(shù),最后應(yīng)用一個“閾值”(或“激活”)函數(shù)。在數(shù)學(xué)術(shù)語中,如果一個神經(jīng)元有輸入x={x1,x2……},那么我們計算f[w.x+b],其中權(quán)重w和常數(shù)b通常為網(wǎng)絡(luò)中的每個神經(jīng)元選擇不同;(并最終導(dǎo)致了非線性行為)。通常使用各種激活函數(shù);這里我們只使用):對于我們希望神經(jīng)網(wǎng)絡(luò)執(zhí)行的每一項任務(wù)(或者說,對于我們希望它評估的每一個整體函數(shù)),我們將有不同的權(quán)重選擇。(正如我們稍后要討論的那樣,這些權(quán)重通常是通過使用機器學(xué)習(xí)從我們想要的輸出實例中“訓(xùn)練”神經(jīng)網(wǎng)絡(luò)來確定的)。最終,每個神經(jīng)網(wǎng)絡(luò)都對應(yīng)于一些整體的數(shù)學(xué)函數(shù)——盡管它可能寫得很亂。對于上面的例子,它就是:但讓我們回到單個神經(jīng)元上。下面是一個有兩個輸入(代表坐標(biāo)x和y)的神經(jīng)元在選擇不同的權(quán)重和常數(shù)(以及Ramp作為激活函數(shù))后可以計算的函數(shù)的一些例子:但是,上面那個更大的網(wǎng)絡(luò)是怎么回事?嗯,這是它的計算結(jié)果:這不是很“正確”,但它接近于我們上面展示的“最近點”函數(shù)。讓我們看看其他一些神經(jīng)網(wǎng)絡(luò)的情況。在每一種情況下,正如我們稍后所解釋的,我們都在使用機器學(xué)習(xí)來尋找最佳的權(quán)重選擇。然后,我們在這里展示帶有這些權(quán)重的神經(jīng)網(wǎng)絡(luò)的計算結(jié)果:更大的網(wǎng)絡(luò)通常能更好地逼近我們的目標(biāo)函數(shù)。而在“每個吸引子盆地的中間”,我們通常會得到我們想要的答案。但在邊界——神經(jīng)網(wǎng)絡(luò)“很難在這個簡單的數(shù)學(xué)風(fēng)格的“識別任務(wù)”中,“正確答案”是什么很清楚。但在識別手寫數(shù)字的問題上,就不那么清楚了。如果有人把“2”寫得很糟糕,看起來像“7”,等等,怎么辦?不過,我們還是可以問,神經(jīng)網(wǎng)絡(luò)是如何區(qū)分數(shù)字的——這就給出了一個指示:我們能“從數(shù)學(xué)上”說說網(wǎng)絡(luò)是如何區(qū)分的嗎?并非如此。它只是在“做神經(jīng)網(wǎng)絡(luò)所做的事”而已。但事實證明,這通常似乎與我們?nèi)祟愃鞯膮^(qū)分讓我們舉一個更復(fù)雜的例子。比方說,我們有貓和狗的圖像。我們有一個神經(jīng)網(wǎng)絡(luò),它被訓(xùn)練來區(qū)分它們。下面是它在一些例子中可能做的事情:現(xiàn)在,“正確答案”是什么就更不清楚了。穿著貓衣的狗怎么辦?等等。無論給它什么輸入,神經(jīng)網(wǎng)絡(luò)都會產(chǎn)生一個答案。而且,事實證明,這樣正如我在上面所說的,這不是一個我們可以“從第一原理推導(dǎo)”的事實。它只是根據(jù)經(jīng)驗被發(fā)現(xiàn)是真的,至少在某些領(lǐng)域是這樣。但這是神經(jīng)網(wǎng)絡(luò)有用的一個關(guān)鍵原因:它們以某種方式捕捉了“類似人類”的做事方式。給自己看一張貓的照片,然后問“為什么那是一只貓?”。也許你會開始說“嗯,我看到它的尖耳朵,等等”。但要解釋你是如何認出這張圖片是一只貓的,并不是很容易。只是你的大腦不知怎么想出來的。但是對于大腦來說,沒有辦法(至少現(xiàn)在還沒有)“進入”它的內(nèi)部,看看它是如何那么對于一個(人工)神經(jīng)網(wǎng)來說呢?好吧,當(dāng)你展示一張貓的圖片時,可以直接看到每個“神經(jīng)元”的作用。但是,即使要獲得一個基本的可視化,通常也是非常困難的。在我們用于解決上述“最近點”問題的最終網(wǎng)絡(luò)中,有17個神經(jīng)元。在用于識別手寫數(shù)字的網(wǎng)絡(luò)中,有2190個。而在我們用來識別貓和狗的網(wǎng)絡(luò)中,有60,650個。通常情況下,要將相當(dāng)于60,650個維度的空間可視化是相當(dāng)困難的。但由于這是一個為處理圖像而設(shè)置的網(wǎng)絡(luò),它的許多神經(jīng)元層被組織成陣列,如果我們采取一個典型的貓圖像:那么我們就可以用一組衍生圖像來表示第一層神經(jīng)元的狀態(tài)——其中許多圖像我們可以很容易地解釋為“沒有背景的貓”或“貓的輪廓”等:到了第十層,就更難解釋發(fā)生了什么:但總的來說,我們可以說神經(jīng)網(wǎng)絡(luò)正在“挑選出某些特征”(也許尖尖的耳朵也在其中),并利用這些特征來確定圖像是什么。但這些特征是我們有名字的,比如“尖耳朵”?大多數(shù)情況下不是。我們的大腦在使用類似的特征嗎?大多數(shù)情況下我們不知道。但值得注意的是,像我們在這里展示的神經(jīng)網(wǎng)絡(luò)的前幾層似乎可以挑出圖像的某些方面(如物體的邊緣),這些方面似乎與我們知道的由大腦中第一層視覺處但是,假設(shè)我們想要一個神經(jīng)網(wǎng)絡(luò)的“貓識別理論”。我們可以說“看,這覺(例如,可能需要多少個神經(jīng)元或?qū)?。但至少到現(xiàn)在為止,我們還沒有辦法對網(wǎng)絡(luò)正在做的事情進行“敘述性描述”。也許這是因為它在計算上確實是不可簡化的,而且除了明確地追蹤每一個步驟之外,沒有一般的方法可以找到它在做什么。也可能只是因為我們還沒有“弄清科學(xué)”,還沒有確定“自然法則”,使我們能夠總結(jié)出正當(dāng)我們談?wù)撚肅hatGPT生成語言時,我們會遇到同樣的問題。而且同樣不清楚是否有辦法“總結(jié)它在做什么”。但是語言的豐富性和細節(jié)(以及我們在這方面的經(jīng)驗)可能會讓我們比圖像走得更遠?!?—到目前為止,我們一直在談?wù)撃切耙呀?jīng)知道”如何完成特定任務(wù)的神經(jīng)網(wǎng)絡(luò)。但是,神經(jīng)網(wǎng)絡(luò)之所以如此有用(估計也是在大腦中),是因為它們不僅在原則上可以完成各種任務(wù),而且可以逐步“根據(jù)實例訓(xùn)練”來完當(dāng)我們制作一個區(qū)分貓和狗的神經(jīng)網(wǎng)絡(luò)時,我們實際上不需要寫一個程序來(比如說)明確地找到胡須;相反,我們只需要展示大量關(guān)于什么是貓和什么是狗的例子,然后讓網(wǎng)絡(luò)從這些例子中“機器學(xué)習(xí)”如何去區(qū)分它重點是,訓(xùn)練有素的網(wǎng)絡(luò)從它所展示的特定例子中“概括”出來。正如我們在上面看到的,這并不是簡單地讓網(wǎng)絡(luò)識別它所看到的貓咪圖像的特定像素模式;而是讓神經(jīng)網(wǎng)絡(luò)以某種方式設(shè)法在我們認為是某種“一般貓那么,神經(jīng)網(wǎng)絡(luò)的訓(xùn)練究竟是如何進行的呢?從本質(zhì)上講,我們一直在努力尋找能夠使神經(jīng)網(wǎng)絡(luò)成功重現(xiàn)我們所給的例子的權(quán)重。然后,我們依靠神經(jīng)網(wǎng)絡(luò)以“合理”的方式在這些例子之間進行“插值”(或“概括”)。讓我們看看一個比上面的最近點的問題更簡單的問題。讓我們只嘗試讓一個神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)函數(shù):對于這個任務(wù),我們需要一個只有一個輸入和一個輸出的網(wǎng)絡(luò),比如:但我們應(yīng)該使用什么權(quán)重等?在每一組可能的權(quán)重下,神經(jīng)網(wǎng)絡(luò)都會計算出一些函數(shù)。例如,這里是它用幾組隨機選擇的權(quán)重所做的事情:是的,我們可以清楚地看到,在這些情況下,它甚至都沒有接近再現(xiàn)我們想要的函數(shù)。那么,我們?nèi)绾握业侥軌蛑噩F(xiàn)該功能的權(quán)重呢?到能重現(xiàn)這些例子的權(quán)重。下面是用逐漸增多的例子來做的結(jié)果:在這個“訓(xùn)練”的每個階段,網(wǎng)絡(luò)中的權(quán)重都被逐步調(diào)整——我們看到,最終我們得到了一個能成功重現(xiàn)我們想要的功能的網(wǎng)絡(luò)。那么,我們是如何調(diào)整權(quán)重的呢?基本的想法是在每個階段看看我們離得到我們想要的功能“有多遠”,然后以這樣的方式更新權(quán)重,使之更接近。為了找出“我們有多遠”,我們計算通常被稱為“損失函數(shù)”(或有時稱為“成本函數(shù)”)的東西。這里我們使用的是一個簡單的(L2)損失函數(shù),它只是我們得到的值與真實值之間的差異的平方之和。我們看到的是,隨著我們訓(xùn)練過程的進展,損失函數(shù)逐漸減少(遵循一定的“學(xué)習(xí)曲線”,不同的任務(wù)是不同的)——直到我們達到一個點,網(wǎng)絡(luò)(至少是一個很好的近似值)成功再現(xiàn)了我們想要的函數(shù):好了,最后要解釋的重要部分是如何調(diào)整權(quán)重以減少損失函數(shù)。正如我們所說,損失函數(shù)給我們提供了我們得到的值與真實值之間的“距離”。但是“我們得到的值”在每個階段都是由當(dāng)前版決定的。但現(xiàn)在想象一下,這些權(quán)重是變量——比如說wi。我們想找出如何調(diào)整這些變量的值,以使取決于這些變量的損失最小。例如,想象一下(對實踐中使用的典型神經(jīng)網(wǎng)絡(luò)進行了不可思議的簡化),我們只有兩個權(quán)重w1和w2。那么我們可能有一個損失,作為w1和w2的函數(shù),看起來像這樣:數(shù)值分析提供了各種技術(shù)來尋找這樣的情況下的最小值。但一個典型的方法是,從之前的w1、w2開始,逐步遵循最陡峭的下降路徑:就像水從山上流下來一樣,所能保證的是這個過程最終會在地表的某個局(“一個山湖”);它很可能達不到最終的全球最小值。在“重量景觀”上找到最陡峭的下降路徑并不明顯,這是不可行的。但是,微積分可以幫助我們。正如我們上面提到的,我們總是可以把神經(jīng)網(wǎng)但現(xiàn)在考慮對這些權(quán)重進行微分。事實證明,微積分的連鎖法則實際上可以讓我們“解開”神經(jīng)網(wǎng)中連續(xù)幾層所做的運算。其結(jié)果是,我們可以——至少在某些局部近似中——“反轉(zhuǎn)”神經(jīng)網(wǎng)的操作,并逐步找到使與上圖顯示了在只有2個權(quán)重的不現(xiàn)實的簡單情況下,我們可能需要做的最小化工作。但事實證明,即使有更多的權(quán)重(個),仍有可能做到最小化,至少在某種程度上是近似的。事實上,2011年左右發(fā)生的“深度學(xué)習(xí)”的重大突破與以下發(fā)現(xiàn)有關(guān):從某種意義上說,當(dāng)有很多權(quán)重參與時,做(至少是近似)最小化比有相當(dāng)少的權(quán)重更題更容易。其大致原因似乎是,當(dāng)一個人有很多“權(quán)重變量”時,他有一個高維空間,有“很多不同的方向”,可以把他引向最小值——而如果變量較少,則更容易陷入一個局部最小值(“山湖”),沒有“方向可以出值得指出的是,在典型的情況下,有許多不同的權(quán)重集合,它們都能使神經(jīng)網(wǎng)絡(luò)具有幾乎相同的性能。而在實際的神經(jīng)網(wǎng)絡(luò)訓(xùn)練中,通常會有很多隨機的選擇,導(dǎo)致“不同但等同的解決方案”,就像這些:要求,比如說,在我們提供訓(xùn)練實例的區(qū)域之外進行“外推”,我們可以得到極大的不同結(jié)果:但是哪一個是“正確的”呢?真的沒有辦法說。它們都“與觀察到的數(shù)據(jù)一么。對我們?nèi)祟悂碚f,有些可能比其他的看起來“更合理”。特別是在過去的十年里,在訓(xùn)練神經(jīng)網(wǎng)絡(luò)的藝術(shù)方面取得了許多進展。而且,是的,這基本上是一門藝術(shù)。有時,特別是在回顧中,人們至少可以看到正在做的事情有一絲“科學(xué)解釋”的影子。但大多數(shù)情況下,事情都是通過試驗和錯誤發(fā)現(xiàn)的,增加了一些想法和技巧,逐步建立了一個關(guān)于有幾個關(guān)鍵部分。首先,對于一個特定的任務(wù),應(yīng)該使用什么架構(gòu)的神經(jīng)網(wǎng)絡(luò)。然后,還有一個關(guān)鍵問題,即如何獲得訓(xùn)練神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)。而且,人們越來越多地不是在處理從頭開始訓(xùn)練一個網(wǎng)絡(luò)的問題:相反,一個新的網(wǎng)絡(luò)可以直接納入另一個已經(jīng)訓(xùn)練好的網(wǎng)絡(luò),或者至少可以使用該人們可能認為,對于每一種特定的任務(wù),人們都需要一個不同的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。但人們發(fā)現(xiàn),即使是對于明顯不同的任務(wù),相同的架構(gòu)似乎也能發(fā)在某種程度上,這讓人想起了通用計算的想法(以及我的計算等價原則),但是,正如我將在后面討論的那樣,我認為這更多地反映了這樣一個事實,即我們通常試圖讓神經(jīng)網(wǎng)絡(luò)做的任務(wù)是“類似人類”的,而神經(jīng)網(wǎng)絡(luò)可以在早期的神經(jīng)網(wǎng)絡(luò)中,人們傾向于認為應(yīng)該“讓神經(jīng)網(wǎng)絡(luò)盡可能地少做”。例如,在將語音轉(zhuǎn)換為文本時,人們認為應(yīng)該首先分析語音的音頻,將其分解為音素,等等。但人們發(fā)現(xiàn),至少對于“類似人類的任務(wù)”來說,通常更好的做法是嘗試在“端到端問題”上訓(xùn)練神經(jīng)網(wǎng)絡(luò),讓它自己“發(fā)現(xiàn)”還有一個想法是,我們應(yīng)該在神經(jīng)網(wǎng)絡(luò)中引入復(fù)雜的單獨組件,讓它實際上“明確地實現(xiàn)特定的算法想法”。但是,這又一次被證明是不值得的;相反,最好只是處理非常簡單的組件,讓它們“自我組織”(盡管通常是以我們無法理解的方式)來實現(xiàn)(大概)那些算法想法的等價物。這并不是說沒有與神經(jīng)網(wǎng)絡(luò)相關(guān)的“結(jié)構(gòu)化思想”。因此,例如,具有局部連接的二維神經(jīng)元陣列似乎至少在處理圖像的早期階段非常有用。而擁有專注于“回顧序列”的連接模式似乎很有用——我們將在后面看到——在處理人類語言等事物時,例如在ChatGPT中。但神經(jīng)網(wǎng)絡(luò)的一個重要特點是,像一般的計算機一樣,它們最終只是在處理數(shù)字陣列的。但在處理過程中,這些數(shù)組可以被完全重新排列和重塑。舉個例子,我們上面用來識別數(shù)字的網(wǎng)絡(luò)從一個二維的“圖像”陣列開始,迅速“增厚”到許多通道,但隨后“濃縮”成一個一維陣列,最終將包含代表不同可能輸出數(shù)字的元素:但是,好吧,如何判斷一個特定的任務(wù)需要多大的神經(jīng)網(wǎng)?這是一門藝術(shù)。在某種程度上,關(guān)鍵是要知道“這個任務(wù)有多難”。但對于類似人類的任務(wù)來說,這通常是很難估計的。是的,可能有一種系統(tǒng)的方法可以通過計算機非?!皺C械”地完成任務(wù)。但很難知道是否存在人們認為的技巧或捷徑,使人們至少在“類似人類的水平”上更容易地完成這項任務(wù)??赡苄枰信e一械地”玩某個游戲;但可能有一個更容易(“啟發(fā)式”)的方法來實現(xiàn)“人當(dāng)人們在處理微小的神經(jīng)網(wǎng)絡(luò)和簡單的任務(wù)時,有時可以明確地看到“從這里不能到達那里”。例如,這是人們在上一節(jié)的任務(wù)中用幾個小的神經(jīng)網(wǎng)絡(luò)似乎能做到的最好的結(jié)果:而我們的情況是,如果網(wǎng)太小,它就不能再現(xiàn)我們想要的功能。但如果超過一定的規(guī)模,它就沒有問題了——至少如果一個人用足夠長的時間和足夠多的例子訓(xùn)練它。順便說一下,這些圖片說明了一個神經(jīng)網(wǎng)絡(luò)的傳說:如果中間有一個“擠壓”,迫使所有東西都通過一個較小的中間神經(jīng)元數(shù)量,那么我們往往可以用一個較小的網(wǎng)絡(luò)。(值得一提的是,“無中間層”——或所謂的“感知器”——網(wǎng)絡(luò)只能學(xué)習(xí)本質(zhì)上的線性函數(shù)——但只要有一個中間層,原則上就可以任意很好地近似任何函數(shù),至少如果有足夠的神經(jīng)元,盡管為了使其可行地訓(xùn)練,通常需要某種正則化或規(guī)范化)。好吧,讓我們假設(shè)我們已經(jīng)確定了某種神經(jīng)網(wǎng)絡(luò)架構(gòu)?,F(xiàn)在有一個問題,就是如何獲得數(shù)據(jù)來訓(xùn)練網(wǎng)絡(luò)。圍繞神經(jīng)網(wǎng)絡(luò)和一般機器學(xué)習(xí)的許多實際挑戰(zhàn)都集中在獲取或準(zhǔn)備必要的訓(xùn)練數(shù)據(jù)上。在許多情況下(習(xí)”),人們希望獲得明確的輸入和期望的輸出的例子。因此,舉例來說,人們可能希望通過圖像中的內(nèi)容或一些其他屬性來標(biāo)記圖像。也許我們必須明確地去做——通常是費盡心機地去做標(biāo)記。但是很多時候,我們可以借助已經(jīng)完成的工作,或者將其作為某種代理。因此,舉例來說,我們可以使用網(wǎng)絡(luò)上已經(jīng)提供的圖片的alt標(biāo)簽?;蛘?在另一個領(lǐng)域,我們可以使用為視頻創(chuàng)建的封閉式字幕?;蛘咴谡Z言翻譯訓(xùn)練中,可以使用不同語言的網(wǎng)頁或其他文件的平行版本。你需要向神經(jīng)網(wǎng)絡(luò)展示多少數(shù)據(jù)來訓(xùn)練它完成一項特定任務(wù)?同樣,這很難從第一原理上估計。當(dāng)然,通過使用“轉(zhuǎn)移學(xué)習(xí)”來“轉(zhuǎn)移”諸如已經(jīng)在另一個網(wǎng)絡(luò)中學(xué)習(xí)過的重要特征列表的東西,可以大大降低要求。但一般來說,神經(jīng)網(wǎng)絡(luò)需要“看到大量的例子”才能訓(xùn)練好。而至少對于某些任務(wù)來說,神經(jīng)網(wǎng)絡(luò)的一個重要傳說是,這些例子可能是非常重復(fù)的。事實上,向神經(jīng)網(wǎng)絡(luò)展示所有的例子是一個標(biāo)準(zhǔn)的策略,一遍又一遍。在每個“訓(xùn)練回合”(或“epochs”)中,神經(jīng)網(wǎng)絡(luò)至少會處于一個稍微不同的狀態(tài),而以某種方式“提醒”它某個特定的例子對于讓它“記住那個例子”是很有用的。(是的,也許這類似于人類記憶中的重復(fù)的有用性)。但往往只是反復(fù)重復(fù)同一個例子是不夠的。還需要向神經(jīng)網(wǎng)絡(luò)展示這個例子的變化。而神經(jīng)網(wǎng)絡(luò)理論的一個特點是,這些“數(shù)據(jù)增強”的變化不一定要復(fù)雜才有用。只要用基本的圖像處理方法稍微修改一下圖像,就可以使它們在神經(jīng)網(wǎng)絡(luò)訓(xùn)練中基本上“像新的一樣好”。同樣,當(dāng)人們沒有實際的視頻等來訓(xùn)練自動駕駛汽車時,人們可以繼續(xù)從模擬的視頻游戲環(huán)境中獲得數(shù)據(jù),而不需要實際的真實世界場景的所有細節(jié)。像ChatGPT這樣的東西如何呢?嗯,它有一個很好的特點,那就是它可以進行“無監(jiān)督學(xué)習(xí)”,這使得它更容易得到用于訓(xùn)練的例子。回顧一下,ChatGPT的基本任務(wù)是找出如何繼續(xù)它所給的一段文字。因此,為了獲得“訓(xùn)練實例”,我們所要做的就是獲得一段文本,并將其結(jié)尾遮蓋起來,然后將其作為“訓(xùn)練的輸入”——“輸出”是完整的、未被遮蓋的文本。我們稍后會詳細討論這個問題,但主要的一點是,與學(xué)習(xí)圖片中的內(nèi)容不同,好吧,那么神經(jīng)網(wǎng)絡(luò)的實際學(xué)習(xí)過程是怎樣的呢?歸根結(jié)底,這都是為了確定什么權(quán)重能夠最好地捕捉所給的訓(xùn)練實例。有各種詳細的選擇和“超參數(shù)設(shè)置”(之所以被稱為超參數(shù),是因為可以把權(quán)重看作是“參數(shù)”),有不同的損失函數(shù)選擇(平方之和、絕對值之和,等等)。有不同的方法來進行損失最小化(每一步要在權(quán)重空間中移動多遠,等等)。然后還有一些問題,比如要展示多大的“一批”例子來獲得每一個試圖最小化的損失的連續(xù)估計。而且,是的,人們可以應(yīng)用機器學(xué)習(xí)(例如,我們在Wolfram語言中所做的)來實現(xiàn)機器學(xué)習(xí)的自動化——自動設(shè)置超參數(shù)但最終,整個訓(xùn)練過程的特點是看到損失是如何逐漸減少的(如這個WolframLanguage的小型訓(xùn)練的進度監(jiān)視器):而人們通??吹降氖?損失在一段時間內(nèi)減少,但最終在某個恒定值上趨于平緩。如果這個值足夠小,那么可以認為訓(xùn)練是成功的;否則,這可能能否告訴我們“學(xué)習(xí)曲線”要花多長時間才能變平?就像許多其他事情一樣,似乎有近似的冪律縮放關(guān)系,這取決于神經(jīng)網(wǎng)絡(luò)的大小和使用的數(shù)據(jù)量。但一般的結(jié)論是,訓(xùn)練一個神經(jīng)網(wǎng)絡(luò)是很難的,需要大量的計算努力。作為一個實際問題,這些努力的絕大部分都花在了對數(shù)字陣列的操作上,而這正是GPU所擅長的——這就是為什么神經(jīng)網(wǎng)絡(luò)訓(xùn)練通常受限于在未來,是否會有從根本上更好的方法來訓(xùn)練神經(jīng)網(wǎng)絡(luò),或者一般地做神經(jīng)網(wǎng)絡(luò)的工作?我認為,幾乎可以肯定。神經(jīng)網(wǎng)絡(luò)的基本理念是用大量簡單(本質(zhì)上相同)的組件創(chuàng)建一個靈活的“計算結(jié)構(gòu)”,并讓這個“結(jié)構(gòu)”能夠被逐步修改,以便從實例中學(xué)習(xí)。在目前的神經(jīng)網(wǎng)絡(luò)中,人們基本上是使用微積分的思想——應(yīng)用于實數(shù)——來做這種增量修改。但越來越清楚的是,擁有高精度的數(shù)字并不重要;即使用目前的方法,8位或更少的數(shù)字可能也足夠了。像蜂窩自動機這樣的計算系統(tǒng),基本上是在許多單獨的比特上并行操作的,如何做這種增量修改從來都不清楚,但沒有理由認為它不可能。事實上,就像“2012年深度學(xué)習(xí)的突破”一樣,這種增量修改在更復(fù)雜的情況下可網(wǎng)絡(luò),被修改的是它們之間連接的強度(“重量”)。(也許至少在年輕的大腦中,大量的完全新的連接也可以增長。)但是,雖然這對生物學(xué)來 說可能是個方便的設(shè)置,但并不清楚它是否是實現(xiàn)我們所需功能的最佳方式。而涉及漸進式網(wǎng)絡(luò)重寫的東西(也許讓人想起我們的物理項目)最但即使在現(xiàn)有的神經(jīng)網(wǎng)絡(luò)框架內(nèi),目前也有一個關(guān)鍵的限制:現(xiàn)在的神經(jīng)網(wǎng)絡(luò)訓(xùn)練從根本上說是連續(xù)的,每一批例子的效果都被傳播回來以更新權(quán)重。事實上,就目前的計算機硬件而言——即使考慮到GPU——在訓(xùn)練期間,神經(jīng)網(wǎng)絡(luò)的大部分時間都是“閑置”的,每次只有一個部分被更新。從某種意義上說,這是因為我們目前的計算機往往有獨立于CPU(或GPU)的內(nèi)存。但在大腦中,這大概是不同的——每一個“記憶元素”(即神經(jīng)元)也是一個潛在的活躍的計算元素。如果我們能夠以這種方式設(shè)置我們未來的計算機硬件,就有可能更有效地進行訓(xùn)練?!爱?dāng)然,一個足夠大的網(wǎng)絡(luò)可以做任何事情!”像ChatGPT這樣的能力似乎令人印象深刻,人們可能會想象,如果人們能夠“繼續(xù)下去”,訓(xùn)練越來越大的神經(jīng)網(wǎng)絡(luò),那么它們最終將能夠“做任何事情”。如果人們關(guān)注的是那些容易被人類直接思考的事物,那么很有可能是這樣的。但是,過去幾百年科學(xué)的教訓(xùn)是,有些東西可以通過形式化的過程來計算出來,但并不容易被人類的直接思維所獲得。非瑣碎的數(shù)學(xué)就是一個大例子。但一般的情況其實是計算。而最終的問題是計算的不可還原性現(xiàn)象。有一些計算,人們可能認為需要很多步驟才能完成,但事實上可以“簡化”為相當(dāng)直接的東西。但計算的不可簡化性的發(fā)現(xiàn)意味著這并不總是有效的。相反,有些過程——可能就像下面這個 過程要弄清楚發(fā)生了什么,必然需要對每個計算步驟進行追蹤:我們通常用大腦做的那些事情,大概是專門為避免計算的不可還原性而選擇的。在一個人的大腦中做數(shù)學(xué)需要特別的努力。而且,在實踐中,僅僅在一個人的大腦中“思考”任何非微觀程序的操作步驟,在很大程度上是當(dāng)然,為此我們有計算機。有了計算機,我們可以很容易地做很長的、計算上不可簡化的事情。而關(guān)鍵的一點是,這些事情一般來說沒有捷徑。是的,我們可以記住很多關(guān)于在某個特定計算系統(tǒng)中發(fā)生的具體例子。也許我們甚至可以看到一些(“計算上可還原的”)模式,使我們可以做一點概括。但問題是,計算上的不可還原性意味著我們永遠無法保證意外不會發(fā)生——只有通過明確地進行計算,你才能知道在任何特定情況下實際最后,在可學(xué)習(xí)性和計算的不可重復(fù)性之間存在著一種基本的緊張關(guān)系。學(xué)習(xí)實際上是通過利用規(guī)則性來壓縮數(shù)據(jù)。但計算上的不可復(fù)制性意味著作為一個實際問題,我們可以想象將一些小的計算設(shè)備——如蜂窩自動機或圖靈機——構(gòu)建成像神經(jīng)網(wǎng)絡(luò)這樣的可訓(xùn)練系統(tǒng)。而且,這種設(shè)備確實可以作為神經(jīng)網(wǎng)的好“工具”,就像Wolfram|Alpha可以作為ChatGPT的好工具。但計算的不可簡化性意味著我們不能指或者換句話說,在能力和可訓(xùn)練性之間有一個最終的權(quán)衡:你越想讓一個系統(tǒng)“真正利用”它的計算能力,它就越會顯示出計算的不可復(fù)制性,它的可訓(xùn)練性就越低。而它越是從根本上可訓(xùn)練,它就越不能做復(fù)雜的計算(對于目前的ChatGPT來說,情況實際上要極端得多,因為用于生成每個輸出符號的神經(jīng)網(wǎng)絡(luò)是一個純粹的“前饋”網(wǎng)絡(luò),沒有循環(huán),因此沒有能力做任何具有非復(fù)雜“控制流”的計算)。當(dāng)然,人們可能會問,能夠做不可還原的計算是否真的很重要。事實上,在人類歷史的大部分時間里,這并不特別重要。但我們的現(xiàn)代技術(shù)世界是建立在至少使用數(shù)學(xué)計算的工程之上的,而且越來越多地使用更普遍的計算。如果我們看一下自然界,它充滿了不可簡化的計算——我們正在慢是的,一個神經(jīng)網(wǎng)絡(luò)當(dāng)然可以注意到自然世界中的各種規(guī)律性,而我們也可能很容易通過“無助的人類思維”注意到這些規(guī)律性。但是,如果我們想要解決屬于數(shù)學(xué)或計算科學(xué)范疇的事情,神經(jīng)網(wǎng)絡(luò)是無法做到的——但是,這一切都有一些潛在的混淆之處。在過去,有很多任務(wù)——包括到這些任務(wù)是由ChatGPT等完成的,我們傾向于突然認為計算機一定是變得更加強大了,特別是超越了它們已經(jīng)基本能夠做到的事情(比如逐步計算蜂窩自動機等計算系統(tǒng)的行為)。但這并不是正確的結(jié)論。計算上不可還原的過程仍然是計算上不可還原的,而且對計算機來說仍然是根本性的困難——即使計算機可以輕易地計算它們的單個步驟。相反,我們應(yīng)該得出的結(jié)論是,我們?nèi)祟惪梢宰龅?但我們不認為計算機可以做的任務(wù),比如寫文章,實際上在某種意義換句話說,神經(jīng)網(wǎng)絡(luò)之所以能夠成功地寫出一篇文章,是因為寫一篇文章被證明是一個比我們想象的“計算上更淺”的問題。從某種意義上說,這使我們更接近于“擁有一種理論”,即我們?nèi)祟愂侨绾巫龅较駥懳恼逻@樣的事情的,或在一般情況下處理語言。如果你有一個足夠大的神經(jīng)網(wǎng)絡(luò),那么,是的,你可能能夠做任何人類能夠輕易做到的事情。但是,你不會捕捉到自然界一般能做的事情——或 者我們從自然界塑造的工具能做的事情。而正是這些工具的使用——無論是實用的還是概念性的——使得我們在近幾個世紀(jì)里能夠超越“純粹的無助的人類思維”所能達到的界限,并為人類的目的捕捉到物理和計算神經(jīng)網(wǎng)絡(luò)——至少在它們目前的設(shè)置中——從根本上說是基于數(shù)字的。因此,如果我們要用它們來處理像文本這樣的東西,我們就需要一種方法當(dāng)然,我們可以開始(基本上就像ChatGPT那樣)為字典中的每個詞分配一個數(shù)字。但是,有一個重要的想法——例如,它是ChatGPT的核心種嘗試用數(shù)字陣列來表示事物“本質(zhì)”的方式——其特性是“附近的事物”因此,舉例來說,我們可以把一個詞的嵌入看作是試圖在一種“意義空間”中排列詞語,在這個空間中,以某種方式“在意義上接近”的詞語在嵌的數(shù)字列表。但是如果我們把它投射到二維空間,我們就可以顯示出嵌入的單詞是如何排列的例子:而且,是的,我們看到的東西在捕捉典型的日常印象方面做得非常好。但是,我們怎樣才能構(gòu)建這樣一個嵌入呢?大致的想法是查看大量的文本(這里是來自網(wǎng)絡(luò)的50億個詞),然后看不同的詞出現(xiàn)的“環(huán)境”有多相似。因此,例如,“alligator”和“crocodile”經(jīng)常會在其他類似的句子中互換出現(xiàn),這意味著它們在嵌入中會被放在附近。但是“蘿卜”和“老鷹”不會出現(xiàn)在其他類似的句子中,所以它們在嵌入中會被放在很遠的地方。但是,如何使用神經(jīng)網(wǎng)絡(luò)實際實現(xiàn)這樣的東西呢?讓我們先來討論一下不是針對單詞的嵌入,而是針對圖像的嵌入。我們想找到某種方法,通過數(shù)字列表來描述圖像,使“我們認為相似的圖像”被分配到相似的數(shù)字列表我們?nèi)绾闻袛辔覀兪欠駪?yīng)該“認為圖像相似”?好吧,如果我們的圖像是,例如,手寫的數(shù)字,我們可能會“認為兩個圖像是相似的”,如果它們是相同的數(shù)字。早些時候,我們討論了一個被訓(xùn)練來識別手寫數(shù)字的神經(jīng)網(wǎng)絡(luò)。我們可以認為這個神經(jīng)網(wǎng)絡(luò)被設(shè)置成在其最終輸出中把圖像放入10個不同的倉,每個數(shù)字一個倉。但是,如果我們在做出“這是一個‘4’”的最終決定之前,“攔截”神經(jīng)網(wǎng)絡(luò)內(nèi)部發(fā)生的事情呢?我們可能會想到,在神經(jīng)網(wǎng)絡(luò)中,有一些數(shù)字將圖像描述為“大部分是4,但有一點是2”或類似的情況。而我們的想法是挑選所以這里有一個概念。我們不是直接試圖描述“什么圖像在什么其他圖像附近”,而是考慮一個定義明確的任務(wù)(在這種情況下是數(shù)字識別),我們可以獲得明確的訓(xùn)練數(shù)據(jù)——然后利用這樣一個事實,即在做這個任務(wù)時,神經(jīng)網(wǎng)絡(luò)隱含地要做出相當(dāng)于“接近度決定”的決定。因此,我們不需要明確地談?wù)摗皥D像的接近性”,而只是談?wù)撘粋€圖像代表什么數(shù)字的具體問題,然后我們“把它留給神經(jīng)網(wǎng)絡(luò)”來隱含地決定這意味著什么“圖像的接近性”。那么,這對數(shù)字識別網(wǎng)絡(luò)來說是如何更詳細地工作的呢?我們可以認為這個網(wǎng)絡(luò)是由11個連續(xù)的層組成的,我們可以用圖標(biāo)來概括它(激活函數(shù)顯示為獨立的層):在開始時,我們向第一層輸入實際的圖像,用像素值的二維陣列表示。在最后一層,我們得到了一個由10個值組成的數(shù)組,我們可以認為這表示輸入圖像(手寫的4),最后一層的神經(jīng)元的值就是:換句話說,神經(jīng)網(wǎng)絡(luò)此時已經(jīng)“非常確定”這個圖像是4,為了實際得到輸出“4”,我們只需挑選出數(shù)值最大的神經(jīng)元的位置。但是,如果我們再往前看一步呢?網(wǎng)絡(luò)中的最后一個操作是一個所謂的softmax,它試圖“強制確定”。但在這之前,神經(jīng)元的值是:代表“4”的神經(jīng)元仍然有最高的數(shù)值。但在其他神經(jīng)元的數(shù)值中也有信息。我們可以期望這個數(shù)字列表在某種意義上可以用來描述圖像的“本質(zhì)”,從而提供我們可以用作嵌入的東西。因此,例如,這里的每一個4都有一個稍微不同的“簽名”(或“特征嵌入”)——都與8的非常不同:在這里,我們基本上是用10個數(shù)字來描述我們的圖像特征。但通常情況下,使用比這更多的數(shù)字會更好。例如,在我們的數(shù)字識別網(wǎng)絡(luò)中,我們可以通過挖掘前一層得到一個500個數(shù)字的數(shù)組,作為“圖像嵌入”使用。如果我們想對手寫數(shù)字的“圖像空間”進行明確的可視化,我們需要“降低維度”,有效地將我們得到的500維向量投射到,例如,三維空間:我們剛剛談到為圖像創(chuàng)建一個特征(從而嵌入),有效地基于識別圖像的相似性,確定(根據(jù)我們的訓(xùn)練集)它們是否對應(yīng)于同一個手寫數(shù)字。如果我們有一個訓(xùn)練集,比如說,確定每張圖片屬于5000種常見類型的物體(貓、狗、椅子……),我們就可以更普遍地對圖片做同樣的事情。通過這種方式,我們可以制作一個圖像嵌入,它被我們對常見物體的識別所“錨定”,但然后根據(jù)神經(jīng)網(wǎng)絡(luò)的行為“圍繞它進行概括”。關(guān)鍵是,只要這種行為與我們?nèi)祟惛兄徒忉寛D像的方式相一致,這將最終成為一個“對我們來說是正確的”的嵌入,并在實踐中做“類似人類判斷”的任務(wù)時有用。好吧,那么我們?nèi)绾巫裱瑯拥姆椒▉韺ふ覇卧~的嵌入呢?關(guān)鍵是要從一個我們可以隨時進行訓(xùn)練的關(guān)于單詞的任務(wù)開始。而標(biāo)準(zhǔn)的任務(wù)是“單詞預(yù)測”。假設(shè)我們得到了“thecat”?;谝粋€大型的文本語料庫(比如說,網(wǎng)絡(luò)上的文本內(nèi)容),可能“填空”的不同單詞的概率是多少?或者說,給定“黑_”,不同的“側(cè)翼詞”的概率是多少?我們?nèi)绾螢樯窠?jīng)網(wǎng)絡(luò)設(shè)置這個問題?歸根結(jié)底,我們必須用數(shù)字來表述一分配一個獨特的數(shù)字。因此,例如,“the”可能是914,而“cat”(前面有一個空格)可能是3542。(這些是GPT-2所使用的實際數(shù)字。)所以對于“the_cat”問題,我們的輸入可能是{914,3542}。輸出應(yīng)該是什么樣子的呢?好吧,它應(yīng)該是一個由50000個左右的數(shù)字組成的列表,有效地給再一次,為了找到一個嵌入,我們要在神經(jīng)網(wǎng)絡(luò)“達到結(jié)論”之前“攔截”它的“內(nèi)部”——然后撿起在那里出現(xiàn)的數(shù)字列表,我們可以把它看作是“每個詞的特征”。好吧,那么這些表征是什么樣子的呢?在過去的10年里,已經(jīng)有一系列不同的系統(tǒng)被開發(fā)出來(),每一個都是基于不同的神經(jīng)網(wǎng)絡(luò)方法。但最終,所有這些系統(tǒng)都是通過數(shù)百到數(shù)千在它們的原始形式中,這些“嵌入向量”是相當(dāng)無信息的。例如,這里是GPT-2產(chǎn)生的三個特定詞的原始嵌入向量:如果我們做一些事情,比如測量這些向量之間的距離,那么我們就可以發(fā)現(xiàn)像單詞的“接近性”這樣的東西。稍后我為這種嵌入的“認知”意義。但現(xiàn)在主要的一點是,我們有一種方法可以但實際上,我們可以更進一步,不僅僅是用數(shù)字的集合來描述單詞;我們還可以對單詞的序列,或者整個文本塊進行描述。在ChatGPT中,它就它把目前得到的文本,生成一個嵌入矢量來表示它。然后,它的目標(biāo)是找到接下來可能出現(xiàn)的不同詞匯的概率。它將其答案表示為一個數(shù)字列表, (嚴格地說,ChatGPT不處理單詞,而是處理“符號”(言單位,可能是整個單詞,也可能只是“pre”或“ing”或“ized”這樣的片段。使用符號使ChatGPT更容易處理罕見的、復(fù)合的和非英語的詞匯,有時,無論好壞,都可以發(fā)明新的詞匯。)好了,我們終于準(zhǔn)備好討論ChatGPT內(nèi)部的內(nèi)容了。是的,最終,它是一個巨大的神經(jīng)網(wǎng)絡(luò)——目前是所謂的GPT-3網(wǎng)絡(luò)的一個版本,有1750億個權(quán)重。在許多方面,這是一個非常像我們討論過的其他神經(jīng)網(wǎng)絡(luò)。但它是一個特別為處理語言問題而設(shè)置的神經(jīng)網(wǎng)絡(luò)。它在我們上面討論的第一個神經(jīng)網(wǎng)絡(luò)中,任何給定層的每個神經(jīng)元基本上都與前一層的每個神經(jīng)元相連(至少有一些權(quán)重)。但是,如果一個人在處理具有特殊的、已知的結(jié)構(gòu)的數(shù)據(jù)時,這種全連接的網(wǎng)絡(luò)(大概)是過剩的。因此,例如,在處理圖像的早期階段,典型的做法是使用所謂的卷積神經(jīng)網(wǎng)絡(luò)(“convnets”),其中的神經(jīng)元被有效地布置在一個類似于圖像但是,轉(zhuǎn)化器并不只是在序列中定義一個可以有連接的固定區(qū)域,而是引概念。也許有一天,僅僅啟動一個通用的神經(jīng)網(wǎng)絡(luò)并通過訓(xùn)練進行所有的定制是有意義的。但至少到現(xiàn)在為止,將事情“模塊化”在實踐中似乎是至關(guān)重要的,就像變壓器那樣,可能也像我們的大腦那樣。好吧,那么ChatGPT(或者說,它所基于的GPT-3網(wǎng)絡(luò))實際上是做什么的?回想一下,它的總體目標(biāo)是以“合理”的方式延續(xù)文本,基于它所看到的訓(xùn)練(包括從網(wǎng)絡(luò)上查看數(shù)十億頁的文本等),所以在任何時候,它都有一定數(shù)量的文本,它的目標(biāo)是為下一個要添加的標(biāo)記提出適當(dāng)?shù)倪x它的操作分為三個基本階段:首先,它獲取與迄今為止的文本相對應(yīng)的標(biāo)記序列,并找到代表這些標(biāo)記的嵌入(即一個數(shù)字陣列)。其次,它以“標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò)方式”對這一嵌入進行操作,數(shù)值“通過”網(wǎng)絡(luò)中的連續(xù)層,產(chǎn)生一個新的嵌入(即一個新的數(shù)字陣列)。然后,它從這個數(shù)組的最后一部分,生成一個大約50,000個值的數(shù)組,這些值變成了不同的可能的下一個標(biāo)記的概率。(而且,是的,恰好使用的標(biāo)記的數(shù)量與英語中的常用詞的數(shù)量相同,盡管只有大約3000個標(biāo)記是整個單詞,其余的是片段。)關(guān)鍵的一點是,這個管道的每一部分都是由一個神經(jīng)網(wǎng)絡(luò)實現(xiàn)的,其權(quán)重是由網(wǎng)絡(luò)的端到端訓(xùn)練決定的。換句話說,實際上,除了整體架構(gòu)之外,沒有任何東西是“明確設(shè)計的”;所有東西都是從訓(xùn)練數(shù)據(jù)中“學(xué)習(xí)”的。然而,在架構(gòu)的設(shè)置方式上有很多細節(jié),反映了各種經(jīng)驗和神經(jīng)網(wǎng)絡(luò)的傳說。而且,盡管這肯定是進入了雜草叢中,但我認為談?wù)撈渲械囊恍┘毠?jié)是有用的,尤其是為了了解建立像ChatGPT這樣的東西所需要的東西。輸入是一個由n個標(biāo)記組成的向量(如上一節(jié)所述,由1到50,000的整數(shù)表示)。這些標(biāo)記中的每一個都被(通過單層神經(jīng)網(wǎng)絡(luò))轉(zhuǎn)換成一個嵌入向量()。同時,還有一個“二級路徑”,它將標(biāo)記的(整數(shù))位置序列,并從這些整數(shù)中創(chuàng)建另一個嵌入向量。最后,來自令牌值和令牌位置的嵌入向量被加在一起為什么只是把令牌值和令牌位置的嵌入向量加在一起?我不認為這有什么特別的科學(xué)依據(jù)。只是各種不同的東西都被嘗試過,而這是一個似乎有效的方法。這也是神經(jīng)網(wǎng)絡(luò)傳說的一部分,從某種意義上說,只要你的設(shè)置是“大致正確的”,通常就可以通過做充分的訓(xùn)練來確定細節(jié),而不需要下面是嵌入模塊所做的工作,對字符串“hellohellohellohellohellobyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebyebye2”:每個標(biāo)記的嵌入向量的元素都顯示在頁面下方,在整個頁面上,我們首先看到的是“hello”的嵌入,然后是“bye”的嵌入。上面的第二個數(shù)組是位是GPT-2)。好了,在嵌入模塊之后,是轉(zhuǎn)化器的“主要事件”:一連串所謂的“注意塊”(GPT-2為12個,ChatGPT的GPT-3為96個)。這一切都很復(fù)雜——讓人想起典型的難以理解的大型工程系統(tǒng),或者,生物系統(tǒng)。但無論如何,這里是一個單一的“注意塊”的示意圖(對于GPT-2):在每個這樣的注意力塊中,有一系列的“注意力頭”(同數(shù)值塊的。(是的,我們不知道為什么分割嵌入向量是個好主意,或者它的不同部分有什么“意義”;這只是“被發(fā)現(xiàn)可行”的事情之一)。好吧,那么注意頭是做什么的?基本上,它們是一種在標(biāo)記序列中“回顧”的方式(即在迄今為止產(chǎn)生的文本中),并將過去的內(nèi)容“打包”成有在上面的第一節(jié)中,我們談到了使用2-gram概率來根據(jù)它們的直接前身——因此有可能捕捉到,比如說,動詞可以指代在句子中出現(xiàn)在它們之在更詳細的層面上,注意力頭所做的是以一定的權(quán)重重新組合與不同標(biāo)記相關(guān)的嵌入向量中的大塊。因此,例如,在第一個注意力區(qū)塊中的12個注意力頭(在GPT-2中)對上面的“hello,bye”字符串有如下(all-the-way-beginning-the-sequence-of-tokens”)模式的“重組權(quán)值”:在經(jīng)過注意力頭的處理后,產(chǎn)生的“重新加權(quán)的嵌入向量”(為768,ChatGPT的GPT-3的長度為12288)被傳遞到一個標(biāo)準(zhǔn)的“全連重矩陣的圖(這里是GPT-2):采用64×64的移動平均數(shù),一些(隨機漫步式的)結(jié)構(gòu)開始出現(xiàn):是什么決定了這種結(jié)構(gòu)?最終,它可能是人類語言特征的一些“神經(jīng)網(wǎng)絡(luò)編碼”。但到現(xiàn)在為止,這些特征可能是什么還很不清楚。實際上,我們),并發(fā)現(xiàn),是的,里面很復(fù)雜,而且我們不了解它——盡管最終它產(chǎn)生了可識別的人類語言。好吧,在經(jīng)歷了一個注意力區(qū)塊之后,我們得到了一個新的嵌入向量——然后它又被連續(xù)地傳遞到其他的注意力區(qū)塊中(GPT-3有96個)。每個注意力區(qū)塊都有自己特定的“注意力”和“完全連接”權(quán)重模式。這里是GPT-2的“你好,再見”輸入的注意權(quán)重序列,用():這里是全連接層的(移動平均)“矩陣”:奇怪的是,盡管這些“權(quán)重矩陣”在不同的注意力塊中看起來很相似,但權(quán)重的大小分布可能有些不同(而且不總是高斯的):那么,在經(jīng)歷了所有這些注意力區(qū)塊之后,轉(zhuǎn)化器的凈效果是什么?從本質(zhì)上講,它是將原始的符號序列的嵌入集合轉(zhuǎn)化為最終的集合。而ChatGPT的具體工作方式是在這個集合中提取最后一個嵌入,并對其進行“解碼”,以產(chǎn)生一個關(guān)于下一個標(biāo)記應(yīng)該是什么的概率列表。這就是ChatGPT的概要內(nèi)容。它可能看起來很復(fù)雜(尤其是因為它有許多不可避免的、有點武斷的“工程選擇”),但實際上,所涉及的最終元經(jīng)網(wǎng)絡(luò),每個神經(jīng)元都在進行簡單的操作,即接受一組數(shù)字輸入,然后將ChatGPT的原始輸入是一個數(shù)字數(shù)組(到目前為止符號的嵌入向量),當(dāng)ChatGPT“運行”以產(chǎn)生一個新的符號時,所發(fā)生的只是這些數(shù)字“通過”神經(jīng)網(wǎng)的各層,每個神經(jīng)元“做它的事”,并將結(jié)果傳遞給下一層的神經(jīng)這是一個與典型的計算系統(tǒng)——如圖靈機——非常不同的設(shè)置,在圖靈機中,結(jié)果是由相同的計算元素反復(fù)“再處理”的。在這里,至少在生成一個特定的輸出符號時,每個計算元素(即神經(jīng)元)只被使用一次。但在某種意義上,即使在ChatGPT中,仍然有一個重復(fù)使用計算元素的“外循環(huán)”。因為當(dāng)ChatGPT要生成一個新的標(biāo)記時,它總是“讀取”(即作為輸入)它之前的整個標(biāo)記序列,包括ChatGPT自己之前“寫”的標(biāo)記。我們可以認為這種設(shè)置意味著ChatGPT——至少在其最外層——涉及到一個“反饋循環(huán)”,盡管在這個循環(huán)中,每一次迭代都明確地顯示為一個出現(xiàn)在其生成的文本中的標(biāo)記。但讓我們回到ChatGPT的核心:反復(fù)用于生成每個標(biāo)記的神經(jīng)網(wǎng)絡(luò)。在某種程度上,它非常簡單:一整個相同的人工神經(jīng)元的集合。網(wǎng)絡(luò)的某些部分只是由(“完全連接”)的神經(jīng)元層組成,其中某一層的每個神經(jīng)元都與前一層的每個神經(jīng)元相連(有一定的權(quán)重)。但是,特別是它的變壓器結(jié)構(gòu),ChatGPT有更多的結(jié)構(gòu)部分,其中只有不同層的特定神經(jīng)元被連接。(當(dāng)然,人們?nèi)匀豢梢哉f,“所有的神經(jīng)元都是連接的”——但有些神經(jīng)元的權(quán)重為零)。此外,ChatGPT中的神經(jīng)網(wǎng)的某些方面并不是最自然地被認為是由“同質(zhì)”層組成的。例如,正如上面的圖標(biāo)摘要所示,在一個注意力區(qū)塊中,”,然后每個拷貝經(jīng)過不同的“處理路徑”,可能涉及不同數(shù)量的層,然后才重新組合。但是,雖然這可能是對正在發(fā)生的事情的一種方便的表述,但至少在原則上總是可以考慮“密集地填入”層,但只是讓一些權(quán)重為零。如果我們看一下ChatGPT的最長路徑,大約有400個(核心)層參與其中——在某些方面不是一個巨大的數(shù)字。但是有數(shù)以百萬計的神經(jīng)元——總共有1750億個連接,因此有1750億個權(quán)重。需要認識到的一點是,每當(dāng)ChatGPT生成一個新的令牌時,它都要進行涉及這些權(quán)重中每在實現(xiàn)上,這些計算可以“按層”組織成高度并行的陣列操作,可以方便地在GPU上完成。但是,對于產(chǎn)生的每一個標(biāo)記,仍然要進行1750億次計算(最后還要多一點)——因此,是的,用ChatGPT生成一個長的文本需要一段時間,這并不令人驚訝。但最終,最了不起的是,所有這些操作——它們各自都很簡單——能夠強調(diào)的是,(至少到目前為止,我們知道)沒有任何“最終的理論理由”來解釋這樣的工作。事實上,正如我們將要討論的那樣,我認為我們必須把這看作是一個潛在的令人驚訝的科學(xué)發(fā)現(xiàn):在像ChatGPT這樣的神經(jīng)網(wǎng)絡(luò)中,有可能捕捉到人類大腦在生成語言方面的本質(zhì)。好了,現(xiàn)在我們已經(jīng)給出了ChatGPT建立后的工作概要。但它是如何建立的呢?其神經(jīng)網(wǎng)絡(luò)中的1750億個權(quán)重是如何確定的?基本上,它們是非常大規(guī)模的訓(xùn)練的結(jié)果,基于一個巨大的文本語料庫——網(wǎng)絡(luò)上的、正如我們所說的,即使考慮到所有的訓(xùn)練數(shù)據(jù),神經(jīng)網(wǎng)絡(luò)是否能夠成功地產(chǎn)生“類似人類”的文本,這一點也不明顯。而且,再一次,似乎需要詳細的工程來實現(xiàn)這一目標(biāo)。但ChatGPT的最大驚喜和發(fā)現(xiàn)是,它是可能的。實際上,一個“只有”1750億個權(quán)重的神經(jīng)網(wǎng)絡(luò)可以對人類所寫的文在現(xiàn)代,有很多人類寫的文本是以數(shù)字形式存在的。公共網(wǎng)絡(luò)至少有幾十億人寫的網(wǎng)頁,總共可能有一萬億字的文本。如果包括非公開網(wǎng)頁,這些數(shù)字可能至少要大100倍。到目前為止,已經(jīng)有超過500萬本數(shù)字化書籍可供使用(在曾經(jīng)出版過的1億本左右的書籍中),又有1000億左右的作為個人比較,我一生中發(fā)表的材料總字數(shù)不到300萬字,在過去30年 中,我寫了大約萬字的電子郵件,總共打了大約5000萬字,在過去幾年中,我在直播中說了1000多萬字。而且,是的,我將從所有這些中訓(xùn)練一個機器人)。但是,好吧,鑒于所有這些數(shù)據(jù),我們?nèi)绾螐闹杏?xùn)練出一個神經(jīng)網(wǎng)絡(luò)呢?基本過程與我們在上面的簡單例子中討論的非常相似。你提出一批例子,然后你調(diào)整網(wǎng)絡(luò)中的權(quán)重,使網(wǎng)絡(luò)在這些例子上的誤差(從錯誤中“反向傳播”的主要問題是,每次你這樣做,網(wǎng)絡(luò)中的每個權(quán)重通常至少會有微小的變化,而且有大量的權(quán)重需要處理。(實際的“反向計算”通常只比正向計算難一個小常數(shù))。有了現(xiàn)代的GPU硬件,從成千上萬的例子中并行計算出結(jié)果是很簡單的。但是,當(dāng)涉及到實際更新神經(jīng)網(wǎng)絡(luò)中的權(quán)重時,目前的方法要求我們基本上是一批一批地做。(是的,這可能是實際的大腦——其計算和記憶元素的結(jié)合——目前至少有一個架構(gòu)上的優(yōu)勢)。即使在我們之前討論的看似簡單的學(xué)習(xí)數(shù)字函數(shù)的案例中,我們發(fā)現(xiàn)我們經(jīng)常不得不使用數(shù)百萬個例子來成功訓(xùn)練一個網(wǎng)絡(luò),至少從頭開始。那么,這意味著我們需要多少個例子來訓(xùn)練一個“類人語言”模型呢?似乎沒有任何基本的“理論”方法可以知道。但是在實踐中,ChatGPT已經(jīng)成功地有些文本被多次輸入,有些只有一次。但不知何故,它從它看到的文本中“得到了它需要的東西”。但是,考慮到需要學(xué)習(xí)的文本量,它應(yīng)該需要多大的網(wǎng)絡(luò)才能“學(xué)好”?同樣,我們還沒有一個基本的理論方法來說明。最終——我們將在下面進一步討論——人類語言大概有某種“總的算法內(nèi)容”,以及人類通常用它說什么。但接下來的問題是,神經(jīng)網(wǎng)絡(luò)在實現(xiàn)基于該算法內(nèi)容的模型時將會有多大的效率。我們也不知道——盡管最后我們可以注意到,ChatGPT使用了幾千億個權(quán)重——與它所獲得的訓(xùn)練數(shù)據(jù)的總字數(shù)(或令牌)相比,它所做的事情是相當(dāng)?shù)摹T谀承┓矫?也許令人驚訝的是(盡管在ChatGPT的小型類似物中也有經(jīng)驗觀察),似乎工作良好的“網(wǎng)絡(luò)規(guī)?!迸c“訓(xùn)練數(shù)據(jù)的規(guī)?!比绱讼嗨啤.吘?這肯定不是說“在ChatGPT內(nèi)”所有來自網(wǎng)絡(luò)和書籍等的文本都被“直接存儲”了。因為在ChatGPT里面的實際上是一堆數(shù)字——精度略低于10位——是對所有這些文本的總體結(jié)構(gòu)的某種分布式編碼。換句話說,我們可以問人類語言的“有效信息含量”是什么,以及通常用它說什么。這里有語言實例的原始語料庫。然后是C中的表述。這個表征很可能與“算法上最小”的表征相去甚遠(我們將在下面討論)。但它是一個很容易被神經(jīng)網(wǎng)絡(luò)使用的表征。在這種表示法中,訓(xùn)練數(shù)據(jù)的“壓縮”程度似乎很低;平均而言,似乎只需要不到一個當(dāng)我們運行ChatGPT來生成文本時,我們基本上不得不使用每個權(quán)重一次。因此,如果有n個權(quán)重,我們有n個計算步驟要做——盡管在實踐中,許多步驟通??梢栽贕PU中并行完成。但是,如果我們需要大約n個字的訓(xùn)練數(shù)據(jù)來設(shè)置這些權(quán)重,那么從我們上面所說的,我們可以得出結(jié)論,我們需要大約n2個計算步驟來進行網(wǎng)絡(luò)訓(xùn)練——這就是為什么,用目前的方法,人們最終需要談?wù)摂?shù)十億美元的訓(xùn)練工作。—10—文本。但事實證明,還有一個明顯相當(dāng)重要的部分。一旦它完成了對所展示的原始語料庫的“原始訓(xùn)練”,ChatGPT內(nèi)的神經(jīng)網(wǎng)絡(luò)就可以開始生成自己的文本,繼續(xù)提示等。但是,雖然這樣做的結(jié)果往往看起來很合理,但它們往往——特別是對于較長的文本——以往往相當(dāng)非人類的方式“游離”。這不是人們可以輕易發(fā)現(xiàn)的,比如說,通過構(gòu)建ChatGPT的一個關(guān)鍵想法是,在“被動地閱讀”網(wǎng)絡(luò)等事物之后,還有一個步驟:讓實際的人類主動與ChatGPT互動,看看它產(chǎn)生了什么,但神經(jīng)網(wǎng)絡(luò)如何使用這種反饋呢?第一步只是讓人類對神經(jīng)網(wǎng)絡(luò)的結(jié)果進行評價。但隨后又建立了另一個神經(jīng)網(wǎng)絡(luò)模型,試圖預(yù)測這些評分。但現(xiàn)在這個預(yù)測模型可以在原始網(wǎng)絡(luò)上運行——基本上就像一個損失函數(shù),實際上是讓該網(wǎng)絡(luò)通過人類的反饋來“調(diào)高”。而實踐中的結(jié)果似乎對系總的來說,有趣的是,“最初訓(xùn)練的”網(wǎng)絡(luò)似乎只需要很少的“戳”就能讓它向特定的方向有用地發(fā)展。人們可能會認為,要讓網(wǎng)絡(luò)表現(xiàn)得像“學(xué)到了新東西”,就必須運行訓(xùn)練算法,調(diào)整權(quán)重,等等。但事實并非如此。相反,基本上只需要告訴ChatGPT一些東西,作為你所給的提示的一部分,然后它就可以在生成文本時成功地利用你告訴它的東西。我認為,這一點再次成為理解ChatGPT“真正在做什么”以及它與這當(dāng)然有一些類似于人類的東西:至少在它接受了所有的預(yù)訓(xùn)練之后,你可以告訴它一些東西,而它可以“記住它”——至少“足夠長的時間”來使用它生成一段文本。那么,在這樣的情況下發(fā)生了什么?的地方。但這似乎并不靠譜。相反,似乎更有可能的是,是的,這些元素已經(jīng)在那里了,但具體細節(jié)是由“這些元素之間的軌跡”這樣的東西來定義的,這就是你告訴它的東西。事實上,就像人類一樣,如果你告訴它一些奇怪的、出乎意料的、完全不適合它所知道的框架的東西,它似乎并不能成功地“整合”這個。只有當(dāng)它基本上以一種相當(dāng)簡單的方式騎在它已經(jīng)擁有的框架之上時,它才能“整合”它。還值得再次指出的是,對于神經(jīng)網(wǎng)絡(luò)能夠“接收”的東西,不可避免地存在“算法限制”。告訴它“淺層”的規(guī)則,如“這個到那個”,神經(jīng)網(wǎng)絡(luò)很可能能夠很好地表示和再現(xiàn)這些規(guī)則——事實上,它從語言中“已經(jīng)知道”但是,如果試圖給它制定一個實際的“深度”計算規(guī)則,涉及許多潛在的不可簡化的計算步驟,它就無法工作了。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論