本文正在参加「技术视角深入 ChatGPT」征文活动.
ChatGPT是如何工作的: 聊天机器人背后的模型
简要介绍一下你禁不住要听的聊天机器人背后的直觉和方法论.
这篇关于为ChatGPT提供动力的机器学习模型的温馨介绍, 将从大型语言模型的介绍开始, 深入到使GPT-3能够被训练的革命性的自我注意机制, 然后深入到从人类反馈中强化学习, 这个新颖的技术使ChatGPT出类拔萃.
大型语言模型
ChatGPT是一类机器学习自然语言处理模型的推断, 被称为大型语言模型(LLM). LLM消化了大量的文本数据, 并推断出文本中单词之间的关系. 在过去的几年里, 随着我们看到计算能力的进步, 这些模型也在不断增长. 随着输入数据集和参数空间大小的增加, LLM的能力也在增加.
语言模型的最基本的训练涉及到预测一连串词语中的一个词. 最常见的是, 这被观察为下一个标记预测和屏蔽语言模型.
作者生成的下一个标记预测和掩蔽语言模型的任意例子
在这种基本的排序技术中, 通常是通过长短时记忆(LSTM)模型来部署的, 模型是根据周围的环境, 用统计学上最有可能的词来填补空白. 这种顺序建模结构有两个主要限制.
- 该模型无法比其他词更重视周围的一些词. 在上面的例子中, 虽然‘reading’可能最常与‘hates’联系在一起, 但在数据库中, ‘Jacob’可能是一个狂热的读者, 因此模型应该给予‘Jacob’比‘reading’更多的权重, 并选择‘love’而不是‘hates’.
- 输入数据是单独和顺序处理的, 而不是作为一个整体语料库. 这意味着当LSTM被训练时, 上下文窗口是固定的, 仅扩展到序列中几个步骤的单个输入之外. 这限制了单词之间关系的复杂性和可以导出的含义.
针对这个问题, 2017年 Google Brain 的一个团队引入了转化器. 与LSTM不同, 转化器可以同时处理所有输入数据. 使用自我关注机制, 该模型可以根据语言序列的任何位置为输入数据的不同部分赋予不同的权重. 此功能在将意义注入LLM方面实现了巨大改进, 并支持处理更大的数据集.
GPT和自我关注
生成式预训练转化器(GPT)模型于2018年首次由openAI推出, 名为GPT-1. 这些模型在2019年的GPT-2, 2020年的GPT-3以及最近在2022年的InstructGPT和ChatGPT中继续发展. 在将人类反馈整合到系统中之前, GPT模型进化的最大进步是由计算效率方面的成就推动的, 这使得GPT-3能够在比GPT-2多得多的数据上进行训练, 使其拥有更多样化的知识基础和执行更广泛任务的能力.
对比GPT-2(左)和GPT-3(右). 作者生成.
所有的GPT模型都利用了转化器结构, 这意味着它们有一个编码器来处理输入序列, 一个解码器来生成输出序列. 编码器和解码器都有一个多头的自我注意机制, 允许模型对序列的部分进行不同的加权, 以推断出意义和背景. 此外, 编码器利用掩蔽语言模型来理解单词之间的关系, 并产生更易理解的反应.
驱动GPT的自我关注机制通过将标记(文本片段, 可以是一个词, 一个句子或其他文本分组)转换为向量, 代表该标记在输入序列中的重要性. 为了做到这一点, 该模型:
- 为输入序列中的每个标记创建一个查询, 键和值向量.
- 通过采取两个向量的点积, 计算第一步中的查询向量与其他每个标记的关键向量之间的相似性.
- 通过将第2步的输出输入softmax函数, 生成规范化的权重.
- 产生一个最终向量, 通过将步骤3中产生的权重乘以每个标记的值向量, 代表该序列中标记的重要性.
GPT使用的'多头'注意机制是自我关注的进化. 该模型不是一次性执行第1-4步, 而是并行地多次迭代这一机制, 每次都会产生一个新的查询, 键和值向量的线性投影. 通过以这种方式扩展自我关注, 该模型能够掌握输入数据中的子含义和更复杂的关系.
作者生成的ChatGPT截屏.
尽管GPT-3在自然语言处理方面引入了显著的进步, 但它在与用户意图相一致的能力方面是有限的. 例如, GPT-3可能产生以下输出结果:
- 缺乏帮助性意味着它们确实不遵循用户的明确指示.
- 包含幻觉, 反映不存在的或不正确的事实.
- 缺乏可解释性使人类难以理解模型是如何得出某个特定的决定或预测的.
- 包含有毒或有偏见的内容有害或令人反感, 传播错误信息.
在ChatGPT中引入了创新的训练方法, 以抵消标准LLM的一些固有问题.
ChatGPT
ChatGPT是InstructGPT的衍生产品, 它引入了一种新颖的方法, 将人类反馈纳入训练过程, 使模型的输出与用户的意图更好地结合起来. 来自人类反馈的强化学习(RLHF)在openAI的2022论文中得到了深入的描述. 训练语言模型以遵循人类反馈的指令, 并在下面进行了简化.
第1步: 监督微调(SFT)模型
第一次开发涉及微调GPT-3模型, 雇用了40个承包商来创建一个有监督的训练数据集, 其中输入有一个已知的输出供模型学习. 输入, 或提示, 是从实际的用户输入开放API中收集的. 然后, 标签人员对提示写出适当的回应, 从而为每个输入创建一个已知的输出. 然后, GPT-3模型使用这个新的, 有监督的数据集进行微调, 以创建GPT-3.5, 也称为SFT模型.
为了最大限度地提高提示信息数据集的多样性, 只有200条提示信息可以来自任何给定的用户ID, 任何共享长的共同前缀的提示信息被删除. 最后, 所有含有个人身份信息(PII)的提示被删除.
在汇总了OpenAI API的提示信息后, 还要求贴标者创建提示信息样本, 以填补那些只有极少真实样本数据的类别. 所关注的类别包括:
- 直白的提示任何任意的询问.
- 少量的提示包含多个询问/回答对的指示.
- 基于用户的提示对应于OpenAI API所要求的特定用例.
在生成响应时, 要求标签员尽力推断出用户的指令是什么. 本文描述了提示请求信息的主要三种方式.
- 直接: "告诉我关于..."
- 少量: 给定2个故事示例, 写一个相同主题的故事.
- 继续: 给定一个故事的开头, 完成它.
对来自OpenAI API的提示和由标签人员手写的提示进行汇编, 产生了13,000个输入/输出样本, 用于监督模型的使用.
图片(左)插自训练语言模型以遵循带有人类反馈的指令 OpenAI, 2022. 右侧是作者添加的额外内容
第2步: 奖励模式
在步骤1中训练SFT模型之后, 该模型生成对齐更好的响应以对用户提示. 下一个改进的形式是训练奖励模型, 其中模型输入是一系列提示和响应, 输出是称为奖励的缩放值. 为了利用强化学习, 需要奖励模型, 在强化学习中, 模型学习产生输出以最大化其奖励(参见步骤3).
为了训练奖励模型, 贴标机在一次输入提示中获得4到9个SFT模型输出. 他们被要求将这些产出从最好到最差排序, 创建如下的产出排序组合.
响应排名组合示例. 由作者生成.
将模型中的每个组合作为单独的数据点包括在内会导致过度拟合(无法推断超出看到的数据). 为了解决该问题, 该模型是利用每组排名作为单个批处理数据点构建的.
图片(左)插自训练语言模型以遵循带有人类反馈的指令 OpenAI, 2022. 右侧是作者添加的额外内容.
第3步: 强化学习模型
在最后阶段, 模型将收到随机提示并返回响应. 响应是使用模型在步骤2中学习的'策略'生成的. 该策略代表机器已经学会用于实现其目标的策略; 在这种情况下, 最大化其奖励. 根据步骤2中开发的奖励模型, 然后确定提示和响应对的缩放器奖励值. 然后, 奖励会反馈到模型中以进化策略.
2017年, Schulman等人引入了近端策略优化(PPO), 该方法用于在生成每个响应时更新模型的策略. PPO包含来自SFT模型的每令牌Kullback-Leibler(KL)惩罚. KL散度测量两个分布函数的相似性, 并惩罚极远距离. 在这种情况下, 使用KL惩罚可以缩短响应与步骤1中训练的SFT模型输出的距离, 以避免过度优化奖励模型并过于偏离人类意图数据集.
图片(左)插自训练语言模型以遵循带有人类反馈的指令 OpenAI, 2022. 右侧是作者添加的额外内容.
该过程的步骤2和3可以反复迭代, 但在实践中尚未广泛完成.
作者生成的ChatGPT截屏.
模型评估
模型评估是通过在训练期间搁置模型未见过的测试集来执行的. 在测试集上, 进行了一系列评估, 以确定模型是否比其前身GPT-3更好地对齐.
有用性: 模型推断和遵循用户说明的能力. 贴标机更喜欢InstructGPT的输出, 而不是 GPT-3 85 ± 3% 的时间.
真实性: 模型的幻觉倾向. PPO模型产生的产出在使用TruthfulQA数据集进行评估时, 显示真实性和信息性略有增加.
无害: 模型避免不当, 贬损和诋毁内容的能力. 使用RealToxicPrompts数据集测试了无害性. 该测试在三种条件下进行.
- 指示提供尊重的反应: 导致毒性反应显著减少.
- 指示提供反应, 没有任何尊重设置: 毒性无明显变化.
- 指示提供毒性反应: 实际上, 反应的毒性明显高于 GPT-3 模型.
要想了解用于创建ChatGPT和InstructGPT方法论的更多信息, 请阅读原始论文 训练语言模型以遵循带有人类反馈的指令 OpenAI, 2022.
作者生成的ChatGPT截屏.
编码快乐!
本文正在参加「技术视角深入 ChatGPT」征文活动.