博客專欄

EEPW首頁 > 博客 > 萬字長文解釋 ChatGPT 在做什么,以及為什么它能發(fā)揮作用?(2)

萬字長文解釋 ChatGPT 在做什么,以及為什么它能發(fā)揮作用?(2)

發(fā)布人:AI科技大本營 時間:2023-02-21 來源:工程師 發(fā)布文章

圖片

什么是模型?


假設(shè)你想知道(就像伽利略在 15 世紀末所做的那樣),從比薩塔的每一層落下的炮彈要多長時間才能落地。那么,你可以在每一種情況下測量它,并將結(jié)果制成表格。或者你可以做理論科學(xué)的精髓:建立一個模型,給出某種計算答案的程序,而不是僅僅測量和記住每個案例。

讓我們想象一下,我們有(有點理想化的)數(shù)據(jù),說明炮彈從不同樓層落下需要多長時間。

圖片

我們?nèi)绾斡嬎愠鏊鼜囊粋€我們沒有明確數(shù)據(jù)的樓層落下需要多長時間?在這種特殊情況下,我們可以用已知的物理學(xué)定律來計算。但是,如果說我們所得到的只是數(shù)據(jù),而我們不知道有什么基本定律在支配它。那么我們可以做一個數(shù)學(xué)上的猜測,比如說,也許我們應(yīng)該用一條直線作為模型。

圖片

我們可以選擇不同的直線。但這是平均來說最接近我們所給的數(shù)據(jù)的一條。而根據(jù)這條直線,我們可以估算出任何樓層的下降時間。

我們怎么知道要在這里嘗試使用一條直線呢?在某種程度上我們不知道。這只是數(shù)學(xué)上簡單的東西,而我們已經(jīng)習(xí)慣了這樣的事實:我們測量的很多數(shù)據(jù)都被數(shù)學(xué)上簡單的東西很好地擬合了。我們可以嘗試一些數(shù)學(xué)上更復(fù)雜的東西 —— 比如說 a + bx + cx2,然后在這種情況下,我們做得更好:

圖片

不過,事情可能會出大問題。比如這里是我們用 a + b/c + x sin(x) 也就做成:

圖片

值得理解的是,從來沒有一個 “無模型的模型”。你使用的任何模型都有一些特定的基礎(chǔ)結(jié)構(gòu),然后有一組 “你可以轉(zhuǎn)動的旋鈕”(即你可以設(shè)置的參數(shù))來適應(yīng)你的數(shù)據(jù)。而在 ChatGPT 的案例中,使用了很多這樣的 “旋鈕” —— 實際上,有 1750 億個。

但令人矚目的是,ChatGPT 的底層結(jié)構(gòu) —— “僅僅” 有這么多的參數(shù) —— 足以使一個計算下一個單詞概率的模型 “足夠好”,從而為我們提供合理的文章長度的文本。


圖片

類人的任務(wù)模型


我們上面舉的例子涉及到為數(shù)字數(shù)據(jù)建立模型,這些數(shù)據(jù)基本上來自于簡單的物理學(xué) —— 幾個世紀以來我們都知道 “簡單數(shù)學(xué)適用”。但是對于 ChatGPT 來說,我們必須為人類語言文本建立一個模型,即由人腦產(chǎn)生的那種模型。而對于這樣的東西,我們(至少現(xiàn)在)還沒有類似 “簡單數(shù)學(xué)” 的東西。那么,它的模型可能是什么樣的呢?

在我們談?wù)撜Z言之前,讓我們先談?wù)劻硪豁楊愃迫祟惖娜蝿?wù):識別圖像。而作為一個簡單的例子,讓我們考慮數(shù)字的圖像(是的,這是一個經(jīng)典的機器學(xué)習(xí)例子):

圖片

我們可以做的一件事是為每個數(shù)字獲取一堆樣本圖像:

圖片

然后,為了找出我們輸入的圖像是否對應(yīng)于某個特定的數(shù)字,我們只需與我們擁有的樣本進行明確的逐像素比較。但作為人類,我們似乎可以做得更好 —— 因為我們?nèi)匀豢梢宰R別數(shù)字,即使它們是手寫的,并且有各種各樣的修改和扭曲。

圖片

當我們?yōu)樯厦娴臄?shù)字數(shù)據(jù)建立一個模型時,我們能夠取一個給定的數(shù)字值 x,然后為特定的 a 和 b 計算 a + bx。因此,如果我們把這里的每個像素的灰度值當作某個變量 xi,是否有一些所有這些變量的函數(shù),在評估時告訴我們這個圖像是什么數(shù)字?事實證明,有可能構(gòu)建這樣一個函數(shù)。不足為奇的是,這并不特別簡單。一個典型的例子可能涉及 50 萬次數(shù)學(xué)運算。

但最終的結(jié)果是,如果我們把一幅圖像的像素值集合輸入這個函數(shù),就會得出一個數(shù)字,指定我們的圖像是哪個數(shù)字。稍后,我們將討論如何構(gòu)建這樣一個函數(shù),以及神經(jīng)網(wǎng)絡(luò)的概念。但現(xiàn)在讓我們把這個函數(shù)當作黑匣子,我們輸入例如手寫數(shù)字的圖像(作為像素值的陣列),然后我們得到這些數(shù)字對應(yīng)的數(shù)字:

圖片

但這里到底發(fā)生了什么?比方說,我們逐步模糊一個數(shù)字。有一段時間,我們的函數(shù)仍然 “識別” 它,在這里是一個 “2”。但很快它就 “失去” 了,并開始給出 “錯誤” 的結(jié)果:

圖片

但為什么我們說這是一個 “錯誤” 的結(jié)果呢?在這種情況下,我們知道我們通過模糊一個 “2” 得到所有的圖像。但是,如果我們的目標是制作一個人類識別圖像的模型,那么真正要問的問題是,如果遇到這些模糊的圖像,在不知道其來源的情況下,人類會做什么。

如果我們從我們的函數(shù)中得到的結(jié)果通常與人類會說的話一致,我們就有一個 “好的模型”。而非微不足道的科學(xué)事實是,對于像這樣的圖像識別任務(wù),我們現(xiàn)在基本上知道如何構(gòu)建這樣的函數(shù)。

我們能 “從數(shù)學(xué)上證明” 它們的作用嗎?嗯,不能。因為要做到這一點,我們必須有一個關(guān)于我們?nèi)祟愓谧鍪裁吹臄?shù)學(xué)理論。以 “2” 圖像為例,改變幾個像素。我們可以想象,只有幾個像素 “不合適”,我們還是應(yīng)該認為這個圖像是 “2”。但這應(yīng)該到什么程度呢?這是一個關(guān)于人類視覺感知的問題。而且,是的,對于蜜蜂或章魚來說,答案無疑是不同的 —— 對于假定的外星人來說,可能完全不同。


圖片

神經(jīng)網(wǎng)絡(luò)


好吧,那么我們用于圖像識別等任務(wù)的典型模型究竟是如何工作的呢?目前最流行、最成功的方法是使用神經(jīng)網(wǎng)絡(luò)。在 20 世紀 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)元。粗略估計,任何給定的神經(jīng)元是否在某一時刻產(chǎn)生電脈沖,取決于它從其他神經(jīng)元那里收到的脈沖 —— 不同的連接有不同的 “權(quán)重” 貢獻。

當我們 “看到一個圖像” 時,所發(fā)生的事情是,當圖像的光子落在眼睛后面的(“光感受器”)細胞上時,它們在神經(jīng)細胞中產(chǎn)生電信號。這些神經(jīng)細胞與其他神經(jīng)細胞相連,最終信號通過一整層的神經(jīng)元。而正是在這個過程中,我們 “識別” 了圖像,最終 “形成了一個想法”,即我們 “看到了一個 2”(也許最后會做一些事情,如大聲說 “2” 這個詞)。

上一節(jié)中的 “黑盒子” 函數(shù)是這樣一個神經(jīng)網(wǎng)絡(luò)的 “數(shù)學(xué)化” 版本。它剛好有 11 層(雖然只有 4 個 “核心層”)。

圖片

這個神經(jīng)網(wǎng)并沒有什么特別的 “理論推導(dǎo)”;它只是在 1998 年作為一項工程而構(gòu)建的東西,并且被發(fā)現(xiàn)是有效的。(當然,這與我們描述我們的大腦是通過生物進化過程產(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ù)”,我們不是在做類似于識別給定圖像 “看起來最像” 的數(shù)字的事情 —— 而是很直接地看到給定點最接近哪個點。(我們在這里展示的 “Voronoi 圖” 設(shè)置是在二維歐幾里得空間中分離點;數(shù)字識別任務(wù)可以被認為是在做非常類似的事情 —— 但卻是在一個由每張圖像中所有像素的灰度等級形成的 784 維空間中。

那么,我們?nèi)绾问挂粋€神經(jīng)網(wǎng)絡(luò) “完成一個識別任務(wù)”?讓我們考慮這個非常簡單的案例:

圖片

我們的目標是獲取一個對應(yīng)于 {x,y} 位置的 “輸入”,然后將其 “識別” 為它最接近的三個點中的任何一個。或者,換句話說,我們希望神經(jīng)網(wǎng)絡(luò)能夠計算出一個類似于 {x,y} 的函數(shù):

圖片

那么,我們?nèi)绾斡蒙窠?jīng)網(wǎng)絡(luò)做到這一點呢?歸根結(jié)底,神經(jīng)網(wǎng)是一個理想化的 “神經(jīng)元” 的連接集合 —— 通常按層排列 —— 一個簡單的例子是:

圖片

每個 “神經(jīng)元” 都被有效地設(shè)置為評估一個簡單的數(shù)字函數(shù)。為了 “使用” 這個網(wǎng)絡(luò),我們只需在頂部輸入數(shù)字(如我們的坐標 x 和 y),然后讓每一層的神經(jīng)元 “評估它們的函數(shù)”,并通過網(wǎng)絡(luò)向前輸入結(jié)果 —— 最終在底部產(chǎn)生最終的結(jié)果。

圖片

在傳統(tǒng)的(受生物啟發(fā)的)設(shè)置中,每個神經(jīng)元實際上都有一組來自上一層神經(jīng)元的 “傳入連接”,每個連接都被賦予一定的 “權(quán)重”(可以是一個正數(shù)或負數(shù))。一個給定的神經(jīng)元的值是通過將 “前一個神經(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)元選擇不同;函數(shù) f 通常是相同的。

計算 w.x + b 只是一個矩陣乘法和加法的問題。激活函數(shù) "f 引入了非線性(并最終導(dǎo)致了非線性行為)。通常使用各種激活函數(shù);這里我們只使用 Ramp(或 ReLU):

圖片

對于我們希望神經(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ù) —— 盡管它可能寫得很亂。對于上面的例子,它就是:

圖片

ChatGPT 的神經(jīng)網(wǎng)絡(luò)也只是對應(yīng)于這樣的一個數(shù)學(xué)函數(shù) —— 但實際上有數(shù)十億個術(shù)語。

但讓我們回到單個神經(jīng)元上。下面是一個有兩個輸入(代表坐標 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ò)通常能更好地逼近我們的目標函數(shù)。而在 “每個吸引子盆地的中間”,我們通常會得到我們想要的答案。但在邊界 —— 神經(jīng)網(wǎng)絡(luò) “很難下定決心” 的地方 —— 情況可能會更加混亂。

在這個簡單的數(shù)學(xué)風格的 “識別任務(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)來說呢?好吧,當你展示一張貓的圖片時,可以直接看到每個 “神經(jīng)元” 的作用。但是,即使要獲得一個基本的可視化,通常也是非常困難的。

在我們用于解決上述 “最近點” 問題的最終網(wǎng)絡(luò)中,有 17 個神經(jīng)元。在用于識別手寫數(shù)字的網(wǎng)絡(luò)中,有 2190 個。而在我們用來識別貓和狗的網(wǎng)絡(luò)中,有 60,650 個。通常情況下,要將相當于 60,650 個維度的空間可視化是相當困難的。但由于這是一個為處理圖像而設(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ò)的 “貓識別理論”。我們可以說 “看,這個特定的網(wǎng)絡(luò)做到了” —— 這立即給了我們一些關(guān)于 “問題有多難” 的感覺(例如,可能需要多少個神經(jīng)元或?qū)樱?。但至少到現(xiàn)在為止,我們還沒有辦法對網(wǎng)絡(luò)正在做的事情進行 “敘述性描述”。也許這是因為它在計算上確實是不可簡化的,而且除了明確地追蹤每一個步驟之外,沒有一般的方法可以找到它在做什么。也可能只是因為我們還沒有 “弄清科學(xué)”,還沒有確定 “自然法則”,使我們能夠總結(jié)出正在發(fā)生的事情。

當我們談?wù)撚?ChatGPT 生成語言時,我們會遇到同樣的問題。而且同樣不清楚是否有辦法 “總結(jié)它在做什么”。但是語言的豐富性和細節(jié)(以及我們在這方面的經(jīng)驗)可能會讓我們比圖像走得更遠。


*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉