ChatGPT 背后核心技术的白话版
本文是关于ChatGPT 背后核心技术实现的一个通俗白话版,不涉及到的AI具体实现的技术细节哦。
在编排上增加了一些分割,内容具体如下:
LLMs(大型语言模型)
如果将ChatGPT比作是动物,它就像一只饥饿的毛毛虫一样,毛毛虫喜欢啃食树叶,并不断的长大。
LLMs(大型语言模型)也喜欢吞噬大量的文本数据,并利用这些数据来学习,然后变得更加的聪明,更加的强大。LLMs消耗的文本数据越多,它们对语言和词语之间的关系的理解就越深。
就如同自然界内,毛毛虫要变成美丽的蝴蝶一样,LLMs也会进化为强大的语言模型,它也可以理解并生成类似人类的反应。
语言模型被训练来预测一个序列中的下一个词,有两种常见的方法:下一个标记预测(next-token-prediction)和掩码语言建模(masked-language modeling)。
Next-token-prediction模型的样本,比如:
"The cat sat on the...."
Next-token-prediction模型将被训练来预测 “The cat sat on the....”之后的下一个单词。给定输入“The cat sat on the....”,模型可以预测“mat”、“couch”或“chair”。
Masked-language-modeling模型的样本为:
The quick brown [MASK] jumps over the lazy dog.
在这种情况下,模型将尝试预测缺失的单词“cat”。它通过使用周围单词的上下文来做到这一点,比如“quick”和“brown”,来理解它们之间的关系,并做出预测。Masked-language-modeling模型的目标是,训练模型以一种有意义,且语法正确的方式来填充句子中缺失的单词。
使用Long-Short-Term-Memory(LSTM)模型进行序列建模,只是预测序列中单词的一种方法,但它也有其局限性。
例如,模型不能给上下文中不同的单词赋予不同的权重,即使有时,就像在我们可爱的猫咪的例子中,一个单词可能比另一个单词更重要。而且输入数据是一步一步处理的,这意味着单词之间的关系可能是有限的。
Transformers
这就是为什么在2017年,Google Brain的一些聪明人想出了transformers。 Transformers与LSTM不同,因为它们可以一次处理所有的输入数据。他们使用了一种很酷的方法,称为 Self-attention,这意味着模型可以给输入数据的不同部分,赋予不同的权重。这使得单词之间的关系更加复杂,含义也更加的丰富。
GPT和Self-Attention GPT-1是openAI在2018年制作的第一个生成式预训练变压器模型。它在接下来的几年里不断发展,变成了GPT-2, GPT-3, InstructGPT,最后是ChatGPT。
在人类开始向ChatGPT提供反馈之前,GPT模型最大的变化是它们变得越来越快,这使得它们可以接受越来越多的数据训练。这让他们更有知识,能够做更广泛的任务。
像ChatGPT这样的GPT模型使用Transformer, Transformer有一个“编码器(encoder)”来处理输入,一个“解码器(decoder)” 来生成输出。编码器和解码器都使用 multi-head self-attention 理解单词和产生更准确的反应之间的关系。
Multi-head self-attention 就像给了机器人一种超能力,可以同时关注多个事情。
Self-attention 通过为每个令牌创建查询、键和值向量,然后使用softmax函数生成规范化权重,将令牌转换为表示其在输入序列中的重要性的向量。multi-head 机制来执行多次self-attention,使模型能够掌握输入数据中的复杂关系。
尽管GPT-3在自然语言处理方面带来了如此惊人的进步,但它在与用户意图一致方面仍有局限性。它可能会产生缺乏帮助的输出,对不存在或不正确的事实产生幻觉,缺乏可解释性,甚至有有毒或有偏见的内容,就像一个喝醉了的小机器人。
ChatGPT
ChatGPT是InstructGPT的衍生产品,它引入了一种将人类反馈纳入训练的新方法,以更好地使模型的输出与用户的意图保持一致。
OpenAI在2022年的论文中详细介绍了从人类反馈中强化学习(RLHF),并在这里进行了简化:
第1步:监督下的微调(SFT)模型
第1步是对GPT-3模型进行微调,雇用40个承包商来创建一个有监督的训练数据集,其中的输入有一个已知的输出,供模型学习。 从用户进入开放API的条目中收集提示信息,标注员写出适当的回应,以创建一个已知的输出。 然后用这个新的数据集对GPT-3模型进行微调,成为GPT-3.5,也被称为SFT模型。
为了最大限度地提高提示数据集的多样性,每个用户ID只允许有200个提示,任何带有长的普通前缀的提示都被删除。 此外,出于隐私安全的考虑,所有带有个人身份信息的提示都被删除。
标注员还被要求用最少的实际样本数据为类别创建示例提示,包括:
- 简单的提示:任何随机的问题。
- 少样本提示:具有多个查询/响应对的指令。
- 基于用户的提示:对应于OpenAI API所请求的特定用例。
在生成响应时,标注员尽力推断用户的指令。论文称,提示请求信息主要有三种方式:
- 直接:“跟我说说……”
- 写一篇相同主题的文章,并举例说明。
- 延续:完成一个故事的开头。
通过OpenAI API的提示和标签师的手写,监督模型有13000个输入/输出样本可以使用!
第2步:奖励模型
在这个过程的第2步中,模型被赋予了一种待遇。 训练一个奖励模型,以便它能学会如何对用户的提示做出最好的反应。 这个奖励模型将提示和响应作为输入,并给我们一个称为奖励的可爱的小缩放器值,作为输出。 有了这个奖励模型,我们就可以进行强化学习,让模型变得更棒,这就是强化学习。
为了训练奖励模型,我们请一些可爱的标注员们,将SFT模型的输出从最好到最差进行排序。我们把所有这些排名放在一起来训练模型,这样它就不会被所有的信息弄糊涂了。
我们曾经把每个组合作为一个单独的数据点,但这导致了过度拟合。 过度拟合就像一个只想玩自己的玩具的孩子,而不会注意其他东西。 为了防止过度拟合,我们给模型一个奖励,把数据点归为一个批次的数据点,这样它就能学会更灵活地适应新的情况啦。
第3步:强化学习模型
在第三步,是时候让强化学习模型大放异彩了。给模型一个提示,它就会摇尾巴来产生响应。响应是在模型在第2步中学习到的“策略”的帮助下做出的。这个策略就像一个秘密策略,模型想出了得到更多的奖励(又名最大化奖励)。然后根据步骤2中建立的奖励模型对模型进行奖励。这种奖励有助于模型的成长和进化,就像奖励让狗狗开心一样。
2017年,一些名叫Schulman等人的聪明人引入了一种有趣的方法来更新模型的策略,称为近端策略优化(PPO)。它使用SFT模型中称为每个令牌的Kullback-Leibler (KL)惩罚。KL发散就像比较两种不同的食物,它有助于确保响应与人类意图数据集没有太大差异,这样模型就不会因为追逐自己的尾巴而分心。
该模型在训练过程中通过将一些从未见过的数据放在一边进行评估。测试数据被用来检验该模型是否比旧的GPT-3模型更好。他们检查了它有多大帮助,有多真实,以及在多大程度上避免了刻薄。他们发现人们在85%的情况下更喜欢它,当被告知要友善时,它更真实,而不是刻薄。但当它被告知要刻薄时,它比GPT-3更刻薄。
写在最后
这就是你可爱的小朋友ChatGPT,产生的全部过程啦。
备注:本文翻译之外网,具体地址如下。
ChatGPT 背后核心技术的白话版的更多相关文章
- java核心技术(第十版卷一)笔记(纯干货!)
这是我读过的第三本关于java基础的书.第一本<<java从入门到精通>>这本书让我灵识初开.第二本<<java敏捷开发>>这本书则是有一次被一位师傅批 ...
- 图形学:图像围绕着某个点P(a,b)旋转------白话版
前提:在研究图形时候,我们并没有规定图形的大小,所以任意图形多是支持的,这也另外说明了一点,图形转换和图形的大小没有关系. 如果图像围绕着某个点P(a,b)旋转,则先要将坐标系平移到该点,再进行旋转, ...
- java核心技术第十版 笔记
1.java区分大小写 2.类名是以大写字母开头 (驼峰) 3.http://docs.oracle.com/javase/specs java语言规范 4. /* */ 注释不能嵌套 5. Jav ...
- 《程序员的思维修炼:开发认知潜能的九堂课》【PDF】下载
<程序员的思维修炼:开发认知潜能的九堂课>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196325 内容简介 运用一门程序设计语言 ...
- 【资源共享】eBook分享大集合
传送门:[GitHub] 欢迎各位指点,要是能补充更是感激不尽. 主要以IT领域经典书籍收藏,以备不时之需,不一定都能看完,权且当做收藏好玩. [x] 表示文件大小超过100M(LFS). 服务器系统 ...
- PHPer书单
想提升自己,还得多看书!多看书!多看书! 下面是我收集到的一些PHP程序员应该看得书单及在线教程,自己也没有全部看完.共勉吧! Github地址:https://github.com/52fhy/ph ...
- IO/NIO
1.转换流,Buffered BufferedWriter out=new BufferedWriter(new OutputStreamWriter(System.out)); BufferedRe ...
- Java 知识点:序列化
首先明确一点:默认的序列化方法速度很慢,因为需要对整个对象和他的类都进行保存,因此我们建议自定义序列化格式. ObjectInputStream和ObjectOutputStream 用途 Objec ...
- Apache与Tomcat区别联系
监控服务(师傅让我监控Tomcat,我知道Apache,所以以为他两是一个东东.结果半天就没有找到Tomcat的服务进程,还理直气壮的说:找不到Apache......希望这篇简单的,白话分析,能让还 ...
- 高度关注!国务院对A股发出强烈信号↓
高度关注!国务院对A股发出强烈信号↓http://dwz.cn/2qHBd1郎咸平:中国股市存在一大隐疾 使其成为全球市场的一个另类!http://dwz.cn/2qHBVy一不小心,马云又完成了四场 ...
随机推荐
- Oracle pfile与spfile文件参数(转载)
一.pfile与spfile Oracle中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件.它们是在数据库实例启动时候加载的,决定了数据库的物理 结构.内存.数据库的限制及系统大量的默认值 ...
- spring源码解析(二) 结合源码聊聊FactoryBean
一.什么是FactoryBean FactoryBean是由spring提供的用来让用户可以自定bean创建的接口:实现该接口可以让你的bean不用经过spring复杂的bean创建过程,但同时也能做 ...
- iview table json数据里的num排序问题
title: 'Num', key: 'num', sortable: true, sortMethod:function(a,b,type){ //可以用Number()或者parseInt(a)转 ...
- MySQL该使用哪种CPU架构服务器?
1. 摘要 近期,阿里云推出基于 ARM 架构的 RDS MySQL 和 RDS PostgreSQL 实例,现处于邀测阶段,阿里云宣传 ARM 架构的亮点是:在价格下降13%的基础上,平均性能 AR ...
- C#使用MathNet库来对进行曲线拟合
下面是用来求取一条直线和一条拟合曲线交点的代码 /// <summary> /// 拟合曲线所筛选的点的个数 /// </summary> const int CurveNum ...
- 【Docker】容器使用规范--安全挂载建议
容器挂载过程和安全挂载建议 绑定挂载 本文所提到的挂载主要指绑定挂载(bind mount),即通过-v /xx/xx:/xx/xx 和 --mount type=bind,xxx,xxx两种方式设置 ...
- 【RPC和Protobuf】之Protobuf环境配置及组合工作
Protobuf定义:是一种数据描述语言,作为接口规范的描述语言,可作为设计安全的跨语言RPC接口的基础工具 一.Protobuf入门 作用:最终保证RPC接口规范和安全 最基本的数据单元:messa ...
- npm安装hexo报错
报错提示 npm WARN saveError ENOENT: no such file or directory, open '/home/linux1/package.json' npm noti ...
- pyinstaller 打包多个资源文件到一个可执行文件
前言 pyinstaller -w: 无终端状态 -F: 打包成一个可执行文件 开始 假设 main.py 脚本调用 test.mp4视频文件(main.py和test.mp4在同一级目录),那么将在 ...
- APACHE快速安装流程梳理
操作参考教程:https://www.cnblogs.com/haw2106/p/9839655.html 快速安装开始: [环境配置1] yum -y install gcc gcc-c++ wge ...