ChatGPT和代码智能

2023-11-13

一. ChatGPT

1. ChatGPT的自我介绍

2. ChatGPT的前世

2.1GPT-3是啥?

  1. General Pre-Training(GPT),即通用预训练语言模型,是一种利用Transformer作为特征抽取器,基于语言模型进行训练的预训练语言模型。所以,理解GPT主要熟悉两个方面即可,即语言模型和其由Transformer组成的结构。
  2. 将无监督学习有监督模型的预训练目标,因此叫做生成式预训练(Generative Pre-training,GPT)

模型

发布时间

参数量

预训练数据量

训练逻辑

数据集

为了解决的问题

最终性能

GPT

2018 年 6 月

1.17 亿

约 5GB

无监督学习,是先通过在无标签的数据上学习一个生成式的语言模型,然后再根据特定热任务进行有监督的微调

BooksCorpus的数据集,这个数据集包含 7,000 本没有发布的书籍。作者选这个数据集的原因有二:1. 数据集拥有更长的上下文依赖关系,使得模型能学得更长期的依赖关系;2. 这些书籍因为没有发布,所以很难在下游数据集上见到,更能验证模型的泛化能力。

1.监督学习需要大量的标注数据,高质量的标注数据往往很难获得,所以使用无监督的无标签的数据进行第一步的学习

2.根据一个任务训练的模型很难泛化到其它任务中,具有任务输入变换能力

GPT-1在未经微调的任务上虽然也有一定效果,但是其泛化能力远远低于经过微调的有监督任务,说明了GPT-1只是一个简单的领域专家,而非通用的语言学家。

GPT-2

2019 年 2 月

15 亿

40GB

多任务学习,旨在训练一个泛化能力更强的词向量模型,它并没有对GPT-1的网络进行过多的结构的创新与设计,只是使用了更多的网络参数和更大的数据集

取自于Reddit上高赞的文章,命名为WebText。数据集共有约800万篇文章,累计体积约40G。

GPT-2的学习目标是使用无监督的预训练模型做有监督的任务。作者认为,当一个语言模型的容量足够大时,它就足以覆盖所有的有监督任务,也就是说所有的有监督学习都是无监督语言模型的一个子集

GPT-2表明随着模型容量和数据量的增大,其潜能还有进一步开发的空间,因此也诞生了GPT-3

GPT-3

2020 年 5 月

1,750 亿

45TB

海量参数,海量数据

in-context learning(情境学习)

除了几个常见的NLP任务,GPT-3还在很多非常困难的任务上也有惊艳的表现,例如撰写人类难以判别的文章,甚至编写SQL查询语句,React或者JavaScript代码等。而这些强大能力的能力则依赖于GPT-3疯狂的 1,750 亿的参数量, 45 TB的训练数据以及高达 1,200 万美元的训练费用。

2.2让人惊叹的参数量

2.3衍生的大模型们

3.总结GPT家族

GPT系列从1到3,通通采用的是transformer架构,可以说模型结构并没有创新性的设计。GPT-3的本质还是通过海量的参数学习海量的数据,然后依赖transformer强大的拟合能力使得模型能够收敛。

在微软的资金支持下,这更像是一场炫富:1750亿的参数,31个分工明确的作者,超强算力的计算机( 285,000 个CPU, 10,000 个GPU),1200万的训练费用,45TB的训练数据。当然现在利用GPT-3的API构建的各个应用程序也是很多, 各种好玩的demo gpt-3-apps API(2021年3月)

GPT-3可以完成一些令人感到惊喜的任务,但是GPT-3也不是万能的,对于一些明显不在这个分布或者和这个分布有冲突的任务来说,GPT-3还是无能为力的。例如通过目前的测试来看,GPT-3还有很多缺点的:

  1. 对于一些命题没有意义的问题,GPT-3不会判断命题有效与否,而是拟合一个没有意义的答案出来;
  2. 由于40TB海量数据的存在,很难保证GPT-3生成的文章不包含一些非常敏感的内容,例如种族歧视,性别歧视,宗教偏见等;
  3. 受限于transformer的建模能力,GPT-3并不能保证生成的一篇长文章或者一本书籍的连贯性,存在下文不停重复上文的问题。

所以,针对这些问题,就会继续发展后续的模型。

4.ChatGPT的今生

我们使用来自人类反馈的强化学习(RLHF)来训练这个模型,使用的方法与InstructGPT相同但数据收集设置略有不同。

可以看一下InstructGPT与GPT-3的差异

引入“人工标注数据+强化学习”(RLHF,Reinforcement Learning from Human Feedback ,这里的人工反馈其实就是人工标注数据(高质量的数据集)来不断Fine-tune预训练语言模型,主要目的是让LLM模型学会理解人类的命令指令的含义(比如给我写一段小作文生成类问题、知识回答类问题、头脑风暴类问题等不同类型的命令),以及让LLM学会判断对于给定的prompt输入指令(用户的问题),什么样的答案是优质的(富含信息、内容丰富、对用户有帮助、无害、不包含歧视信息等多种标准)。

  • 第一步:监督微调训练了一个初始模型:人类人工智能训练员提供对话,他们在对话中扮演双方-用户和人工智能助手。我们允许培训人员获取模型书面建议,以帮助他们构思他们的回答。为了让GPT 3.5初步具备理解指令中蕴含的意图,首先会从测试用户提交的prompt(就是指令或问题)中随机抽取一批,靠专业的标注人员,给出指定prompt的高质量答案,然后用这些人工标注好的<prompt,answer>数据来Fine-tune GPT 3.5模型。
  • 第二步:在这个阶段里,首先由冷启动后的监督策略模型为每个prompt产生K个结果,人工根据结果质量由高到低排序,以此作为训练数据,通过pair-wise learning to rank模式来训练回报模型。对于学好的RM模型来说,输入<prompt,answer>,输出结果的质量得分,得分越高说明产生的回答质量越高。
  • 第三步:使用这些奖励模型,使用近似值策略优化(Proximal Policy Optimization (PPO)对模型进行微调。对这个过程进行了多次迭代。

5. ChatGPT的使用案例

尽管官方对于ChatGPT的能力描述很简单,但是从实际大家使用的期刊来看,这个系统可以做的事情远超大家想象。这里我们会列举目前收集的ChatGPT的使用案例,供大家参考。

案例名称

案例来源

生成AI Prompt

https://twitter.com/GuyP/status/1598020781065527296

编写iOS SwiftUI APP

https://twitter.com/avielgr/status/1598895550392197121

学习技术

https://twitter.com/HamelHusain/status/1598834924848836609

写出一个可以生成小鸟图片的Python脚本

https://twitter.com/bgavran3/status/1598857248536956928

写Javascript脚本

https://twitter.com/vertinski/status/1599099368472137729

参与SAT考试

https://twitter.com/davidtsong/status/1598767389390573569

自然语言转成Latex

https://twitter.com/jdjkelly/status/1598021488795586561

解释代码

https://twitter.com/goodside/status/1598129631609380864

改写故事

https://twitter.com/raphaelmilliere/status/1598469100535259136

debugging代码

https://twitter.com/amasad/status/1598042665375105024

写计算机网络家庭作业

https://twitter.com/abhnvx/status/1598258353196929024

替代搜索引擎

https://twitter.com/RajJohri2019/status/1598492953764315137

创作短剧

https://twitter.com/rgodfrey/status/1598162900140445697

创作食谱

https://twitter.com/stephsmithio/status/1598920887029628928

反编译汇编代码

https://twitter.com/mahal0z/status/1598536939942006784

代写办公邮件

https://twitter.com/CubicleApril/status/1598753388895797282

写年度总结报告

https://twitter.com/shanselman/status/1599073011050872832

闲聊

https://twitter.com/t3dotgg/status/1598954493680713729

撰写技术博客

https://twitter.com/goodside/status/1598235521675038722

逻辑推理问题

https://twitter.com/Robdeprop/s

6. ChatGPT 可能存在的问题

  • ChatGPT有时会写出看似合理实则错误甚至荒谬的答案 因为:
    1. 在强化学习训练期间,目前没有任何真相来源;
    2. 训练模型更加谨慎会导致它拒绝本来可以正确回答的问题;
    3. 监督训练可能误导模型,因为理想的答案取决于模型知道什么,而不是人类训练者知道什么。
  • ChatGPT对输入的局部修改或多次尝试同一问题很敏感
    • 例如,修改问题中的某个词语,ChatGPT可能会给出完全不同的回答。或者同一问题一开始无法回答,换一种措辞再问一遍又能正确回答。
  • ChatGPT的回答通常过于冗长,过度使用某些短语
    • 例如ChatGPT会重申它是OpenAI训练的语言模型。这些问题源于训练数据的偏差(训练师更喜欢看起来更全面的较长答案)和众所周知的优化问题。
  • 不会反问
    • 理想情况下,当用户问的问题不明确时,模型应该提出反问来明确问题。然而目前ChatGPT模型通常会猜测用户意图,给出回答
  • 无法100%拒绝不当问题
    • 尽管OpenAI努力让模型拒绝不当问题,但它有时会难免还是会响应有害的指令或表现出偏激行为。OpenAI使用了Moderation API来警告或拦截某些类型的不安全内容,但可能目前还是会有一些误判。OpenAI希望通过收集用户反馈,以众包的形式来改进系统的工作。

7. 总结

尽管ChatGPT还存在上述局限,但在我的体验过程中,ChatGPT表现出的理解力和回复的准确度远超我的预计,让我直呼“牛逼”。如果ChatGPT正式开放出来,很有可能将是:“外事不决问谷歌,内事不决问百度,代码不会问ChatGPT”的格局。

目前ChatGPT还没联网,一旦它连上网络,可以从互联网获取更多知识和信息(有很多文章在设计他与搜索引擎相结合的模式,设想当API开放之时,很快就会有相关的产品面世...),ChatGPT的潜力将得到更大的释放,甚至达到令人恐怖的程度。我相信这一天离我们不会很远!

二. 代码智能

1. 现有产品

业界标杆CodeX (OpenAI) -> 收费产品: GitHub Copilot

AlphaCode(Google Deep Mind)

CodeGen(salesforce)

盘古coder(华为诺亚方舟实验室) 官网

各个模型的性能对比:

代码比自然语言的编解码有相同之处,也更容易去编码,更容易理解,因为相对来说,结构化更明确,就是很好理解的一个例子就是英文的语义理解是远比中文要简单的。

2. 基线任务 论坛

2.1 代码表示

抽象语法树(abstract syntax code,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构。

2.2 代码检索

2.3 代码生成

可以把其理解为是概率统计模型,预测后代码是什么。难点:但是有时候又不能只依赖于前面几个token,可能是要看整个句子,甚至是最一开始定义的变量。

代码补全

数据增强方法

2.4 代码审查

2.5 评测基线

3. 总结

有一些好的声音:“一人一model,效率大大提升” 如何不被 OpenAI 取代?

也有一些不好的声音:“ChatGPT产生的答案有很高的错误率“主要问题是,虽然ChatGPT产生的答案有很高的错误率,但它们往往第一眼看起来可能是对的,而且使用人工智能导致答案非常容易生成。我们需要减少这些内容。目前在Stack Overflow上使用ChatGPT创建帖子的行为已经被禁止。如果用户在此临时规定发布后使用了ChatGPT,将会受到制裁。”Stack Overflow的运营人员表示。”

仅代表个人观点:ChatGPT绝对是一个现象级的产品,发布不到10天超100W的用户量,是比Stable Diffusion 更有竞争力的一个模型和研究趋势。让更多的人愿意用很低的成本去完成一些工作,且OPENAI他们一直知道现有模型的一些缺陷和问题,可以从一个个迭代的模型和一些功能来看,他们也会一直在尝试优化和规避之前存在的一些问题。

训练AI,就像教育孩子一样,不能因为他们在小学的年龄无法参与高校竞赛或者世界会议就把他们封闭起来,我们往往会继续让他们参与更高难度的学习,指引他们去完成看似正确的事。

reference:

张俊林 ChatGPT会不会成为下一代搜索引擎

预训练语言模型之GPT-1,GPT-2和GPT-3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ChatGPT和代码智能 的相关文章

随机推荐

  • 毕设基于深度学习的以图搜图系统 matlab语言

    毕设基于深度学习的以图搜图系统 matlab语言 文章目录 毕设基于深度学习的以图搜图系统 matlab语言 前言 一 实验数据集准备 二 软件设计 1 以图搜纸皮 2 以图搜花 实验总结 前言 随着人工智能的不断发展 深度学习这门技术也越
  • NFT颓势已现:肝不起了,卷不动了

    白名单制度是时候变革了 作者 星球小花 出品 Odaily星球日报 ID o daily 前几天 一位朋友问我 几个月没关注 NFT 了 你们怎么还在抢 PFP 我也反驳了一番 现在有很多圈外流量涌入 巨头纷纷进场 应用遍地开花 不过仔细想
  • C++中typeid的使用

    RTTI Run TimeType Information 运行时类型信息 它提供了运行时确定对象类型的方法 在C 中 为了支持RTTI提供了两个操作符 dynamic cast和typeid The typeid operator pro
  • 基于机器学习的文本分类!

    关注后 星标 Datawhale 每日干货 每月组队学习 不错过 Datawhale干货 作者 李露 西北工业大学 Datawhale优秀学习者 据不完全统计 网民们平均每人每周收到的垃圾邮件高达10封左右 垃圾邮件浪费网络资源的同时 还消
  • 基于Open CV的植物图像分类识别项目

    一 项目简介 1 主要内容 本项目主要是基于Open CV进行植物图像进行分类识别 展示部分采用了网页的形式 Vue Element net Core 由用户上传图片 服务器返回该图片的分类结果 Web服务 net Core 和c 图像处理
  • 《利用Python 进行数据分析》第四章:Numpy基础

    对 利用Python 进行数据分析 Wes Mckinney著 一书中的第四章中Numpy基础进行代码实验 原书中采用的是Python2 7 而我采用的Python3 7在Pycharm调试的 因此对书中源代码进行了一定的修改 每步打印结果
  • iOS开发常见错误代码对照表整理

    登录 注册 一样的世界 不一样的时间 随手记点东西 目录视图 摘要视图 订阅 2016软考项目经理实战班
  • 软件测试的缺陷管理与分析,粉丝福利拿走不谢

    软件测试过程中提交缺陷是测试工程师最常做的一件事 也是开发工程师解决问题的依据 所以需要对缺陷进行管理和分析 缺陷管理主要是管理从提交缺陷到解决缺陷这一系列的过程 包括流程中角色的变换 缺陷分析主要对测试过程中所发现的缺陷进行分类分析 分析
  • Java学习笔记(十四)

    Java 中的异常处理 在 Java 中 所有的异常都有一个共同的祖先 java lang 包中的 Throwable 类 Throwable 有两个重要的子类 Exception 异常 和 Error 错 误 二者都是 Java 异常处理
  • OSM数据下载及两种格式转换方法(shp等格式)

    OSM数据下载及两种常用的格式转换方法 1 首先打开OSM官网 https www openstreetmap org 2 先注册账号 再选择左上角的 导出 3 点击 手动选择不同的区域 4 导出即可 5 格式准换可以考虑以下两种方法 一是
  • mysql官网安装步骤_MySQL的安装与配置——详细教程

    免安装版的Mysql MySQL关是一种关系数据库管理系统 所使用的 SQL 语言是用于访问数据库的最常用的 标准化语言 其特点为体积小 速度快 总体拥有成本低 尤其是开放源码这一特点 在 Web 应用方面 MySQL 是最好的 RDBMS
  • 2022年度总结 EXI-小洲

    文章目录 一 第一次自我介绍 二 2022我都干了些什么 我的收获 1 大专顺利毕业 2 后端开发辞职 3 第二次代表学校参加江西省职业院校大数据技能大赛 4 专升本考试 5 参加泰迪杯第五届 数据分析技能赛 6 在csdn开始写博文 7
  • 常见渗透测试靶场系统

    常见靶场 DVWA Dam Vulnerable Web Application DVWA是用PHP Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序 包含了SQL注入 XSS 盲注等常见的一些安全漏洞 链接地址 ht
  • Java中JSON字符串和Java对象的互转

    1 JSON数据和Java对象的相互转换 JSON数据和Java对象的相互转换 JSON解析器 常见的解析器 Jsonlib Gson fastjson jackson 1 Java对象转换JSON 1 使用步骤 1 导入jackson的相
  • python中的库和模块有什么区别_Python中的模块和库之间有什么区别?

    从 The Python Tutorial Modules gt 模块 A module is a file containing Python definitions and statements The file name is the
  • 美团面试官问:写一个你认为最好的单例模式?于是我写了7个

    各位CSDN的朋友 如果喜欢我的文章 记得点个关注 方便以后找到我 由于是刚开始创作 推荐量较低 如果不关注 以后就可能找不到我了 面试题 写一个你认为最好的单例模式 面试考察点 考察目的 单例模式可以考察非常多的基础知识 因此对于这种问题
  • 软考-中级-网络工程师-知识点个人总结(九)

    1 CPU部件 运算器 控制器 寄存器 运算器 算术逻辑运算器 累加器 数据缓冲寄存器 状态条件寄存器 控制器 程序计数器 指令寄存器 指令译码器 时序部件 2 测试依据 测试类型 测试内容 测试依据 黑盒测试 功能测试 对软件的每个功能进
  • 小程序里的alert,Toast

    前言 在小程序中的弹框写法和我们在外面直接用是不一样的 他不支持alert 但是有替代的弹框组件 目录 一 原生小程序 原生小程序api 二 vant中的提示框 官网入口 vant api 一 原生小程序 wx showToast titl
  • C# MSChart 中柱状图和X轴自定义标签

    C 中MSChart 里面曲线 柱状图的样式选择是由 chart Series ChartType SeriesChartType Column 来控制的 SeriesChartType列举出了所有的样式 如果要在X轴上显示自己的文本标签
  • ChatGPT和代码智能

    一 ChatGPT 1 ChatGPT的自我介绍 2 ChatGPT的前世 2 1GPT 3是啥 General Pre Training GPT 即通用预训练语言模型 是一种利用Transformer作为特征抽取器 基于语言模型进行训练的