譯者 | 晶顏
審校 | 重樓
本文講述LLM開(kāi)發(fā)生命周期的詳細(xì)技術(shù)指南,涉及原始文本預(yù)訓(xùn)練、指令調(diào)整及人類(lèi)校準(zhǔn)。
大語(yǔ)言模型(LLM)通過(guò)引入文本生成、摘要和會(huì)話(huà)式人工智能等高級(jí)應(yīng)用程序,對(duì)自然語(yǔ)言處理(NLP)產(chǎn)生了影響。像ChatGPT這樣的模型使用一種叫做“Transformer”的特定神經(jīng)結(jié)構(gòu)來(lái)預(yù)測(cè)序列中的下一個(gè)單詞,通過(guò)自注意(Self-attention)機(jī)制從大量的文本數(shù)據(jù)集中學(xué)習(xí)。
本指南分解了訓(xùn)練生成式人工智能模型的逐步建立過(guò)程,包括預(yù)訓(xùn)練,微調(diào),對(duì)齊和實(shí)際考慮因素。
訓(xùn)練管道概述
圖1:LLM訓(xùn)練管道概述
LLM的訓(xùn)練管道是一個(gè)結(jié)構(gòu)化的、多階段的過(guò)程,旨在提高語(yǔ)言理解、執(zhí)行特定任務(wù)的能力,并與人類(lèi)偏好保持一致。
- 數(shù)據(jù)收集和預(yù)處理。收集、清理、標(biāo)記和規(guī)范化來(lái)自不同來(lái)源的大量文本數(shù)據(jù),以確保質(zhì)量。高質(zhì)量、特定領(lǐng)域的數(shù)據(jù)提高了事實(shí)的準(zhǔn)確性,減少了幻覺(jué)。
- 預(yù)訓(xùn)練(Pre-training)。這是模型通過(guò)自監(jiān)督學(xué)習(xí)——一種模型在不需要標(biāo)記示例的情況下自學(xué)文本模式的技術(shù)——學(xué)習(xí)通用語(yǔ)言模式的基礎(chǔ)階段。以下一個(gè)令牌預(yù)測(cè)為例,這一階段依賴(lài)于大量數(shù)據(jù)集和Transformer架構(gòu)來(lái)構(gòu)建廣泛的語(yǔ)言能力。
- 指令微調(diào)。該模型在較小的、高質(zhì)量的輸入-輸出數(shù)據(jù)集上進(jìn)行訓(xùn)練,以專(zhuān)注于特定的任務(wù)或領(lǐng)域。此指令調(diào)優(yōu)步驟可確保輸出更準(zhǔn)確且符合上下文。
- 模型對(duì)齊。基于人類(lèi)反饋的強(qiáng)化學(xué)習(xí)(RLHF)改進(jìn)了模型的行為:
a. 獎(jiǎng)勵(lì)模型訓(xùn)練。人類(lèi)評(píng)估人員對(duì)輸出進(jìn)行排序以訓(xùn)練獎(jiǎng)勵(lì)模型。
b. 策略?xún)?yōu)化。LLM需要迭代優(yōu)化,以配合人類(lèi)的偏好,道德考慮和用戶(hù)的期望。
- 評(píng)估和迭代微調(diào)。該模型在未見(jiàn)過(guò)的數(shù)據(jù)上進(jìn)行測(cè)試,以評(píng)估準(zhǔn)確性和一致性等指標(biāo)。隨后可能會(huì)進(jìn)一步微調(diào),以調(diào)整超參數(shù)或合并新數(shù)據(jù)。
- 下游應(yīng)用程序適應(yīng)。通過(guò)額外的微調(diào)或與特定任務(wù)框架的集成,訓(xùn)練有素的LLM可以適應(yīng)現(xiàn)實(shí)世界的應(yīng)用(例如,聊天機(jī)器人,內(nèi)容生成)。
該管道將LLM從通用模型轉(zhuǎn)換為能夠有效處理各種任務(wù)的專(zhuān)用工具。
1.預(yù)訓(xùn)練
預(yù)訓(xùn)練是LLM開(kāi)發(fā)的基礎(chǔ)階段,在這個(gè)階段,模型從大量的文本數(shù)據(jù)中學(xué)習(xí)通用的語(yǔ)言模式和表示。此階段教授模型語(yǔ)法規(guī)則、上下文單詞關(guān)系和基本邏輯模式(例如,文本中的因果關(guān)系),從而形成其執(zhí)行各種下游任務(wù)的能力的基礎(chǔ)。
如何進(jìn)行預(yù)訓(xùn)練
圖2:預(yù)訓(xùn)練階段的高級(jí)概述
目標(biāo)
預(yù)訓(xùn)練的主要目標(biāo)是使模型能夠預(yù)測(cè)序列中的下一個(gè)標(biāo)記。這是通過(guò)因果語(yǔ)言建模(CLM)實(shí)現(xiàn)的,這是一種教授模型預(yù)測(cè)句子中接下來(lái)會(huì)出現(xiàn)什么的方法。在這一步中,模型學(xué)習(xí)僅通過(guò)查看過(guò)去的標(biāo)記來(lái)生成連貫且與上下文相關(guān)的文本。
數(shù)據(jù)集
預(yù)訓(xùn)練需要大量不同的數(shù)據(jù)集,這些數(shù)據(jù)集來(lái)自書(shū)籍、文章、網(wǎng)站和其他公開(kāi)可用的內(nèi)容。流行的數(shù)據(jù)集包括Common Crawl、Wikipedia、The Pile和BookCorpus。這些數(shù)據(jù)集經(jīng)常被清理和規(guī)范化,以確保在預(yù)處理期間使用重復(fù)數(shù)據(jù)刪除和標(biāo)記化等技術(shù)進(jìn)行高質(zhì)量的輸入。長(zhǎng)上下文數(shù)據(jù)被整理以增加模型的上下文長(zhǎng)度。
預(yù)訓(xùn)練過(guò)程
- 該模型通過(guò)因果語(yǔ)言建模來(lái)學(xué)習(xí)預(yù)測(cè)序列中的下一個(gè)標(biāo)記。
- 使用交叉熵?fù)p失函數(shù)(Cross-entropy Loss Function)將模型預(yù)測(cè)與實(shí)際的下一個(gè)單詞進(jìn)行比較。
- 模型參數(shù)不斷調(diào)整,以盡量減少預(yù)測(cè)誤差或損失,直到模型達(dá)到可接受的精度水平。
- 預(yù)訓(xùn)練階段需要大量的計(jì)算資源,通常在分布式系統(tǒng)中使用數(shù)千小時(shí)的GPU來(lái)處理有效訓(xùn)練所需的大量數(shù)據(jù)集。
這是一種自監(jiān)督學(xué)習(xí)方法,模型直接從原始文本中學(xué)習(xí)模式,而不需要手動(dòng)標(biāo)記。因此,通過(guò)讓模型預(yù)測(cè)下一個(gè)標(biāo)記來(lái)消除昂貴的人工注釋。
在下面的例子中,我們使用了一個(gè)GPT 2模型,該模型以一種自監(jiān)督的方式在一個(gè)非常大的英語(yǔ)數(shù)據(jù)語(yǔ)料庫(kù)上進(jìn)行了預(yù)訓(xùn)練,沒(méi)有人以任何方式對(duì)它們進(jìn)行標(biāo)記。
Python
1 import torch
2 from transformers import AutoModelForCausalLM, AutoTokenizer
3
4 # Load the model and tokenizer
5 model = AutoModelForCausalLM.from_pretrained("gpt2")
6 tokenizer = AutoTokenizer.from_pretrained("gpt2")
7
8 input_text = "The capital of France is"
9
10 # Tokenize the input text
11 model_inputs = tokenizer([input_text], return_tensors="pt")
12
13 # Run inference on the pretrained model and decode the output
14 generated_ids = model.generate(**model_inputs, max_new_tokens=25, do_sample=True)
15 print(tokenizer.batch_decode(generated_ids)[0])
正如預(yù)期的那樣,該模型能夠根據(jù)其預(yù)訓(xùn)練迭代預(yù)測(cè)下一個(gè)標(biāo)記來(lái)完成句子“法國(guó)首都是……”。
輸出:
The capital of France is the city of Paris which is more prosperous than the other capitals in .(法國(guó)的首都是巴黎,它比世界其他首都都繁華。)
然而,當(dāng)以問(wèn)題的形式表達(dá)時(shí),例如,“法國(guó)的首都是什么?”模型無(wú)法產(chǎn)生正確的結(jié)果,因?yàn)樵谟?xùn)練的這個(gè)階段,它還不能遵循指令。
Python
1 text2 = "What is the capital of France?"
2
3 model_inputs = tokenizer([text2], return_tensors="pt")
4 generated_ids = model.generate(**model_inputs, max_new_tokens=25, do_sample=True)
5 print(tokenizer.batch_decode(generated_ids)[0])
輸出:
What is the capital of France? In our opinion we should be able to count the number of people in France today. The government has made this a big priority(法國(guó)的首都是哪里?在我們看來(lái),我們應(yīng)該能夠計(jì)算出今天法國(guó)的人數(shù)。政府已將此作為重中之重。)
預(yù)訓(xùn)練的好處
- 廣泛的語(yǔ)言理解能力。通過(guò)在不同的數(shù)據(jù)上進(jìn)行訓(xùn)練,預(yù)訓(xùn)練的模型可以全面掌握語(yǔ)言結(jié)構(gòu)和模式,使它們能夠在各種任務(wù)中進(jìn)行推廣。
- 效率。預(yù)訓(xùn)練的模型可以用更小的標(biāo)記數(shù)據(jù)集對(duì)特定任務(wù)進(jìn)行微調(diào),與為每個(gè)任務(wù)從頭開(kāi)始訓(xùn)練模型相比,節(jié)省了時(shí)間和資源。
- 性能。由于能夠利用大規(guī)模數(shù)據(jù)集的知識(shí),經(jīng)過(guò)預(yù)訓(xùn)練然后進(jìn)行微調(diào)的模型始終優(yōu)于僅在特定任務(wù)數(shù)據(jù)上訓(xùn)練的模型。
2. 指令微調(diào)
指令微調(diào)是一種專(zhuān)門(mén)的訓(xùn)練技術(shù),可將通用LLM轉(zhuǎn)換為響應(yīng)靈敏的指令遵循系統(tǒng)。在這里,模型在特定的任務(wù)上訓(xùn)練,比如回答問(wèn)題或總結(jié)文本。通過(guò)在精心挑選的對(duì)(指令、輸出)上訓(xùn)練模型,該方法將LLM的文本生成能力與人類(lèi)定義的任務(wù)和會(huì)話(huà)模式相結(jié)合。
訓(xùn)練(指令,輸出)樣本看起來(lái)像這樣:
Instruction: What is the capital of Germany?(指令:德國(guó)的首都是哪里?)
Response: The capital of Germany is Berlin.(輸出:德國(guó)的首都是柏林。)
圖3:指令微調(diào)階段概述
在下面的示例中,我們從谷歌加載Gemma 2 LLM模型,該模型針對(duì)各種文本生成任務(wù)(包括問(wèn)答、摘要和推理)進(jìn)行指令調(diào)優(yōu)。
Python
1 from transformers import AutoTokenizer, AutoModelForCausalLM
2 import torch
3
4 # Load Gemma 2 2b instruct model
5 tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b-it")
6 model = AutoModelForCausalLM.from_pretrained("google/gemma-2-2b-it")
7
8 # Tokenize input
9 input_text = "What is the capital of France?"
10 input_ids = tokenizer(input_text, return_tensors="pt")
11
12 # Run model inference and decode output
13 outputs = model.generate(**input_ids, max_new_tokens=25, do_sample=True)
14 print(tokenizer.decode(outputs[0]))
這個(gè)經(jīng)過(guò)微調(diào)的模型能夠遵循以下指令:
What is the capital of France? The capital of France is Paris.(法國(guó)的首都是哪里?法國(guó)的首都是巴黎。)
如何進(jìn)行指令微調(diào)
目標(biāo)
指令微調(diào)通過(guò)教學(xué)模型來(lái)理解和遵循自然語(yǔ)言指令,彌合了LLM基本的下一個(gè)單詞預(yù)測(cè)能力和實(shí)際任務(wù)執(zhí)行之間的關(guān)鍵缺口。這個(gè)過(guò)程將通用LLM轉(zhuǎn)換為響應(yīng)式的、遵循指令的系統(tǒng),這些系統(tǒng)始終遵循用戶(hù)命令,如“總結(jié)本文”或“為x編寫(xiě)Python函數(shù)”。
監(jiān)督式學(xué)習(xí)
與預(yù)訓(xùn)練不同,預(yù)訓(xùn)練在未標(biāo)記的數(shù)據(jù)上使用自監(jiān)督學(xué)習(xí),而指令微調(diào)則使用帶有標(biāo)記的指令輸出對(duì)進(jìn)行監(jiān)督學(xué)習(xí)。這個(gè)過(guò)程包括:
- 使用明確的指令-反應(yīng)對(duì)進(jìn)行訓(xùn)練;
- 更新模型權(quán)重以?xún)?yōu)化后續(xù)指令;
- 在調(diào)整響應(yīng)模式的同時(shí)維護(hù)模型的基礎(chǔ)知識(shí)。
數(shù)據(jù)集
該指令數(shù)據(jù)集由三個(gè)關(guān)鍵部分組成:
- 指令——自然語(yǔ)言命令或請(qǐng)求。
- 上下文——可選的上下文或示例。
- 輸出——顯示正確執(zhí)行任務(wù)的期望響應(yīng)。
Instruction: Find the solution to the quadratic equation.(指令:求二次方程的解。)
Context: 3x2 + 7x - 4 = 0(上下文:3x2+ 7x - 4 = 0)
Response: The solution of the quadratic equation is x = -4 and x = 1/3.(輸出:二次方程的解為x = -4, x = 1/3。)
這些數(shù)據(jù)集可以通過(guò)領(lǐng)域?qū)<业氖謩?dòng)管理、使用其他LLM的合成生成或?qū)F(xiàn)有標(biāo)記數(shù)據(jù)集轉(zhuǎn)換為指令格式來(lái)創(chuàng)建。
微調(diào)技術(shù)
以下兩種主要方法主導(dǎo)著指令微調(diào):
- 全模型微調(diào)更新所有模型參數(shù),以更高的計(jì)算要求為代價(jià),為特定任務(wù)提供更好的性能。
- 輕量級(jí)適應(yīng)方法(如LoRA)修改模型的一小部分,而不是重新訓(xùn)練所有內(nèi)容,從而顯著降低內(nèi)存需求。
指令微調(diào)的好處
- 增強(qiáng)任務(wù)泛化。模型開(kāi)發(fā)了元學(xué)習(xí)(Meta-learning)能力,在沒(méi)有特定訓(xùn)練的情況下提高新任務(wù)的表現(xiàn)。
- 減少提示工程。經(jīng)過(guò)微調(diào)的模型需要更少的提示示例,從而提高部署效率。
- 控制輸出:允許精確定制響應(yīng)格式和樣式。
- 更好的指令遵循。在模型功能和用戶(hù)期望之間架起橋梁。
3. 對(duì)齊調(diào)優(yōu)
對(duì)齊(Alignment)或偏好調(diào)優(yōu)是訓(xùn)練大語(yǔ)言模型(LLM)的關(guān)鍵階段,以確保模型避免有害或有偏差的響應(yīng)。這一步超越了提高特定任務(wù)的性能——它的重點(diǎn)是通過(guò)結(jié)合人類(lèi)反饋或預(yù)定義的指導(dǎo)方針,使模型更安全、更有幫助,并與用戶(hù)保持一致。
為什么對(duì)齊很重要
預(yù)訓(xùn)練的LLM是在來(lái)自互聯(lián)網(wǎng)的大量數(shù)據(jù)集上進(jìn)行訓(xùn)練的,這些數(shù)據(jù)集可能包含偏見(jiàn)、有害內(nèi)容或相互矛盾的信息。如果缺乏一致性,這些模型可能會(huì)給出令人反感和誤導(dǎo)的答案。對(duì)齊調(diào)優(yōu)使用人工反饋來(lái)過(guò)濾有害輸出(例如,有偏見(jiàn)或危險(xiǎn)的內(nèi)容),以確保響應(yīng)符合安全準(zhǔn)則。
以下是OpenAI的GPT-4 系統(tǒng)卡(System Card)的一個(gè)示例,展示了未對(duì)齊的“GPT-4(早期)”模型所帶來(lái)的安全挑戰(zhàn)。
圖4:“GPT-4早期”模型的預(yù)校準(zhǔn)版本的安全風(fēng)險(xiǎn)
GPT-4系統(tǒng)卡強(qiáng)調(diào)了使用RLHF對(duì)模型進(jìn)行微調(diào)的重要性,以使模型響應(yīng)與人類(lèi)對(duì)有益和無(wú)害的偏好保持一致。它緩解了不安全的行為,并防止模型產(chǎn)生有害的內(nèi)容和偏見(jiàn)。
對(duì)齊的關(guān)鍵方法
DPO論文中的下圖說(shuō)明了最常用的對(duì)齊方法:
圖5:(左)RLHF工作流顯示了人類(lèi)反饋集成。(右)DPO跳過(guò)獎(jiǎng)勵(lì)建模來(lái)直接調(diào)整響應(yīng)
基于人類(lèi)反饋的強(qiáng)化學(xué)習(xí)(RLHF)
RLHF是一種機(jī)器學(xué)習(xí)技術(shù),旨在使LLM與人類(lèi)的價(jià)值觀(guān)、偏好和期望保持一致。通過(guò)將人類(lèi)反饋納入訓(xùn)練過(guò)程,RLHF增強(qiáng)了模型產(chǎn)生連貫、有用、合乎道德并與用戶(hù)意圖一致的輸出的能力。這種方法有助于ChatGPT和谷歌Gemini等生成模型更安全、更可靠。
RLHF過(guò)程包括三個(gè)主要步驟:
步驟 | 描述 | 結(jié)果 |
人類(lèi)反饋 | 注釋者根據(jù)相關(guān)性/倫理對(duì)輸出進(jìn)行排序 | 偏好數(shù)據(jù)集創(chuàng)建 |
獎(jiǎng)勵(lì)模型 | 被訓(xùn)練來(lái)預(yù)測(cè)人類(lèi)的偏好 | 質(zhì)量評(píng)分系統(tǒng) |
策略?xún)?yōu)化 | 通過(guò)強(qiáng)化學(xué)習(xí)進(jìn)行微調(diào)的LLM(例如,PPO) | 對(duì)齊響應(yīng)生成 |
- 收集人類(lèi)反饋。人類(lèi)注釋者通過(guò)基于相關(guān)性、一致性和準(zhǔn)確性等標(biāo)準(zhǔn)對(duì)模型生成的輸出進(jìn)行排名或評(píng)分來(lái)評(píng)估它們。通常使用兩兩比較,注釋者在兩個(gè)選項(xiàng)中選擇更好的響應(yīng)。這些反饋形成了反映人類(lèi)判斷的“偏好數(shù)據(jù)集”。
- 訓(xùn)練獎(jiǎng)勵(lì)模型。使用偏好數(shù)據(jù)集訓(xùn)練獎(jiǎng)勵(lì)模型,以預(yù)測(cè)給定反應(yīng)與人類(lèi)偏好的一致程度。獎(jiǎng)勵(lì)模型根據(jù)人類(lèi)偏好為輸出分配一個(gè)標(biāo)量獎(jiǎng)勵(lì)分?jǐn)?shù)(比如0到10),以訓(xùn)練LLM優(yōu)先考慮得分高的響應(yīng)。
- 通過(guò)強(qiáng)化學(xué)習(xí)進(jìn)行微調(diào)。LLM使用諸如近端策略?xún)?yōu)化(PPO)之類(lèi)的強(qiáng)化學(xué)習(xí)算法進(jìn)行微調(diào),該算法教導(dǎo)人工智能逐步改進(jìn),而不是一次做出巨大的改變。獎(jiǎng)勵(lì)模型通過(guò)對(duì)生成的輸出提供反饋來(lái)指導(dǎo)這一過(guò)程,使LLM能夠優(yōu)化其策略,以產(chǎn)生高回報(bào)的響應(yīng)。
直接偏好優(yōu)化(DPO)
直接偏好優(yōu)化(DPO)是一種新興的訓(xùn)練方法,旨在使LLM與人類(lèi)偏好保持一致。它是RLHF的一種更簡(jiǎn)單、更有效的替代方案,繞過(guò)了復(fù)雜的強(qiáng)化學(xué)習(xí)算法,如近端策略?xún)?yōu)化(PPO)。相反,DPO通過(guò)直接訓(xùn)練LLM對(duì)人類(lèi)排名的反應(yīng)來(lái)跳過(guò)獎(jiǎng)勵(lì)建模。
首選項(xiàng)數(shù)據(jù)生成過(guò)程保持不變,如上面的RLHF方法所強(qiáng)調(diào)的那樣。DPO流程包括:
- 直接優(yōu)化。與RLHF不同,RLHF訓(xùn)練獎(jiǎng)勵(lì)模型并使用強(qiáng)化學(xué)習(xí),DPO直接微調(diào)LLM以產(chǎn)生與排名偏好最大一致的輸出。這是通過(guò)直接訓(xùn)練模型來(lái)支持高排名的響應(yīng)并避免低排名的響應(yīng)來(lái)實(shí)現(xiàn)的。
- 模型訓(xùn)練。優(yōu)化過(guò)程調(diào)整模型的參數(shù),以?xún)?yōu)先生成符合人類(lèi)偏好的響應(yīng),而不需要像RLHF那樣迭代更新策略。
模型對(duì)齊已經(jīng)成功地應(yīng)用于下述領(lǐng)域:
- 會(huì)話(huà)式AI。使聊天機(jī)器人符合用戶(hù)對(duì)語(yǔ)氣、相關(guān)性和道德標(biāo)準(zhǔn)的期望。
- 內(nèi)容生成?;谟脩?hù)定義的質(zhì)量指標(biāo),為諸如總結(jié)或創(chuàng)造性寫(xiě)作之類(lèi)的任務(wù)優(yōu)化模型。
- 倫理人工智能發(fā)展。確保模型遵循公平性、安全性和包容性的指導(dǎo)方針,而不會(huì)產(chǎn)生大量的計(jì)算成本。
結(jié)語(yǔ)
本指南向你展示了LLM訓(xùn)練的具體細(xì)節(jié)。你準(zhǔn)備好開(kāi)始了嗎?許多開(kāi)源模型和數(shù)據(jù)集正在等待你進(jìn)行實(shí)驗(yàn)并調(diào)整它們以解決你的特定問(wèn)題。
原文標(biāo)題:A Comprehensive Guide to Generative AI Training,作者:Vashishtha Patil