赞
踩
首先是任务驱动了微调的发展,GPT1和BERT遵循经典的预训练+微调范式,到GPT3时期,预训练任务表现为句子接龙,给定前文持续预测下一个word,当模型参数规模和训练数据增大后,GPT3面对few shot甚至是zero shot任务的表现都超越了原本的SOTA方法。
下面是几个关于zero shot,few shot,经典微调的例子(以机器翻译问题为例):
不管是零样本,还是少样本,都没有要求更新参数,这也引发了In context learning的研究。
零样本或少样本任务看似美好,但却受task description和prompt有很大影响,因此,FLAN(Finetuned Language Models Are Zero-Shot Learners)重新利用微调,弱化task description和prompt的影响,发挥作用的就是指令微调(Instruction Fine-Tuning,IFT)。IFT数据由三个主要组成部分组成:指令、输入和输出,对于给定的指令(指令可以由人工编写),可以有多个输入和输出实例:
相比于GPT-3和经典finetune范式,FLAN的核心思想是:
这样做可以实现:当模型根据"指令"完成了微调阶段的各种任务后(将指令拼接在微调数据的前面),在面对从未见过的自然语言推理任务的指令比如"这段话能从假设中推导出来吗"时,就能更好地调动出已有的知识回答问题,其相当于通过指令微调之后,模型可以更好的做之前训练时没见过的新任务且降低了对prompt的敏感度(不需要再设计特定prompt也能激发模型更好地回答自然语言问题)。
为了让LLM具备更强的推理能力,在prompt learning的发展中出现了思维链(Chain-of-thought,CoT)。这是一种新的prompt机制,其本质是给模型看到推理步骤的prompt,让其模仿推理,从而求解简单的问题。
此后,CoT技术被应用到0-shot和few-shot任务中,并且在21年引出了"let’s think step by step"的新闻:
InstructGPT的训练包括3个阶段:
step 1,利用人类的问答对数据对GPT3进行有监督训练得到SFT模型,OpenAI设计了一个prompt dataset,里面有大量的提示样本,prompt为各种各样的问题描述,然后,找了一个团队对这个prompt dataset进行标注(本质就是人工回答问题,给每个prompt一个答案)。最终得到大小为13k的数据集,其中都是"问题-答案pair",用这个数据集有监督微调GPT3,得到SFT模型,其大小为175B。
step 2,用上一阶段的SFT模型初始化新的GPT3,叫做RM模型,继续从prompt dataset中采样prompt,注意这里是不需要step 1中的label的,具体做法上不止prompt dataset,还会扩展一些新的问题,只要问题即可。然后由SFT生成多个答案,比如4个。至于如何得到多个答案,原因在于模型每次预测一个词都有对应的概率,根据不同的概率大小可以采样出很多答案,比如通过beam search保留4个当前最优的答案(beam search相当于贪心算法的加强版,除了最好的答案外,还会保留多个比较好的答案供选择)。
接着人工(即labeler)对这4个回答的好坏进行排序(得到新的标注),排序的结果用来训练奖励模型RM,目的是学习排序结果从而理解人类的偏好。训练RM是有监督的,扩充问题并包括排序标注后的数据集大小为33k。
step 3,利用SFT模型初始化GPT3得到名称为PPO的模型,并新建一个大小为31k的只有问题的数据集,此时用PPO模型对每个问题生成4个答案,然后用RM模型进行排序(这里注意,排序结果对应一个得分,令ABCD为4个答案,比如D=C=A=B的得分是最高的,大于D>C>A>B,这个得分被称为奖励)。
通过不断更大化奖励从而优化生成策略(生成策略也就是PPO模型,生成策略更好,代表模型的回答会更好,得到的多个答案都符合人类偏好),策略优化的过程中使用PPO算法限制策略更新范围。根据优化后的策略再次生成→RM再评估→模型再优化后再生成,如此循环,直到策略最优为止。
PPO策略的目的是确保优化后的策略与优化前的策略差距不会太大,也就是让优化前后的回答差异不会太偏离,不至于step 3训练发散。
综上,step 1是SFT(有监督微调),step 2和step 3被称为RLHF,即具有人类反馈的强化学习。
上面的策略可以让GPT在单轮对话上具有出色的表现,对于多轮对话,则存在某一轮对话中的词指向上一轮对话中的某个人或物的可能,简单的解决方案是:
参考:https://blog.csdn.net/v_JULY_v/article/details/128579457
主流的预训练LLM框架主要有三种:
这三种预训练框架各有利弊,没有一种框架在以下三种领域的表现最佳:自然语言理解(NLU)、无条件生成以及条件生成。T5曾经尝试统一上述框架,然而自编码和自回归的目标天然存在差异,需要大量参数才能实现一定性能。因此出现了GLM(General Language Model)。
GLM基于autoregressive blank infilling,按照自编码的思想,从输入文本中随机剔除连续跨度的tokens,并按照自回归预训练的思想训练模型顺序重建spans。虽然这种autoregressive blank infilling思想已在T5中用于文本到文本的预训练,但GLM提出了两种改进,即spans shuffling和2D位置编码。
在GLM中,将输入[x1, x2, x3, x4 ,x5, x6]分成了2个部分:
GLM的下游微调:
1.分类任务,表述为空白生成任务,给一个labeled example
(
x
,
y
)
(x, y)
(x,y),通过包含单个mask token的模式将输入文本
x
x
x 转换为完形填空题
c
(
x
)
c(x)
c(x)。该模式是用自然语言编写的,用于表示任务的语义。例如,情感分类任务可以公式化为“{SENTENCE}. It’s really [MASK]”
。
候选标签
y
∈
Y
y∈Y
y∈Y映射到完形填空的答案,称为动词化符
v
(
y
)
v(y)
v(y)。在情感分类中,标签“positive”和“negative”被映射到单词“good”和“bad”。给定
x
x
x预测得到
y
y
y的概率为:
p
(
y
∣
x
)
=
p
(
v
(
y
)
∣
c
(
x
)
)
∑
y
′
∈
Y
p
(
v
(
y
′
)
∣
c
(
x
)
)
p(y|x)=\frac{p(v(y)|c(x))}{\sum_{y'\in Y}p(v(y')|c(x))}
p(y∣x)=∑y′∈Yp(v(y′)∣c(x))p(v(y)∣c(x))其中
Y
Y
Y是标签集。因此,句子为正或负的概率与预测空白处的“good”或“bad”成正比。然后,用交叉熵损失来微调GLM(见下图)。
2.生成任务,只需要将mask添加到输入的句子Part A的结尾即可,然后利用自回归方式生成Part B的token。可以看到GLM具备生成能力,其实可以处理零样本任务。
GLM与T5相比,T5属于Encoder-Decoder架构,实际上,Encoder和Decoder分别算是两个Transformer,即T5分别使用两个transformer实现单向和双向注意力。GLM也使用两个transformer学习单向和双向的注意力,但通过共享参数使其比Encoder-Decoder更有效。T5在编码和解码阶段使用不同的位置编码,GLM的2D位置编码更合理。
GLM恢复空白即让模型学习了理解能力,也学习了生成能力,对于随机打乱spans,则是为了在预训练时考虑Part B中各spans之间相互影响关系,即捕捉spans之间的相互依赖性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。