論文標題:LLaMA: Open and Efficient Foundation Language Models
論文鏈接:https://arxiv.org/abs/2302.13971
論文來源:Meta AI
一、概述
大型語言模型(Large Languages Models,LLMs)通過大規(guī)模文本數據的訓練,展示了其根據文本指令或少量樣本完成新任務的能力。這種少數示例的性質首次在規(guī)模足夠大的模型中出現,導致了一系列聚焦于進一步擴大這些模型的工作。這些努力都是基于一個假設:模型參數越多,性能越好。然而,Hoffmann等人(2022)的近期研究顯示,在給定的計算預算下,最佳的性能并非由最大的模型實現,而是由訓練數據更多的較小模型實現。
Hoffmann等人(2022)的目標是確定如何最好地根據特定的訓練計算預算來調整數據集和模型大小。然而,這個目標忽略了推理預算,這在大規(guī)模使用語言模型時變得至關重要。在這種背景下,目標性能水平下的首選模型并不是訓練速度最快的,而是推理速度最快的,盡管訓練大模型以達到一定的性能水平可能更加容易,但更長時間訓練的小模型最終在推理時成本會更低。例如,盡管Hoffmann等人(2022)推薦在200B個token上訓練一個10B的模型,我們發(fā)現7B模型的性能即使在1T個token之后仍在提高。
本文研究的主要目標是通過使用比通常更多的數據來訓練一系列在各種推理預算下達到最佳可能性能的語言模型。這一系列模型稱為LLaMA,參數范圍從7B到65B,與現有最佳LLMs的性能相媲美。例如,LLaMA-13B在大多數基準測試中都優(yōu)于GPT-3,盡管其大小只有GPT-3的十分之一。作者們認為這個模型將有助于民主化訪問和研究LLMs,因為它可以在單個GPU上運行。對于最大規(guī)模的模型,LLaMA的65B參數模型也可以與最佳的LLMs(如Chinchilla或PaLM-540B)相媲美。
不同于Chinchilla、PaLM或GPT-3,LLaMA只使用公開可用的數據,使他們的工作與開源兼容,而大多數現有的模型依賴于非公開或未記錄的數據(例如“Books – 2TB”或“Social media conversations”)。存在一些例外,如OPT、GPT-NeoX、BLOOM和GLM,但沒有一個能與PaLM-62B或Chinchilla競爭。
二、方法
LLaMA使用完全開源的數據進行預訓練,并且融合了已有LLMs的一些訓練技巧,同時為了高效運算也對模型架構和運算過程做了一些改動。
- 預訓練數據
LLaMA的預訓練數據來自各個開源語料,數據組成如下:

這些數據中既包括網絡語料也包括一些代碼、書籍等開源數據,這既使得模型能夠具備一些多領域的知識和代碼理解能力,也可能使得模型會生成一些偏見、毒性和錯誤信息等有害內容。
LLaMA使用BPE(byte-pair encoding)算法來對數據進行token化,并且將所有的數字分割成單獨的數字,并在無法識別的UTF-8字符時回退到byte級別進行分解。這樣的處理方式能夠幫助模型更好地理解和處理各種類型的字符和數字。最終從這些數據中得到了1.4T個token,對于大多數數據,每個token在訓練時只使用一次,除了Wikipedia和Books這兩部分執(zhí)行大約2個epoch。
- 架構
LLaMA整合了一些已有的研究來對Transformer架構進行改進,主要包括:
①Pre-normalization[GPT3]:為了提高訓練穩(wěn)定性,LLaMA歸一化了每個Transformer子層的輸入,而不是歸一化輸出。他們使用RMSNorm歸一化函數。
②SwiGLU激活函數 [PaLM]:他們將ReLU非線性函數替換為SwiGLU激活函數。他們使用的維度是,而不是PaLM中的
。
③Rotary Embeddings[GPTNeo]:他們移除了絕對位置嵌入,而是在網絡的每一層添加Rotary Embeddings(RoPE)。
以上的改進均有助于提升模型的性能和訓練穩(wěn)定性。所有模型的超參數細節(jié)如下:

- 優(yōu)化器
LLaMA使用的是AdamW優(yōu)化器,設置的超參數為:。并且使用了余弦學習率調度,使得最終學習率等于最大學習率的10%。他們設置的權重衰減為0.1,梯度裁剪為1.0。同時使用2000步的warm-up,并根據模型的大小改變學習率和批處理大小(具體細節(jié)見上表)。
- 代碼層面的高效實現
首先,LLaMA使用了一種高效的因果多頭注意力運算符的實現(causal multi-head attention operator),這受到一些已有研究的啟發(fā)。這種實現方式,可以在xformers庫中找到,它降低了內存使用和計算量。這是通過不存儲注意力權重和不計算因語言模型任務的因果性而被mask的key/query得分來實現的。
為了進一步提高訓練效率,LLaMA通過檢查點技術減少了在反向傳播過程中需要重新計算的激活量。更具體地說,他們保存了那些計算成本較高的激活,例如線性層的輸出。這是通過手動實現transformer層的反向函數來實現的,而不是依賴于PyTorch的自動梯度計算。為了充分利用這種優(yōu)化,他們需要通過使用模型和序列并行化來減少模型的內存使用。此外,他們還盡可能地重疊了激活的計算和GPU之間網絡的通信(使用all_reduce操作)。
在訓練LLaMA的65B參數的模型時,本文的代碼在擁有80GB RAM的2048個A100 GPU上,每秒每個GPU可以處理大約380個tokens。這意味著在他們包含1.4T tokens的數據集上訓練需要大約21天。
三、實驗
- 主要實驗結果
本文在20個不同的benchmark數據集上進行了Zero-shot和Few-shot的實驗來驗證模型性能,主要結果如下:
- Common Sense Reasoning

- Closed-book Question Answering


- Reading Comprehension

- Mathematical reasoning

- Code generation

- Massive Multitask Language Understanding

- Evolution of performance during training


- 指令微調

- 偏見、毒性和錯誤信息
- RealToxicityPrompts

- CrowS-Pairs

- WinoGender

- TruthfulQA
