InstructGPT

ChatGPT应用
-
代码纠错(需要更多的信息,如整个代码是错的/一部分是错的)
-
安全性上避免不合法的答案
-
上下文理解(费马小定理 -> 密码学应用 -> 打油诗,上限大约8000词)
-
理解局限性(不能物理上发信件)
Openai先发模型再发论文,ChatGPT论文暂时未产出
与InstructGPT原理基本一致
引入
原有语言模型是自监督模型,没有标号,精细度不够
产生问题:
- 有效性(让模型去干的事情学不会?未涵盖到这方面的数据)
- 安全性(输出不该输出的东西)
解决思路:
标注数据+微调(无监督/自监督的回退?)
摘要
语言模型:
- 变大 不等于 按用户意图做事
- 有可能生成不真实、有恶意的答案
行业历史
- 2015年,Google把黑人识别成gorilla,后把单词从语料库中直接删掉
- 2016年,Microsoft小冰语言中带有种族歧视,而后紧急下架,重新训练后又…
- 2021年,Facebook把黑人视频增加灵长类标签
- 2022年,Meta Galatica(Paper with Code团队)生成错误/有偏见的但是听上去是正确的事情,3天后下架了
Openai作为创业公司,公众的容忍度更高…
绕开安全性的例子
展示了怎么样对语言模型和人类的意图做align
简单来说即fine tuning with human feedback(而非labeled data,更有novelty)
具体做法:让工程师写了很多prompt(OpenAI prompt),问题和答案是数据集是第一个训练的模型
对不同模型输出(不同概率采样)用人来输出标谁来好一点,排序数据集(第二个训练模型,InstructGPT)
以1%大小各种效果超过了GPT-3
核心思路:人工降噪?(工业界考虑?)
介绍
大语言模型(LMs)的目标函数不对:在网络文本中预测下一个词(和想让根据人的指示生成答案有区别)
没有align
训练步骤:
标注两块数据,训练三个模型
主要发现:
-
标注者发现输出结果远好于GPT-3
-
truthfulness ↑
-
improvements in toxicity↑ not bias
-
原始目标函数最终可以拿回来,保证QA任务提升同时,其他NLP下游任务效果不会变差很多
-
holdout标注人员评估instructGPT也更好
-
其他流行的NLP数据集效果没那么好(数据为王,微调非常敏感)
-
模型有一定泛化性(数据不需要纳入所有问题,可以根据先验知识…)
-
还是会犯一些简单错误(习以为常的,比如数学问题?更像一个玩具)
相关工作
Lyman
方法&实验
方法论
跟OpenAI之前的工作方法上没太大区别(并非InstructGPT原创)
数据集
- Prompt(先)
- 写任何问题(Plain)
- 写不同指令(Few-shot),添加后续问题回答
- 用户想要支持的API应用场景(User-based)
训练了第一个InstructGPT模型,放在Playground里面
把采集的问题再收回来,做一些筛选,限制每个人最多问的问题数
根据user ID划分,避免问题同时出现在训练集,验证集,测试集中
Human-in-the-loop产品思维
- Prompt之后的不同数据集
- SFT数据集,labeler直接写答案
- 用来训练RM的数据集,只需要排序即可
- 用于RLHF的数据集,不需要标注(来自RM模型的标注)
分别为13k,33k,31k样本
Prompt对应任务
分布和示例:
数据标注
偏工程化的模块
增加对标注工进行筛选(保障数据足够质量,甚至使用强化学习)
将帮助性排在第一位 -> 将真实性、无害性排在第一位
保持了较高的一致性,大约72%同意对方的评测
模型
-
Supervised fine-tuning(SFT)
- GPT-3标注好的prompt和答案上重新训练一次
- 扫了16遍数据(13000,较少)
- 扫一遍就过拟合了,但作为初始化没有问题
-
Reward modeling(RM):
-
softmax层不用,在后面再加上一个线性层来投影
-
原来每个词有一个输出,把所有输出放起来投影到一个值上面,即一个输出为1的线性层
-
输出一个标量的分数
-
6B RM(最大175B,不稳定,loss会飞)
-
损失函数:Pairwise Ranking Loss
-
$x$表示问题,$y_w$和$y_l$表示一对回答,前者排序更高
-
$$ loss(\theta)=-\frac{1}{\binom{K}{2}}E_{(x,y_w,y_l)\sim D}[\log(\sigma(r_\theta(x,y_w)-r_\theta(x,y_l)))] $$
-
$r_\theta(x,y_w)-r_\theta(x,y_l)$即奖励分数作差
-
思路:Sigmoid+Logistic Loss+log+负,用于最大化差值
-
对每个prompt生成9个答案,因而可以有36对
- 时间成本大概比4个(上一个工作)多30%,但是得到了6倍的标注信息
- 奖励分数并不用算36次,可以重用,所以省了4倍的时间,K越大越好
- 原softmax也要好处,只标注最好的一个,确定pairwise中一个为最优解,做损失就可以把一个而分类的regression变成一个多分类的softmax,标注上面可以4选一,但是容易overfilling
-
-
Reinforcement learning(RL)
-
算法即PPO(OpenAI之前的工作)
-
在下面目标函数上做随机梯度下降
- $$ objective(\phi)=E_{(x,y)\sim D_{\pi_\phi^{RL}}}[r_\theta(x,y)-\beta \log(\pi^{RL}_\phi (y | x)/\pi^{SFT}(y|x))]+\gamma E_{x\sim D_{pretrain}}[\log (\pi^{RL}_{\phi}(x))] $$
-
$\pi^{SFT}$即SFT得到的模型,$\pi_\phi^{RL}$即RL policy,二者一开始是一样的,$\phi$即要学习的超参数,$y$即action
-
x即第三个数据集中的prompt
-
区别在于$E_{(x,y)\sim D_{\pi_\phi^{RL}}}$并非如之前的常量,是根据环境变化的动态变量,丢进RM中算分数
-
数据分布会随着模型更新发生变化(环境会发生变化)
-
不一步到位的原因如下:
- 人给出的其实是排序,而非不同回答的分数
- 需要学习一个函数来替代人为标注($R_\theta$),给出实时反馈
-
第二项$\pi^{RL}_\phi (y | x)/\pi^{SFT}(y|x)$为KL散度,两项都为概率的时候用其来评估相似度,想要的散度比较少
-
为了避免其他下游任务性能下降,第三项$\gamma E_{x\sim D_{pretrain}}[\log (\pi^{RL}_{\phi}(x))]$把原始目标函数又拿了回来
-
$\gamma$不为0时,即PPO-ptx
-
在线学习的形式?
之前的工作:RL里多跑几个来回,多次标注并训练
对一些任务还可以,对某些任务没有太大必要
评估与实验结果
以一个1%的模型突破性能
讨论
- 训练代价相对比较低(跟预训练相比)
- 多数数据标注者第一语言是英语
- 模型上也没有完全align或者完全的安全