ChatGPT基础原理和基础应用

CHatGPT

ChatGPT 能以不同样式、不同目的生成文本,并且在准确度、叙述细节和上下文连贯性上具有更优的表现。GPT是Generative Pre-trained Transformer(生成型预训练变换模型)的缩写

OpenAI 使用监督学习和强化学习的组合来调优 ChatGPT,其中的强化学习组件使 ChatGPT 独一无二。OpenAI 使用了「人类反馈强化学习」(RLHF)的训练方法,该方法在训练中使用人类反馈,以最小化无益、失真或偏见的输出。

ChatGPT更强的性能和海量参数,它包含了更多的主题的数据,能够处理更多小众主题。

ChatGPT现在可以进一步处理回答问题、撰写文章、文本摘要、语言翻译和生成计算机代码等任务。

BERT与GPT的技术架构(图中En为输入的每个字,Tn为输出回答的每个字)

简单理解:GPT可以线性下推反馈调整得出结果,新的轮次结果不影响旧的老结果

GPT家族的演进

ChatGPT背景理解

chagpt 语言模型 大数据的训练量 -> 一致性问题-> 实际希望做什么,而不是被训练做什么

=> 目标函数是否符合预期 => 人类的期望 => 产生更多的实际价值

GPT-3 非一致性模型 -> 网络文本数据 -> 类人类文本,但不符合人类的预期

-> 预测函数:f(概率分布(词序序列)) ->效率高

-> 问题: 人类文本是 在情景中根据已知的背景知识常识来辅助生成语言->出入

-> 一致性问题表现:内容是 无效,胡编乱造,缺乏可解释性,可能偏见有害

训练语言模型的核心技术

作为ChatGPT基础的GPT-3或GPT-3.5 是一个超大的统计语言模型或顺序文本预测模型

  • Next-token-prediction

  • 模型被给定一个词序列作为输入,并被要求预测序列中的下一个词

  • 可能性|概率

The cat sat on the [ mat|chair|floor]
  • masked-language-modeling

  • Next-token-prediction 的变体:替换词语为特殊token->目标函数 ->生成自然流畅文本

The [MASK] on the []
  • 问题:模型无法区分重要错误和不重要错误

  • 预测高概率词汇的模型可能不一定会学习其含义的某些更高级表征

  • 难以承担:深入理解语言的任务

The Roman Empire [MASK] with the reign of Augustus
[MASK]-> began | ended 高概率词汇 -> 不一致
  • 人类反馈 => RLHF

  • 增加了使用了人类反馈来指导学习过程, 对模型进一步训练

  • chatgpt将RLHF技术应用于实际场景模型

[人类反馈强化学习RLHF]原理

RLHF(Reinforcement Learning from Human Feedbac,人类反馈强化学习) 技术。

总体是三个不同步骤:

  • 有监督的调优:预训练的语言模型在少量已标注的数据上进行调优,以学习从给定的 prompt 列表生成输出的有监督的策略(即 SFT 模型);

  • 数据收集:[人工标注,openAI(GPT-3)api请求]->相对较小、高质量的数据集

  • 模型选择: GPT-3.5 系列中的预训练模型

  • 使用的基线模型是最新版的 text-davinci-003(通过对程序代码调优的 GPT-3 模型)

  • 在「代码模型」而不是纯文本模型之上进行调优

  • 问题:SFT模型输出 不一致性文本 ->人工排序SFT的不同输出以创建RM模型

  • 模拟人类偏好:标注者们对相对大量的 SFT 模型输出进行投票,这就创建了一个由比较数据组成的新数据集。在此数据集上训练新模型,被称为训练回报模型(Reward Model,RM);

  • 目标:从SFT输出数据中学习目标函数, 根据人类可取程序降序,以反应人类的偏好

f()=sort()
  • 工作原理:

选择prompt数据,通过SFT模型输出N个结果,由标注者排序并添加标签,输出新的标签数据集->训练RM模型
重新将SFT的输出 做为输入,通过RM模型生成新的结果,并排序
  • TAMER框架

  • Training an Agent Manually via Evaluative Reinforcement,评估式强化人工训练代理

  • 将人类标记者的知识,以奖励信反馈的形式训练Agent,加快其快速收敛。

通过TAMER+RL(强化学习),借助人类标记者的反馈,能够增强从马尔可夫决策过程 (MDP) 奖励进行强化学习 (RL) 的过程。
  • 近端策略优化(PPO):RM 模型用于进一步调优和改进 SFT 模型,PPO 输出结果是的策略模式。

  • 目标使用 PPO 模型优化RM模型以微调 SFT 模型

  • 算法:近端策略优化(PPO)算法

强化学习中训练agent的on-policy算法, 它直接学习和根据agent所获得的回报不断更新当前策略
使用「信任区域优化」方法来训练策略,它将策略的更改范围限制在与先前策略的一定程度内以保证稳定性
使用[价值函数]来估计[给定状态]或[动作的预期回报],通过优势函数来比较前后两次策略,以此来更新更明智的策略
  • 模型:PPO 模型由 SFT 模型初始化,价值函数由 RM 模型初始化

PPO初始化环境:「bandit environment」with SFT RM
ppo从数据集抽样prompt并给出对应的期望响应
RM对 给定的prompt 和响应计算,产生相应的回报
PPO再用回报更新模型,并输出结果
注:SFT模型对每个token添加KL惩罚因子,避免RM过度优化
  • 思路

  • Importance Sampling:将Policy Gradient中On-policy的训练过程转化为Off-policy,即将在线学习转化为离线学习

  • 训练高质量的ChatGPT模型

使用多个模型,利用RM阶段训练好的回报模型,靠奖励打分来更新预训练模型SFT参数。在数据集中随机抽取问题,使用PPO模型生成回答,并用训练好的RM模型给出质量分数。

把回报分数依次传递,由此产生策略梯度,通过强化学习的方式以更新PPO模型参数。

通过迭代不断重复第二和第三阶段,训练高质量模型

# 伪代码
# 有监督的调优
def ppoModel
begin with: <prompt,demostration> -> SFTModel3.5 -> fineTune while(times>0):# 模拟人类偏好# 采样label_sorts = makeLabelsAndSort(sample(fineTune)) rmModel=initModel(label_sorts)# 近端策略优化模型ppoModel=(ppoModel==null)?init():update(rmModel))res = ppoModel(prompt)return res

局限性

在将语言模型与人类意图保持一致的过程中,用于 fine-tuning 模型的数据会受到各种错综复杂的主观因素的影响

  • 生成 demo 数据的人工标注者的偏好;

  • 设计研究和编写标签说明的研究人员;

  • 选择由开发人员制作或由 OpenAI 客户提供的 prompt;

  • 标注者偏差既包含在 RM 模型训练中,也包含在模型评估中。

参与训练过程的标注人员和研究人员可能并不能完全代表语言模型的所有潜在最终用户

ChatGPT的使用

简单介绍,具体看官方文档

申请账号(得想点办法),测试使用均需要国外的ip

openai

一般应用都是通过调用openai完成,具体可以参考地址:

https://platform.openai.com/docs/api-reference/images/create

样例demo:

# 测试能否正常ping通接口
curl https://api.openai.com/v1/completions \-H "Content-Type: application/json" \-H "Authorization: Bearer $OPENAI_API_KEY" \-d '{"model": "text-davinci-003","prompt": "Say this is a test","max_tokens": 7,"temperature": 0}'# 测试生成对话
curl https://api.openai.com/v1/chat/completions \-H "Content-Type: application/json" \-H "Authorization: Bearer $OPENAI_API_KEY" \-d '{"model": "gpt-3.5-turbo","messages": [{"role": "user", "content": "Hello!"}]}'# 测试生成图片
curl https://api.openai.com/v1/images/generations \-H "Content-Type: application/json" \-H "Authorization: Bearer $OPENAI_API_KEY" \-d '{"prompt": "A cute baby sea otter","n": 2,"size": "1024x1024"}'

SDK

sdk一般就是通过参数封装简化使用接口的第三方代码

javaSDk网上获取了一个样例,以供参考, github地址:

https://github.com/Grt1228/chatgpt-java

样例code

public class OpenAiStreamClientTest {private OpenAiStreamClient client;@Beforepublic void before() {// 执行成功的重点:在此处设置本地笔记本能够访问其他地区的代理端口Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8118));client = OpenAiStreamClient.builder().connectTimeout(50).readTimeout(50).writeTimeout(50).apiKey("sk-************************************").proxy(proxy).apiHost("https://api.openai.com/").build();}@Testpublic void chatCompletions() {ConsoleEventSourceListener eventSourceListener = new ConsoleEventSourceListener();Message message = Message.builder().role(Message.Role.USER).content("你好!").build();ChatCompletion chatCompletion = ChatCompletion.builder().messages(Arrays.asList(message)).build();client.streamChatCompletion(chatCompletion, eventSourceListener);CountDownLatch countDownLatch = new CountDownLatch(1);try {countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}}
}

openapi接口列表

/*** 描述: open ai官方api接口** @author https:www.unfbx.com*  2023-02-15*/
public interface OpenAiApi {/*** 模型列表** @return Single ModelResponse*/@GET("v1/models")Single<ModelResponse> models();/*** models 返回的数据id* @param id* @return Single Model*/@GET("v1/models/{id}")Single<Model> model(@Path("id") String id);/*** 文本问答* Given a prompt, the model will return one or more predicted completions, and can also return the probabilities of alternative tokens at each position.** @param completion* @return Single CompletionResponse*/@POST("v1/completions")Single<CompletionResponse> completions(@Body Completion completion);/*** Creates a new edit for the provided input, instruction, and parameters.* 文本修复** @param edit* @return Single EditResponse*/@POST("v1/edits")Single<EditResponse> edits(@Body Edit edit);/*** Creates an image given a prompt.* 根据描述生成图片** @param image* @return Single ImageResponse*/@POST("v1/images/generations")Single<ImageResponse> genImages(@Body Image image);/*** Creates an edited or extended image given an original image and a prompt.* 根据描述修改图片** @param image* @param mask* @param requestBodyMap* @return Single ImageResponse*/@Multipart@POST("v1/images/edits")Single<ImageResponse> editImages(@Part() MultipartBody.Part image,@Part() MultipartBody.Part mask,@PartMap() Map<String, RequestBody> requestBodyMap);/*** Creates a variation of a given image.* 创建给定图像的变体。** @param image* @param requestBodyMap* @return Single ImageResponse*/@Multipart@POST("v1/images/variations")Single<ImageResponse> variationsImages(@Part() MultipartBody.Part image,@PartMap() Map<String, RequestBody> requestBodyMap);/*** Creates an embedding vector representing the input text.* 创建表示输入文本的嵌入向量。* @param embedding* @return Single EmbeddingResponse*/@POST("v1/embeddings")Single<EmbeddingResponse> embeddings(@Body Embedding embedding);/*** Returns a list of files that belong to the user's organization.* 返回属于用户组织的文件列表。* @return Single OpenAiResponse File*/@GET("/v1/files")Single<OpenAiResponse<File>> files();/*** 删除文件** @param fileId* @return Single DeleteResponse*/@DELETE("v1/files/{file_id}")Single<DeleteResponse> deleteFile(@Path("file_id") String fileId);/*** 上传文件** @param purpose* @param file* @return  Single UploadFileResponse*/@Multipart@POST("v1/files")Single<UploadFileResponse> uploadFile(@Part MultipartBody.Part file,@Part("purpose") RequestBody purpose);/*** 检索文件** @param fileId* @return Single File*/@GET("v1/files/{file_id}")Single<File> retrieveFile(@Path("file_id") String fileId);/*** 检索文件内容* ###不对免费用户开放###* ###不对免费用户开放###* ###不对免费用户开放###** @param fileId* @return Single ResponseBody*/@Streaming@GET("v1/files/{file_id}/content")Single<ResponseBody> retrieveFileContent(@Path("file_id") String fileId);/*** 文本审核** @param moderation* @return Single ModerationResponse*/@POST("v1/moderations")Single<ModerationResponse> moderations(@Body Moderation moderation);/*** 创建微调作业** @param fineTune* @return Single FineTuneResponse*/@POST("v1/fine-tunes")Single<FineTuneResponse> fineTune(@Body FineTune fineTune);/*** 微调作业集合** @return Single OpenAiResponse FineTuneResponse*/@GET("v1/fine-tunes")Single<OpenAiResponse<FineTuneResponse>> fineTunes();/*** 检索微调作业** @return Single FineTuneResponse*/@GET("v1/fine-tunes/{fine_tune_id}")Single<FineTuneResponse> retrieveFineTune(@Path("fine_tune_id") String fineTuneId);/*** 取消微调作业** @return Single FineTuneResponse*/@POST("v1/fine-tunes/{fine_tune_id}/cancel")Single<FineTuneResponse> cancelFineTune(@Path("fine_tune_id") String fineTuneId);/*** 微调作业事件列表** @return Single OpenAiResponse Event*/@GET("v1/fine-tunes/{fine_tune_id}/events")Single<OpenAiResponse<Event>> fineTuneEvents(@Path("fine_tune_id") String fineTuneId);/*** 删除微调作业模型* Delete a fine-tuned model. You must have the Owner role in your organization.** @return Single DeleteResponse*/@GET("v1/models/{model}")Single<DeleteResponse> deleteFineTuneModel(@Path("model") String model);/*** 引擎列表* 官方已废弃此接口** @return Single OpenAiResponse Engine*/@Deprecated@GET("v1/engines")Single<OpenAiResponse<Engine>> engines();/*** 检索引擎* 官方已废弃此接口* @param engineId* @return Engine*/@Deprecated@GET("v1/engines/{engine_id}")Single<Engine> engine(@Path("engine_id") String engineId);/*** 最新版的GPT-3.5 chat completion 更加贴近官方网站的问答模型* @param chatCompletion chat completion* @return 返回答案*/@POST("v1/chat/completions")Single<ChatCompletionResponse> chatCompletion(@Body ChatCompletion chatCompletion);/*** 语音转文字** @param model 模型* @param file  语音文件* @return 文本*/@Multipart@POST("v1/audio/transcriptions")Single<WhisperResponse> speechToTextTranscriptions(@Part MultipartBody.Part file,@Part("model") RequestBody model);/*** 语音翻译:目前仅支持翻译为英文** @param model 模型* @param file  语音文件* @return 文本*/@Multipart@POST("v1/audio/translations")Single<WhisperResponse> speechToTextTranslations(@Part MultipartBody.Part file,@Part("model") RequestBody model);
}

重点使用openapi的completion文本问答接口

SSE

OpenAI官网在接受Completions接口的时候,使用了sse技术。 Completion对象本身有一个stream属性,当stream为true时候Api的Response返回就会变成Http长链接。

介绍使用server-sent events

Server-Sent Events (SSE) 是一种用于实现服务器向客户端发送实时数据的 Web 技术。与传统的 HTTP 请求不同,SSE 允许服务器持续地向客户端发送数据流,而不需要客户端发起请求。

下面是一个简单的使用 SSE 的示例:

在 HTML 文件中,创建一个 <div> 元素,用于显示从服务器发送的数据:

<div id="messages"></div>

使用 JavaScript 创建一个 SSE 连接:

javascriptCopy code
const eventSource = new EventSource('/stream');

其中 /stream 是服务器端发送 SSE 数据的端点。

  1. 添加事件处理程序来处理来自服务器的数据:

javascriptCopy code
eventSource.onmessage = function(event) {const messagesDiv = document.querySelector('#messages');messagesDiv.innerHTML += event.data;
};
  1. 在服务器端发送 SSE 数据:

javascriptCopy code
res.write('data: Hello, world!\n\n');

其中 data: 是 SSE 数据的前缀,Hello, world! 是实际的数据,\n\n 表示数据的结束。

使用 SSE 可以实现很多实时应用程序,例如聊天应用程序、股票市场数据更新、实时游戏等等。由于 SSE 是基于 HTTP 协议的,因此可以与现有的 Web 技术(如 Ajax 和 WebSockets)很好地集成。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT 的 AskYourPDF 插件所需链接如何获取?

一、背景 目前 ChatGPT 主要有两款 PDF 对话插件&#xff0c;一个是 AskYourPDF 一个是 ChatWithPDF&#xff08;需 ChatGPT Plus&#xff09;&#xff0c;他们都可以实现给一个公共的PDF 链接&#xff0c;然后进行持续对话&#xff0c;对读论文&#xff0c;阅读 PDF 格式的文…

谷歌Bard(ChatGPT的竞品)申请方法详解

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

ChatGPT新进展GPT-4 模型介绍

文章目录 背景工具功能使用增强 背景 2023.3.14 GPT-4 模型发布 创建了GPT-4&#xff0c;这是OpenAI在扩大深度学习方面的最新里程碑。GPT-4是一个大型多模态模型(接受图像和文本输入&#xff0c;输出文本输出)&#xff0c;虽然在许多现实场景中不如人类&#xff0c;但在各种专…

ChatGPT 自定义提示词模板提升使用效率

相关文章推荐&#xff1a; 《提问的艺术&#xff1a;如何通过提示词让 ChatGPT 更准确地理解你的问题&#xff1f;》 《这些免费插件&#xff0c;让你的 ChatGPT 效率爆炸》 一、背景 现在 ChatGPT 异常火爆&#xff0c;很多人都在体验甚至购买 ChatGPT Plus。 现在使用 ChatG…

如何用ChatGPT搞科研?

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【计算机视觉】微信技术交流群 转载自知乎&#xff1a;芯片斯多葛 、量子位&#xff08;QbitAI&#xff09; 这位研究僧&#xff0c;GPT-4都发布了&#xff0c;你还在纯人工…

使用范例调教ChatGPT

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

快速开通ChatGPT Plugin

根据上周OpenAI官方给出的消息&#xff0c;本周ChatGPT Plus用户将全量开放Plugin插件权限。 如果你已经可以访问Plugin Store 可以查看这篇文章获取ChatGPT Plugin的使用和功能介绍 AI“应用商店”来了&#xff01;OpenAI首批70个ChatGPT Plugin最全梳理_evil-tomato的博客-…

GPT-4介绍&api申请(Chatgpt plus)

GPT-4 由于其更广泛的一般知识和解决问题的能力&#xff0c;可以更准确地解决难题。 Openai官网 https://openai.com/GPT4 https://openai.com/product/gpt-4GPT4 Api候补 https://openai.com/waitlist/gpt-4-apiChatGPT Plus可直接使用。 New Bing后续也会接入GPT-4。 创造…

6个ChatGPT4的最佳用途

文章目录 ChatGPT 4’s Current Limitations ChatGPT 4 的当前限制1. Crafting Complex Prompts 制作复杂的提示2. Logic Problems 逻辑问题3. Verifying GPT 3.5 Text 验证 GPT 3.5 文本4. Complex Coding 复杂编码5.Nuanced Text Transformation 细微的文本转换6. Complex Kn…

chatgtp可以做什么

ChatGPT 是一款基于 OpenAI 强大技术的聊天机器人&#xff0c;它可以通过对话的方式帮助人们解答问题、提供娱乐、甚至进行语言交流。ChatGPT 能够在不同的领域中进行智能应用&#xff0c;比如智能客服、智能助手、智能导购、智能医疗等。除此之外&#xff0c;ChatGPT 还可以进…

ChatGPT 大规模封号。。。

大家好&#xff0c;我是R哥&#xff0c; 从昨天开始&#xff0c;网上就有很多传播 ChatGPT 大规模封号的消息&#xff0c;还特别指的是亚洲专区。。 虽然不能确定真假性&#xff0c;但我个人觉得&#xff0c;不能使用亚洲地区登录 ChatGPT 完全就是无稽之谈&#xff0c;因为亚洲…

各种商业版本的ChatGPT已经推出了,还有必要搞个人的Chat吗?

一、引言 虽然市面上已经存在许多商业版本的ChatGPT交互产品&#xff0c;但在我们的开发中&#xff0c;决定专注于打造一个更加个性化、更贴合个人需求的智能助手。我们相信&#xff0c;每个人都是独一无二的&#xff0c;他们的需求也是各不相同的。因此&#xff0c;个人ChatGP…

chatGPT回答字数限制解除-怎么突破chatGPT长度的限制

ChatGPT如何写作 ChatGPT 是一种基于机器学习的自然语言处理技术&#xff0c;可以自动生成文本&#xff0c;包括段落、文章、新闻、电子邮件、推文等。以下是使用 ChatGPT 进行写作的基本过程&#xff1a; 确定写作内容和细节&#xff1a;首先需要 确定要生成的文本内容和相关…

不限次数的chatGPT

不说废话直接看方法&#xff1a; 不用翻墙&#xff0c;开干 第一步&#xff1a;打开电脑的Edge浏览器&#xff0c;就是windows系统的默认浏览器&#xff0c;搜索wetab&#xff0c;点击如下的官方链接就会进入安装插件界面 第二步&#xff1a;点击chat AI就会弹出这个弹窗&…

用ChatGPT科学学习Python和写代码

你的朋友圈被ChatGPT攻占了吗&#xff1f; ChatGPT最近太火了&#xff01; ChatGPT是什么&#xff1f; ChatGPT 是一种预训练的语言模型&#xff0c;用于对话生成。它的名字来源于它的两个主要组成部分&#xff1a;「聊天」&#xff08;chat&#xff09;和「生成式语言模型」&a…

不会写代码,也能部署一个独立ChatGPT?

本教程使用GPT-3模型接口模拟ChatGPT项目&#xff0c;虽然与真正的ChatGPT存在差异&#xff0c;但是演示了ChatGPT的工作原理。 &#xff08;ChatGPT服务是基于GPT-3模型&#xff0c;经过大量的微调训练而来的&#xff0c;本教程暂时不包含训练内容&#xff0c;之后我们会讲如…

ChatGPT教你写代码

问题&#xff1a; 本人是个菜鸟&#xff0c;想将HTID字段和LDaiHao字段相同&#xff0c;且个数大于1的记录 的Feature字段值改为“共压”。 于是我凭着自己粗浅的学识&#xff0c;写了个sql Update 线号表 T1, (Select HTID,LDaiHao ,Count(HTID) as NUM From 线号表 Group By …

如何让ChatGPT Plus教你写代码?

1、什么是chatgptPlus&#xff1f;和chatgpt的比较&#xff1f; ChatGPT 是 OpenAI 开发的一种人工智能语言模型&#xff0c;是对原有的 ChatGPT 模型的升级版。与 ChatGPT 相比&#xff0c;ChatGPT 在以下几个方面进行了改进&#xff1a; 更高的生成质量&#xff1a;ChatGPT…

如果让ChatGPT来写代码他会怎么写?

一、前言 今天突发奇想想试一下如果让ChatGPT来写51代码会怎么样呢&#xff1f;今天我们就一起来看一下他会怎么写51代码&#xff0c;机器人写出来的代码到底可不可以运行&#xff1f; 在开始之前我们首先让ChatGPT做一个自我介绍吧&#xff01; 问&#xff1a; ChatGPT介绍…

ChatGPT写python代码实录

ChatGPT写python代码实录 print(hello world) 众所周知&#xff0c;咱们程序员学习编程是为了世界好。 所以&#xff0c;咱们就从hello world开始。 然后是一个杨辉三角 def generate_triangle(n):triangle [] ​for i in range(n):row [1] * (i 1)for j in range(1, i):r…