社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  chatgpt

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

PaperWeekly • 2 年前 • 266 次点击  

©作者 | Ostrich

单位 | 阿里巴巴

研究方向 | 自然语言处理/搜索算法


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


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


言归正传,本系列打算跟风讨论一下关于 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-3、继而也需要了解 GPT-2 和 GPT-1。(GPT-4 暂时简单地看作是 Plus 版本的 GPT-3.5,而且增加了多模态数据的处理能力,等更多的细节公开后再作讨论)。


1.1 GPT-1


论文题目:

Improving Language Understanding by Generative Pre-Training

论文链接:

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



1.1.1 动机


任务目标和 BERT 一致(但在 BERT 之前),希望通过大规模无标注数据进行预训练,下游任务微调的方式解决经典 NLP 任务,缓解有监督任务数据收集成本高的问题。GPT-1 虽然不是第一个使用预训练-微调架构的工作,但也是使用 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-1 的主要数据有两个:

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

      • 1B Word Benchmark(可选)。

  • 微调:

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

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

1.1.4 结果与讨论


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


1.2 GPT-2


论文标题:
Language Models are Unsupervised Multitask Learners

论文链接:

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


1.2.1 动机


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


1.2.2 方案概述


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


对于统一大模型的选择,网络结构与 GPT-1 相同,使用方式也很自然: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-1),345M 对应和 Bert-large 参数量,最大的模型 1542M(15 亿参数)。

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

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

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

    • Children’s Book Test 任务:

    • Winograd Schema Challenge 任务:

    • 其他 Zero-Shot 任务

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


1.3 GPT-3


论文题目:
Language Models are Few-Shot Learners

论文链接:

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


1.3.1 动机


BERT 出来之后,虽然预训练+微调架构取得了惊人的效果(GPT 系列短期比不了了),但这种微调有很多限制


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

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

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


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


1.3.2 方案简述


主要与 GPT-2 相比:


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

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

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

1.3.3 一些细节


  • 模型训练方式:前面提到了,相对 GPT-2 没有创新,就是更大模型、更多更丰富的数据、更长的训练时间,不止于 Zero-Shot,还做 One-Shot 和 Few-Shot 任务(这里的 x-Shot 是不微调模型的,也就是所谓的 In-Context learning,而在预训练阶段没有特殊操作),如图。
  • 模型:沿用了 GPT-2 的结构,在模型初始化、归一化、Tokenization 做了一些优化,另外也“抄”了一些类似 Sparse Transformer 的优点(总之是加了一些同期一些被验证有效的操作,或自己验证有效的小操作)。为了验证模型容量带来的效果,文章训练了多种大小的模型,最大的 175B 的叫 GPT-3。为了训练大模型,还做了一些模型并行和提效的工作(其实这部分也比较重要,但是没有展开说)。模型大小参数,以及同期一些工作的训练资源开销对比如图:

  • 训练数据准备:

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

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

  • 模型训练过程:

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

1.3.4 结论与讨论


  • 主要结论: 整体效果不错,在各种数据集上做了对比,NLU 相关任务,GPT-3 表现不错(个别数据集还超过了有监督微调的方式);在 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-3 论文里提到,GPT 可以微调但放在未来搞,Codex 就是微调工作之一。任务是 GPT 模型在代码生成方向做微调的探索,算是一个应用方向的论文。


1.4.2 方案简述


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


最终 Codex 可以取得 28% 的测试通过率(GPT-3 只能解决 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-3 差不多;基于代码数据特点,做了特别的 tokenizer,最终少了 30% 的 token;sample 数据时使用特别的停止符('\nclass'、'\ndef' 等),保证 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-3 生成模型,这里叫做 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,标 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-3 模型作为 Baseline;

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

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

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

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

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

1.5.4 结论与讨论


  • 主要结论:

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

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

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

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

    • InstructGPT 模型生成的内容比 GPT-3 事实性更强(出现事实性错误比较少);

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

    • 在 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-3 了),得到一个 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-3 系列模型就很大了,训练和 inference 模型都需要大量的显卡;其次,GPT-3 所用的数据也未公开,有算力复现也稍困难,需要自己去盘数据;在 GPT-3 之后的 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-3(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-3.5、ChatGPT、Claude 以及 Bing Chat 等指令微调模型被验证效果拔群,但仍存在生存内容虚假、带偏见和恶意等问题。为了加快这些问题的解决,需要学术届(穷老师、学生、公司)的加入一起研究,但是 GPT-3.5 这些模型大且闭源。


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


    3.2.2 方案简述


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

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

    3.2.3 一些细节


    • 训练方式:使用指令微调的方式,在 LLama 7B 模型上训练;训练数据规模为 5.2 万,来源是对 OpenAI GPT-3.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-130B: AN OPEN BILINGUAL PRE-TRAINED MODEL

    论文链接:

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


    4.1.1 方案简述


    GLM-130B 是在 GPT-3 之后,清华的大语言模型方向的尝试。不同于 BERT、GPT-3 以及 T5 的架构,GLM-130B 是一个包含多目标函数的自回归预训练模型。


    4.1.2 一些细节


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


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

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

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

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

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

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


    4.2 ChatGLM


    文章:
    https://chatglm.cn/blog

    代码:

    https://github.com/THUDM/ChatGLM-6B

    4.2.1 方案简介


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


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


    4.2.2 一些细节


    ChatGLM-6B 有如下特点:


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

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

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

    • 更长的序列长度:相比 GLM-10B(序列长度1024),ChatGLM-6B 序列长度达 2048,支持更长对话和应用。

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


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


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

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

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

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

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




    小结


    到这里还是低估了工作量,写吐了,谷歌系列的几个工作,还是得单独一篇才能完结。与 OpenAI 的工作类似,谷歌同样产出了对标 GPT-3 和 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



    更多阅读



    #投 稿 通 道#

     让你的文字被更多人看到 



    如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。


    总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 


    PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。


    📝 稿件基本要求:

    • 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

    • 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

    • PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算


    📬 投稿通道:

    • 投稿邮箱:hr@paperweekly.site 

    • 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

    • 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿


    △长按添加PaperWeekly小编



    🔍


    现在,在「知乎」也能找到我们了

    进入知乎首页搜索「PaperWeekly」

    点击「关注」订阅我们的专栏吧


    ·
    ·

    Python社区是高质量的Python/Django开发社区
    本文地址:http://www.python88.com/topic/154977
     
    266 次点击