只需三步,构建你的LLM
- 预训练语言模型 L L M S S L LLM^{SSL} LLMSSL(self-supervised-learning)
- (指令)监督微调预训练模型 L L M S F T LLM^{SFT} LLMSFT(supervised-fine-tuning)
- 基于人类反馈的强化学习微调 L L M R L LLM^{RL} LLMRL(reinforcement-learning)
开玩笑的,训练一个LLM的过程是极其及其复杂的尤其是像GPT那样的,需要的数据和算力就不说了,光是准备工作都不止3步。三步主要是指LLM模型训练过程中的三个核心步骤,以及每个步骤的目的。
1 :预训练阶段
从互联网上收集海量的文本数据,通过自监督的方式训练语言模型,根据上下文来预测下个词。token的规模大概在trillion级别,这个阶段要消耗很多资源,海量的数据采集、清洗和计算,该阶段的目的是:通过海量的数据,让模型接触不同的语言模式,让模型拥有理解和生成上下文连贯的自然语言的能力。
训练过程大致如下:
-
Training data : 来自互联网的开放文本数据,整体质量偏低
-
Data scale : 词汇表中的token数量在trillion级别
-
L L M ϕ S S L LLM_{\phi}^{SSL} LLMϕSSL: 预训练模型
-
[ T 1 , T 2 , . . . , T V ] [T_1, T_2, ... , T_V] [T1,T2,...,TV] : vocabulary 词汇表,训练数据中词汇的集合
-
V V V: 词汇表的大小
-
f ( x ) f(x) f(x): 映射函数把词映射为词汇表中的索引即:token. if x x x is T k T_k Tk in vocab, f ( x ) = k f(x) = k f(x)=k.
-
( x 1 , x 2 , . . . , x n ) (x_1, x_2, ..., x_n) (x1,x2,...,xn), 根据文本序列生成训练样本数据:
- Input: x = ( x 1 , x 2 , . . . , x i − 1 ) x = (x_1, x_2, ..., x_{i-1}) x=(x1,x2,...,xi−1)
- Output(label) : x i x_i xi
-
( x , x i ) (x, x_i) (x,xi),训练样本:
- Let k = f ( x i ) k = f(x_i) k=f(xi), w o r d → t o k e n word \to token word→token
- Model’s output : L L M S S L ( x ) = [ y ‾ 1 , y ‾ 2 , . . . , y ‾ V ] LLM^{SSL}(x) = [\overline{y}_1, \overline{y}_2, ..., \overline{y}_V] LLMSSL(x)=[y1,y2,...,yV], 模型预测下一个词的概率分布,Note : ∑ j y ‾ j = 1 \sum_j \overline{y}_j = 1 ∑jyj=1
- The loss value : C E ( x , x i ; ϕ ) = − l o g ( y ‾ k ) CE(x, x_i; \phi) = -log(\overline{y}_k) CE(x,xi;ϕ)=−log(yk)
-
Goal : find ϕ \phi ϕ ,Minimize C E ( ϕ ) = − E x l o g ( y ‾ k ) CE(\phi) = -E_x log(\overline{y}_k) CE(ϕ)=−Exlog(yk)
预先训练阶段 L L M S S L LLM^{SSL} LLMSSL还不能正确的响应用户的提示,例如,如果提示“法国的首都是什么?”这样的问题,模型可能会回答另一个问题的答案,例如,模型响应的可能是“意大利的首都是什么?”,因为模型可能没有“理解”/“对齐aligned”用户的“意图”,只是复制了从训练数据中观察到的结果。
为了解决这个问题,出现了一种称为监督微调或者也叫做指令微调的方法。通过在少量的示例数据集上采用监督学习的方式对 L L M S S L LLM^{SSL} LLMSSL进行微调,经过微调后的模型,可以更好地理解和响应自然语言给出的指令。
2 : 监督微调阶段
SFT(Supervised Fine-Tuning)阶段的目标是优化预训练模型,使模型生成用户想要的结果。在该阶段,给模型展示如何适当地响应不同的提示(指令)(例如问答,摘要,翻译等)的示例。这些示例遵循(prompt、response)的格式,称为演示数据。通过基于示例数据的监督微调后,模型会模仿示例数据中的响应行为,学会问答、翻译、摘要等能力,OpenAI 称为:监督微调行为克隆 。
基于LLM指令微调的突出优势在于,对于任何特定任务的专用模型,只需要在通用大模型的基础上通过特定任务的指令数据进行微调,就可以解锁LLM在特定任务上的能力,不在需要从头去构建专用的小模型。
指令微调过程如下:
-
Training Data : 高质量的微调数据,由人工产生。
-
Data Scale : 10000~100000
-
InstructGPT : ~14500个人工示例数据集。
-
Alpaca : 52K ChatGPT指令数据集。
-
-
Model input and output
- Input : 提示(指令)。
- Output : 提示对应的答案(响应)
-
Goal : 最小化交叉熵损失,只计算出现在响应中的token的损失。
事实也证明,经过微调后的小模型可以生成比没有经过微调的大模型更好的结果:
3 : RLHF阶段
在经过监督(指令)微调后,LLM模型已经可以根据指令生成正确的响应了,为什么还要进行强化学习微调?
因为随着像ChatGPT这样的通用聊天机器人的日益普及,全球数亿的用户可以访问非常强大的LLM,确保这些模型不被用于恶意目的,同时拒绝可能导致造成实际伤害的请求至关重要。
恶意目的的例子如下:
- 具有编码能力的LLM可能会被用于以创建恶意软件。
- 在社交媒体平台上大规模的使用聊天机器人扭曲公共话语。
- 当LLM无意中从训练数据中复制个人身份信息造成的隐私风险。
- 用户向聊天机器人寻求社交互动和情感支持时可能会造成心理伤害。
为了应对以上的风险,需要采取一些策略来防止LLM的能力不被滥用,构建一个可以与人类价值观保持一致的LLM,RLHF(从人类反馈中进行强化学习)可以解决这些问题,让AI更加的Helpfulness、Truthfulness和Harmlessness。
3. 1 奖励模型
在强化学习中一般都有个奖励函数,对当前的
A
c
t
i
o
n
Action
Action|
(
S
t
a
t
e
,
A
c
t
i
o
n
)
(State,Action)
(State,Action)进行评价(打分),从而使使Policy模型产生更好的
a
c
t
i
o
n
action
action。在RLHF微调的过程,也需要一个Reard Model来充当奖励函数,它代表着人类的价值观,RM 的输入是(prompt, response),返回一个分数。response可以看作LLM的
a
c
t
i
o
n
action
action,LLM看作Policy模型,通过RL框架把人类的价值观引入LLM。
对比数据集
在训练RM之前,需要构建对比数据,通过人工区分出好的回答和差的回答,数据通过经过监督微调(SFT)后的 L L M S F T LLM^{SFT} LLMSFT生成,随机采样一些prompt,通过模型生成多个response,通过人工对结果进行两两排序,区分出好的和差的。数据格式如下:
(prompt, good_response,bad_response)
奖励模型的训练过程如下:
-
Training Data : 高质量的人工标记数据集(prompt, winning_response, losing_response)
-
Data Scale : 100k ~ 1M
-
R θ R_{\theta} Rθ : 奖励模型
-
Training data format:( x , y w , y l x, y_w, y_l x,yw,yl)
- x x x : prompt
- y w y_w yw : good response
- y l y_l yl : bad response
-
For each training sample:
- s w = R θ ( x , y w ) s_w = R_{\theta}(x, y_w) sw=Rθ(x,yw) ,奖励模型的评价
- s l = R θ ( x , y l ) s_l = R_{\theta}(x,y_l) sl=Rθ(x,yl)
- L o s s Loss Loss : Minimize − l o g ( σ ( s w − s l ) ) -log(\sigma(s_w - s_l)) −log(σ(sw−sl))
-
Goal : find θ \theta θ to minimize the expected loss for all training samples. − E x l o g ( σ ( s w − s l ) ) -E_xlog(\sigma(s_w - s_l)) −Exlog(σ(sw−sl))
3.2 PPO微调
- 从数据中随机采样prompt。
- Policy( L L M R L LLM^{RL} LLMRL即: L L M S F T LLM^{SFT} LLMSFT),根据prompt生成response。
- Reward模型根据 ( p r o m p t , r e s p o n s e ) (prompt, response) (prompt,response),计算分数score。
- 根据score更新Policy模型(Policy是在 L L M S F T LLM^{SFT} LLMSFT基础上微调得到的)。
在这个过程中,policy( L L M R L LLM^{RL} LLMRL)会不断更新,为了不让它偏离SFT阶段的模型太远,OpenAI在训练过程中增加了KL离散度约束,保证模型在得到更好的结果同时不会跑偏,这是因为Comparison Data不是一个很大的数据集,不会包含全部的回答,对于任何给定的提示,都有许多可能的回答,其中绝大多数是 RM 以前从未见过的。对于许多未知(提示、响应)对,RM 可能会错误地给出极高或极低的分数。如果没有这个约束,模型可能会偏向那些得分极高的回答,它们可能不是好的回答。
RLHF微调过程如下:
-
ML task : RL(PPO)
- Action Space : the vocabulary of tokens the LLM uses. Taking action means choosing a token to generate.
- Observation Space : the distribution over all possible prompts.
- Policy: the probability distribution over all actions to take (aka all tokens to generate) given an observation (aka a prompt). An LLM constitutes a policy because it dictates how likely a token is to be generated next.
- Reward function: the reward model.
-
Training data: randomly selected prompts
-
Data scale: 10,000 - 100,000 prompts
- InstructGPT: 40,000 prompts
-
R ϕ R_{\phi} Rϕ : the reward model.
-
L L M S F T LLM^{SFT} LLMSFT : the supervised finetuned model(intruction finetuning).
-
L L M ϕ R L LLM^{RL}_{\phi} LLMϕRL : the model being trained with PPO, parameterized by ϕ \phi ϕ.
- x x x : prompt.
- D R L D_{RL} DRL : the distribution of prompts used explicitly for the RL model.
- D p r e t r a i n D_{pretrain} Dpretrain : the distribution of the training data for the pretrain model.
For each training step, sample a batch of x R L x_{RL} xRL from D R L D_{RL} DRL and a batch of x p r e t r a i n x_{pretrain} xpretrain from D p r e t r a i n D_{pretrain} Dpretrain.
-
For each x R L x_{RL} xRL , we use L L M ϕ R L LLM_{\phi}^{RL} LLMϕRL to generate a reponse : y ∼ L L M ϕ R L ( x R L ) y \sim LLM_{\phi}^{RL}(x_{RL}) y∼LLMϕRL(xRL).
objective 1 ( x R L , y ; ϕ ) = R θ ( x R L , y ) − β log ( L L M ϕ R L ( y ∣ x ) L L M S F T ( y ∣ x ) ) \text{objective}_1(x_{RL}, y; \phi) = R_{\theta}(x_{RL}, y) - \beta \log (\frac{LLM^{RL}_\phi(y \vert x)}{LLM^{SFT}(y \vert x)}) objective1(xRL,y;ϕ)=Rθ(xRL,y)−βlog(LLMSFT(y∣x)LLMϕRL(y∣x))
-
For each x p r e t r a i n x_{pretrain} xpretrain, the objective is computed as follows. Intuitively, this objective is to make sure that the RL model doesn’t perform worse on text completion - the task the pretrained model was optimized for.
objective 2 ( x p r e t r a i n ; ϕ ) = γ log ( L L M ϕ R L ( x p r e t r a i n ) ) \text{objective}_2(x_{pretrain}; \phi) = \gamma \log (LLM^{RL}_\phi(x_{pretrain})) objective2(xpretrain;ϕ)=γlog(LLMϕRL(xpretrain))
-
The final objective is the sum of the expectation of two objectives above.
objective ( ϕ ) = E x ∼ D R L E y ∼ L L M ϕ R L ( x ) [ R θ ( x , y ) − β log L L M ϕ R L ( y ∣ x ) L L M S F T ( y ∣ x ) ] + γ E x ∼ D p r e t r a i n log L L M ϕ R L ( x ) \text{objective}(\phi) = E_{x \sim D_{RL}}E_{y \sim LLM^{RL}_\phi(x)} [R_{\theta}(x, y) - \beta \log \frac{LLM^{RL}_\phi(y \vert x)}{LLM^{SFT}(y \vert x)}] + \gamma E_{x \sim D_{pretrain}}\log LLM^{RL}_\phi(x) objective(ϕ)=Ex∼DRLEy∼LLMϕRL(x)[Rθ(x,y)−βlogLLMSFT(y∣x)LLMϕRL(y∣x)]+γEx∼DpretrainlogLLMϕRL(x)
-
Goal : Maximize o b j e c t i v e ( ϕ ) objective(\phi) objective(ϕ).
最后一首chatGPT写的关于LLM的诗:
- Language models so grand and divine,
- 语言模型如此伟大和神圣,
- Answers to questions, so quick and so fine.
- 回答问题,如此快速,如此精细。
- From science to art, they shine like a star,
- 从科学到艺术,它们像星星一样闪耀,
- Making humans look like they’re not quite as far.
- 让人类看起来没有那么远。