AI大模型开发架构设计(15)——从原理到实现教你做出一个ChatGPT

1 GPT 技术演进剖析

GPT(Generative Pre-Trained Transformer) 模型是什么?
  • GPT 模型是一种 NLP 模型,通过在大型语料库上学习到的语言模式来生成自然语言文本

image.png

  • GPT 语言模型:给定一些字或者词(也被称 token),预测下一个字或者词的模型

image.png

GPT-1 模型

image.png

GPT-2 模型
  • GPT-1 需要对特定任务再进行精调(依赖有标签数据进行监督学习),而 GPT-2 则是考虑在预训练时考虑各种不同的任务,就会更加通用化

image.png

GPT-3 模型
  • GPT-3 可以理解为 GPT-2 的升级版,使用了 45TB 的训练数据,拥有 175B 的参数量,真正诠释了什么叫暴力出奇迹
  • in-context learning:对模型引导,教会它应当输出什么内容,比如,翻译任务可以采用输入:请把以下英文翻译为中文:Today is a good day。这样模型就能够基于这一场景做出回答。
  • Zero-shot, one-shot and few-shot:GPT-3 的口号就是“告别微调的 GPT-3”,它通过不使用一条样例的 Zero-shot、仅使用一条样例的 One-shot 和使用少量样例的 Few-shot 来完成推理任务。

image.png

ChatGPT 模型
  • ChatGPT 的核心思想是 Learning from Human Feedback

image.png

  • 第一阶段:传统的有监督训练
  • 第二阶段:奖励模型
  • 第三阶段:运用奖励模型,一问一回答一打分,不断进行反馈迭代强化学习
GPT-1/2/3/ChatGPT 模型对比
  • GPT-1/2/3 预训练

image.png

  • ChatGPT 预训练

image.png

2 如何训练一个 ChatGPT

训练一个代码补全 GPT
  • 比如:给模型一个提示词 “build a BERT classifier”

image.png

  • 模型就能够输出:

image.png

  • 模型成功定义了一个基于 Bert 的分类器。

准备训练数据:常见代码补全数据 codeparrot 样本示例

image.png

数据 Embedding 向量化

  • 创建一个分词器:tokenizer = AutoTokenizer.from_pretrained(“./code-search-net-tokenizer”)
  • 对前面的示例代码样本进行分词转化,得到如下一串 id

image.png

  • 把分词函数定义好(会涉及 截断、最大长度等细节配置),然后直接对整个数据集进行map,就可以对整个数据集进行分词

image.png

定义模型

  • 基于 transformers 库,通过配置的方式快速定义一个模型

image.png

  • 这是一个 124.2M 模型参数 GPT-2,(详细代码实现阅读 transformers 库的源码),主要前面有个 Embedding 层,中间 12 个 transformer block,最后有个线性层

image.png

GPT-1 VS GPT-2

  • 在 GPT-2 中的一个 Transformer Block 层中
    • 第一个Layer Normalization 模块被移到了 Msaked-Multi-Self-Attention 模块之前;
    • 第二个 Layer Normalization 模块也被移到了 Feed-Forward 模块之前;
    • Residual-connection 的位置也调整到了 Msaked-Multi-Self-Attention 模块与 Feed-Forward 模块之后

image.png

选择训练流程或者框架

  • 数据和模型结构都确定下来后,接下来需要一个训练的流程或框架,最简便的直接调用transformers 提供的训练器,给定一些配置、模型、分词器、数据集

image.png

  • 一键训练:trainer.train()
  • 自由度高一点的训练方式自行组装,依次拿到每个 batch 数据、送入模型、计算 loss、反向传播;对大模型,常用 accelerate 库来加速,比如:混合精度、梯度累积等操作。

模型推理

image.png

  • ChatGPT 人工写答案 VS 小语料

image.png

如何训练一个奖励模型
  • 奖励模型的学习本质一个句子分类或者回归的任务

image.png

举个🌰:IMDB影评数据集,常用于情感分析,也就是给文本的情感打分

  • 输入就是影评,输出就是得分(积极或消极对应 1 或 0),就能训练一个奖励模型(比如用来指导GPT生成得分越高,也就是更加积极的文本)

image.png

  • 同样对其进行分词,转为一串 id,定义分词器,并构造数据集

image.png

  • 定义一个用于预测得分的模型以及优化器

image.png

  • 接下来就开始模型训练

image.png

  • 训练完模型后,就可以对任意文本进行情感打分

image.png

  • 我们已经能够训练一个能够生成文本的 GPT,一个能够对文本打分的奖励模型,接下来就需要考虑用奖励模型来教会 GPT 生成高分文本了。
利用奖励模型强化 GPT
  • 定义两个GPT模型,一个用于强化,一个用于参考

image.png

  • 通过强化 GPT 再用于生成的效果

image.png

3 ChatGPT 在线工程架构设计与实现

计算机新范式
  • 四层架构、端到端优化、大幅提升效率

image.png

在线工程架构设计
  • 通过强化 GPT 再用于生成的效果
    • 微服务
    • 云原生
    • Serverless

image.png

在线工程架构剖析

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

讲文明的喜羊羊拒绝pua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值