ChatGPT的朋友们:大语言模型经典论文一次读到吐

先做个广告:如需代注册帐号或代充值Chatgpt Plus会员,请添加站长客服微信:muhuanidc


MLNLP社区是国内外知名的机器学习与自然语言处理社区,受众覆盖国内外NLP硕博生、高校老师和企业研究人员。
社区的愿景是增进国内外自然语言处理,机器学习学术界、产业界和广大爱好者之间的交换和进步,特别是初学者同学们的进步。
转载自 | PaperWeekly
作者 | Ostrich
单位 | 阿里巴巴
研究方向 | 自然语言处理/搜索算法

要说 2023 刷屏最多的词条,ChatGPT 可以说是无出其右。到最近的 GPT⑷,技术的革新俨然已显现破圈之势,从学术圈到工业界再到资本圈,同时也逼真逐渐影响到普通人的平常生活与工作。

坦白来说,对大语言模型生成相关的工作,个人长时间以来持守旧态度,认为这个方向更多的是一种深度学习的理想寻求。现在看小丑竟是我自己,或许优秀的工作正是需要对理想状态的延续寻求,才叫优秀的工作。

言归正传,本系列打算跟风讨论一下关于 ChatGPT 相关技术,主要内容分为三部份,也会分为三篇文章:

1. 经典论文精读【this】:通过本文浏览可以了解 ChatGPT 相关经典工作的大致思路和各个时期的关键结论;

2. 开源实现技术【soon】:总结最近几个月开源工作者们follow ChatGPT的主要方向和方法;

3. 自然语言生成任务的前世今生和未来【later】:大语言模型以外,谈谈自然语言生成的“传统”研究方向与未来畅想。

由于相关技术发展迅速,三部份内容也会定期更新。本文主要为第一部份经典论文学习,而相关的工作众多(如图),逐一浏览其实不现实,因此本文选择延续性最高的 OpenAI 系列和 Google 系列,和近期影响力比较大的 LLaMA,最后是中文适配比较不错的 GLM 和 ChatGLM。

▲ 10B以上大模型(黄色为开源)


另外,本文浏览需要一定的 NLP 基础概念,比如知道甚么是 BERT 和 Transformer、甚么是 Encoder-Decoder 架构、甚么是预训练和微调,甚么是语言模型等。

OpenAI 系列

本节目标是通过 OpenAI 系列论文浏览细窥 ChatGPT 的主要原理,其先进的工作脉络可以概括为下图。从依赖往上追溯需要了解 Codex 和 instructGPT、再往上是 GPT⑶、继而也需要了解 GPT⑵ 和 GPT⑴。(GPT⑷ 暂时简单地看做是 Plus 版本的 GPT⑶.5,而且增加了多模态数据的处理能力,等更多的细节公然后再作讨论)。

1.1 GPT⑴

论文题目:

Improving Language Understanding by Generative Pre-Training

论文链接:

https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf

1.1.1 动机

任务目标和 BERT 一致(但在 BERT 之前),希望通过大范围无标注数据进行预训练,下游任务微调的方式解决经典 NLP 任务,减缓有监督任务数据搜集本钱高的问题。GPT⑴ 虽然不是第一个使用预训练-微调架构的工作,但也是使用 Transformer-Decoder 做相关任务的很初期工作了。

1.1.2 方案概述

模型结构:Transformer 的 Decoder 部份

训练方法:自回归的生成方式进行语言模型预训练,辨别式的结构进行下游任务微调。

1.1.3 一些细节

  • 预训练:

    • Loss:经典的语言模型训练目标,将无标注的样本库表示为 token 序列集合 U = {u_1, ...., u_n},最大化下面的似然估计。即通过一段话的前面的 token,预测下一个 token,其中 k 为上下文窗口。

    • 模型:使用多层 Transformer decoder 建模 P,简化的公式表达以下。W_e 为 token embedding 矩阵,W_p为位置向量矩阵,通过量层 transformer block,最后每一个 token 通过 transformer block 成为编码后的向量 h_n,最后经过一个线性层 + softmax,即为下一个 token 的预测散布。

    • 数据:初期数据并没有非常夸大,GPT⑴ 的主要数据有两个:

      • BooksCorpus dataset:包括 7000 多本未发表的书籍;

      • 1B Word Benchmark(可选)。

  • 微调:

    • 模型改动:通过增加特殊 token 作为输入的开始 [Start] 和结束 [Extract] 等,以结束 [Extract] 的隐层输出接入全连接层,并进行下游的分类和其他变种任务。如图所示:

    • loss:

    • 小细节:微调进程中,在下游任务目标基础上,加入预训练目标,效果更好。

1.1.4 结果与讨论

  • 主要验证方法:文章主要是通过下游任务的效果进行策略的有效性验证,通过一些经典任务数据集。结论来看,在很多数据集上都还有着不错的效果,以分类为主的数据集为例,如图所示。可以看到,这时候的对照项还没有 BERT 的踪迹。

1.2 GPT⑵

论文标题:

Language Models are Unsupervised Multitask Learners

论文链接:

https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf

1.2.1 动机

GPT⑴ 以后不久,BERT 出现,刷榜各种任务。GPT⑴ 尝试增加模型大小,但在预训练+微调的训练框架下,仍打不过同参数大小的 BERT;但研究还得继续,尝试换个打法,以 Zero-Shot 作为卖点,效果不错。

1.2.2 方案概述

GPT⑵ 实现 Zero-Shot 的方法在现在看来比较简单:将所有的 NLP 任务统一看做是 p(output|input)的建模,而如果统使用一个足够容量的模型实现,还要告知模型需要完成甚么任务,这时候建模目标可以表达为 p(output|input, task)。

对统一大模型的选择,网络结构与 GPT⑴ 相同,使用方式也很自然:task 和 input 均使用自然语言的方式作为输入交给 GPT,模型继续一步步地预测下一个最大可能的 token,直到结束。如翻译任务:模型输入“翻译中文到英文,原文‘我爱深度学习’”,模型输出 “I love deep learning.”。又如浏览理解任务,模型输入“回答问题,内容‘xxx’, 问题‘xxx?’”,模型输出问题的答案。

没错,就是初期的 Prompting 方法(其实也不是最早的)。这么做的根据则是斟酌到训练数据集里有大量的 Prompt 结构的语料,可使模型学到遇到类似的提示语后需要生成甚么。

1.2.3 一些细节

  • 训练数据:为了支持多任务的 Zero-Shot,需要模型尽量看更多,尽量丰富的数据,数据搜集的目标也是如此。要点以下:

    • 开源 Common Crawl,全网网页数据,数据集量大,且足够丰富,但存在质量问题,故而没有直接使用;

    • 自建了 WebText 数据集,网页数据,主打一个干净高质量:只保存被人过滤过的网页,但人过滤本钱很高,这里的方法是只要 Reddit 平台(类似国内的贴吧,社交分享平台)中被用户分享的站外链接,同时要求帖子最少 3 个 karma(类似点赞?)。可以认为被分享的常常是人们感兴趣的、有用的或成心思的内容。

    • WebText 终究包括 4500w 链接,后处理进程:1、提取网页内容后;2、保存 2017 年以后的内容;3、去重;4、启发式的清算,得到 800w+ 的文档,约 40GB;4、剔除维基百科文档,避免与下游测试数据堆叠(由于很多测试任务包括了维基百科数据,话说其他数据没有堆叠吗?)。

  • 模型:沿用 GPT 结构,但在模型特点输入编码、权重初始化、词典大小、输入长度、batch size 等方面做了一些调剂,主要是升级。

1.2.4 结论与讨论

  • 主要结论:

    • 文章尝试了四种大小的模型,其中 117M 对应了 Bert-base(和 GPT⑴),345M 对应和 Bert-large 参数量,最大的模型 1542M(15 亿参数)。

    • 模型的选择使用 WebText 的 5% 作为验证数据,实验发现所有大小的模型依然是欠拟合状态,随着训练时间的增加,在验证集上的效果依然可以继续提升。

    • 固然,在大多数 Zero-Shot 任务集合上也如愿获得了当时最好的结果:

  • 次要结论:在多数任务上,模型容量和核心指标的关系,可以发现随着模型容量的增加,效果不断变强。15 亿参数看上去没有到达瓶颈,也就是说继续提升模型容量,效果能到甚么程度极具想象力。(也就有了后续 GPT⑶ 的大力出奇迹)

    • Children’s Book Test 任务:

    • Winograd Schema Challenge 任务:

    • 其他 Zero-Shot 任务

    • 语言模型预训练集和验证集的效果(perplexity 困惑度越小越好)

1.3 GPT⑶

论文题目:

Language Models are Few-Shot Learners

论文链接:

https://arxiv.org/pdf/2005.14165.pdf

1.3.1 动机

BERT 出来以后,虽然预训练+微调架构获得了惊人的效果(GPT 系列短时间比不了了),但这类微调有很多限制:

  • 微调需要更多的领域数据,标注本钱高,一些特殊任务更是难上加难(如纠错、写作、问答等)。

  • 微调在小数据量下表现好,极可能只是过拟合。很多任务说是超过人类,实际上是夸大了实际表现(模型其实不是根据知识和推理去做任务,其实不智能)。

  • 以人类的学习习惯对照,在人类有了足够的知识后(预训练),其实不需要再看大量的监督数据才能做任务(对应微调),而只需要看少许样例便可。

文章认为,虽然微调现在效果确切打不过,但寻求不微调依然是值得的。方法嘛,延续 GPT⑵ 最后的结论,更大的模型、更多的数据、prompt 更多的信息(In-Context learning)。

1.3.2 方案简述

主要与 GPT⑵ 相比:

  • 沿用 GPT⑵ 的模型和训练方法,将模型大小升级到 175B(1750 亿的参数量 vs 15亿),这个 175B 的模型叫 GPT⑶;

  • 区别于 BERT/GPT⑴ 模型使用下游任务微调进行效果验证,也区别于 GPT⑵ 仅仅使用 Zero-Shot 进行验证,GPT⑶ 主要验证其 In-Context learning 的能力(可能认为是不微调,不梯度更新的方式,看通过 prompt 和几个例子作为输入,来完成具体任务的能力)。

  • GPT⑶ 也不是不能微调,以后会做一些工作来看看微调的表现(这里说的也就是后面的 Codex、InstructGPT 和 ChatGPT 等工作了)。

1.3.3 一些细节

  • 模型训练方式:前面提到了,相对 GPT⑵ 没有创新,就是更大模型、更多更丰富的数据、更长的训练时间,不止于 Zero-Shot,还做 One-Shot 和 Few-Shot 任务(这里的 x-Shot 是不微调模型的,也就是所谓的 In-Context learning,而在预训练阶段没有特殊操作),如图。

  • 模型:沿用了 GPT⑵ 的结构,在模型初始化、归一化、Tokenization 做了一些优化,另外也“抄”了一些类似 Sparse Transformer 的优点(总之是加了一些同期一些被验证有效的操作,或自己验证有效的小操作)。为了验证模型容量带来的效果,文章训练了多种大小的模型,最大的 175B 的叫 GPT⑶。为了训练大模型,还做了一些模型并行和提效的工作(其实这部份也比较重要,但是没有展开说)。模型大小参数,和同期一些工作的训练资源开消对照如图:

  • 训练数据准备:

    • 文章发现,模型增大以后,引入一些脏数据的负向影响没这么大了。因此,相比于 GPT⑵,GPT⑶ 开始使用 Common Crawl 数据集了,但是做了一些清洗工作:1、保存与高质量数据集类似的内容(使用一些类似或辨别的方法);2、去重;

    • 最后把清洗后的 Common Crawl  数据和已有的高质量数据集合并在一起,得到训练数据集,并进行区别权重的采样使用:

  • 模型训练进程:

    • 大模型可使用更大的 batch size,但是需要小一点的 Learning rate;根据梯度的噪音尺度,动态调剂 batch size;为了避免大模型 OOM,使用了全方位的模型并行,微软提供了硬件和软件的支持。

1.3.4 结论与讨论

  • 主要结论:整体效果不错,在各种数据集上做了对照,NLU 相关任务,GPT⑶ 表现不错(个别数据集还超过了有监督微调的方式);在 QA、翻译、推理等任务上还欠点火候,距离监督微调模型差距明显;生成任务基本可以做到人难分辨。如,几个主要的任务:

    • SuperGLUE:理解任务为主

    • Winogrande:推理任务为主

    • TriviaQA:浏览理解任务为主

  • 次要结论:

    • 从主要结论曲线,可以明显发现,few-shot 比 zero-shot 效果好,模型越大越好(空话),而且 175B 好像也没到极限,模型更大效果可能还会继续上升。

    • 另外一个数据显示,模型越大,loss 降落空间越大,当前版本最大的模型,依然没有收敛(黄色曲线);另外一个不乐观的趋势是随着 Loss 的逐渐下降,算力的 ROI(投入产出比)也在逐步下降。

    • 由于模型生成效果真假难辨,文章也侧重讨论了模型的偏见、不道德和不当用处的问题,因此也决定不开源(OpenAI 走上 CloseAI 之路)!

1.4 Codex

论文题目:

Evaluating Large Language Models Trained on Code

论文链接:

https://arxiv.org/pdf/2107.03374.pdf

1.4.1 动机

GPT⑶ 论文里提到,GPT 可以微调但放在未来弄,Codex 就是微调工作之一。任务是 GPT 模型在代码生成方向做微调的探索,算是一个利用方向的论文。

1.4.2 方案简述

具体地,Codex 是利用代码注释生成代码。训练数据从 github 上获得,主要为 python 语言。为了验证模型效果,Codex 做了一个新的数据集(164 个原始代码问题,可以认为一些经典的 leetcode 题、面试题),通过单元测试的方式验证生成代码的正确性。

终究 Codex 可以获得 28% 的测试通过率(GPT⑶ 只能解决 0%);如果允许重复采样生成多个结果,选择 100 个,可以到达 70% 的通过率(想一想自己能通过量少)。经过一些 rerank 策略,通过率直逼 80%。

1.4.3 一些细节

  • 验证集准备:由于之前没有现成的评测代码生成的验证集,文章自己设计了一个 HumanEval。并使用 pass@k 作为评测指标(生成 k 个结果中有一个能通过就算通过,然后算通过率)。斟酌生成代码的安全性不可控,需要使用一个 sandbox 环境运行(崩了也没事)。HumanEval 的样例数据以下,包括代码注释和标准答案:

  • 训练数据:截止到 2020 年 5 月,触及 540 万的 Github 仓库,包括 179GB 的 Python 文件,文件大小小于 1MB。做了一些过滤,主要过滤项是自动生成的代码、平均行长度大于 100、最大行长度大于 1000、包括一定比例数字等。最后数据集大小 159GB。

  • 模型:斟酌生成任务,利用GPT系列的预训练模型应当会有好处,选择了 13B 的 GPT 模型作为主模型,进行微调。值得一提的是,利用预训练的 GPT 微调其实不优于使用代码数据从头训练(应当是由于数据量已足够大了),但是使用微调收敛更快。模型细节:

    • 参数配置和 GPT⑶ 差不多;基于代码数据特点,做了特别的 tokenizer,终究少了 30% 的 token;sample 数据时使用特别的停止符(' class'、' def' 等),保证 sample 代码的完全性;

1.4.4 结论与讨论

  • 主要结论:

    • 区别的参数调剂,和采样数量,显著影响生成代码的通过率。

    • 如果只选一个答案,使用一些模型输出指标,如最大 mean log-probability,可以比随机选择效果更好;用借助先验知识的单元测试进行代码选择,可以获得理论上的最好效果(Oracle)。

  • 次要结论:由于效果还可以,趋势上看模型更大看上去效果还会提升,文章最后讨论了一下对机器会写代码的耽忧(自我优化最可怕);另外代码中也不出意外的有轻视、道德的偏见。(这个大概源自代码里也有人口吐芳香,代码命名带 Fxxk,有人的地方就有偏见)。

1.5 InstructGPT

论文题目:

Training language models to follow instructions with human feedback

论文链接:

https://arxiv.org/pdf/2203.02155.pdf

1.5.1 动机

GPT 的另外一种微调探索,使用用户指令和偏好答案来微调 GPT 模型,让模型生成的内容更符适用户的意图,更真实、更有用(Alignment,对齐进程)。这么做的动身点是面向一种经典的利用场景,用户给一条指令声明意图,期望模型生成有用、无害的内容,但使用大量网页数据训练的大语言模型 GPT 没法直接满足这类诉求,因此需要微调。

1.5.2 方案简述

指令微调的进程分为三步(RLHF,Reinforcement Learning from Human Feedback),以下图:

1、准备一批prompt(来源标注人员手写、OpenAI API 要求);对这批 prompt,标注人员手写期望的答案,用这份 prompt+answer 数据微调 GPT⑶ 生成模型,这里叫做 supervised policy;

2、使用微调后的模型,根据更多的 prompt 生成答案(一次 prompt 屡次采样生成个答案),这时候外包只要标注生成内容的相对顺序便可;用这份标注数据训练一个 reward 模型(RM 模型),输入 prompt 和 answer,模型输出一个打分(这里一样是使用 GPT 模型)。

3、采样更多的 prompt,使用强化学习的方式,继续训练生成模型,强化学习的 reward 使用第 2 步的模型打分。

第 2 和 3 步是一个延续迭代的进程,即,第 3 步训练出的更好的生成模型(policy)可以用来搜集更多具有相对顺序标签的数据,这些数据则用来训练新的 RM 模型(即步骤 2),继而再训练新的生成模型(对应步骤 3)。大多数的相对顺序标注数据来自于步骤 1,一部份来自于步骤 2 和 3 的迭代。

另外这篇文章其实不是第一个使用该方法的工作,前面还有一篇《Learning to summarize from human feedback》,使用类似三步方法做摘要任务。一样是 OpenAI 的工作,体现了工作的延续性,而非一挥而就,灵感也不是说有就有。

1.5.3 一些细节

  • 数据搜集进程

    • 冷启动阶段:通过部份人工标注的 prompt+answer 数据,监督训练得到的初期版本 InstructGPT;丰富阶段:部署试用版本在线服务,搜集更多更丰富的真实用户 prompt。本工作并未使用线上正式环境的服务用户数据,试用版本的数据将用于数据标注和模型训练,也提早告知了用户;

    • 搜集到的 prompt 根据最长公共前缀做了去重;

    • 每一个用户最多 200 条 prompt,避免模型逢迎个别用户偏好;训练集、验证集和测试集,不包括相同用户(强调用户维度的泛化能力);

    • 过滤 prompt 中与个人身份相关的信息,一样是避免模型学到用户特点;

    • 初期版本 InstructGPT 的训练数据是由外包手写的 prompt 和答案,冷启 prompt 包括 3 类:1、任意常见任务问题,寻求任务的丰富性;2、同一类 prompt 写多个 query 和答案;3、模仿真实用户的 prompt 要求;

    • 经过上面的操作,得到三类数据:1、SFT dataset,训练集 13k prompts (来自于 API 和标注人员手写),用来训练 SFT 模型;2、RM 数据集,训练集33k prompts(来自于 API 和标注人员手写),人工标注生成模型输出答案的排序,用来训练 RM 模型;3、PPO数据集,31k prompts(仅来自于 API),不需要人工标注,用来做 RLHF fine-tuning。

  • prompt 特点:

    • 真实用户的 prompt 指令类型散布和样例如图,96% 的是英文,但结果发现对其他语言也有泛化能力。

  • 数据标注细节(也很关键,值得参考):

    • 一个外包标注团队,由 40 个承包商组成,应当是为了提升标注多样性,避免模型对标注员风格敏感;

    • 对标注人员进行了测试(考试,性情测试),挑选目标是留下那些队区别群体敏感(宗教、性取向、种族等)、能辨认潜伏有害内容的标注人员;

    • 要求标注人员能够准确判断用户意图,对模糊意图进行跳过;斟酌隐含义图,对一些潜伏、引诱性的脏话、偏见、虚假信息能够辨认;

    • 训练和验证阶段的意图对齐(alignment)有些许冲突:训练阶段强调生成内容的有用性(helpfulness),验证阶段则关注内容的真实性(truthfulness)和会不会有害(harmlessness);

    • 标注进程,算法开发和标注人员紧密沟通,为了做到这点,对外包标注人员做了一个入职流程(可能要交社保=_=);

    • 为了测试模型对标注人员的泛化能力,留了一部份测试用的标注人员(held-out labelers,真工具人,严谨了),这些标注人员产出的数据不用于训练,而且这些人员没有经过性情测试;

    • 虽然标注任务难度大,但标注人员的标注一致性还可以,训练标注人员标注一致性 72.6 ± 1.5%,测试标注人员一致性 77.3 ± 1.3%。

  • 模型实现:同训练进程,包括三部份

    • Supervised fine-tuning(SFT):使用标注人员标注的数据,有监督的微调 GPT 模型,训了 16 个 epoch, 学习率 cosine decay。模型的选择使用验证集上的 RM 模型 score(鸡生蛋蛋生鸡)。值得一提的是,这里 SFT 模型在验证集上 1 个 epoch 后就 overfit 了,但是继续更多的 epoch 有益于 RM score 和人的偏好。

    • Reward modeling(RM):

      • 模型:一样是 SFT GPT 模型结构,不过是另外训练了一个 6B 的(175B 不稳定,不合适下面的 RL 训练),输入是 prompt 和生成的内容,pooling 后接一个全连接(或许有)输出一个 scalar reward 分。

      • Loss 函数表示为:

      • K 为是一个 prompt 模型生成的答案数,标注人员对 K 个模型进行排序;K 为 4⑼,标 9 个和 4 个本钱差不多;

      • 需要一个 bias 对 reward 进行归一,使其均值为 0,方便下游 RL 使用(这里的 bias 可以是 reword 均值,也是 RL 的常规操作);

    • Reinforcement learning(RL),两个实验模型:

      • ‘PPO’ 模型:直接使用经典的 PPO 算法,一种 offline 的 RL 算法,目标是最大化模型反馈的 reward,同时统筹 online 模型和 offline 模型的 KL 散度(这里 offline 模型是 SFT 模型,online 模型是要优化的目标模型,online 模型参数会定期同步到 offline 模型。如果不熟习 RL 可以简单了解其目标便可);模型输出的 reward,由 RM 打分得到;

      • ‘PPO-ptx’ 模型:PPO+ 预训练目标(加这个目标,被验证可以统筹公然 NLP 任务的效果),终究的优化目标,最大化:

  • 验证方法:评价模型两方面的能力,1、生成的答案人是不是是喜欢;2、经典的 NLP 任务解决的怎样样。

    • 在 API 要求的 prompt 验证效果:

      • 真实散布下采样 prompt 做测试集;

      • 175B 的 SFT GPT⑶ 模型作为 Baseline;

      • 标注人员对各个模型生成的内容打出 1⑺ 分的喜欢/认可度;

      • 认可度的根据是 helpful、honest 和 harmless,每一个维度又有很多细则。

    • 在开源的 NLP 数据集,包括两类:

      • 评测安全性、真实性、有害和偏见的数据集;

      • 经典 NLP 任务数据集熵 zero-shot 的结果,如浏览理解、问答、摘要等。

1.5.4 结论与讨论

  • 主要结论:

    • 对通过 API 取得的测试集 prompt,RLHF 显出好过 baseline:

    • 对照友商模型,也不错:

  • 次要结论(InstructGPT 生成内容的白话评价):

    • 标注人员普遍认为 InstructGPT 生成的内容比 GPT⑶ 强很多;

    • InstructGPT 模型生成的内容比 GPT⑶ 事实性更强(出现事实性毛病比较少);

    • InstructGPT 生成的内容在有害性优于 GPT⑶,但在偏见方面并没有强很多;

    • 在 RLHF 微调进程中,由于“对齐税”的缘由,在开源 NLP 任务表现变差了,但 RLHF 基础上增加语言模型的预训练目标,可以得到统筹(PPO-ptx)。

    • InstructGPT 模型在 “held-out” 标注人员上也表现出了不错的泛化性;

    • 公然 NLP 数据集任务上的表现,其实不是 InstructGPT 寻求的(ChatGPT 才是);

    • InstructGPT 模型在 RLHF finetuning 数据集散布外的 prompt 一样具有很好的泛化能力;

    • InstructGPT 生成的内容依然会出现一些简单的毛病;

1.6 ChatGPT

论文没有,官方博客:

https://openai.com/blog/chatgpt

OpenAI没有开放ChatGPT的细节,只有两段大致方法描写,摘要一下包括:

  • 和 InstructGPT 的方法大致相同,只是在数据搜集上略有区别。ChatGPT 使用的对话情势的数据,即多轮 prompt 和上下文,InstructGPT 的数据集也转换成对话格式合并一起使用。

  • 训练 RM 模型,使用多个模型生成的结果,随机选择模型生成的内容让标注人员根据内容质量排序,然后借助 RM 模型进行后续的 PPO 微调训练。一样,这也是一个反复迭代的进程。

更多的细节无了,不过从 OpenAI 友商 Anthropic(开创人也来自 OpenAI)的一篇论文能看到更多细节。以 OpenAI 工作的延续性看,从公司跳槽出去的人,应当也是延续了相关的工作。

读 Anthropic 之前,插一段 OpenAI 的系列工作总结,存个档。读了上面的论文,对这张表的内容应当能够大致理解(参考):

可能确切如一些大佬所说,ChatGPT 没有创新,只是一堆策略的叠加,凑出了一个强大的模型;也有人说 ChatGPT 更多的是工程和算法的结合。不管怎样样,方法是真 work。

Anthropic的Claude

论文题目:

Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback

论文链接:

https://arxiv.org/pdf/2204.05862.pdf

ChatGPT 出来不久,Anthropic 很快推出了 Claude,媒体口径下是 ChatGPT 最有力的竞争者。能这么快的跟进,大几率是同期工作(乃至更早,相关工作论文要早几个月)。Anthropic 是 OpenAI 员工离职创业公司,听说是与 OpenAI 理念不一各奔前程(或许是不开放、社会责任感?)。

一些内测结论:Claude 相比 ChatGPT 更能避免潜伏 harmful 的问题,在代码生成略为逊色,通用 Prompt 不分伯仲。从效果上,可能 ChatGPT 功能性更强,而 Claude 更加“无害”(或说,对社会的潜伏负面影响更小),这点从参考论文的标题也有所体现。

2.1 动机

引入偏好模型和 RLHF(人类反馈强化学习)微调大语言模型(可能由于脱离 OpenAI,不提 GPT⑶ 了),得到一个 helpful 和 harmless 的个人助理(类似 ChatGPT);这类对齐(Alignment)微调,使预训练的语言模型在几近所有的 NLP 任务中效果提升显著,并且可以完成特定的任务技能,如 coding、摘要和翻译等。

2.2 方案简述

其实思路和 InstructGPT  差不多,三阶段的 RLHF。区别点在于,1、进行了迭代式的在线模型训练:模型和 RL 策略每周使用新的人工反馈数据更新,不断迭代数据和模型;2、使用对话格式的数据数据;3、更加关注模型的 helpful 和 harmless。

除模型和策略设计以外,文章重点讨论了 RLHF 的稳定性问题;也对模型校准、目标冲突、OOD(out of distribution)辨认等问题做了分析。

目标冲突是指 helpful 和 harmless的目标冲突,由于如果模型对所有问题都回答“不知道”,虽然 harmless,但是完全不 helpful。

2.3 一些细节

  • 对话偏好数据集:

    • 搜集了一批 helpfulness and harmlessness 的对话数据集,数据的标注是标注人员和各种 52B 语言模型在对话标注页面交互完成。标注页面如图;

    • 标注人员在交互页面与模型进行开放式对话,或寻求帮助、或提出指令、或引导模型输出有害内容(比如如何成功抢劫)。对模型输出的多个答案,标注人员需要在每轮对话标注出哪一个更有用或哪一个更有害;

    • 搜集了三份数据,一个来自于初始模型(SFT)、一个来自初期的偏好模型(RM)采样、最后一个来自人工反馈的在线强化学习模型(周更);

    • 开源了三份数据:https://github.com/anthropics/hh-rlhf

  • 数据搜集和模型训练流程(中间触及的概念需要读往期论文,了解便可):

LLaMa与Alpaca

事情发展到现在,有一个小问题,就是模型愈来愈大,开源愈来愈少(其实开源了大多数人也玩不了)。首先 GPT⑶ 系列模型就很大了,训练和 inference 模型都需要大量的显卡;其次,GPT⑶ 所用的数据也未公然,有算力复现也稍困难,需要自己去盘数据;在 GPT⑶ 以后的 ChatGPT 的闭源程度愈甚,可能要进一步斟酌商业利益。

在这样的背景下,前调模型提效和开放的工作愈来愈多,近期比较有影响里确当属 Meta AI 的 LLama 和斯坦福基于 LLama 的 Alpaca。前者类似 GPT 的大语言模型,后者类似 ChatGPT。

3.1 LLama

论文题目:

LLaMA: Open and Efficient Foundation Language Models

代码链接:

https://github.com/facebookresearch/llama

3.1.1 动机

  • 大语言模型相关的工作中,过去的普遍假定是模型越大效果越好。但近期有些工作表明,给定计算资源的条件下,最好的效果不是由最大的模型实现,而是由更多的数据下相对小的模型实现。而后者对 inference 或微调阶段更加友好,是更好的寻求。

  • 相应的,本文的工作是训练一批模型,实现了更好的效果,同时预测本钱低。获得这类效果的一大手段,就是让模型看到了更多的 token。训练得到的这些模型就是 LLama。

3.1.2 方案简述

LLama的思想比较简单,在动机里已大致包括。这项工作的其他特点可以简述为以下几点:

  • 提供了 7B~65B 的模型,13B 的模型效果可超 GPT⑶(175B),65B的模型效果直逼谷歌的 PaLM(540B);

  • 训练模型只用了开源数据集,trillions of token。

  • 多项任务上 SOTA,并且开源了所有模型权重。

3.1.3 一些细节

  • 训练数据集(主要是英文,因此中文和中文微调效果堪忧)

  • 模型容量概况

  • 模型结构:

和 GPT 一样,一样是 Transformer Decoder 架构,沿用了各种工作被验证有效的小优化(如:Pre-Normalization、SwiGLU 激活函数、Rotary Embedding、AdamW 优化器等)。同时也做了一些训练效力上的优化,包括模型实现上和模型并行上的优化。

  • 训练进程:7B 和 13B 的模型在 1T 的 token 上进行训练;33B 和 65B 的模型则在 1.4T 的 token 上进行了训练。

3.1.4 结论与讨论

  • LLama 对标 GPT,主要在 Zero-Shot 和 Few-Shot 任务上进行了验证;同时斟酌指令微调是现在的流行利用之一,因此也在指令微调任务做了验证。

    • Zero-Shot

    • Few-Shot

    • 指令微调(主要和谷歌的 Flan 系列做对照):

3.2 Alpaca

文章:

https://crfm.stanford.edu/2023/03/13/alpaca.html

代码:

https://github.com/tatsu-lab/stanford_alpaca

3.2.1 动机

前面可以看到,GPT⑶.5、ChatGPT、Claude 和 Bing Chat 等指令微调模型被验证效果拔群,但仍存在生存内容虚假、带偏见和歹意等问题。为了加快这些问题的解决,需要学术届(穷老师、学生、公司)的加入一起研究,但是 GPT⑶.5 这些模型大且闭源。

前阵子 LLama 发布,给了希望。所以基于 LLama 做指令微调得到了 Alpaca 模型,效果和 GPT⑶.5 差不多,而且简单、复现本钱低。

3.2.2 方案简述

  • 穷人弄指令微调,需要两个条件:1、参数量小且效果好的预训练语言模型;2、高质量的指令训练数据。

  • 这两个条件,现在看上去可以方便满足:1、LLama 模型 7B 模型,可以接受;2、通过现有的强语言模型可以自动生产训练数据(准备 prompt,调用 GPT⑶.5 系列的 OpenAI api)。

3.2.3 一些细节

  • 训练方式:使用指令微调的方式,在 LLama 7B 模型上训练;训练数据范围为 5.2 万,来源是对 OpenAI GPT⑶.5 API 的调用(花费 500 美元);微调进程在8张 80G A100s 显卡训练 3 小时(使用云计算服务,花费 100 美元)。训练进程如图。

3.2.4 结论和讨论

目前开放了:测试Demo、训练数据集、训练数据的生成进程、训练代码;预训练的权重未来开放(可能斟酌一些外因);

  • Demo: an interactive demo for everyone to try out Alpaca.

  • Data:52K demonstrationsused to fine-tune Alpaca.

  • Data generation process: the code forgenerating the data.

  • Training code: for fine-tuning the model using the Hugging Face API.

未来可能的方向(不包括优化推理能力,或许这些或者要留给有钱人):

  • 模型验证:更加系统严格的对模型进行评估,会从 HELM(Holistic Evaluation of Language Models)开始,检验模型的生成和指令对其能力;

  • 模型的安全性:更全面的评估模型的风险性;

  • 理解模型(可解释):研究模型学到的是甚么?基模型的选择有甚么学问?增加模型参数带来的是甚么?指令数据最关键的是甚么?有无其他的搜集数据的方法?

GLM与ChatGLM

LLama 虽好,但更多的是使用英文数据集,但在中文上表现不佳。一样指令微调后在中文场景下上限应当也比较低。因此在中文上,有必要有自己的一条研究方向,当前影响力比较高的开源版本属清华的 GLM 和 ChatGLM。

GLM 和 ChatGLM 相关的介绍比较多,下面摘抄部份内容对其进行简单了解。

4.1 GLM

论文题目:

GLM: General Language Model Pretraining with Autoregressive Blank Infilling

论文链接:

https://arxiv.org/pdf/2103.10360.pdf

论文题目:

GLM⑴30B: AN OPEN BILINGUAL PRE-TRAINED MODEL

论文链接:

https://arxiv.org/pdf/2210.02414.pdf

4.1.1 方案简述

GLM⑴30B 是在 GPT⑶ 以后,清华的大语言模型方向的尝试。区别于 BERT、GPT⑶ 和 T5 的架构,GLM⑴30B 是一个包括多目标函数的自回归预训练模型。

4.1.2 一些细节

GLM⑴30B 在 2022 年 8 月开放,有一些独特的优势:

  • 双语:同时支持中文和英文。

  • 高精度(英文):在公然的英文自然语言榜单 LAMBADA、MMLU 和 Big-bench-lite 上优于 GPT⑶ 175B(API: davinci,基座模型)、OPT⑴75B 和 BLOOM⑴76B。

  • 高精度(中文):在 7 个零样本 CLUE 数据集和5个零样本 FewCLUE 数据集上明显优于 ERNIE TITAN 3.0 260B 和 YUAN 1.0⑵45B。

  • 快速推理:首个实现 INT4 量化的千亿模型,支持用一台 4 卡 3090 或 8 卡 2080Ti 服务器进行快速且基本无损推理。

  • 可复现性:所有结果(超过 30 个任务)都可通过我们的开源代码和模型参数复现。

  • 跨平台:支持在国产的海光 DCU、华为昇腾 910 和申威处理器及美国的英伟达芯片上进行训练与推理。

4.2 ChatGLM

文章:

https://chatglm.cn/blog

代码:

https://github.com/THUDM/ChatGLM⑹B

4.2.1 方案简介

ChatGLM 参考 ChatGPT 的设计思路,在千亿基座模型 GLM⑴30B 中注入了代码预训练,通过有监督微调(Supervised Fine-Tuning)等技术实现人类意图对齐。

为与社区一起更好地推动大模型技术的发展,清华同时开源 ChatGLM⑹B 模型。ChatGLM⑹B 是一个具有 62 亿参数的中英双语语言模型。通过使用与 ChatGLM(http://chatglm.cn)相同的技术,ChatGLM⑹B 初具中文问答和对话功能,并支持在单张 2080Ti 上进行推理使用。

4.2.2 一些细节

ChatGLM⑹B 有以下特点:

  • 充分的中英双语预训练:ChatGLM⑹B 在 1:1 比例的中英语料上训练了 1T 的 token 量,兼具双语能力。

  • 优化的模型架构和大小:吸取 GLM⑴30B 训练经验,修正了二维 RoPE 位置编码实现,使用传统 FFN 结构。6B(62亿)的参数大小,也使得研究者和个人开发者自己微调和部署 ChatGLM⑹B 成为可能。

  • 较低的部署门坎:FP16 半精度下,ChatGLM⑹B 需要最少 13GB 的显存进行推理,结合模型量化技术,这一需求可以进一步下降到 10GB(INT8)和 6GB(INT4),使得 ChatGLM⑹B 可以部署在消费级显卡上。

  • 更长的序列长度:相比 GLM⑴0B(序列长度1024),ChatGLM⑹B 序列长度达 2048,支持更长对话和利用。

  • 人类意图对齐训练:使用了监督微调(Supervised Fine-Tuning)、反馈自助(Feedback Bootstrap)、人类反馈强化学习(Reinforcement Learning from Human Feedback) 等方式,使模型初具理解人类指令意图的能力。输出格式为 markdown,方便展现。

因此,ChatGLM⑹B 具有了一定条件下较好的对话与问答能力。ChatGLM⑹B 也有相当多已知的局限和不足:

  • 模型容量较小:6B 的小容量,决定了其相对较弱的模型记忆和语言能力。在面对许多事实性知识任务时,ChatGLM⑹B 可能会生成不正确的信息;她也不善于逻辑类问题(如数学、编程)的解答。

  • 可能会产生有害说明或有偏见的内容:ChatGLM⑹B 只是一个初步与人类意图对齐的语言模型,可能会生成有害、有偏见的内容。

  • 较弱的多轮对话能力:ChatGLM⑹B 的上下文理解能力还不够充分,在面对长答案生成,和多轮对话的场景时,可能会出现上下文丢失和理解毛病的情况。

  • 英文能力不足:训练时使用的唆使大部份都是中文的,只有一小部份唆使是英文的。因此在使用英文唆使时,回复的质量可能不如中文唆使的回复,乃至与中文唆使下的回复矛盾。

  • 易被误导:ChatGLM⑹B 的“自我认知”可能存在问题,很容易被误导并产生毛病的言论。例如当前版本模型在被误导的情况下,会在自我认知上产生偏差。即便该模型经过了 1 万亿标识符(token)左右的双语预训练,并且进行了指令微调和人类反馈强化学习(RLHF),但是由于模型容量较小,所以在某些唆使下可能会产生有误导性的内容。

小结

到这里或者低估了工作量,写吐了,谷歌系列的几个工作,或者得单唯一篇才能完结。与 OpenAI 的工作类似,谷歌一样产出了对标 GPT⑶ 和 InstructGPT 之类的模型,也包括了 T5 系列的 Encoder-Decoder 结构的大语言模型,而且其实不是简单的 Follow。

另外一方面 3、4 月份,广大的开源工作者们也是百花齐放,在类 ChatGPT 的利用方向做出了很多探索工作,包括训练数据、模型、和训练方法的探索与开源。在训练效力方向上,也出现了 ChatGLM+Lora、LLama+Lora 等进一步下降训练本钱的工作。

这部份的内容也将在后面进行总结式的介绍和更新,也期待在这段时间里有更多优秀的工作诞生。对文章中内容中的不正的地方,也欢迎指正交换~。

参考文献

文章参考了诸多论文、博客和“跟李沐学AI”关于一些相关论文的介绍,部份内容和插图参考链接以下。

1. https://crfm.stanford.edu/2023/03/13/alpaca.html

2. https://chatglm.cn/blog

3. https://crfm.stanford.edu/2023/03/13/alpaca.html

4. https://space.bilibili.com/1567748478/channel/collectiondetail?sid=32744

5. A Survey of Large Language Models:https://arxiv.org/pdf/2303.18223.pdf


技术交换群约请函

△长按添加小助手

扫描二维码添加小助手微信

请备注:姓名-学校/公司-研究方向
(如:小张-哈工大-对话系统)
便可申请加入自然语言处理/Pytorch等技术交换群

关于我们

MLNLP 社区是由国内外机器学习与自然语言处理学者联合构建的民间学术社区,目前已发展为国内外知名的机器学习与自然语言处理社区,旨在增进机器学习,自然语言处理学术界、产业界和广大爱好者之间的进步。
社区可以为相关从业者的进修、就业及研究等方面提供开放交换平台。欢迎大家关注和加入我们。

ChatGPT相关资讯

ChatGPT热门资讯

X

截屏,微信识别二维码

微信号:muhuanidc

(点击微信号复制,添加好友)

打开微信

微信号已复制,请打开微信添加咨询详情!