【NLP】一文帶你了解LLAMA(羊駝)系列
共 9015字,需瀏覽 19分鐘
·
2024-04-16 12:00
導(dǎo)讀
本文會重點(diǎn)介紹LLAMA系列的改進(jìn)點(diǎn),希望大家通過這一篇文章,能快速地了解LLAMA系列的改進(jìn)工作。
前言:
自從OpenAI推出Chat GPT系列后,也標(biāo)志著自然語言處理技術(shù)的一個重要里程碑--大模型LLM(Large Language Model)的爆火,雖然OpenAI也提供了上傳文檔并微調(diào)的功能,但是成本始終還是太高,不適合貧民窟玩家。
所以在開源社區(qū)里大模型百花齊放,而在這些開源模型里熱度最高且在其基礎(chǔ)上有著無數(shù)fine-tune的模型當(dāng)屬由Meta公司推出的LLAMA(Large Language Model Meta AI)系列了,作為decoder-only結(jié)構(gòu)的代表作,不僅僅是基底的LLAMA系列模型,其finetune后的模型包括Alpaca、Vicuna、Koala 以及l(fā)uotuo 等,都有著領(lǐng)域自適應(yīng)性且都有著不錯的性能。
本文會重點(diǎn)介紹LLAMA系列的改進(jìn)點(diǎn),希望大家通過這一篇文章,能快速地了解LLAMA系列的改進(jìn)工作。??【深藍(lán)AI】原創(chuàng)
文章地址:https://arxiv.org/pdf/2302.13971.pdf
項(xiàng)目地址:https://github.com/meta-llama/llama
改進(jìn)1:高質(zhì)量數(shù)據(jù)集
如圖1所示 LLaMa 預(yù)訓(xùn)練數(shù)據(jù)大約包含 1.4T tokens,對于絕大部分的訓(xùn)練數(shù)據(jù)來說,若要保證其高質(zhì)量的核心思想主要有三個:
①篩選低質(zhì)量數(shù)據(jù)
②數(shù)據(jù)去重
③數(shù)據(jù)多樣性
下面是這1.4T數(shù)據(jù)詳細(xì)的分布情況:
●English CommonCrawl【67%】:對五個CommonCrawl數(shù)據(jù)集進(jìn)行預(yù)處理,時間跨度為2017年到2020年,使用CCNet流水線。該過程在行級別進(jìn)行數(shù)據(jù)去重,使用fastText線性分類器進(jìn)行語言識別,以刪除非英語頁面,并使用n-gram語言模型過濾低質(zhì)量內(nèi)容。此外,還訓(xùn)練了一個線性模型,用于將頁面分類為Wikipedia中的引用頁面與隨機(jī)抽樣頁面,并丟棄未被分類為引用的頁面。
●C4【15%】:C4的預(yù)處理還包括去重和語言識別步驟,其與CCNet的主要區(qū)別在于質(zhì)量過濾,這主要依賴于標(biāo)點(diǎn)符號的存在或網(wǎng)頁中的詞語和句子數(shù)量等啟發(fā)式方法。
●Github【4.5%】:使用 Google BigQuery 上可用的公共 GitHub 數(shù)據(jù)集。只保留了在 Apache、BSD 和 MIT 許可下發(fā)布的項(xiàng)目。此外,使用基于行長度或字母、數(shù)字的字符比例的啟發(fā)式方法過濾低質(zhì)量文件,并使用正則表達(dá)式刪除了諸如頭文件之類的樣板文件。最后,對生成的數(shù)據(jù)集進(jìn)行了文件級別的去重,使用完全匹配的方法。
●Wikipedia【4.5%】:添加了截至2022年6月至8月的 Wikipedia 數(shù)據(jù),涵蓋20種語言。處理數(shù)據(jù)以去除超鏈接、評論和其他格式樣板。
●Gutenberg and Books3【4.5%】:添加了兩個書的數(shù)據(jù)集,分別是Gutenberg以及ThePile(訓(xùn)練 LLM 的常用公開數(shù)據(jù)集)中的Book3部分。處理數(shù)據(jù)時執(zhí)行重復(fù)數(shù)據(jù)刪除,刪除內(nèi)容重疊超過90%的書籍。
●ArXiv【2.5%】:處理了arXiv Latex文件,以添加科學(xué)數(shù)據(jù)到數(shù)據(jù)集中。移除了第一節(jié)之前的所有內(nèi)容,以及參考文獻(xiàn)。還移除了.tex文件中的注釋,并且內(nèi)聯(lián)展開了用戶編寫的定義和宏,以增加論文之間的一致性。
●Stack Exchange【2%】:作者添加了Stack Exchange,這是一個涵蓋各種領(lǐng)域的高質(zhì)量問題和答案網(wǎng)站,范圍從計(jì)算機(jī)科學(xué)到化學(xué)。作者從28個最大的網(wǎng)站保留數(shù)據(jù),從文本中刪除HTML標(biāo)簽并按分?jǐn)?shù)對答案進(jìn)行排序。
改進(jìn)2:Pre-normalization 預(yù)歸一化
我們都知道transformer結(jié)構(gòu)會對每一層的輸出進(jìn)行歸一化layer norm,而為了提高訓(xùn)練的穩(wěn)定性,作者受到GPT3的啟發(fā),對每個transformer層的輸入使用RMS Norm(Root Mean Square layer normalization)進(jìn)行歸一化。與常規(guī)使用的layer Norm相比,RMS Norm的主要區(qū)別在于layer Norn去掉了減去均值以及偏置
β的部分。RMS Norm的作者認(rèn)為這種模式在簡化了Layer Norm 的計(jì)算,可以再減少約7%~64%的計(jì)算時間,相關(guān)公式如下:
改進(jìn)3:SwiGLU 激活函數(shù)
收到PaLM啟發(fā),LLaMa使用SwiGLU激活函數(shù)替換ReLU以提高性能,維度從變成了。SwiGLU是2019年提出的新的激活函數(shù),相比于其他激活函數(shù),它結(jié)合了SWISH和GLU兩種者的特點(diǎn)。從原始論文中提出如圖2其性能與GEGLU坎肩,都可以取得log-perplexity的最優(yōu)值,相關(guān)公式如下:
←左右滑動查看完整公式→
改進(jìn)4:Rotary Embeddings 旋轉(zhuǎn)位編碼【GPTNeo】
受到GPTNeo啟發(fā),RoPE旋轉(zhuǎn)位置編碼的核心思想是“通過絕對位置編碼的方式實(shí)現(xiàn)相對位置編碼”,這一構(gòu)思具備了絕對位置編碼的方便性,同時可以表示不同token之間的相對位置關(guān)系。如圖3是RoPE旋轉(zhuǎn)位置編碼的機(jī)理圖解,不同于原始Transformers中將pos embedding和token embedding進(jìn)行相加,RoPE是將位置編碼和query(或key)進(jìn)行相乘得出。
具體來說,在對序列進(jìn)行位置編碼時和標(biāo)準(zhǔn)Transformer不同,LlaMa 的位置編碼在每個Attention層中分別對Q K 進(jìn)行RoPE位置編碼,而不是在Transformer Block之前進(jìn)行一次位置編碼,也就是說每次計(jì)算Attention時都分別要對Q和K做位置編碼。
小結(jié)1
LLAMA1系列是LLAMA推出的第一個系列,其一經(jīng)推出就影響了整個開源界。其一共推出了4個不同參數(shù)大小的模型分別是: 7B、13B、33B & 65B,并且其證明了在大部分的任務(wù)上,LLaMA-13B強(qiáng)于GPT-3(175B)。LLaMA-65B的性能,可以和最好的LM相媲美,如Chinchilla-70B和PaLM-540B。其性能的亮點(diǎn)充分地證明了高質(zhì)量數(shù)據(jù)的重要性,而不是一股腦地疊加網(wǎng)絡(luò)深度以及參數(shù)量。
在LLaMA1之前,大廠們的主要方向還是去堆積網(wǎng)絡(luò)深度和層數(shù),但是LLaMA給我們灌輸?shù)暮诵睦砟? 在給定的計(jì)算預(yù)算下,最佳性能并不是由最大的模型實(shí)現(xiàn)的,而是由更多數(shù)據(jù)訓(xùn)練的較小模型實(shí)現(xiàn)的。重點(diǎn)是訓(xùn)練一系列語言模型,以在各種推理預(yù)算下實(shí)現(xiàn)最佳性能,通過使用更多token進(jìn)行訓(xùn)練,而不是通常使用的數(shù)量。LLaMA目標(biāo)在于: 通過在超大規(guī)模的數(shù)據(jù)上訓(xùn)練,給出一系列可能最好performance的LLM。這同時也為之后LLaMa2的推出埋下了伏筆。
論文地址: https://arxiv.org/abs/2307.09288
項(xiàng)目地址: https://github.com/meta-llama/llama
LLaMa2只推出了3個不同大小的權(quán)重模型:7B,13B以及70B的版本。但是Meta AI 在LLaMa1中實(shí)踐得到的經(jīng)驗(yàn)后繼續(xù)用在了LLaMa2上,LLaMa2的網(wǎng)絡(luò)結(jié)構(gòu)如圖4,整體如同LLaMa1也是decoder-only based的transformer結(jié)構(gòu),整體由32個block構(gòu)成,可以看出其整體結(jié)構(gòu)基本與LLaMa1相似,比如說:
●在LLaMa1的基礎(chǔ)上,繼續(xù)增加了40%的預(yù)訓(xùn)練數(shù)據(jù)。主要是清理了一些隱私數(shù)據(jù)和知識增強(qiáng)從而提高數(shù)據(jù)質(zhì)量;
●繼續(xù)在每個block輸入層中使用RMSNorm;
●繼續(xù)使用RoPE位置編碼。
除了沿用LLaMa1中的一些改進(jìn),LLaMa2自身也做了一些改進(jìn)。由于上文已經(jīng)著重介紹了LLaMa的改進(jìn),所以對于重復(fù)部分這里就不再復(fù)述了,下面會著重介紹LLaMa2自身的改進(jìn)。
改進(jìn)1:Grouped-query attention
介紹GQA之前,需要先給大家鋪墊一下自回歸模型的輸出方式和KV cache的基本概念。如圖5,展示的是典型的decoder-only自回歸模型的輸出方式,所謂自回歸模型就是利用自己輸出的結(jié)果再作為輸入再去輸出(雖然拗口但意思正是如此)。
簡單來說就是,我們用過LLaMa或者gpt這種自回歸模型的時候都知道它輸出好像都是一個一個字往外面蹦,并不是一次性生成了所有答案。這里其實(shí)就能看出其輸出的機(jī)理,如下圖,當(dāng)我輸入一二三四五給模型作為輸入的時候,它第一次會多生成一個字,然后再多輸出的一個字的結(jié)果。重新作為輸入繼續(xù)給模型得到第二次輸出,依次類推……直到模型得到這種特殊符號就會停止輸出。
In \[1\]: \{prompt:"一二三四五,"\}
Out \[1\]: 一二三四五,上
In \[2\]: 一二三四五,上
Out \[2\]: 一二三四五,上山
In \[3\]: 一二三四五,上山
Out \[3\]: 一二三四五,上山打
In \[4\]: 一二三四五,上山打
Out \[4\]: 一二三四五,上山打老
In \[5\]: 一二三四五,上山打老
Out \[5\]: 一二三四五,上山打老虎
In \[6\]: 一二三四五,上山打老虎
Out \[6\]: 一二三四五,上山打老虎\<eos>
重復(fù)上面的過程不難發(fā)現(xiàn),雖然答案只生成了5個字卻經(jīng)過了6次循環(huán),比如說最早的prompt就重復(fù)了6次相同的矩陣計(jì)算,所以沒必要再對之前的token進(jìn)行Attention計(jì)算,這樣就能節(jié)省大部分算力。
KV Cache便是為了解決上述問題:通過將每次計(jì)算的K和V緩存下來,之后新的序列進(jìn)來時只需要從KV Cache中讀取之前的KV值即可,就不需要再去重復(fù)計(jì)算之前的KV了。
KV cache方法雖然理論上能行得通,但是在實(shí)際應(yīng)用中大量的數(shù)據(jù)緩存與硬件的通信能力有著極高的壓力。所以GQA(grouped-query attention)算法便從軟件方面進(jìn)行優(yōu)化了。如圖6,下面是三種自注意力機(jī)制的的對比,其中GQA是LLaMa2的機(jī)制,而MQA是LLaMa1的計(jì)算機(jī)制。那么為什么會從原始的NHA轉(zhuǎn)換到MQA再轉(zhuǎn)到GQA呢?
原始的MHA(Multi-Head Attention)中,QKV三部分有相同數(shù)量的頭且一一對應(yīng)。每次做Attention,head1的QKV就做好自己運(yùn)算就可以,輸出時各個頭加起來即可。而MQA(Multi-query Attention)則是,讓Q仍然保持原來的頭數(shù),但KV只有一個,相當(dāng)于所有的Q頭共享一組K和V頭,所以叫做Multi-Query了。實(shí)驗(yàn)發(fā)現(xiàn)一般能提高30%-40%的計(jì)算性能,但是性能精度會有所降低。而GQA通過分組一定頭數(shù)共享一組KV,從而達(dá)到性能和計(jì)算中的一個trade-off,這樣既不像MQA一樣降低很多精度,也可以相比于NHA提高速度。
改進(jìn)2:SiLu 激活函數(shù)
相比于SwiGLU函數(shù),這里用了更加簡單的SiLU函數(shù)(筆者認(rèn)為此處應(yīng)該是對比了SwiGLU性能差別不大,如有疑惑歡迎指出),相關(guān)公式如下:
小結(jié)2:
LLaMa系列是Meta公司開源的最強(qiáng)模型,尤其是llama2在推出的當(dāng)時70B的模型基本吊打所有開源模型,榮登開源模型榜首的位置。兩代llama2模型有著相同的地方,也有著許多改進(jìn)點(diǎn)值得后續(xù)繼續(xù)研究:
●高質(zhì)量數(shù)據(jù)集的重要性(廣而精)
●RoPE提供了相對位置編碼的解決方法
●GQA替代NHA以及MQA從而達(dá)到性能與速度的trade-off
●NMSNorm以及SiLu激活函數(shù)的改進(jìn)
LLaMA系列模型以其高質(zhì)量、可擴(kuò)展性和靈活性,在NLP領(lǐng)域取得了顯著的進(jìn)展。通過不斷地技術(shù)創(chuàng)新和優(yōu)化,LLaMA模型在各種任務(wù)上展現(xiàn)了卓越的性能,成為了大型語言模型研究和應(yīng)用的重要里程碑。隨著模型參數(shù)規(guī)模的不斷擴(kuò)大和訓(xùn)練技術(shù)的不斷進(jìn)步,LLaMA系列模型將繼續(xù)在自然語言處理領(lǐng)域發(fā)揮重要作用。
參考資料:
【1】https://www.zhihu.com/tardis/zm/art/648774481?source_id=1005
【2】https://blog.csdn.net/victor_manches/article/details/137017314?spm=1001.2014.3001.5502
【3】https://zhuanlan.zhihu.com/p/649756898
【4】https://zhuanlan.zhihu.com/p/651248009
【5】https://zhuanlan.zhihu.com/p/647130255
往期精彩回顧
交流群
歡迎加入機(jī)器學(xué)習(xí)愛好者微信群一起和同行交流,目前有機(jī)器學(xué)習(xí)交流群、博士群、博士申報交流、CV、NLP等微信群,請掃描下面的微信號加群,備注:”昵稱-學(xué)校/公司-研究方向“,例如:”張小明-浙大-CV“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~(也可以加入機(jī)器學(xué)習(xí)交流qq群772479961)
