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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論