ChatGPT原理详解+实操

news2024/11/16 7:23:32

ChatGPT已近火了快大半年了,从去年刚出来的时候小编就关注了一下,也具体的使用过,然后就惊为天人,再然后就没有然后了,因为小编那段时间沉迷于AIGC了。ChatGPT今年开年后更是火的一塌糊涂,无论是行业内还是行业外的人,都在对这个东西进行炒作。那么,玩也玩过了,是不是可以了解一下其内部原理呢?小编就在这班门弄斧试着用通俗的话术来解释一下ChatGPT背后的原理,虽然小编不做生成任务,但也试着了解了一下,望各位大佬勿喷!!!

InstructGPT模型结构

谈到ChatGPT肯定是绕不开instructGPT的,或者说ChatGPT的内核就是instructGPT。那么,想要了解ChatGPT,就是直接了解instructGPT,instructGPT分为如下三大步:

  • SFT:生成模型GPT的有监督精调 (supervised fine-tuning)
  • RM:奖励模型的训练(reward model training)
  • PPO:近端策略优化模型( reinforcement learning via proximal policy optimization)

下面根据这三大步分为三个Step进行讲解以及实操。

SFT(supervised fine-tuning)原理

其实这一步没啥好说的,主要的东西还是大量的Prompt数据,GPT模型通过有监督的Prompt数据进行精调,其实就是做next token prediction任务。然后用精调后的模型对每个输入的[文本+prompt]进行generate,生成4~9个输出,并且进行解码
操作。具体的模型流程如下图所示:



SFT流程图
 

这一步的原理比较简单,难的是数据问题,需要大量的有监督Prompt文本,这里使用一个文本进行展示。

SFT代码实操

  • 数据准备

这里以一条数据为例,数据如下所示:

Raw DataPromptLabel
我们去成都旅游,必须要去的地方是大熊猫繁殖基地。大熊猫是一种有黑白斑纹的动物。
我们去成都旅游,必须要去的地方是大熊猫繁殖基地。大熊猫是中国特有种,主要栖息地是中国四川、陕西和甘肃的山区。
我们去成都旅游,必须要去的地方是大熊猫繁殖基地。大熊猫是已在地球上生存了至少800万年,被誉为“活化石”和“中国国宝”即国兽,世界自然基金会的形象大使,是世界生物多样性保护的旗舰物种。
我们去成都旅游,必须要去的地方是大熊猫繁殖基地。大熊猫是属于熊科、大熊猫属的哺乳动物。仅有二个亚种。雄性个体稍大于雌性。体型肥硕似熊、丰腴富态,头圆尾短,头躯长1.2-1.8米,尾长10-12厘米。

首先将以上数据形成一个输入列表,如下所示:

raw_data = "我们去成都旅游,必须要去的地方是大熊猫繁殖基地。"
prompt = "大熊猫是"
labels = ["一种有黑白斑纹的动物。","中国特有种,主要栖息地是中国四川、陕西和甘肃的山区。",
"已在地球上生存了至少800万年,被誉为“活化石”和“中国国宝”即国兽,世界自然基金会的形象大使,是世界生物多样性保护的旗舰物种。",
"属于熊科、大熊猫属的哺乳动物。仅有二个亚种。雄性个体稍大于雌性。体型肥硕似熊、丰腴富态,头圆尾短,头躯长1.2-1.8米,尾长10-12厘米。"]
combine_data = [raw_data+prompt+label for label in labels]2.

  • 初始化模型,对输入数据进行编码,这里采用的是GPT2模型,如下所示:

from torch.utils.data import Dataset
from transformers import Trainer, TrainingArguments
from transformers import AutoTokenizer, AutoModelForCausalLM
# 模型加载
tokenizer = BloomTokenizerFast.from_pretrained('pre_train_model/gpt2')
model = BloomForCausalLM.from_pretrained('pre_train_model/gpt2')
# 自定义DataSet类
class Datasets(Dataset):
def __init__(self, sample):
super(Datasets, self).__init__()
self.sample = sample

def __getitem__(self, item):
res = {k: v[item] for k, v in self.sample.items()}
return res

def __len__(self):
return len(self.sample['labels'])
# 数据转换
combine_data_token = tokenizer.batch_encode_plus(
initial_data_,
max_length=256,
padding='max_length',
truncation=True,
return_tensors='pt'
)
# 将标签标签加入
combine_data_token['labels'] = combine_data_token['input_ids']
combine_data_token['labels'] = torch.where(
combine_data_token['labels']==0,
-100,
combine_data_token['labels']
)
# 模型训练保存
trainer_args = TrainingArguments("./model/", learning_rate=2e-5, weight_decay=0.01, num_train_epochs=10, auto_find_batch_size=True)
trainer = Trainer(model=initial_model, args=trainer_args, train_dataset=Datasets(initial_token_info))
trainer.train()
trainer.save_model()

  • 模型加载/生成

# 加载模型
model = AutoModelForCausalLM.from_pretrained('./model')
# 处理输入数据
input_data = raw_input + prompt
input_datas = tokenizer.encode_plus(
input_data,
return_tensors='pt'
)
input_ids = input_datas['input_ids']
# 模型生成
result = model.generate(
input_ids=input_ids,
max_length=256,
do_sample=True, # 增加随机性
num_beams=5,
num_return_sequences=5, # 每个样本生成5个结果
no_repeat_ngram_size=3, # 防止重复的token
early_stopping=True # 提前停止
)

decode_tokens = tokenizer.batch_decode(
result,
skip_special_tokens=True
)

results = [i.replace(' ', '') for i in decode_tokens]

print("results",results)

结果如下所示:

我们去成都旅游,必须要去的地方是大熊猫繁殖基地。大熊猫是今世界上保存最完好的哺乳动物之一,也是世界自然保护联盟濒危物种红色名录的保护对象之一。在这里,你可以看到全世界最大的熊猫栖息地成都。成都是中国国家林业局直属的国家重点风景名胜区,是国家森林公园、国家湿地公园和国家地质公园的重要组成部分,是全国重点文物保护单位、全国生态文明建设示范区、中国红色旅游名城、国际生态旅游目的地和国际旅游岛建设先进区。地址:四川省成都市绵阳市成华区成都高新技术产业开发区成华大道1号乘车路线:成都绵阳都江堰雅
我们去成都旅游,必须要去的地方是大熊猫繁殖基地。大熊猫是我国唯一的国家二级保护动物,是世界上保存最完整的动物种群之一,也是我国第一个国家级自然保护区。我们是四川省的首批国家重点保护野生动物和珍稀动物基金会的成员,被誉为中国动物保护的摇篮和世界生物多样性保护基地,被中国科学院、中华人民共和国国家林业局授予全国生态文明建设示范区称号,被国务院批准为国家森林城市、国际生态旅游目的地。熊猫基地位于成都市双流区东南部,是国家aaaa级旅游景区,国家地理标志保护单位。熊猫栖息地为亚热带或热带的高山
我们去成都旅游,必须要去的地方是大熊猫繁殖基地。大熊猫是我国唯一的国家级自然保护区,也是世界上保存最完好的熊猫种群之一。它们栖息在亚热带或热带的高海拔草原上,生活
环境十分优越,是中国四大自然奇观之一,被誉为世界自然遗产和中国国家森林公园。熊猫栖息地主要分布在中国大陆的西藏、青海、甘肃、宁夏、新疆、内蒙古、山西、辽宁、吉林、黑龙江、江苏、河南、安徽、湖北、湖南、江西、广东、海南、四川、云南、贵州、陕西等地。中国熊猫研究中心主任、中国科学院院士、国家自然科学基金委员会委员、中华全国工商业联合会副主席
我们去成都旅游,必须要去的地方是大熊猫繁殖基地。大熊猫是我国唯一的国家级自然保护区,也是世界上保存最完整、规模最大的野生动物种类繁多的地区之一,是中国国家重点保护的珍稀濒危动物及其栖息地和世界自然遗产的重要组成部分,被誉为中国最美丽的城市和世界生物多样性保护基地,被国际旅游组织评为全球生态旅游目的地。成都熊猫国家公园位于四川省甘孜藏族自治州,是国家aaaa级旅游景区,被《世界遗产名录》列为全国重点文物保护单位。目前,我国已建成国家森林公园、国家湿地公园和国家地质公园,国家林业局、国务院扶贫
我们去成都旅游,必须要去的地方是大熊猫繁殖基地。大熊猫是现存最大、保存最完整的动物,属于国家二级保护动物。熊猫种类繁多,分布广泛,主要分布在四川、云南、陕西、甘肃、宁夏、内蒙古、新疆、青海、吉林、辽宁、黑龙江、山西、江苏、江西、河南、湖北、湖南、广东、广西、海南、重庆、贵州、西藏、四川等省区市。它们的栖息地主要为亚热带或热带的(低地)湿润低地林、亚高山草原、高山湖泊、高原湿润山区和高原沼泽地等,常栖息在高海拔地区。在中国大陆,熊猫分布于四川省甘孜藏族自治州和青海省西宁市等地。雄性熊猫体长约1.5米

总结

至此,就完成了GPT2模型的有监督精调训练。可能有的读者会说,你这和instructGPT的SFT过程不一样,是有点不一样,但思路原理是一样的,而且笔者自己没有好的硬件设备,只能在小模型上试试水,而且笔者也没有大规模的高质量有监督数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/448680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt智能提效职场办公-ppt怎么加音乐背景

作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 在 PowerPoint 中,您可以轻松地将音乐作为背景音乐添加到您的演示文稿中。下面是步骤: 打开您的 PowerPoint 演…

【大厂直通车】哔哩哔哩日常实习_测开面经

📑哈喽,大家好,我是小浪;本篇博客更新的是最新B站测开面经,本专栏非常适合目前准备找实习,或者准备冲秋招测试,测开方向的同学阅读订阅,持续更新各大厂真题面经,带你成为offer收割机!! 🧃对于订阅本专栏的同学们,博主在努力更新,只需要一杯奶茶钱,订阅本专栏,…

【命名空间】using namespace std是什么意思?

目录 一、前言二、命名空间2.1命名空间的定义2.2命名空间的成员调用2.2.1加命名空间名称及作用域限定符2.2.2使用using将命名空间中某个成员引入2.2.3使用using namespace 命名空间名称 引入 2.3命名空间的成员的优先级 三、using namespace std 一、前言 我们很多接触过C编程…

考了华为认证,如何找工作?能进哪些公司?有没有前景?

哪些人适合考华为?考了华为认证好不好找工作?这应该是困扰很多网工的问题。 俗话说,男怕入错行,女怕嫁错郎。如何选择一条适合自己的道路,提前做好职业规划,对个人职业发展至关重要。 下面就为大家整理了…

C#基础学习--预处理指令

目录 什么是预处理指令 基本规则 #define 和 #undef 指令 条件编译 条件编译结构 诊断指令 行号指令 ​编辑 区域指令 #pragam warning 指令 什么是预处理指令 源代码指定了程序的定义,预处理指令指示编译器如何处理源代码 基本规则 #define 和 #undef 指令…

基于uniapp+vue微信小程序的在职考研学习辅导系统

1系统具有良好的集成性,提供标准接口,以实现与其他相关系统的功能和数据集成。开放性好,便于系统的升级维护、以及与各种信息系统进行集成。功能定位充分考虑平台服务对象的需求。 一个微信小程序由.js、.json、.wxml、.wxss四种文件构成&…

CSS学习(4) - 链接,列表和表格

文章首发于我的个人博客:欢迎大佬们来逛逛 文章目录 CSS链接CSS列表CSS表格 CSS链接 链接样式,通过 color font-family background 等来设置: a{color: hotpink;font-size: 30px; }可以指定不同的链接时刻来指定不同的样式: l…

Python中随机梯度下降法

随机梯度下降法 批量梯度下降使用全部的训练样本来计算梯度,并更新模型参数,因此它的每一次迭代计算量较大,但对于凸优化问题,可以保证每次迭代都朝着全局最优解的方向前进,收敛速度较快,最终收敛到的结果…

synchronized原理:

vm中每个对象都会有一个监视器Monitor,监视器和对象一起创建、销毁。监视器相当于一个用来监视这些线程进入的特殊房间,其义务是保证(同一时间)只有一个线程可以访问被保护的临界区代码块。每一个锁都对应一个monitor对象&#xf…

如何训练自己的大型语言模型

如何使用 Databricks、Hugging Face 和 MosaicML 训练大型语言模型 (LLM) 介绍 大型语言模型,如 OpenAI 的 GPT-4 或谷歌的 PaLM,已经席卷了人工智能世界。然而,大多数公司目前没有能力训练这些模型,并且完全依赖少数大型科技公司…

LaoCat带你认识容器与镜像之Docker网络

近期比较忙,心思也比较乱,难得今天休息,闲来无事,借机更新一下系列 ~ 系列目录 LaoCat带你认识容器与镜像(一) LaoCat带你认识容器与镜像(二【一章】) LaoCat带你认识容器与镜像&…

软件安全性与隐私保护的最佳实践

在当今数字化时代,随着软件使用的普及和信息技术的发展,软件安全性和隐私保护越来越成为了IT领域关注的热点问题。在此,本文将探讨软件安全性和隐私保护的最佳实践,以帮助大家更好地保护自己的信息安全。 一、软件安全性最佳实践…

数据结构与算法八 优先队列

一 优先队列 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在某些情况下,我们可能需要找出队列中的最大值或者最小值,例如使用一个队列保存计算机的任务,一般情况下计算机的任务都是有优先级…

C语言-malloc、free、memset、realloc、strcpy

malloc()开辟指定内存空间 函数原型 void *malloc(size_t size) C 库函数 void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针。 free 释放内存空间 free C 库函数 void free(void *ptr) 释放之前调用 calloc、malloc 或 realloc 所分配的…

紧跟时代潮流,如用ChatGPT速成自媒体达人

每一个选题是否成为爆款和热门,这个就占了80%,为什么?因为我看到你的标题,我可以点进去啊,不管内容如何,至少让人眼前一亮,有点进去的欲望,至少浏览量会很大,这就成功了一…

【LeetCode: 1043. 分隔数组以得到最大和 | 暴力递归=>记忆化搜索=>动态规划 | 线性dp 区间dp】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

使用ETL工具Sqoop,将MySQL数据库db03中的10张表的表结构和数据导入(同步)到大数据平台的Hive中

在MySQL中,创建一个用户,用户名为sqoop03,密码为:123456 启动MySQL:support-files/mysql.server start 进入MySQL:mysql -u root -p 创建用户sqoop03:grant all on *.* to sqoop03% identifi…

5.5 高斯型求积公式简历

学习目标: 我会按照以下步骤学习高斯求积公式简介: 理解积分的概念:学习什么是积分以及积分的几何和物理意义,如面积、质量、电荷等概念。 掌握基本的积分技巧:掌握基本的积分公式和技巧,如换元法、分部积…

重要通知!报表控件FastReport VCL将停止支持旧的 Delphi 版本

FastReport 是功能齐全的报表控件,可以帮助开发者可以快速并高效地为.NET,VCL,COM,ActiveX应用程序添加报表支持,由于其独特的编程原则,现在已经成为了Delphi平台最优秀的报表控件,支持将编程开…

视频批量剪辑:如何给视频添加上下黑边并压缩视频容量。

视频太多了,要如何进行给视频添加上下黑边并压缩视频容量?今天就由小编来教教大家要如何进行操作,感兴趣的小伙伴们可以来看看。 首先,我们要进入视频剪辑高手主页面,并在上方板块栏里选择“批量剪辑视频”板块&#…