站長(zhǎng)之家(ChinaZ.com)5月21日 消息:最近,一個(gè)教你從頭開始實(shí)現(xiàn)Llama3的代碼庫(kù)在網(wǎng)上爆火,吸引了無(wú)數(shù)開發(fā)者的關(guān)注。知名AI專家Andrej Karpathy一鍵三連(點(diǎn)贊、轉(zhuǎn)發(fā)、評(píng)論),這個(gè)項(xiàng)目在社交媒體X上的轉(zhuǎn)贊收藏量超過(guò)6.8k,GitHub上更是收獲了超過(guò)2k的星標(biāo)。
這個(gè)代碼庫(kù)的作者是Nishant Aklecha(以下簡(jiǎn)稱“納哥”),他詳細(xì)解釋了Llama3模型的實(shí)現(xiàn)過(guò)程,包括注意力機(jī)制中多個(gè)頭的矩陣乘法、位置編碼及所有中間層的詳細(xì)展開和解釋。換句話說(shuō),他解釋了每行代碼的功能。
Karpathy稱贊納哥是個(gè)“有品的人”,并指出這樣的詳細(xì)展開比起模塊相互嵌套和調(diào)用時(shí)更容易理解每一步具體在做什么。
在運(yùn)行納哥提供的文件前,需要預(yù)先下載Meta官方提供的Llama3模型權(quán)重。納哥建議使用Karpathy的簡(jiǎn)潔版BPE代碼進(jìn)行分詞。字節(jié)級(jí)(byte-level)BPE算法在UTF-8編碼的字符串上運(yùn)行,廣泛應(yīng)用于大模型分詞。Karpathy提供的代碼庫(kù)包含兩個(gè)分詞器,都能在給定文本上訓(xùn)練分詞器的詞匯表和合并規(guī)則、將文本編碼為token、將token解碼為文本。
讀取模型文件的方式通常取決于模型類的編寫方式以及類中變量的命名。但由于納哥是從頭開始實(shí)現(xiàn)Llama3,所以將逐個(gè)張量地讀取文件內(nèi)容,通過(guò)此配置推斷出模型的結(jié)構(gòu)和參數(shù)信息。
納哥詳細(xì)展示了如何將token轉(zhuǎn)換為高維的嵌入表示,并進(jìn)行RMS歸一化。然后,他構(gòu)建了Transformer的第一層,進(jìn)行歸一化處理和注意力頭的加載。接著,納哥詳細(xì)解釋了query、key和value向量的生成和操作,包括位置編碼的使用和注意力得分矩陣的生成與掩碼處理。最后,他展示了如何將這些向量進(jìn)行矩陣乘法,得到最終的注意力值。
接下來(lái),納哥對(duì)每個(gè)注意力頭執(zhí)行相同的數(shù)學(xué)運(yùn)算,并將所有注意力得分合并成一個(gè)大的qkv_attention矩陣。然后通過(guò)矩陣乘法獲得注意力機(jī)制后的嵌入值,并將其添加到原始的token嵌入中,進(jìn)行歸一化處理,并通過(guò)一個(gè)前饋神經(jīng)網(wǎng)絡(luò)進(jìn)行處理。
納哥使用最終的嵌入預(yù)測(cè)下一個(gè)token值,并希望預(yù)測(cè)結(jié)果是42,這個(gè)數(shù)值對(duì)應(yīng)《銀河系漫游指南》中“生命、宇宙及一切的終極問(wèn)題的答案”。模型預(yù)測(cè)的token編號(hào)為2983,對(duì)應(yīng)的正是42。
Nishant Aklecha是Glaive AI的研究員,負(fù)責(zé)構(gòu)建和改進(jìn)定制語(yǔ)言模型平臺(tái),曾任職于摩根士丹利,負(fù)責(zé)訓(xùn)練和微調(diào)大語(yǔ)言模型。他還和朋友共同創(chuàng)立了一個(gè)研究實(shí)驗(yàn)室A10,其目標(biāo)是讓研究變得更加觸手可及。
除了發(fā)布這個(gè)代碼庫(kù),Nishant還上傳了一個(gè)YouTube視頻詳細(xì)解釋代碼庫(kù)內(nèi)容,并撰寫了一篇博客詳解潛在一致性模型(LCM)。
感興趣的開發(fā)者可以訪問(wèn)GitHub鏈接了解更多信息:https://top.aibase.com/tool/llama3-from-scratch
(舉報(bào))