萬(wàn)字長(zhǎng)文解釋 ChatGPT 在做什么,以及為什么它能發(fā)揮作用?(2)
假設(shè)你想知道(就像伽利略在 15 世紀(jì)末所做的那樣),從比薩塔的每一層落下的炮彈要多長(zhǎng)時(shí)間才能落地。那么,你可以在每一種情況下測(cè)量它,并將結(jié)果制成表格?;蛘吣憧梢宰隼碚摽茖W(xué)的精髓:建立一個(gè)模型,給出某種計(jì)算答案的程序,而不是僅僅測(cè)量和記住每個(gè)案例。
讓我們想象一下,我們有(有點(diǎn)理想化的)數(shù)據(jù),說(shuō)明炮彈從不同樓層落下需要多長(zhǎng)時(shí)間。
我們?nèi)绾斡?jì)算出它從一個(gè)我們沒(méi)有明確數(shù)據(jù)的樓層落下需要多長(zhǎng)時(shí)間?在這種特殊情況下,我們可以用已知的物理學(xué)定律來(lái)計(jì)算。但是,如果說(shuō)我們所得到的只是數(shù)據(jù),而我們不知道有什么基本定律在支配它。那么我們可以做一個(gè)數(shù)學(xué)上的猜測(cè),比如說(shuō),也許我們應(yīng)該用一條直線作為模型。
我們可以選擇不同的直線。但這是平均來(lái)說(shuō)最接近我們所給的數(shù)據(jù)的一條。而根據(jù)這條直線,我們可以估算出任何樓層的下降時(shí)間。
我們?cè)趺粗酪谶@里嘗試使用一條直線呢?在某種程度上我們不知道。這只是數(shù)學(xué)上簡(jiǎn)單的東西,而我們已經(jīng)習(xí)慣了這樣的事實(shí):我們測(cè)量的很多數(shù)據(jù)都被數(shù)學(xué)上簡(jiǎn)單的東西很好地?cái)M合了。我們可以嘗試一些數(shù)學(xué)上更復(fù)雜的東西 —— 比如說(shuō) a + bx + cx2,然后在這種情況下,我們做得更好:
不過(guò),事情可能會(huì)出大問(wèn)題。比如這里是我們用 a + b/c + x sin(x) 也就做成:
值得理解的是,從來(lái)沒(méi)有一個(gè) “無(wú)模型的模型”。你使用的任何模型都有一些特定的基礎(chǔ)結(jié)構(gòu),然后有一組 “你可以轉(zhuǎn)動(dòng)的旋鈕”(即你可以設(shè)置的參數(shù))來(lái)適應(yīng)你的數(shù)據(jù)。而在 ChatGPT 的案例中,使用了很多這樣的 “旋鈕” —— 實(shí)際上,有 1750 億個(gè)。
但令人矚目的是,ChatGPT 的底層結(jié)構(gòu) —— “僅僅” 有這么多的參數(shù) —— 足以使一個(gè)計(jì)算下一個(gè)單詞概率的模型 “足夠好”,從而為我們提供合理的文章長(zhǎng)度的文本。
我們上面舉的例子涉及到為數(shù)字?jǐn)?shù)據(jù)建立模型,這些數(shù)據(jù)基本上來(lái)自于簡(jiǎn)單的物理學(xué) —— 幾個(gè)世紀(jì)以來(lái)我們都知道 “簡(jiǎn)單數(shù)學(xué)適用”。但是對(duì)于 ChatGPT 來(lái)說(shuō),我們必須為人類語(yǔ)言文本建立一個(gè)模型,即由人腦產(chǎn)生的那種模型。而對(duì)于這樣的東西,我們(至少現(xiàn)在)還沒(méi)有類似 “簡(jiǎn)單數(shù)學(xué)” 的東西。那么,它的模型可能是什么樣的呢?
在我們談?wù)撜Z(yǔ)言之前,讓我們先談?wù)劻硪豁?xiàng)類似人類的任務(wù):識(shí)別圖像。而作為一個(gè)簡(jiǎn)單的例子,讓我們考慮數(shù)字的圖像(是的,這是一個(gè)經(jīng)典的機(jī)器學(xué)習(xí)例子):
我們可以做的一件事是為每個(gè)數(shù)字獲取一堆樣本圖像:
然后,為了找出我們輸入的圖像是否對(duì)應(yīng)于某個(gè)特定的數(shù)字,我們只需與我們擁有的樣本進(jìn)行明確的逐像素比較。但作為人類,我們似乎可以做得更好 —— 因?yàn)槲覀內(nèi)匀豢梢宰R(shí)別數(shù)字,即使它們是手寫(xiě)的,并且有各種各樣的修改和扭曲。
當(dāng)我們?yōu)樯厦娴臄?shù)字?jǐn)?shù)據(jù)建立一個(gè)模型時(shí),我們能夠取一個(gè)給定的數(shù)字值 x,然后為特定的 a 和 b 計(jì)算 a + bx。因此,如果我們把這里的每個(gè)像素的灰度值當(dāng)作某個(gè)變量 xi,是否有一些所有這些變量的函數(shù),在評(píng)估時(shí)告訴我們這個(gè)圖像是什么數(shù)字?事實(shí)證明,有可能構(gòu)建這樣一個(gè)函數(shù)。不足為奇的是,這并不特別簡(jiǎn)單。一個(gè)典型的例子可能涉及 50 萬(wàn)次數(shù)學(xué)運(yùn)算。
但最終的結(jié)果是,如果我們把一幅圖像的像素值集合輸入這個(gè)函數(shù),就會(huì)得出一個(gè)數(shù)字,指定我們的圖像是哪個(gè)數(shù)字。稍后,我們將討論如何構(gòu)建這樣一個(gè)函數(shù),以及神經(jīng)網(wǎng)絡(luò)的概念。但現(xiàn)在讓我們把這個(gè)函數(shù)當(dāng)作黑匣子,我們輸入例如手寫(xiě)數(shù)字的圖像(作為像素值的陣列),然后我們得到這些數(shù)字對(duì)應(yīng)的數(shù)字:
但這里到底發(fā)生了什么?比方說(shuō),我們逐步模糊一個(gè)數(shù)字。有一段時(shí)間,我們的函數(shù)仍然 “識(shí)別” 它,在這里是一個(gè) “2”。但很快它就 “失去” 了,并開(kāi)始給出 “錯(cuò)誤” 的結(jié)果:
但為什么我們說(shuō)這是一個(gè) “錯(cuò)誤” 的結(jié)果呢?在這種情況下,我們知道我們通過(guò)模糊一個(gè) “2” 得到所有的圖像。但是,如果我們的目標(biāo)是制作一個(gè)人類識(shí)別圖像的模型,那么真正要問(wèn)的問(wèn)題是,如果遇到這些模糊的圖像,在不知道其來(lái)源的情況下,人類會(huì)做什么。
如果我們從我們的函數(shù)中得到的結(jié)果通常與人類會(huì)說(shuō)的話一致,我們就有一個(gè) “好的模型”。而非微不足道的科學(xué)事實(shí)是,對(duì)于像這樣的圖像識(shí)別任務(wù),我們現(xiàn)在基本上知道如何構(gòu)建這樣的函數(shù)。
我們能 “從數(shù)學(xué)上證明” 它們的作用嗎?嗯,不能。因?yàn)橐龅竭@一點(diǎn),我們必須有一個(gè)關(guān)于我們?nèi)祟愓谧鍪裁吹臄?shù)學(xué)理論。以 “2” 圖像為例,改變幾個(gè)像素。我們可以想象,只有幾個(gè)像素 “不合適”,我們還是應(yīng)該認(rèn)為這個(gè)圖像是 “2”。但這應(yīng)該到什么程度呢?這是一個(gè)關(guān)于人類視覺(jué)感知的問(wèn)題。而且,是的,對(duì)于蜜蜂或章魚(yú)來(lái)說(shuō),答案無(wú)疑是不同的 —— 對(duì)于假定的外星人來(lái)說(shuō),可能完全不同。
好吧,那么我們用于圖像識(shí)別等任務(wù)的典型模型究竟是如何工作的呢?目前最流行、最成功的方法是使用神經(jīng)網(wǎng)絡(luò)。在 20 世紀(jì) 40 年代,神經(jīng)網(wǎng)絡(luò)的發(fā)明形式與今天的使用非常接近,它可以被認(rèn)為是大腦似乎工作方式的簡(jiǎn)單理想化。
在人類的大腦中,有大約 1000 億個(gè)神經(jīng)元(神經(jīng)細(xì)胞),每個(gè)神經(jīng)元都能產(chǎn)生電脈沖,每秒可能有一千次。這些神經(jīng)元在一個(gè)復(fù)雜的網(wǎng)絡(luò)中連接起來(lái),每個(gè)神經(jīng)元都有樹(shù)狀的分支,允許它將電信號(hào)傳遞給可能有成千上萬(wàn)的其他神經(jīng)元。粗略估計(jì),任何給定的神經(jīng)元是否在某一時(shí)刻產(chǎn)生電脈沖,取決于它從其他神經(jīng)元那里收到的脈沖 —— 不同的連接有不同的 “權(quán)重” 貢獻(xiàn)。
當(dāng)我們 “看到一個(gè)圖像” 時(shí),所發(fā)生的事情是,當(dāng)圖像的光子落在眼睛后面的(“光感受器”)細(xì)胞上時(shí),它們?cè)谏窠?jīng)細(xì)胞中產(chǎn)生電信號(hào)。這些神經(jīng)細(xì)胞與其他神經(jīng)細(xì)胞相連,最終信號(hào)通過(guò)一整層的神經(jīng)元。而正是在這個(gè)過(guò)程中,我們 “識(shí)別” 了圖像,最終 “形成了一個(gè)想法”,即我們 “看到了一個(gè) 2”(也許最后會(huì)做一些事情,如大聲說(shuō) “2” 這個(gè)詞)。
上一節(jié)中的 “黑盒子” 函數(shù)是這樣一個(gè)神經(jīng)網(wǎng)絡(luò)的 “數(shù)學(xué)化” 版本。它剛好有 11 層(雖然只有 4 個(gè) “核心層”)。
這個(gè)神經(jīng)網(wǎng)并沒(méi)有什么特別的 “理論推導(dǎo)”;它只是在 1998 年作為一項(xiàng)工程而構(gòu)建的東西,并且被發(fā)現(xiàn)是有效的。(當(dāng)然,這與我們描述我們的大腦是通過(guò)生物進(jìn)化過(guò)程產(chǎn)生的沒(méi)有什么不同)。
好吧,但是像這樣的神經(jīng)網(wǎng)絡(luò)是如何 “識(shí)別事物” 的?關(guān)鍵在于吸引器的概念。想象一下,我們有 1 和 2 的手寫(xiě)圖像:
我們希望所有的 1 都 “被吸引到一個(gè)地方”,而所有的 2 都 “被吸引到另一個(gè)地方”。或者,換一種方式,如果一個(gè)圖像在某種程度上 “更接近于 1”,而不是 2,我們希望它最終出現(xiàn)在 “1 的地方”,反之亦然。
作為一個(gè)直接的類比,我們假設(shè)在平面上有某些位置,用點(diǎn)表示(在現(xiàn)實(shí)生活中,它們可能是咖啡店的位置)。那么我們可以想象,從平面上的任何一點(diǎn)開(kāi)始,我們總是想在最近的點(diǎn)結(jié)束(即我們總是去最近的咖啡店)。我們可以通過(guò)將平面劃分為由理想化的 “分水嶺” 分隔的區(qū)域(“吸引盆地”)來(lái)表示這一點(diǎn):
我們可以認(rèn)為這是在執(zhí)行一種 “識(shí)別任務(wù)”,我們不是在做類似于識(shí)別給定圖像 “看起來(lái)最像” 的數(shù)字的事情 —— 而是很直接地看到給定點(diǎn)最接近哪個(gè)點(diǎn)。(我們?cè)谶@里展示的 “Voronoi 圖” 設(shè)置是在二維歐幾里得空間中分離點(diǎn);數(shù)字識(shí)別任務(wù)可以被認(rèn)為是在做非常類似的事情 —— 但卻是在一個(gè)由每張圖像中所有像素的灰度等級(jí)形成的 784 維空間中。)
那么,我們?nèi)绾问挂粋€(gè)神經(jīng)網(wǎng)絡(luò) “完成一個(gè)識(shí)別任務(wù)”?讓我們考慮這個(gè)非常簡(jiǎn)單的案例:
我們的目標(biāo)是獲取一個(gè)對(duì)應(yīng)于 {x,y} 位置的 “輸入”,然后將其 “識(shí)別” 為它最接近的三個(gè)點(diǎn)中的任何一個(gè)。或者,換句話說(shuō),我們希望神經(jīng)網(wǎng)絡(luò)能夠計(jì)算出一個(gè)類似于 {x,y} 的函數(shù):
那么,我們?nèi)绾斡蒙窠?jīng)網(wǎng)絡(luò)做到這一點(diǎn)呢?歸根結(jié)底,神經(jīng)網(wǎng)是一個(gè)理想化的 “神經(jīng)元” 的連接集合 —— 通常按層排列 —— 一個(gè)簡(jiǎn)單的例子是:
每個(gè) “神經(jīng)元” 都被有效地設(shè)置為評(píng)估一個(gè)簡(jiǎn)單的數(shù)字函數(shù)。為了 “使用” 這個(gè)網(wǎng)絡(luò),我們只需在頂部輸入數(shù)字(如我們的坐標(biāo) x 和 y),然后讓每一層的神經(jīng)元 “評(píng)估它們的函數(shù)”,并通過(guò)網(wǎng)絡(luò)向前輸入結(jié)果 —— 最終在底部產(chǎn)生最終的結(jié)果。
在傳統(tǒng)的(受生物啟發(fā)的)設(shè)置中,每個(gè)神經(jīng)元實(shí)際上都有一組來(lái)自上一層神經(jīng)元的 “傳入連接”,每個(gè)連接都被賦予一定的 “權(quán)重”(可以是一個(gè)正數(shù)或負(fù)數(shù))。一個(gè)給定的神經(jīng)元的值是通過(guò)將 “前一個(gè)神經(jīng)元” 的值乘以其相應(yīng)的權(quán)重來(lái)確定的,然后將這些值相加并乘以一個(gè)常數(shù),最后應(yīng)用一個(gè) “閾值”(或 “激活”)函數(shù)。在數(shù)學(xué)術(shù)語(yǔ)中,如果一個(gè)神經(jīng)元有輸入 x = {x1, x2 …… },那么我們計(jì)算 f[w.x + b],其中權(quán)重 w 和常數(shù) b 通常為網(wǎng)絡(luò)中的每個(gè)神經(jīng)元選擇不同;函數(shù) f 通常是相同的。
計(jì)算 w.x + b 只是一個(gè)矩陣乘法和加法的問(wèn)題。激活函數(shù) "f 引入了非線性(并最終導(dǎo)致了非線性行為)。通常使用各種激活函數(shù);這里我們只使用 Ramp(或 ReLU):
對(duì)于我們希望神經(jīng)網(wǎng)絡(luò)執(zhí)行的每一項(xiàng)任務(wù)(或者說(shuō),對(duì)于我們希望它評(píng)估的每一個(gè)整體函數(shù)),我們將有不同的權(quán)重選擇。(正如我們稍后要討論的那樣,這些權(quán)重通常是通過(guò)使用機(jī)器學(xué)習(xí)從我們想要的輸出實(shí)例中 “訓(xùn)練” 神經(jīng)網(wǎng)絡(luò)來(lái)確定的)。
最終,每個(gè)神經(jīng)網(wǎng)絡(luò)都對(duì)應(yīng)于一些整體的數(shù)學(xué)函數(shù) —— 盡管它可能寫(xiě)得很亂。對(duì)于上面的例子,它就是:
ChatGPT 的神經(jīng)網(wǎng)絡(luò)也只是對(duì)應(yīng)于這樣的一個(gè)數(shù)學(xué)函數(shù) —— 但實(shí)際上有數(shù)十億個(gè)術(shù)語(yǔ)。
但讓我們回到單個(gè)神經(jīng)元上。下面是一個(gè)有兩個(gè)輸入(代表坐標(biāo) x 和 y)的神經(jīng)元在選擇不同的權(quán)重和常數(shù)(以及 Ramp 作為激活函數(shù))后可以計(jì)算的函數(shù)的一些例子:
但是,上面那個(gè)更大的網(wǎng)絡(luò)是怎么回事?嗯,這是它的計(jì)算結(jié)果:
這不是很 “正確”,但它接近于我們上面展示的 “最近點(diǎn)” 函數(shù)。
讓我們看看其他一些神經(jīng)網(wǎng)絡(luò)的情況。在每一種情況下,正如我們稍后所解釋的,我們都在使用機(jī)器學(xué)習(xí)來(lái)尋找最佳的權(quán)重選擇。然后,我們?cè)谶@里展示帶有這些權(quán)重的神經(jīng)網(wǎng)絡(luò)的計(jì)算結(jié)果:
更大的網(wǎng)絡(luò)通常能更好地逼近我們的目標(biāo)函數(shù)。而在 “每個(gè)吸引子盆地的中間”,我們通常會(huì)得到我們想要的答案。但在邊界 —— 神經(jīng)網(wǎng)絡(luò) “很難下定決心” 的地方 —— 情況可能會(huì)更加混亂。
在這個(gè)簡(jiǎn)單的數(shù)學(xué)風(fēng)格的 “識(shí)別任務(wù)” 中,“正確答案” 是什么很清楚。但在識(shí)別手寫(xiě)數(shù)字的問(wèn)題上,就不那么清楚了。如果有人把 “2” 寫(xiě)得很糟糕,看起來(lái)像 “7”,等等,怎么辦?不過(guò),我們還是可以問(wèn),神經(jīng)網(wǎng)絡(luò)是如何區(qū)分?jǐn)?shù)字的 —— 這就給出了一個(gè)指示:
我們能 “從數(shù)學(xué)上” 說(shuō)說(shuō)網(wǎng)絡(luò)是如何區(qū)分的嗎?并非如此。它只是在 “做神經(jīng)網(wǎng)絡(luò)所做的事” 而已。但事實(shí)證明,這通常似乎與我們?nèi)祟愃鞯膮^(qū)分相當(dāng)吻合。
讓我們舉一個(gè)更復(fù)雜的例子。比方說(shuō),我們有貓和狗的圖像。我們有一個(gè)神經(jīng)網(wǎng)絡(luò),它被訓(xùn)練來(lái)區(qū)分它們。下面是它在一些例子中可能做的事情:
現(xiàn)在,“正確答案” 是什么就更不清楚了。穿著貓衣的狗怎么辦?等等。無(wú)論給它什么輸入,神經(jīng)網(wǎng)絡(luò)都會(huì)產(chǎn)生一個(gè)答案。而且,事實(shí)證明,這樣做的方式與人類可能做的事情是合理一致的。正如我在上面所說(shuō)的,這不是一個(gè)我們可以 “從第一原理推導(dǎo)” 的事實(shí)。它只是根據(jù)經(jīng)驗(yàn)被發(fā)現(xiàn)是真的,至少在某些領(lǐng)域是這樣。但這是神經(jīng)網(wǎng)絡(luò)有用的一個(gè)關(guān)鍵原因:它們以某種方式捕捉了 “類似人類” 的做事方式。
給自己看一張貓的照片,然后問(wèn) “為什么那是一只貓?”。也許你會(huì)開(kāi)始說(shuō) “嗯,我看到它的尖耳朵,等等”。但要解釋你是如何認(rèn)出這張圖片是一只貓的,并不是很容易。只是你的大腦不知怎么想出來(lái)的。但是對(duì)于大腦來(lái)說(shuō),沒(méi)有辦法(至少現(xiàn)在還沒(méi)有)“進(jìn)入” 它的內(nèi)部,看看它是如何想出來(lái)的。那么對(duì)于一個(gè)(人工)神經(jīng)網(wǎng)來(lái)說(shuō)呢?好吧,當(dāng)你展示一張貓的圖片時(shí),可以直接看到每個(gè) “神經(jīng)元” 的作用。但是,即使要獲得一個(gè)基本的可視化,通常也是非常困難的。
在我們用于解決上述 “最近點(diǎn)” 問(wèn)題的最終網(wǎng)絡(luò)中,有 17 個(gè)神經(jīng)元。在用于識(shí)別手寫(xiě)數(shù)字的網(wǎng)絡(luò)中,有 2190 個(gè)。而在我們用來(lái)識(shí)別貓和狗的網(wǎng)絡(luò)中,有 60,650 個(gè)。通常情況下,要將相當(dāng)于 60,650 個(gè)維度的空間可視化是相當(dāng)困難的。但由于這是一個(gè)為處理圖像而設(shè)置的網(wǎng)絡(luò),它的許多神經(jīng)元層被組織成陣列,就像它所看的像素陣列一樣。
如果我們采取一個(gè)典型的貓圖像
那么我們就可以用一組衍生圖像來(lái)表示第一層神經(jīng)元的狀態(tài) —— 其中許多圖像我們可以很容易地解釋為 “沒(méi)有背景的貓” 或 “貓的輪廓” 等:
到了第十層,就更難解釋發(fā)生了什么:
但總的來(lái)說(shuō),我們可以說(shuō)神經(jīng)網(wǎng)絡(luò)正在 “挑選出某些特征”(也許尖尖的耳朵也在其中),并利用這些特征來(lái)確定圖像是什么。但這些特征是我們有名字的,比如 “尖耳朵”?大多數(shù)情況下不是。
我們的大腦在使用類似的特征嗎?大多數(shù)情況下我們不知道。但值得注意的是,像我們?cè)谶@里展示的神經(jīng)網(wǎng)絡(luò)的前幾層似乎可以挑出圖像的某些方面(如物體的邊緣),這些方面似乎與我們知道的由大腦中第一層視覺(jué)處理挑出的特征相似。
但是,假設(shè)我們想要一個(gè)神經(jīng)網(wǎng)絡(luò)的 “貓識(shí)別理論”。我們可以說(shuō) “看,這個(gè)特定的網(wǎng)絡(luò)做到了” —— 這立即給了我們一些關(guān)于 “問(wèn)題有多難” 的感覺(jué)(例如,可能需要多少個(gè)神經(jīng)元或?qū)樱?。但至少到現(xiàn)在為止,我們還沒(méi)有辦法對(duì)網(wǎng)絡(luò)正在做的事情進(jìn)行 “敘述性描述”。也許這是因?yàn)樗谟?jì)算上確實(shí)是不可簡(jiǎn)化的,而且除了明確地追蹤每一個(gè)步驟之外,沒(méi)有一般的方法可以找到它在做什么。也可能只是因?yàn)槲覀冞€沒(méi)有 “弄清科學(xué)”,還沒(méi)有確定 “自然法則”,使我們能夠總結(jié)出正在發(fā)生的事情。
當(dāng)我們談?wù)撚?ChatGPT 生成語(yǔ)言時(shí),我們會(huì)遇到同樣的問(wèn)題。而且同樣不清楚是否有辦法 “總結(jié)它在做什么”。但是語(yǔ)言的豐富性和細(xì)節(jié)(以及我們?cè)谶@方面的經(jīng)驗(yàn))可能會(huì)讓我們比圖像走得更遠(yuǎn)。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。