Quark论文阅读笔记
Published:
大规模语言模型通常会学习与用户期望不一致的行为。生成的文本可能包含攻击性或有害语言,包含大量重复内容,或者与用户期望的情绪不同。本文考虑通过微调语言模型来消除这些不一致,以了解哪些行为不该做。本文引入了量化奖励调节 (Quark),这是一种优化奖励函数的算法,该函数量化 (不) 想要的属性,同时不会偏离原始模型太远。Quark 交替进行以下操作:(i) 使用当前语言模型收集样本,(ii) 根据奖励将它们按奖励分位数分类,每个分位数由奖励标记标识,并附加到语言模型的输入前面,以及 (iii) 对每个分位数的样本使用标准语言建模损失,这些样本以其奖励标记为条件,同时通过 KL 散度惩罚保持在原始语言模型附近。通过在生成时以高奖励标记为条件,该模型生成的文本表现出较少的不想要的属性。实验表明,对于消除毒性、负面情绪和重复,Quark 的表现优于强基线和最先进的强化学习方法,如 PPO,同时仅依赖于标准语言建模原语。
本文的背景
在大量任务的海量互联网文本数据上训练的大语言模型提供了强大的推理能力,展现出了有效理解人类语言的能力,并且可以在一些情况下得到和人类同水平的回答。但是,这些语言模型也经常出现不想要的行为,因为它们的训练目标仅是最大化原始预训练数据的似然。当原始预训练数据中包含毒性、有害、低质量文本时,大模型的生成结果也就有可能包含毒性有害内容,或者重复以及无意义内容。不良行为多种多样,难以避免、控制,甚至难以先验地指定;因此,本文认为研究能够事后消除不良行为、同时保持生成连贯流畅语言的能力的方法至关重要。
本文研究的问题
在得到预训练模型之后,从模型中消除不良行为(毒性、负面情绪、重复等内容 的信息?),同时保持模型可用性(生成连贯流畅语言的能力)
已有方法为什么不行
当时的已有方法主要还是监督微调。一种方式是在希望的行为的数据集上继续训练模型,然后希望最大似然训练可以让模型的分布更加贴合目标行为。但收集可以准确捕捉想要的特征的数据的成本非常高,并且模型可能会在新数据集上过拟合,然后丢失一些希望保留的特性。另一种方式是通过为模型输出打标签来构造一个不希望的行为的检测器,但是目前尚不清楚如何调整模型,使其只生成检测器喜欢的文本:由于检测器对模型中的全文样本进行评分,而不是提供逐个标记的反馈,因此它们不能直接区分。
另一类已有方法是RLHF,从句子级进行遗忘,并使用标量反馈通过RL调整模型行为。当时已经有RLHF方法通过PPO学习奖励模型反馈。但由于RL方法对奖励函数的方差高度敏感,这些方法依赖于额外的模型和专门的启发式方法来稳定训练。
反学习语言模型中的不良行为:语言模型中的去学习行为类似于模型编辑,但针对的是奖励而不是数据点。最近的一些研究使用 RL 对语言模型进行事后修改,例如去学习毒性^14或非规范生成^55。事前方法旨在避免在训练时学习不良行为。同样,在推理时控制模型的方法,例如通过提示^[65, 68] 或通过强制在生成间奇偶校验^30,也可以补充 Quark。生成协作网络^34虽然方法论上与 Quark 相似,但他们的工作受到 GAN 的启发,因此重点是训练模型,使得鉴别器无法轻易识别机器和人类编写的文本,而我们的重点是通过奖励函数捕获外部因素。
本文的方法
本文提出了量化奖励调节方法来基于奖励对语言模型进行遗忘(学习)。通过在探索过程中从高奖励分位数进行采样,并在学习过程中使用 KL 散度惩罚,Quark通过将语言模型的分布引导至越来越高的奖励样本来迭代改进语言模型,同时不会偏离原始模型太远。Quark交替进行以下操作:
- 探索:使用当前模型对文本进行采样,评估其奖励,并将其存储在数据池中。
- 量化:按奖励对数据池进行排序并将其划分为分位数。
- 学习:使用每个分位数的样本更新语言模型。
初始化:Quark需要一个预训练的语言模型\(p_0(y\vert x)\),一个训练prompt集合\(X\)和一个奖励函数\(r(x,y)\rightarrow R\)。预训练模型根据已有token生成后续token。Quark首先会让预训练模型根据训练prompt集合\(X\)生成对应的回答,然后让奖励函数为问答对打分,最终初始化一个(输入,输出,奖励)构成的数据池。
量化:Quark 按奖励递增的顺序对当前迭代的数据池进行排序,并将排序后的数据池划分为大小相等的分区(即按分位数分区,然后为每个样本给一个分区评级\(r_k,k\in\{1,...,K\}\)作为奖励token).
学习:Quark使用量化分区后的数据集,使用监督微调方法进行训练,同时引入KL散度来避免模型距离重训模型过远。
\[\max\mathbb{E}_{k\sim\mathcal{U}(1,K)}\mathbb{E}_{(x,y)\sim\mathcal{D}^k}[\log p_{\theta}(y|x,r_k)-\beta\sum_{t=1}^TKL(p_0)(\cdot\vert y_{<t},x)\Vert p_{\theta})(\cdot\vert y_{<t},x,r_k)]\]这一步同时告诉模型期望和不期望的输出是什么样的(?),同时要求模型学习reward token(?)
探索:使用奖励token最大的样本的prompt进行推理,然后采样新的样本,构建(输入,输出,奖励)数据加入数据池(对于所有训练prompt,添加最高奖励token之后输入模型,让模型生成回答)。直观上,此步骤通过查询当前模型以了解其期望的高奖励完成情况来探索分布中最有希望的区域。(就是问模型,这些问题,你认为最好的回答是什么样的)
评估:测试时也是同时告诉模型输入提示和最高的奖励token,让模型生成最符合我们想要的分布的回答,最后评估这些回答。
本文如何说明效果
本文做了三个场景的实验:遗忘毒性信息,遗忘消极情绪和遗忘重复生成文本。
遗忘毒性信息:在RealToxicityPrompt benchmark上测试遗忘GPT-2的毒性信息。使用了一个商业的毒性API作为奖励函数。使用了已有的可控文本生成方法(PPLM,GEDI,DEXPERTS,DAPT)作为对比方法。使用了最大毒性和经验毒性概率作为毒性的指标(最大毒性是指 25 个文本生成中的平均最大毒性,经验毒性概率指任意 25 个文本生成中至少有一个有毒,两者均由 Perspective API 进行判断。),使用流畅度和多样性作为模型可用性的指标(流畅度设为根据更大的现成 GPT2-XL 模型生成的输出的困惑度,多样性设为按文本长度归一化的独特的n-gram的数量。)还使用了人类评估来对比生成结果的毒性,逻辑性和流畅度。
遗忘消极情绪:测试避免生成包含消极情绪的文本的能力。使用OpenWebTextCorpus数据集。使用再SST-数据集上训练的情感分析模型(DistillBERT)作为奖励函数,生成二值结果。对比方法额外引入了使用控制码来引导模型的CTRL。还是使用了流畅度和多样性作为指标,以及情绪模型得到的25次生成中的正向情绪的百分比。
遗忘文本退化:文本退化指生成重复、统一且无意义的内容。在探索阶段,为了获得具有不同重复级别的多样化代表性模型输出,我们以 50%-50% 的比例混合贪婪解码和核采样,因为使用贪婪解码时更经常发生重复。使用多样性作为奖励函数,使用WIKITEXT-103作为数据集。在评估阶段,本文使用贪心解码,因为文本退化更容易出现在贪心解码中。
本文与最大似然估计(MLE)、似然性训练(unlikelihood)[79]和对比训练(SimCTG)进行比较。
可能的未来方向
随着数据池大小的增加,Quark的计算成本会显着增加(有没有可能通过遗忘方法缩减数据池,把一些特别低分段的东西直接擦除掉,然后逐渐只用考虑更高分段的内容)
这个时候的遗忘还是指对不良行为的修正,更多的是微调,并不涉及对原来数据的打压(那个reward token或许可以?)这种方法应该还是只能混淆知识,就是让模型不倾向于生成对应的东西,但其实还是知道不良行为是什么样的。