GPT系列一直坚持做基于Transformer Decoder的生成模型,其规模也是越来越大,终于在2022年底,chatGPT的诞生,将NLP预训练模型拉到了一个新的高度。
对于超大模型,之前也没有什么体验,由于缺乏算力,只能在理论上对这些内容进行一些整理,主要讲一些学习方法:
Prompting
Prompting方式,又称为提示方式,实现大模型的few-shot/zero-shot learning的一种好方法。由于finetune所需的数据可能较难获得,基于大模型的prompt是一种让预训练模型直接适应下游任务的方式,具体做法是人为构造一批规则数据,让模型补全结果,将补全结果作为输出。prompt 生效的最基本前提是预训练语料已经覆盖了任务语料的分布。
举一个例子:在文本情感分类中,希望得到如下语句“这个电影情节不错,节奏紧凑,看得很过瘾。”属于正向/反向情感,可以构造如下prompt:“上述电影看起来很__”,让模型填充可以表现情感的答案,如好/不好,甚至更细粒度的,如有趣/无聊等。
Prompt和finetune的区别在于,finetune是语言模型去适应某个下游任务,引入各种loss去调整模型参数,对于分布外的鲁棒性可能有一定的损失;而prompt是重构下游任务来适配语言模型,所需参数更少,对于不同分布情况下的学习效果更好,但是需要找出合适的prompt来解决对应的问题,这也算一种新的编程范式了。
从检索的角度讲,prompt可以看作是对语言模型记忆知识的一个检索,相对于finetune,prompt更接近于预训练语言模型任务,所以相对可以得到更多的内在信息,也就是更好的应用于few-shot任务的原因。
In-context learning
In-context learning又称为上下文学习,也就是基于prompt提供的几个例子,然后模型根据这些例子做生成,非常类似于无监督预测,但在输入测试样例前引入少量标注前缀数据,不需要参数调整,直接训练。
那么模型在引入的前缀数据中学习到了什么呢?在论文Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?中得出的结论有:
- 模型没有学习输入和标签之间的关联;
- 模型学到了输入数据、预测标签的分布,以及这种数据+标签的表达形式,但是知识使用的是模型在之前训练中学习到的;
- 模型没有真正意义上建模输入输出样本之间关联的学习,只时使用了前缀来激活大模型语言表达的建模能力。
思维链
思维链 (chain-of-thought),是prompt的一个衍生型,也就是写prompt的时候,不仅需要输出结果,还需要给出结果推理出来的过程。
需要注意的是,上述的内容都是使用大模型得到的结果,当模型参数较少时,这种训练方式远不如finetune得到的收益高,而当模型参数提升时,in-context learning得到的收益大大提高。模型至少需要62B参数,思维链的效果才能大于Prompt方法,至少需要 175B(GPT3),思维链的效果才能大于精调小模型(T5 11B)的效果。
RLHF
RLHF的全称是基于人类反馈的强化学习(Reinforcement Learning from Human Feedback) ,也是chatGPT强大的原因。
RLHF主要分三个阶段,其中使用人工标注的前两个阶段就是所谓“人类反馈”:
- 冷启动阶段监督策略模型:从用户提交的 prompt 中随机抽取一批,通过专业标注人员给出指定 prompt 的高质量答案,然后用这些人工标注好的 (prompt,answer)对来 finetune 模型,让模型具有基础的理解能力;
- 训练回报模型(Reward Model,RM):随机抽样一批用户提交的 prompt,然后使用第一阶段训练好的模型为每个 prompt 生成 K 个不同的回答,再让标注人员对 K 个结果进行排序,以此作为训练数据,通过 pairwise 方法,learning to rank 模式来训练回报模型;
- 采用强化学习来增强预训练模型的能力:利用上一阶段学好的 RM 模型,靠 RM 打分结果来更新预训练模型参数。
RLHF不会为模型注入新的能力,所有的能力都是在预训练过程中得到的,RLHF的作用是解锁 / 激发这些能力,因为RLHF的数据量比预训练数据量少几个数量级。RLHF的学习可以让模型生成更加符合人类期待的反馈,如生成安全对话、拒绝超出模型它知识范围的问题等。
当前大模型存在的问题
- 目前大多数prompt和finetune的对比都是prompt+大模型对比finetune+相对小模型,并不属于相对公平对比,且base模型也并不一致;
- 难以更改模型内部知识;
- 无法严格推理,无法检索网络。