其实 大致可以分为3个阶段,如下:①
预训练
,此时只是单纯的利用网络上爬取的资料学习词语接龙,可以作为后面阶段的不错的初始参数;②
微调
,此时使用预训练好的模型参数作为初始参数,并且冻结这些参数,添加一些新的参数并且只训练这些新参数,而且要使用QA的形式,即指令形式,这样微调出来的模型才可以很好的回答人类所提出的问题;③
强化学习
,通过反馈来改进自己的答案,好的答案概率提高,不好的答案概率降低。
因为预训练阶段不需要人的参与,只需要从网络上爬取的资料上学习就可以,所以可以视为帮我们学到了基础模型,微调阶段和强化学习阶段都是需要人来参与的,例如微调阶段需要人来构建指令数据,强化学习阶段需要人来反馈,故可以归类到Alignment,将模型与人类的偏爱/喜好对齐。
Pre-train
只需要从网络上爬取到的资料上学习即可。
Instruction Fine-tuning
以人为师
仅凭之前预训练的参数是不能够回答人类的问题的,因为网络上的资料又不是QA形式的,所以模型只通过学习之前的内容不能够在人类提问之后很好的回答,他本质上只是在做词语接龙而已。
所以我们人工去构建指令数据,如下所示。你会发现有USER
和AI
是我们平常用网页版GPT的时候看不到的,但是我们这里猜测,GPT其实是有的,只不过没展示给我们看到而已,这样子模型在学习的时候,看到USER就知道是用户提出的问题,看到AI就知道应该输出答案。
但是只靠人类去标注的话,成本很高,所以难以获得大量的资料,可能就会导致模型学习的不好,比如下面的模型,”如果出现’最’,就回答’玉山’,这完全符合训练资料,但是测试的时候肯定不符合的“。
所以我们要进行微调,即使用Pre-train的参数初始化!
因为微调的时候指令数据较少,所以我们会将之前Pre-train的参数冻结,并增加少量的参数训练,这样可以达到两个目的:①Fine-tuning后的参数与pre-train的参数尽量相似,因为还是要依靠pre-train的广阔的知识的;②冻结了大量参数就不需要那么多数据了。
而我们增加的少量参数可以称之为Adapter,最常听到的为LoRA。
模型是有很强的举一反三的能力的。
以ChatGPT为师
就是反向利用GPT,因为GPT是使用里 真实用户提问的问题 来构建的指令微调数据,所以就反向让GPT自己输出可能的问题。
Reinforcement Learning
Reinforcement Learning from Human Feedback(RLHF)
比如在使用GPT的时候,如果重复让他输出两个答案的话,他就会让你选择相比于上次的答案是好还是不好,等收集了很多之后,就会使用这些数据进行强化学习,即提高好的答案的概率,降低不好的答案的概率。
下围棋的每一步是一个分类问题,但整体来看也是生成式学习。AlphaGo在第1、2阶段会根据棋谱学习,人类老师下哪里他就跟着下哪里,在第3阶段则直接根据围棋规则来判断好与不好;语言模型在第1、2阶段也是看人类老师说什么他就跟着说什么,在第3阶段则需要人类来给出好与不好的反馈。
但是人类的精力也是有限的,所以就有人想出了回馈模型,即模仿人类喜好来给语言模型反馈。但是要注意的是,如果过度的向虚拟人类学习,那也是有害的。