作為一名程序員,我們習(xí)慣于去了解所使用工具、中間件的底層原理,本文則旨在幫助大家了解 AI 模型的底層機(jī)制,讓大家在學(xué)習(xí)或應(yīng)用各種大模型時(shí)更加得心應(yīng)手,更加適合沒(méi)有 AI 基礎(chǔ)的小伙伴們。
一、GPT 與神經(jīng)網(wǎng)絡(luò)的關(guān)系
GPT 想必大家已經(jīng)耳熟能詳,當(dāng)我們與它進(jìn)行對(duì)話時(shí),通常只需關(guān)注自己?jiǎn)柍龅膯?wèn)題(輸入)以及 GPT 給出的答案(輸出),對(duì)于輸出內(nèi)容是如何產(chǎn)生的,我們一無(wú)所知,它就像一個(gè)神秘的黑盒子。?
??
GPT 是一種基于神經(jīng)網(wǎng)絡(luò)的自然語(yǔ)言處理(NLP)模型,使用大量數(shù)據(jù)輸入神經(jīng)網(wǎng)絡(luò)對(duì)模型進(jìn)行訓(xùn)練,直到模型的輸出在一定程度上符合我們的預(yù)期,訓(xùn)練成熟的模型就可以接收用戶的輸入,并針對(duì)輸入中的關(guān)鍵信息給出經(jīng)過(guò) “思考” 后的答案。想要弄明白 GPT 究竟是如何 “思考” 的,或許我們可以從神經(jīng)網(wǎng)絡(luò)出發(fā)。
二、什么是神經(jīng)網(wǎng)絡(luò)
那么,神經(jīng)網(wǎng)絡(luò)到底是什么呢?或者說(shuō),為什么是神經(jīng)網(wǎng)絡(luò)? 高中的生物學(xué)告訴我們,人類的神經(jīng)系統(tǒng)由數(shù)以億計(jì)的神經(jīng)元連接而成,它們是生物學(xué)上的細(xì)胞,有細(xì)胞體、樹(shù)突、軸突等主要結(jié)構(gòu),不同神經(jīng)元之間的樹(shù)突與軸突通過(guò)突觸與其他神經(jīng)元相互連接,形成復(fù)雜的人腦神經(jīng)網(wǎng)絡(luò)。?
??人工智能為了使機(jī)器獲得接近人類的智力,嘗試效仿人腦的思考過(guò)程,創(chuàng)造出了一種模仿人腦神經(jīng)元之間相互連接的計(jì)算模型 —— 神經(jīng)網(wǎng)絡(luò)。它由多層神經(jīng)元組成,每個(gè)神經(jīng)元接收輸入并產(chǎn)生相應(yīng)的輸出。根據(jù)上述定義,圖 1 中黑盒子的內(nèi)部結(jié)構(gòu)已初具輪廓,下圖中的每個(gè)圓圈都代表一個(gè)神經(jīng)元,神經(jīng)元具有計(jì)算能力,可以將計(jì)算出來(lái)的結(jié)果傳遞到下一個(gè)神經(jīng)元。?
??
在生物學(xué)中,大腦的結(jié)構(gòu)越簡(jiǎn)單,智力也就越低;相應(yīng)地,神經(jīng)系統(tǒng)越復(fù)雜,能處理的問(wèn)題越多,智力也就越高。人工神經(jīng)網(wǎng)絡(luò)也是如此,越復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)計(jì)算能力越強(qiáng)大,這也是為什么發(fā)展出了深度神經(jīng)網(wǎng)絡(luò)。之所以被稱為 "深度",是因?yàn)樗哂卸鄠€(gè)隱藏層(即上圖中縱向神經(jīng)元的層數(shù)),相對(duì)于傳統(tǒng)的淺層神經(jīng)網(wǎng)絡(luò),深度神經(jīng)網(wǎng)絡(luò)具有更多的層級(jí)結(jié)構(gòu)。
訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的過(guò)程就叫做深度學(xué)習(xí)。構(gòu)建好深度神經(jīng)網(wǎng)絡(luò)之后,我們只需要將訓(xùn)練數(shù)據(jù)輸入到神經(jīng)網(wǎng)絡(luò)中,它就會(huì)自發(fā)地學(xué)習(xí)數(shù)據(jù)中的特征。比如說(shuō)我們想要訓(xùn)練一個(gè)深度神經(jīng)網(wǎng)絡(luò)來(lái)識(shí)別貓,只需要將大量不同種類、不同姿勢(shì)、不同外觀的貓的圖片輸入到神經(jīng)網(wǎng)絡(luò)中讓它學(xué)習(xí)。訓(xùn)練成功后,我們將一張任意的圖片輸入到神經(jīng)網(wǎng)絡(luò)中,它會(huì)告訴我們里面是否有貓。
三、神經(jīng)網(wǎng)絡(luò)是如何計(jì)算的
現(xiàn)在,我們已經(jīng)知道了什么是神經(jīng)網(wǎng)絡(luò)以及它的基本結(jié)構(gòu),那么神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元是如何對(duì)輸入數(shù)據(jù)進(jìn)行計(jì)算的呢? 在此之前,我們要解決一個(gè)問(wèn)題:數(shù)據(jù)是如何輸入到神經(jīng)網(wǎng)絡(luò)中的?下面以圖像和文本類型的數(shù)據(jù)為例講解。
數(shù)據(jù)是如何輸入到神經(jīng)網(wǎng)絡(luò)中的
1、圖像輸入處理
想象一個(gè)畫(huà)面:當(dāng)我們把一張圖片放大到一定程度時(shí),可以看到一格一格的小方塊。這個(gè)小方塊就稱為像素點(diǎn),一張圖片的像素點(diǎn)越多,說(shuō)明像素越高,圖片越清晰。每個(gè)像素點(diǎn)僅由一種顏色構(gòu)成,光學(xué)中的三原色包含紅色、綠色、藍(lán)色,通過(guò)不同程度地混合這三種顏色可以產(chǎn)生出所有其他顏色。在 RGB 模型中,每種顏色的強(qiáng)度可以用一個(gè)數(shù)值來(lái)表示,通常在 0 到 255 之間。紅色的強(qiáng)度值為 0 表示沒(méi)有紅色光,255 表示最大強(qiáng)度的紅色光;綠色和藍(lán)色的強(qiáng)度值也是類似的。 為了存儲(chǔ)一張圖像,計(jì)算機(jī)要存儲(chǔ)三個(gè)獨(dú)立的矩陣,這三個(gè)矩陣分別與圖像的紅色、綠色和藍(lán)色的強(qiáng)度相對(duì)應(yīng)。如果圖像的大小是 256 * 256 個(gè)像素,那么在計(jì)算機(jī)中使用三個(gè) 256 * 256 的矩陣(二維數(shù)組)就能表示這張圖像。可以想象將三個(gè)矩陣表示的顏色重疊堆放在一起,便可顯現(xiàn)出圖像的原始樣貌。
現(xiàn)在我們得到了圖像在計(jì)算機(jī)中的表示方式,那么如何將它輸入到神經(jīng)網(wǎng)絡(luò)呢? 通常我們會(huì)把上述三個(gè)矩陣轉(zhuǎn)化為一個(gè)向量,向量可以理解成 1 * n(行向量)或 n * 1(列向量)的數(shù)組。那么這個(gè)向量的總維數(shù)就是 256 * 256 * 3,結(jié)果是 196608。在人工智能領(lǐng)域中,每一個(gè)輸入到神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)都被叫做一個(gè)特征,那么上面的這張圖像中就有 196608 個(gè)特征。這個(gè) 196608 維的向量也被叫做特征向量。神經(jīng)網(wǎng)絡(luò)接收這個(gè)特征向量作為輸入,并進(jìn)行預(yù)測(cè),然后給出相應(yīng)的結(jié)果。
2、文本輸入處理
文本是由一系列字符組成的,首先需要將文本劃分成有意義的單詞,這個(gè)過(guò)程稱為分詞。在分詞后,構(gòu)建一個(gè)由出現(xiàn)的所有單詞或部分高頻單詞組成的詞匯表(也可以使用已有的詞匯表)。詞匯表中的每個(gè)單詞都會(huì)被分配一個(gè)唯一索引,這樣可以將文本轉(zhuǎn)換為離散的符號(hào)序列,方便神經(jīng)網(wǎng)絡(luò)進(jìn)行處理。在輸入神經(jīng)網(wǎng)絡(luò)之前,通常會(huì)將文本的符號(hào)序列轉(zhuǎn)換為密集的向量表示。 以文本 “How does neural network works?” 為例:
分詞:["how", "does", "neural", "network", "works"]
構(gòu)建詞匯表:{"how": 0, "does": 1, "neural": 2, "network": 3, "works": 4}
序列化文本數(shù)據(jù):["how", "does", "neural", "network", "works"] -->[0, 1, 2, 3, 4]
向量化:
#此處以one-hot向量表示法為例: [[1, 0, 0, 0, 0] [0, 1, 0, 0, 0] [0, 0, 1, 0, 0] [0, 0, 0, 1, 0] [0, 0, 0, 0, 1]]最后,將向量序列作為輸入,給神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練或預(yù)測(cè)。 至此我們已經(jīng)知道了數(shù)據(jù)以怎樣的形式輸入到神經(jīng)網(wǎng)絡(luò)中,那么神經(jīng)網(wǎng)絡(luò)是如何根據(jù)這些數(shù)據(jù)進(jìn)行訓(xùn)練的呢?
神經(jīng)網(wǎng)絡(luò)是如何進(jìn)行預(yù)測(cè)的
首先明確模型訓(xùn)練和預(yù)測(cè)的區(qū)別:訓(xùn)練是指通過(guò)使用已知的數(shù)據(jù)集來(lái)調(diào)整模型的參數(shù),使其能夠?qū)W習(xí)到輸入和輸出之間的關(guān)系;預(yù)測(cè)是指使用訓(xùn)練好的模型來(lái)對(duì)新的輸入數(shù)據(jù)進(jìn)行預(yù)測(cè)。
神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)其實(shí)是基于一個(gè)很簡(jiǎn)單的線性變換公式:
其中,x?表示特征向量,w?是特征向量的權(quán)重,表示每個(gè)輸入特征的重要程度,b?表示閾值,用于影響預(yù)測(cè)結(jié)果。公式中的 dot () 函數(shù)表示將w?和x?進(jìn)行向量相乘。
舉例:如果一個(gè)輸入數(shù)據(jù)有i?個(gè)特征,代入公式計(jì)算結(jié)果為:
??
??如何理解這個(gè)公式呢?假設(shè)你需要決策周末是否去公園劃船,你對(duì)此猶豫不決,需要神經(jīng)網(wǎng)絡(luò)幫你做決定。決定是否去劃船有三個(gè)因素:天氣是否晴朗溫暖、地點(diǎn)是否遠(yuǎn)近適中、同行玩伴是否合心意。實(shí)際情況是出行那天天氣為陰且偶有陣風(fēng)、地點(diǎn)在 20km 外的偏遠(yuǎn)郊區(qū)、同行玩伴是心儀已久的大帥哥。這三個(gè)因素即為輸入數(shù)據(jù)的特征向量 x=[x1, x2, x3],我們需要根據(jù)特征對(duì)結(jié)果的影響來(lái)設(shè)置特征值,如 “天氣不好” 和 “地點(diǎn)偏遠(yuǎn)” 對(duì)結(jié)果具有負(fù)向的影響,我們可以把它設(shè)為 - 1,“同行玩伴是心儀已久的大帥哥” 顯然對(duì)結(jié)果有大大的正向影響,可以把它設(shè)為 1,即特征向量 x=[-1, -1, 1]。接下來(lái),需要根據(jù)你的偏好來(lái)設(shè)置三個(gè)特征的權(quán)重,也就是每個(gè)因素對(duì)你最終決策的影響程度。如果你不在乎天氣和地點(diǎn),只要與大帥哥同行便風(fēng)雨無(wú)阻,那么可以將權(quán)重設(shè)置為 w=[1, 1, 5];如果你是個(gè)懶狗,那你可能會(huì)設(shè)置權(quán)重為 w=[2, 6, 3];總之,權(quán)重是根據(jù)對(duì)應(yīng)特征的重要程度來(lái)確定的。
我們選擇第一組權(quán)重 w=[1, 1, 5],特征向量為 x=[-1, -1, 1], 并設(shè)置閾值 b=1,假設(shè)結(jié)果 z ≥ 0 表示去,z < 0 表示不去,計(jì)算預(yù)測(cè)結(jié)果 z = (x1w1 + x2w2 + x3*w3) + b = 4 > 0,因此神經(jīng)網(wǎng)絡(luò)給出的預(yù)測(cè)結(jié)果是:去公園劃船。
上面使用的公式
?本質(zhì)上是一種邏輯回歸,用于將輸入數(shù)據(jù)映射到二分類的概率輸出。邏輯回歸通常使用一個(gè)特定的激活函數(shù)來(lái)實(shí)現(xiàn)將z?值到 [0, 1] 的映射關(guān)系,即 Sigmoid 函數(shù),它將線性變換的結(jié)果通過(guò)非線性映射轉(zhuǎn)化為概率值。通常,大于等于 0.5 的概率值被視為正類,小于 0.5 的概率值被視為負(fù)類。
Sigmoid 函數(shù)的公式和圖像如下所示:
??除了能將結(jié)果輸出范圍控制在 0 到 1 之間,Sigmoid 函數(shù)(或其他激活函數(shù))另外一個(gè)重要作用就是將線性變換的結(jié)果進(jìn)行非線性映射,使神經(jīng)網(wǎng)絡(luò)可以學(xué)習(xí)和表示更加復(fù)雜的非線性關(guān)系。如果沒(méi)有激活函數(shù),神經(jīng)網(wǎng)絡(luò)只能解決簡(jiǎn)單的線性問(wèn)題;加入激活函數(shù)之后,只要層數(shù)足夠多,神經(jīng)網(wǎng)絡(luò)就能解決所有問(wèn)題,因此激活函數(shù)是必不可少的。
神經(jīng)網(wǎng)絡(luò)是如何進(jìn)行學(xué)習(xí)的
得到預(yù)測(cè)結(jié)果后,神經(jīng)網(wǎng)絡(luò)會(huì)通過(guò)損失函數(shù)判斷預(yù)測(cè)結(jié)果是否準(zhǔn)確,如果不夠準(zhǔn)確,神經(jīng)網(wǎng)絡(luò)會(huì)進(jìn)行自我調(diào)整,這就是學(xué)習(xí)的過(guò)程。
損失函數(shù)用于衡量模型的預(yù)測(cè)結(jié)果與真實(shí)標(biāo)簽之間的誤差。通過(guò)將預(yù)測(cè)值與真實(shí)值進(jìn)行比較,損失函數(shù)提供了一個(gè)數(shù)值指標(biāo),反映了模型當(dāng)前的預(yù)測(cè)性能。較小的損失值表示模型的預(yù)測(cè)結(jié)果與真實(shí)標(biāo)簽更接近,而較大的損失值表示預(yù)測(cè)誤差較大。下面介紹一個(gè)常用于二分類問(wèn)題的損失函數(shù)(對(duì)數(shù)損失):
神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的目的,就是通過(guò)調(diào)整模型的參數(shù)使損失函數(shù)達(dá)到最小值,從而改善模型的預(yù)測(cè)性能,這個(gè)過(guò)程也稱為模型的訓(xùn)練。梯度下降算法可以解決這一問(wèn)題,通過(guò)該算法找到合適的* w*?(特征的權(quán)重)和b(閾值),梯度下降算法會(huì)一步一步地改變w和b?的值,使損失函數(shù)的結(jié)果越來(lái)越小,也就是使預(yù)測(cè)結(jié)果更精準(zhǔn)。
??這里需要注意的是,如果學(xué)習(xí)率設(shè)置過(guò)小,則需要多次梯度下降才能到達(dá)最低點(diǎn),浪費(fèi)機(jī)器運(yùn)行資源;如果設(shè)置過(guò)大,則可能錯(cuò)過(guò)最低點(diǎn)直接到了圖中左側(cè)的點(diǎn)位,因此需要根據(jù)實(shí)際情況選擇一個(gè)正確的學(xué)習(xí)率。
神經(jīng)網(wǎng)絡(luò)的計(jì)算過(guò)程主要有兩個(gè)步驟:正向傳播和反向傳播。正向傳播用于計(jì)算神經(jīng)元的輸出,也就是上述對(duì)輸入特征進(jìn)行加權(quán)求和、并通過(guò)激活函數(shù)進(jìn)行非線性變換的過(guò)程;反向傳播用于更新優(yōu)化模型參數(shù),通過(guò)計(jì)算損失函數(shù)關(guān)于模型參數(shù)的梯度,從輸出層向輸入層反向傳播梯度的過(guò)程(反向傳播涉及大量的數(shù)學(xué)計(jì)算,感興趣的讀者可以深入了解)。
四、綜述
綜上所述,神經(jīng)網(wǎng)絡(luò)訓(xùn)練和學(xué)習(xí)的過(guò)程其實(shí)就是對(duì)模型參數(shù)進(jìn)行不斷調(diào)優(yōu)、減少預(yù)測(cè)損失值過(guò)程。經(jīng)過(guò)充分訓(xùn)練后,模型能夠從輸入數(shù)據(jù)中學(xué)習(xí)到有效的特征表示和權(quán)重分配,從而能夠?qū)ξ匆?jiàn)過(guò)的數(shù)據(jù)進(jìn)行準(zhǔn)確的預(yù)測(cè)。訓(xùn)練完成的神經(jīng)網(wǎng)絡(luò)模型可以應(yīng)用于各種實(shí)際問(wèn)題。比如,在圖像分類任務(wù)中,卷積神經(jīng)網(wǎng)絡(luò)可以根據(jù)輸入圖像的特征自動(dòng)識(shí)別物體或圖案;在自然語(yǔ)言處理任務(wù)中,循環(huán)神經(jīng)網(wǎng)絡(luò)可以理解和生成文本;在推薦系統(tǒng)中,多層感知機(jī)神經(jīng)網(wǎng)絡(luò)可以根據(jù)用戶的歷史行為進(jìn)行個(gè)性化推薦。
審核編輯:劉清
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4779瀏覽量
101046 -
RGB
+關(guān)注
關(guān)注
4文章
801瀏覽量
58635 -
人工智能
+關(guān)注
關(guān)注
1794文章
47642瀏覽量
239650 -
GPT
+關(guān)注
關(guān)注
0文章
359瀏覽量
15469 -
nlp
+關(guān)注
關(guān)注
1文章
489瀏覽量
22069
原文標(biāo)題:神經(jīng)網(wǎng)絡(luò)是如何工作的?
文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論