人人都適用的大語言模型:LLaMA

多年來,深度學(xué)習(xí)界一直倡導(dǎo)開放和透明,這導(dǎo)致了像HuggingFace這樣的大型開源項目的出現(xiàn)。深度學(xué)習(xí)中許多最深刻的思想(如Transformer [2]、自監(jiān)督學(xué)習(xí)等)都可以在互聯(lián)網(wǎng)上公開獲取,無論是通過公共代碼倉庫還是Arxiv預(yù)印本。盡管開源已經(jīng)成為一種常態(tài)已有一段時間,但最近大型語言模型(LLM)的受歡迎程度(以及商業(yè)應(yīng)用價值)對這種趨勢提出了挑戰(zhàn)。
如今,許多最強大的大型語言模型(LLM)只能通過API(例如OpenAI或Anthropic提供的)進(jìn)行訪問,使得研究人員和開發(fā)者無法獲得其源代碼和模型參數(shù)。雖然我并不打算引發(fā)關(guān)于當(dāng)前LLM領(lǐng)域趨勢的道德討論,但這些信息與本帖子的主題——公開可用的LLM——相關(guān)。有趣的是,并非所有強大的語言基礎(chǔ)模型都隱藏在付費墻后面。一些模型,例如LLaMA,既是公開可用的,又具有非常高的性能,從而在深度學(xué)習(xí)研究社區(qū)保持了開放性的精神。
什么是LLaMA?
LLaMA并不是單一的模型,而是一組具有不同參數(shù)規(guī)模的大型語言模型(LLM)套件,參數(shù)規(guī)模從70億到650億不等。LLaMA的設(shè)計靈感源自Chinchilla [3],這些LLM比它們的同類模型稍小,但經(jīng)過了廣泛的預(yù)訓(xùn)練(即較小的模型,更多的標(biāo)記),并旨在提供一組具有不同性能和推理效率之間不同權(quán)衡的模型。LLaMA模型的表現(xiàn)令人驚訝,例如,130億參數(shù)的模型與GPT-3 [4]大致相當(dāng),而650億參數(shù)的模型往往超過了PaLM [5]的性能。
“GPT-4從各種經(jīng)過許可、創(chuàng)建和公開可用的數(shù)據(jù)源中進(jìn)行了學(xué)習(xí),這些數(shù)據(jù)源可能包括公開可獲取的個人信息?!?/p>
除了令人印象深刻的性能之外,LLaMA僅使用公開可用的數(shù)據(jù)進(jìn)行預(yù)訓(xùn)練。在LLM領(lǐng)域中,LLaMA在一定程度上邁出了(回歸)開源的步伐,LLaMA模型可以完全通過在線資源進(jìn)行再現(xiàn)。而像GPT-4這樣的最新模型已知是通過公開數(shù)據(jù)和專有/私有數(shù)據(jù)的組合進(jìn)行訓(xùn)練的。盡管這可能有助于模型性能的提升,但LLaMA表明我們可以利用在線可獲得的數(shù)據(jù)做很多事情,從而為與LLM相關(guān)的開放性研究倡議提供了一種希望的來源。

背景信息
LLaMA的LLM采用了許多在先前的工作中提出的思想和技術(shù)。在本節(jié)中,我們將介紹一些有用的背景信息,有助于更深入地理解LLaMA及其組成部分。
關(guān)于LLM的簡要說明。首先,了解LLM的基礎(chǔ)知識是有幫助的,包括它們的架構(gòu)、訓(xùn)練過程和一般方法。我們在先前的概述中對這個主題進(jìn)行了廣泛的探討。因此,在此處我們不會詳細(xì)介紹這個主題,下面是提供我們進(jìn)一步閱讀和學(xué)習(xí)的文章和鏈接。
LLM (Decoder-Only) Architecture
Language Model Pre-Training
Explanation of LLMs
LLM History
LLM Basics
均方根層歸一化(Root Mean Square Layer Normalization,簡稱RMSNorm)
通常,Transformer架構(gòu)(包括僅使用解碼器的Transformer架構(gòu),如LLMs所使用的)使用LayerNorm來對每個層的激活值進(jìn)行歸一化處理。然而,使用不同的歸一化技術(shù)已被證明可以穩(wěn)定訓(xùn)練并提高泛化性能。例如,均方根層歸一化(RMSNorm)的定義如下所示。

RMSNorm與LayerNorm在某種程度上相似,但在對神經(jīng)網(wǎng)絡(luò)的激活值進(jìn)行歸一化時,它去除了均值居中操作(并使用稍微修改的分母)。與LayerNorm相比,RMSNorm在計算效率和簡單性上更高,使其能夠以相當(dāng)?shù)男阅芩綄崿F(xiàn)10-50%的效率提升。

SwiGLU 激活方程
LLM的解碼器架構(gòu)中的每個塊都包含一個兩層的前饋神經(jīng)網(wǎng)絡(luò)(即,不使用偏置,并且分別應(yīng)用于每個標(biāo)記向量),在兩層之間使用非線性激活函數(shù)。最初,這個非線性激活函數(shù)是修正線性單元(ReLU)。然而,最近的研究[15]揭示了這不是最優(yōu)的選擇。

特別是LLaMA(以及其他類似的LLM,如PaLM)選擇使用SwiGLU激活函數(shù),其在上述方程中進(jìn)行了定義。在這里,我們將Swish激活定義如下。

SwiGLU是輸入x的兩個線性變換的逐元素乘積,其中一個經(jīng)過了Swish激活函數(shù)的處理。雖然這個激活函數(shù)需要進(jìn)行三次矩陣乘法運算,但研究發(fā)現(xiàn),即使使用的計算量保持不變,相對于其他激活函數(shù),SwiGLU在性能上也有所提升。
Rematerialization
Rematerialization,也被稱為重新計算,是在LLM(以及其他大型神經(jīng)網(wǎng)絡(luò))的訓(xùn)練中使用的一種技術(shù),以犧牲額外的計算量來減少內(nèi)存消耗。通常,在計算神經(jīng)網(wǎng)絡(luò)的前向傳播時,我們會存儲/保留網(wǎng)絡(luò)在每一層的激活值,以便在反向傳播過程中使用(這對于計算權(quán)重更新是必要的?。┑牵@需要大量的內(nèi)存!

Rematerialization的基本思想是在反向傳播過程中重新計算某些中間激活值,而不是在前向傳播過程中將它們存儲在內(nèi)存中。這有助于減少訓(xùn)練過程中的峰值內(nèi)存使用量,使得可以在可用內(nèi)存限制下訓(xùn)練更大的模型或使用更大的批次大小。對于LLM來說,這一點尤為重要,因為它們很大并且消耗大量內(nèi)存。
The LLaMA Suite
現(xiàn)在我們已經(jīng)掌握了一些有用的概念,讓我們更多地了解LLaMA中的LLM集合及其工作方式。由于這些模型在很大程度上受到Chinchilla提出的預(yù)訓(xùn)練策略的啟發(fā)(簡而言之,就是對更多數(shù)據(jù)進(jìn)行小型LLM的預(yù)訓(xùn)練)[3],在深入研究LLaMA之前,我們將簡要概述這些想法??偟膩碚f,LLaMA對于龐大的LLM趨勢提出了質(zhì)疑,聲稱(如果進(jìn)行了足夠的預(yù)訓(xùn)練?。└〉腖LM可以在顯著降低推理預(yù)算的情況下實現(xiàn)令人印象深刻的性能。
如何最大化大語言模型的效率?
在最近LLM的發(fā)展歷程中,Chinchilla [3]的提議尤為引人注目。在GPT-3之后,深度學(xué)習(xí)研究界對足夠大的語言模型展現(xiàn)出的令人印象深刻的少樣本學(xué)習(xí)能力感到驚嘆。因此,我們開始測試比GPT-3還要龐大的模型。然而,結(jié)果并不那么好!
Hoffmann等人(2022年)的最新研究表明,在給定的計算預(yù)算下,最佳性能并不是由最大的模型實現(xiàn)的,而是由更小的模型在更多數(shù)據(jù)上進(jìn)行訓(xùn)練的。
要創(chuàng)建比GPT-3更好的LLM,我們不能僅僅使用更大的模型,而是需要更多的預(yù)訓(xùn)練數(shù)據(jù)!具體而言,Chinchilla的分析表明,如果我們對稍小的LLM進(jìn)行更廣泛的預(yù)訓(xùn)練,可以實現(xiàn)更高水平的性能。
這是完整的情況嗎?盡管我們知道如果進(jìn)行廣泛的預(yù)訓(xùn)練,較小的LLM可以表現(xiàn)出色,但是即使在[3]中進(jìn)行的分析也表明,訓(xùn)練相對較大的LLM是達(dá)到高性能水平最高效的方式。這個觀點是完全正確的,但它只考慮了訓(xùn)練效率。因此,我們必須問自己一個問題:訓(xùn)練效率是我們唯一關(guān)心的嗎?對于大多數(shù)從業(yè)者來說,毫無疑問,答案是否定的!
“本研究的重點是通過在比通常使用的更多標(biāo)記上進(jìn)行訓(xùn)練,訓(xùn)練一系列語言模型,在各種推理預(yù)算下實現(xiàn)最佳性能?!?
訓(xùn)練成本只是與LLM相關(guān)的全部成本中的一小部分。我們還必須考慮托管成本,因此推理預(yù)算是一個巨大的考慮因素。LLaMA接受了這個觀點,強調(diào)在達(dá)到目標(biāo)性能水平的情況下,對較小的LLM進(jìn)行更長時間的預(yù)訓(xùn)練最終在推理過程中更經(jīng)濟(jì),并且隨著時間的推移節(jié)省了大量成本。盡管在需要性能提升時我們可能會使用較大的模型,但通過廣泛的預(yù)訓(xùn)練,我們應(yīng)該盡量減小模型的大小(從而降低托管成本)。

數(shù)據(jù)集。我們知道LLaMA的預(yù)訓(xùn)練數(shù)據(jù)集是基于公開數(shù)據(jù)的,但這些數(shù)據(jù)具體來自哪里呢?上面概述了用于LLaMA的預(yù)訓(xùn)練數(shù)據(jù)集的內(nèi)容??梢钥闯?,預(yù)訓(xùn)練數(shù)據(jù)(盡管完全公開)具有相當(dāng)多的多樣性,來源包括StackExchange和古騰堡計劃等。經(jīng)過標(biāo)記化處理后,完整數(shù)據(jù)集大約包含1.4T個標(biāo)記。這與Chinchilla [3]進(jìn)行預(yù)訓(xùn)練的標(biāo)記數(shù)量相同,請參見下文。

考慮到LLaMA對透明度和可重復(fù)性的強調(diào),在[1]中提供了大量關(guān)于構(gòu)建預(yù)訓(xùn)練數(shù)據(jù)集的見解。討論中最有趣的方面之一是我們可以通過它了解在對LLM進(jìn)行預(yù)訓(xùn)練之前如何對數(shù)據(jù)進(jìn)行過濾。例如,從CommonCrawl獲取的文本數(shù)據(jù)會進(jìn)行過濾,排除以下內(nèi)容:
- 重復(fù)的文檔(使用CCNet管道[7]進(jìn)行過濾)
- 非英語數(shù)據(jù)(通過訓(xùn)練fastText線性分類器進(jìn)行過濾)
- 低質(zhì)量內(nèi)容(使用n-gram語言模型進(jìn)行過濾)
此外,[1]中的作者還訓(xùn)練了一個線性分類器,用于區(qū)分在維基百科中用作參考的頁面和隨機抽樣的頁面,然后丟棄未被分類為參考的頁面。所有這些步驟都是為了對CommonCrawl進(jìn)行過濾!根據(jù)之前的工作,我們知道正確過濾預(yù)訓(xùn)練數(shù)據(jù)集對LLM的性能至關(guān)重要。在[1]中,我們可以更深入地了解實施有效過濾管道的具體細(xì)節(jié)。

LLaMA套件采用了很多流行的LLM(如GPT-3 [4]和PaLM [5])中常見的架構(gòu)技巧。例如,LLaMA在每個層內(nèi)部執(zhí)行預(yù)歸一化,這意味著在變換器中,歸一化應(yīng)用于每個層的輸入而不是輸出;請參見上文。此外,RMSNorm、SwiGLU激活函數(shù)和旋轉(zhuǎn)位置嵌入(RoPE)[10](一種絕對位置嵌入和相對位置嵌入的混合形式)在每個變換器層中都被使用。

在[1]中,使用了四種不同規(guī)模的模型,參數(shù)數(shù)量從67億到652億不等;請參見上文。這些模型構(gòu)成了被稱為LLaMA的LLM集合,并在性能、模型大小和推理預(yù)算之間提供了各種不同的權(quán)衡。值得注意的是,LLaMA-13B在性能上與GPT-3相媲美,并且可以在單個V100 GPU上運行。與之前的模型相比,這是一個巨大的成就,使得這些模型對大多數(shù)從業(yè)者來說更易于使用(例如,PaLM的訓(xùn)練使用了>6K個加速器)。
更好的效率。[1]中的作者采用了一些有趣的技巧來提高LLM的訓(xùn)練效率。首先,我們應(yīng)該回憶一下,基于僅解碼器的Transformer模型的現(xiàn)代LLM在每個層中使用因果多頭注意力。為了提高這種因果多頭注意力操作的效率,LLaMA使用一種高效的實現(xiàn),不存儲注意力權(quán)重,也不為被屏蔽的標(biāo)記計算鍵/查詢分?jǐn)?shù)。通過這樣做,我們可以節(jié)省大量計算,通常浪費在被因果自注意力忽略的屏蔽標(biāo)記上。這種方法受到[9]中的思想啟發(fā),但我們可以在xformers庫中找到一個開源實現(xiàn)。
除了高效的因果自注意力實現(xiàn)外,與大多數(shù)LLM訓(xùn)練策略相比,LLaMA在重計算方面采用了略有不同的方法。在前向傳播過程中保存計算成本最高的激活值(例如線性層的輸出),從而減少在反向傳播過程中需要重新計算的激活值的數(shù)量。這種改變需要手動重新實現(xiàn)LLM的反向傳播(而不是使用PyTorch中的自動求導(dǎo)),是一種混合的重計算方法,顯著提高了整體訓(xùn)練吞吐量。
“當(dāng)訓(xùn)練一個65B參數(shù)的模型時,我們的代碼在擁有2048個A100 GPU和80GB內(nèi)存的環(huán)境下,每秒處理約380個標(biāo)記/秒/GPU。這意味著在包含1.4T個標(biāo)記的數(shù)據(jù)集上訓(xùn)練大約需要21天?!?— 來自[1]
考慮到LLaMA為提高訓(xùn)練效率所采用的修改,我們可能會想知道:這實際上使訓(xùn)練速度加快了多少?嗯,這在很大程度上取決于訓(xùn)練基礎(chǔ)設(shè)施。然而,當(dāng)使用2048個A100 GPU時,LLaMA-65B大約需要21天的時間完成對包含1.4T個標(biāo)記的數(shù)據(jù)集的預(yù)訓(xùn)練。
LLaMA vs. SOTA LLMs
盡管開源和可重復(fù)性很重要,但如果模型表現(xiàn)不佳,人們就不會關(guān)心LLaMA!以前曾嘗試過開源LLM(例如OPT和BLOOM [11, 12]),但這些模型在性能方面無法與現(xiàn)代LLM競爭。在本節(jié)中,我們將分析LLaMA模型相對于流行的LLM(如GPT-3和PaLM [4, 5])的性能。
我們?nèi)绾卧u估呢?如前文所述,LLaMA的評估方式與大多數(shù)語言基礎(chǔ)模型類似:通過零樣本和少樣本學(xué)習(xí)。值得注意的是,LLaMA模型僅作為預(yù)訓(xùn)練的基礎(chǔ)模型進(jìn)行評估,這意味著不進(jìn)行微調(diào)(無論是通過SFT還是RLHF)。LLaMA與流行的閉源LLM(如GPT-3、Gopher、Chinchilla和PaLM [3, 4, 5, 13])以及以前的開源LLM(如OPT、GPT-J和GPT-Neo [11, 14])在自由生成和多選題任務(wù)上進(jìn)行比較。測試了各種領(lǐng)域(如常識和數(shù)學(xué)推理、代碼生成、問答等)的性能。

在閉卷問答和閱讀理解任務(wù)中,我們發(fā)現(xiàn)LLaMA-65B取得了最先進(jìn)的零樣本和少樣本性能,在性能上持續(xù)超過了PaLM和Chinchilla等更大的模型。更進(jìn)一步,LLaMA-13B的表現(xiàn)令人驚訝地出色,甚至在大多數(shù)情況下優(yōu)于GPT-3(后者的規(guī)模是其10倍?。?。基本結(jié)論是,i)較大的LLaMA模型具有與最先進(jìn)模型相競爭的能力,ii)相對于其規(guī)模而言,較小的LLaMA模型表現(xiàn)出色。

LLaMA套件還在常識推理和數(shù)學(xué)推理任務(wù)上進(jìn)行了評估。在常識推理任務(wù)中,LLaMA超過了多個強大基線模型的零樣本推理性能;請參見上文。然而,需要注意的是,在這里沒有采用特殊的提示方法(例如思路鏈提示)來促進(jìn)推理能力的提升。先前的研究[5]表明,在沒有正確的提示方法的情況下,LLM的“推理”能力可能隨著規(guī)模的增大而降低。

盡管這種分析存在一定的局限性,但與基線模型相比,LLaMA在推理能力上仍然表現(xiàn)相對出色。特別是,在數(shù)學(xué)推理數(shù)據(jù)集上,LLaMA模型與多個基線模型具有相當(dāng)?shù)母偁幜Γㄔ谀承┣闆r下甚至更好)。事實上,LLaMA-65B甚至在數(shù)學(xué)數(shù)據(jù)上的表現(xiàn)超過了類似規(guī)模的Minerva模型,后者經(jīng)過明確的微調(diào)以提高在此類任務(wù)上的性能。
“Minerva是一系列在ArXiv和數(shù)學(xué)網(wǎng)頁中提取的38.5B標(biāo)記上進(jìn)行微調(diào)的PaLM模型...在GSM8k數(shù)據(jù)集上,我們觀察到LLaMA65B優(yōu)于Minerva-62B,盡管它沒有在數(shù)學(xué)數(shù)據(jù)上進(jìn)行過微調(diào)?!?— 來自[1]
代碼生成。除了基本的推理能力外,代碼生成是LLaMA模型的另一個技能。盡管從未對代碼進(jìn)行微調(diào)(即代碼在LLaMA的預(yù)訓(xùn)練數(shù)據(jù)中占比不到5%),LLaMA-65B在代碼生成任務(wù)上表現(xiàn)優(yōu)于PaLM,并且LLaMA-13B的代碼生成性能超過了GPT-3(但是...GPT-3在生成代碼方面的表現(xiàn)確實較差)。

在MMLU基準(zhǔn)測試中,LLaMA模型在大多數(shù)情況下的性能落后于Chinchilla和PaLM等LLM模型。這個基準(zhǔn)測試是LLaMA性能明顯被當(dāng)前替代方案超越的少數(shù)情況之一。[1]中的作者聲稱,這種性能下降是由于LLaMA的預(yù)訓(xùn)練數(shù)據(jù)集中書籍和學(xué)術(shù)論文的數(shù)量有限(與最先進(jìn)的LLM相比,這種預(yù)訓(xùn)練數(shù)據(jù)減少了>10倍)所導(dǎo)致的。

在整個預(yù)訓(xùn)練過程中,當(dāng)跟蹤LLaMA模型的性能時,我們可以觀察到性能明顯且穩(wěn)定地改善的趨勢;請參見上文。盡管并非所有任務(wù)的表現(xiàn)都相似,但我們可以看到LLaMA采用的預(yù)訓(xùn)練策略整體上相對穩(wěn)定。
Takeaways
簡而言之,LLaMA是一個具有令人震驚的出色性能的開源LLM。自LLaMA的提出以來,研究界已經(jīng)充分利用了這個令人印象深刻的開放模型。例如,以下研究工作已經(jīng)在LLaMA的基礎(chǔ)上展開:
- Vicuna:對LLaMA進(jìn)行微調(diào),性能(幾乎)可與GPT-4相媲美 [鏈接]
- Koala:基于互聯(lián)網(wǎng)對話數(shù)據(jù)對LLaMA進(jìn)行微調(diào) [鏈接]
- ChatLLaMA:使用最少的計算資源在自己的數(shù)據(jù)上創(chuàng)建個性化的ChatGPT版本 [鏈接]
- ColossalChat:類似于ChatGPT的模型,基于LLaMA構(gòu)建的RLHF流程 [鏈接]
LLaMA的影響力很可能會顯著增加。個人而言,我對開放LLM的研究持續(xù)進(jìn)展感到非常興奮。我希望使這些模型更易于使用將促使更廣泛的研究界進(jìn)行更深入的調(diào)查和開發(fā)。以下是一些基本的要點:
開源LLM。目前,LLM生態(tài)系統(tǒng)正面臨一個有趣的沖突,兩種不同的方法被用來向公眾展示這些強大的基礎(chǔ)模型。一方面,像ChatGPT和GPT-4這樣的模型僅通過付費API發(fā)布,阻止研究界詳細(xì)訪問這些模型。而像LLaMA這樣的貢獻(xiàn)則反對這種趨勢,為研究界提供了完整的模型訪問權(quán)限。
最佳規(guī)模是多少?LLaMA不僅僅發(fā)布單個模型,而是提供了一系列不同規(guī)模的LLM。以往對LLM的研究往往倡導(dǎo)使用更大的模型,因為更大的LLM在訓(xùn)練過程中通常能夠以更少的計算成本達(dá)到令人印象深刻的性能水平。然而,如果我們對較小的模型進(jìn)行更全面的預(yù)訓(xùn)練,LLaMA表明我們可以在顯著減少推理成本的同時達(dá)到可比較的性能水平。因此,考慮使用較小的LLM是有意義的,尤其是當(dāng)我們需要部署它們時。值得注意的是,LLaMA中的某些模型可以在單個GPU上運行,這大大提高了對這些LLM的可訪問性。
令人印象深刻的性能。在LLaMA提出之前,許多研究團(tuán)隊嘗試發(fā)布流行LLM的開源版本(例如,OPT基本上是一個開源的GPT-3)。但是,這些模型的性能要遠(yuǎn)遠(yuǎn)遜于通過API可訪問的付費模型。盡管LLaMA在某些情況下性能不如理想,但它是一個巨大的進(jìn)步,因為它經(jīng)常在性能上超過了流行的最先進(jìn)LLM(具體取決于所使用的模型規(guī)模)。