在回答这个问题之前,首先要搞清楚ChatGPT的发展历程。
ELMO用Bi-LSTM,GPT用transformer的Decoder,BERT用transformer的Encoder;
ELMO:双向,GPT:单向,BERT:双向;
ELMO:解决一词多义,GPT:特征更丰富,BERT:双向/多任务训练/能捕捉更长距离的依赖;
GPT:适合文本生成等任务(NLG任务),BERT:适合预测任务(NLU任务);
GPT-1的问题
针对GPT-1的问题,GPT-2作了如下改进:
去掉了fine-tuning层:不再针对不同任务分别进行微调建模,而是不定义这个模型应该做什么任务,模型会自动识别出来需要做什么任务。主打zero-shot
像下面这样一个机器翻译的样本转换成一个句子,一个QA的问答对也转换成一个句子,GPT2就只优化语言模型的损失。
其次在预训练阶段,GPT-2采用了多任务的方式,不单单只在一个任务上进行学习,而是多个,每一个任务都要保证其损失函数能收敛,不同的任务是共享主体transformer参数的,该方案是借鉴了之前微软的MT-DNN,这样能进一步的提升模型的泛化能力,因此在即使没有fine-turning的情况下依旧有非常不错的表现。
从模型的规模和参数量上说,GPT有1.17亿的参数量,而GPT2将Transformer堆叠的层数增加到48层,隐层的维度为1600,,参数量达到了15亿(最大的GPT-2模型);而Bert参数量也只有3亿。
模型结构方面,GPT2的结构类似于GPT,仍然使用单向的 Transformer 模型,只做了一些局部修改:
GPT2对比GPT3:
主打few-shot
不进行任何的梯度更新或fine-tune。
缺点:
输入部分的注意力改为双向不会带来收益,Encoder-Decoder架构的优势很可能只是源于参数翻倍。
GPT只使用了decoder部分
,且因为少了encoder,所以和原始的Transformer decoder相比,不再需要encoder-decoder attention层GPT-2将词汇表数量增加到50257个;最大的上下文大小 (context size) 从GPT的512提升到了1024 tokens;batchsize增加到512。
训练任务方面,GPT2“剔除”了fine-tune任务,只保留了语言模型部分的训练。它不是简单的删掉fine-tune,而是将诸多下游任务根据各自的特点,规划成语言模型的训练。这样一来,语言模型的训练实际上反而涵盖了更多的NLP finetune任务,使得最终的语言模型学到的东西更丰富,有更多样的应用(在很多zero-shot任务中表现优异)。
监督学习先让GPT-3有一个大致的微调方向,强化学习用了AC(Actor-Critic)架构里面的PPO(Proximal Policy Optimization)更新方法来更新GPT-3的参数。
PPO是OpenAI的baseline method,可以说使用PPO是InstructGPT非常自然的一个选择。
InstructGPT的这种训练方法的提出就是为了解决AI的毒性和不忠实性
,因为人工标注数据的时候特别关注了这一块的优化,从结果来看在忠实性上InstructGPT已经比GPT-3提升了不少。
论文里提到,微调的数据考虑了大量安全方面的case,甚至邀请了DeepMind安全专家组共同研究。但是题主说的毁灭人类计划书的这个case诱导性还是比较强,模型在诱导attack的case下能力还是不足的,这也在论文的5.3节和5.4节讨论到了。随着模型能够存储的有效知识越来越多,模型的可靠性会越来越重要,这估计会引来一大堆研究。总体而言,目前模型的毒性还比较高,需要进一步的探索。
为了使我们的模型更安全、更有帮助和更一致,我们使用了一种称为基于人类反馈的强化学习 (RLHF)
的现有技术。 在我们的客户向 API 提交的提示中,[1] 我们仅使用通过 Playground 提交给 2021 年 1 月部署的早期版本 InstructGPT 模型的提示。我们的人工注释者会从所有提示中删除个人身份信息,然后再将其添加到训练集。
我们的标签提供所需模型行为的演示,并对我们模型的几个输出进行排名。 然后我们使用这些数据来微调 GPT-3。
过程简述:
我们首先收集关于提交给我们 API 的提示的人工编写演示数据集,并使用它来训练我们的监督学习基线。 接下来,我们收集了一个数据集,该数据集包含两个模型输出在更大的 API 提示集上的人工标记比较。 然后我们在这个数据集上训练一个奖励模型 (RM) 来预测我们的标签者更喜欢哪个输出。 最后,我们使用此 RM 作为奖励函数并微调我们的 GPT-3 策略以使用 PPO 算法最大化此奖励。
对这一过程的一种思考方式是,它 “解锁 "了GPT-3已经具备的能力,但仅通过提示工程难以激发”
我们的程序使我们的模型行为与我们的标签人员和我们的研究人员的偏好相一致,前者直接产生用于训练我们的模型的数据,后者则通过书面说明、对具体例子的直接反馈和非正式对话向标签人员提供指导。
我们进行了两个实验来调查这一点。
构建安全 AI 系统的一个步骤是消除人类编写目标函数的需要,因为对复杂目标使用简单代理,或者将复杂目标弄错一点,可能会导致不良甚至危险的行为。 通过与 DeepMind 的安全团队合作,我们开发了一种算法,可以通过告知两种提议的行为中哪一种更好来推断人类的需求。
关于模型选择方面,RM 可以是另一个经过微调的 LM,也可以是根据偏好数据从头开始训练的 LM。例如 Anthropic 提出了一种特殊的预训练方式,即用偏好模型预训练 (Preference Model Pretraining,PMP) 来替换一般预训练后的微调过程。因为前者被认为对样本数据的利用率更高。但对于哪种 RM 更好尚无定论。
关于训练文本方面,RM 的提示 - 生成对文本是从预定义数据集中采样生成的,并用初始的 LM 给这些提示生成文本。Anthropic 的数据主要是通过 Amazon Mechanical Turk 上的聊天工具生成的,并在 Hub 上 可用,而 OpenAI 使用了用户提交给 GPT API 的 prompt。
关于训练奖励数值方面,这里需要人工对 LM 生成的回答进行排名。起初我们可能会认为应该直接对文本标注分数来训练 RM,但是由于标注者的价值观不同导致这些分数未经过校准并且充满噪音。通过排名可以比较多个模型的输出并构建更好的规范数据集。
对具体的排名方式,一种成功的方式是对不同 LM 在相同提示下的输出进行比较,然后使用 Elo 系统建立一个完整的排名。这些不同的排名结果将被归一化为用于训练的标量奖励值。
step3:
让我们首先将微调任务表述为 RL 问题。
我们使用监督学习在我们的标签演示中微调 GPT-3。 我们训练了 16 个epochs,使用余弦学习率衰减和 0.2 的残差丢失。 我们根据验证集上的 RM 分数进行最终的 SFT 模型选择。 与 Wu 等人类似 (2021),我们发现我们的 SFT 模型在 1 个时期后对验证损失过度拟合; 然而,我们发现尽管存在这种过度拟合,但更多时期的训练有助于 RM 分数和人类偏好评级。
从移除了最终反嵌入层的 SFT 模型开始,我们训练了一个模型来接收提示和响应,并输出标量奖励。 在本文中,我们只使用 6B RM,因为这样可以节省大量计算,而且我们发现 175B RM 训练可能不稳定,因此不太适合用作 RL 期间的值函数(有关更多详细信息,请参见附录 C)。
在 Stiennon 等人 (2020) 的研究中,RM 在同一输入的两个模型输出之间进行比较的数据集上进行训练。
他们使用交叉熵损失,将比较作为标签——奖励的差异代表人类贴标签者更喜欢一种反应的对数几率。
为什么要训练这样一个reward model呢?当然,人类可以扮演Environment的角色,衡量模型输出每句对话的好坏(reward),但这需要大量的人工成本。所以,不妨训练好一个reward model,可以省去人工标注的麻烦。
再次跟随 Stiennon 等人 (2020),我们使用 PPO 在我们的环境中微调了 SFT 模型(Schulman 等人,2017)。 该环境是一个 bandit 环境,它呈现随机的客户提示并期望对提示的响应。 给定提示和响应,它会产生由奖励模型确定的奖励并结束episode。 此外,我们在每个token上添加了 SFT 模型的每个token的 KL penalty,以减轻奖励模型的过度优化。
值函数从 RM 初始化。 我们称这些模型为“PPO”。
我们将 PPO 模型的性能与我们的 SFT 模型和 GPT-3 进行了比较。 我们还与 GPT-3 进行了比较,当它被提供一个 few-shot 前缀以“提示”它进入指令跟随模式(GPT-3-prompted)时。
我们还在 FLAN(Wei 等人,2021 年)和 T0(Sanh 等人,2021 年)数据集上将 InstructGPT 与微调 175B GPT-3 进行了比较,这两个数据集都包含各种 NLP 任务,并对于每个任务结合了自然语言指令(数据集在包含的 NLP 数据集和使用的指令风格方面有所不同)。 我们分别在大约 100 万个示例上对它们进行微调,并选择在验证集上获得最高奖励模型分数的检查点。 有关更多training的详细信息,请参阅附录 C。
说ppo之前,要说PG算法(策略梯度),用一个奖励函数度量策略的好坏,在强化学习中,我们使用神经网络来拟合策略参数
,对所得的策略参数进行一个更新
PG方法一个很大的缺点就是参数更新慢,因为我们每更新一次参数都需要进行重新的采样,这其实是中on-policy的策略,即我们想要训练的agent和与环境进行交互的agent是同一个agent;
与之对应的就是off-policy的策略,即想要训练的agent和与环境进行交互的agent不是同一个agent
简单来说,就是拿别人的经验来训练自己。举个下棋的例子,如果你是通过自己下棋来不断提升自己的棋艺,那么就是on-policy的,如果是通过看别人下棋来提升自己,那么就是off-policy的
要评估我们的模型“对齐”的程度,我们首先需要弄清楚对齐在这种情况下的含义。
目标是训练根据用户意图行事的模型。 有帮助、诚实、无害。
我们使用两个指标来衡量真实性——模型关于世界的陈述是否真实:
(1) 评估我们的模型在封闭域任务上编造信息的倾向(“幻觉”也就“hallucinations”)
(2) 使用 TruthfulQA 数据集( 林等人,2021)。 不用说,这只抓住了真实真正含义的一小部分。
定量评估:我们可以将定量评估分为两个独立的部分
对准的目的:使人工智能系统与人类意图保持一致
吸取对齐研究的经验教训:
相对于预训练,增加模型对齐的成本是适度的。
RLHF 在使语言模型对用户更有帮助方面非常有效,比模型大小增加 100 倍更有效。我们能够减轻微调带来的大部分性能下降。
为了避免激励未来的高性能人工智能系统与人类意图保持不一致,需要具有低对齐税的对齐技术。 为此,我们的结果对于 RLHF 作为一种低税对准技术来说是个好消息。我们已经从现实世界的研究中验证了对齐技术。
InstructGPT学习:知乎文章
https://zhuanlan.zhihu.com/p/589747432
像交通信号灯一样,某一个状态只由前一个状态决定,这就是一个一阶马尔可夫模型。而像天气这样,天气状态间的转移仅依赖于前 n 天天气的状态,即状态间的转移仅依赖于前 n 个状态的过程
。
不通俗的讲,马尔可夫模型(Markovmodel)描述了一类重要的随机过程,随机过程又称随机函数,是随时间而随机变化的过程。
在马尔可夫模型中,每个状态代表了一个可观察的事件,所以,马尔可夫模型有时又称作可视马尔可夫模型(visibleMarkovmodel,VMM),这在某种程度上限制了模型的适应性。
对于盲人来说也许不能够直接获取到天气的观察情况,但是他可以通过触摸树叶通过树叶的干燥程度判断天气的状态。于是天气就是一个隐藏的状态,树叶的干燥程度是一个可观察的状态,于是我们就有了两组状态,一个是不可观察、隐藏的状态(天气),一个是可观察的状态(树叶),我们希望设计一种算法,在不能够直接观察天气的情况下,通过树叶和马尔可夫假设来预测天气。
在隐马尔可夫模型(HMM)中,我们不知道模型具体的状态序列,只知道状态转移的概率,即模型的状态转换过程是不可观察的。
状态转换
和特定状态下可观察事件的随机
。评估:
前向算法,后向算法
解码:
在给定模型 λ = [ π , A , B ] \lambda=[\pi,A,B] λ=[π,A,B]和观察序列 O O O 的条件下求概率最大的状态序列 – Viterbi 算法: 动态搜索最优状态序列
参数学习:
为了让我们的分类器表现的更好,可以在标记数据的时候,可以考虑相邻数据的标记信息
。这一点,是普通的分类器难以做到的。而这一块,也是CRF比较擅长的地方。
自然语言处理中的词性标注(POS Tagging)就是非常适合CRF使用的地方。词性标注的目标是给出一个句子中每个词的词性(名词,动词,形容词等)。而这些词的词性往往和上下文的词的词性有关,因此,使用CRF来处理是很适合的,当然CRF不是唯一的选择,也有很多其他的词性标注方法。
随机场是由若干个位置组成的整体,当给每一个位置中按照某种分布随机赋予一个值之后,其全体就叫做随机场
马尔科夫随机场是随机场的特例,它假设随机场中某一个位置的赋值仅仅与和它相邻的位置的赋值有关,和与其不相邻的位置的赋值无关。
CRF是马尔科夫随机场的特例(条件随机场),它假设马尔科夫随机场中只有X和Y两种变量,X一般是给定的,而Y一般是在给定X的条件下的输出。这样马尔科夫随机场就特化成了条件随机场。
在十个词的句子的词性标记中,词有十个,词性也是十个,因此,如果假设它是一个马尔科夫随机场,那么它也就是一个linear-CRF。
定义在Y节点上的节点特征函数
,这类特征函数只和当前节点有关定义在Y上下文的局部特征函数
,这类特征函数只和当前节点和上一个节点有关,记为: