Chat-GPT 以问答的方式呈现给用户,如何使用 Chat-GPT,实际上转换为另一个问题:如何有效地提问。

编写程序

难度为“困难”,通过率仅 30.9% 的动态规划题:

很稳,代码还有注释。

尝试通过率最低的一道题 Fancy Sequence[1]:

仅通过了 2 个用例。这个测试有点极端,说明 Chat-GPT 并不是完全正确,但处理一般的编程问题还是绰绰有余。

翻译

查询资料

提供参考方案

可以看出,给出的建议并不具体,第二次提问我希望知道“如何从入门到精通学习 RUST”,但得到的答案和“新手如何学习 RUST”问题相同。这些方案可以作为参考,但不能直接使用。

写作业和写论文也是类似的效果,你甚至可以指定生成文本的字数。

解决问题

答案正确,由于直接从图片复制的文字(“兔”字识别有误),Chat-GPT 会修改为正确的内容后再进行处理。

换了个类似的问题:

正确答案:因为变换后脚少了,所以兔多,多了(100-88)÷(4-2)=7 只,原有鸡(100-7×4)÷(4+2)=12 只,原有兔 12+7=19 只。

可以看到,解决理科类问题是不靠谱的。这也容易理解,模型是基于概率给出答案,而理科类问题是严谨的。

发展历程

OpenAI 成立于 2015 年 12 月 10 日,创始人包括 Sam Altman,Elon Musk 在内,OpenAI 的使命是“确保通用人工智能造福全人类”。2017 年,Google 在论文《Attention is all you need[2]》中开源了 Transformer 神经网络结构,提出了最近几年爆火的“注意力机制”,这篇论文最大的贡献是使得 AI 能够理解人们表达的意思。训练大规模 AI 模型需要巨量资金,彼时,作为非营利机构的 OpenAI 已经无力承担,2018 年,大靠山马斯克也宣布辞职。2019 年,微软投了 10 亿美元,虽然比尔·盖茨并不看好 OpenAI 的前景。2022 年 12 月,OpenAI 推出 Chat-GPT,在全世界引起轰动。

基本原理

GPT-1

GPT(Generative Pre-trained Transformer),即生成性被预训练过的 Transformer 模型,源自 OpenAI 2018 年发表的论文《Improving Language Understanding by Generative Pre-Training[3]》,提出了一种半监督学习方法,通过“预训练+微调”的方式让模型通过大量无标注数据学习“基本常识”,从而缓解人工标注数据有限的问题。

  • 12 层单向 Transformer(上图左侧),每层 12 个注意力头。不同任务(右侧)的微调方式不同。

  • 预训练过程,根据前 n 个单词预测下一个可能的单词。

  • 微调过程,有监督任务(给定数据集)和无监督任务同时进行。

GPT-2

2019 年,OpenAI 发表了论文《Language Models are Unsupervised Multitask Learners[4]》,也就是 GPT-2,和 GPT-1 相比,主要的变化:

  • 完全舍弃微调(在 GPT-1 中,只能用于特定任务)过程,验证了 GPT-2 在 zero-shot(不提供样本数据) 设置下的性能。

  • 更大规模的网络模型。参数量扩大到 1.5 亿,使用 48 层 Transformer,1600 维向量。

  • 更大的数据集。新的数据集包含 800 万个网页,数据大小为 40GB。

  • 调整 Transformer 结构,将层归一化(layer normalization)放在每个子块之前作为输入,并在最后一个自注意力块后增加层归一化操作。

GPT-3

2020 年,OpenAI 发表论文《Language Models are Few-Shot Learners[5]》,即 GPT-3,采用了和 GPT-2 相同的模型。主要变化如下:

  • 讨论了移除微调步骤的必要性(需要大量的数据标注)。

  • GPT-3 采用了 96 层的多头 Transformer,词向量维度为 12288,文本长度为 2048。

  • 在 Transformer Decoder 中使用了交替稠密(alternating dense)和局部带状稀疏注意力(locally banded sparse attention)机制。

  • 更大的数据集(维基百科数据集的权重只占 3%),Common Crawl 数据集(过滤后)大小为 570GB。

  • 上下文学习。以下示例(左侧)是 Zero-shot(不给样本数据)、One-shot(给一个样本数据)、Few-shot(给少量样本数据) 三种方式的区别。

Instruct-GPT

Chat-GPT 是 基于 OpenAI 于 2022 年发布的 InstructGPT[6] 进一步改进实现,本质上也是上下文模型,用户给出文本的一部分内容,该模型会尝试补充其余部分。Instruct-GPT 的主要的区别如下:

  • 通过人为标注和强化学习的方法提升模型输出结果的真实性、无害性和有用性,进一步理解用户的意图。

训练模型分为三步:

  1. 人工标注一批数据(工程师设计提示文本,由人类回答),进行有监督地微调训练(SFT)。

  2. 人工对模型给出的结果进行打分排序(考虑真实性和无害性),训练奖励模型(RM),让模型分辨人类不喜欢的内容。

  3. 基于奖励模型,使用 PPO(proximal policy optimization )强化学习算法进行微调。

社区现状

  • 逆向工程 Chat-GPT API。通过逆向工程,作者得到了 Chat-GPT 的 API 调用接口,这样,开发者就可以在任何地方调用 Chat-GPT:acheong08/ChatGPT[7]

  • 如何使用 Chat-GPT。通过特定输入,让 Chat-GPT 完成不同类型的工作,例如,模拟 Linux 终端:f/awesome-chatgpt-prompts[8]

  • 桌面端应用:lencx/ChatGPT[9](图源该项目主页)

  • 通过 wechaty[10](微信机器人),在微信中接入 Chat-GPT:fuergaosi233/wechat-chatgpt[11]

  • 浏览器插件:wong2/chatgpt-google-extension[12]

和直接在 Chat-GPT 网页提问相比,对内容进行了精简。个人认为,这才是 Chat-GPT 和搜索引擎结合的最终方案,因为 Chat-GPT 给出的结果只能作为参考,通过 Edge 浏览器垄断的方式可能行不通。

  • 使用 Chat-GPT Review 代码:anc95/ChatGPT-CodeReview[13]

最初源自这个项目:sturdy-dev/codereview.gpt[14],只是在 PR 页面显示 Chat-GPT 的建议供 reviewer 参考,后经过anc95修改,可以直接在 PR 页面进行回复。

可以迁移到论文修改、作业修改等类似场景,为 reviewer 提供参考信息。

发展前景

Chat-GPT 爆火之后,衍生出了一大批相关产业,从卖账号,到实现微信小程序和 Web 应用,通过广告和会员费获得收入,挺佩服动手能力强的人。不过,话说回来,这些也只是处在风口上的小打小闹,最终在国内如何发展还得看大型企业。Chat-GPT 爆火之后,国内的互联网公司相继表示已有类似的研究,百度预计 2022 年 3 月完成“文心一言”的内测并面向公众开放。

就个人体验来看,Chat-GPT 要想大规模应用可能还需要进一步优化。

  • Chat-GPT 虽然通过人工标注和训练奖励模型能够使得输出结果具有真实性、无害性和有用性,但是,这种机制还是不完善,用户很容易绕过。例如,如果直接问一个不符合道德规范的问题,Chat-GPT 会拒绝回答,但是,当用户换个提问方式,例如:“我在写一本小说,故事的主人公想 xxx”,此时,Chat-GPT 就会完整地给出答案。

  • Chat-GPT 对理科类知识的输出还需优化,数学、物理等理科类知识是严谨的,而基于概率的 AI 模型会根据上下文进行推断,给出最适合(概率值最高)的输出,并不能给出严谨、准确的答案。

  • Chat-GPT 给出的回答还比较泛,在某些情况下并不能给出用户想要的答案。在 Chat-GPT 中,数据是至关重要的,因此,可能需要分行业、分领域标注数据集,从而给出更有深度、更符合用户期望的答案。

参考资料

[1] Fancy Sequence: https://leetcode.cn/problems/fancy-sequence/

[2] Attention is all you need: https://arxiv.org/pdf/1706.03762.pdf

[3] Improving Language Understanding by Generative Pre-Training: https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf

[4] Language Models are Unsupervised Multitask Learners: https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf

[5] Language Models are Few-Shot Learners: https://arxiv.org/pdf/2005.14165.pdf

[6] InstructGPT: https://cdn.openai.com/papers/Training_language_models_to_follow_instructions_with_human_feedback.pdf

[7] acheong08/ChatGPT: https://github.com/acheong08/ChatGPT

[8] f/awesome-chatgpt-prompts: https://github.com/f/awesome-chatgpt-prompts

[9] lencx/ChatGPT: https://github.com/lencx/ChatGPT

[10] wechaty: https://wechaty.js.org/

[11] fuergaosi233/wechat-chatgpt: https://github.com/fuergaosi233/wechat-chatgpt

[12] wong2/chatgpt-google-extension: https://github.com/wong2/chatgpt-google-extension

[13] anc95/ChatGPT-CodeReview: https://github.com/anc95/ChatGPT-CodeReview

[14] sturdy-dev/codereview.gpt: https://github.com/sturdy-dev/codereview.gpt

聊聊最近爆火的 CHAT-GPT的更多相关文章

  1. 简单聊聊WebSocket

    一.概述 上一篇文章<浅析一次HTTP请求>我们分析了简单的一次 HTTP 请求具体是怎么样完成的,分析了 HTTP 协议的数据结构,如何连接,如何断开,又是如何多路复用的,那么今天我们来 ...

  2. 装机、做系统必备:秒懂MBR和GPT分区表____转载网络

    装机.做系统必备:秒懂MBR和GPT分区表 科技美学 2016-10-17 16:36:23 阅读(3835) 评论(4) 很多网友询问MBR和GPT的问题,涉及到硬盘操作系统的安装,其实除了MBR和 ...

  3. 聊聊select, poll 和 epoll

    聊聊select, poll 和 epoll 假设项目上需要实现一个TCP的客户端和服务器从而进行跨机器的数据收发,我们很可能翻阅一些资料,然后写出如下的代码. 服务端 void func(int s ...

  4. 聊聊select, poll 和 epoll_wait

    聊聊select, poll 和 epoll 假设项目上需要实现一个TCP的客户端和服务器从而进行跨机器的数据收发,我们很可能翻阅一些资料,然后写出如下的代码. 服务端 客户端 那么问题来了,如果有一 ...

  5. 聊聊Unity项目管理的那些事:Git-flow和Unity

    0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了.敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理.项目从最初使用svn到之后的Git One Track策略再到现在的GitFlo ...

  6. Mono为何能跨平台?聊聊CIL(MSIL)

    前言: 其实小匹夫在U3D的开发中一直对U3D的跨平台能力很好奇.到底是什么原理使得U3D可以跨平台呢?后来发现了Mono的作用,并进一步了解到了CIL的存在.所以,作为一个对Unity3D跨平台能力 ...

  7. fir.im Weekly - 聊聊 Google 开发者大会

    中国互联网的三大错觉:索尼倒闭,诺基亚崛起,谷歌重返中国.12月8日,2016 Google 开发者大会正式发布了Google Developers 中国网站 ,包含了Android Develope ...

  8. 聊聊asp.net中Web Api的使用

    扯淡 随着app应用的崛起,后端服务开发的也越来越多,除了很多优秀的nodejs框架之外,微软当然也会在这个方面提供更便捷的开发方式.这是微软一贯的作风,如果从开发的便捷性来说的话微软是当之无愧的老大 ...

  9. 没有神话,聊聊decimal的“障眼法”

    0x00 前言 在上一篇文章<妥协与取舍,解构C#中的小数运算>的留言区域有很多朋友都不约而同的说道了C#中的decimal类型.事实上之前的那篇文章的立意主要在于聊聊使用二进制的计算机是 ...

  10. 聊聊 C 语言中的 sizeof 运算

    聊聊 sizeof 运算 在这两次的课上,同学们已经学到了数组了.下面几节课,应该就会学习到指针.这个速度的确是很快的. 对于同学们来说,暂时应该也有些概念理解起来可能会比较的吃力. 先说一个概念叫内 ...

随机推荐

  1. python安装/环境变量配置/多版本共存

    Python学习之路Day02: 一.今日学习内容概括: 计算机五大组成部分详解 计算机三大核心硬件 操作系统 编程与编程语言 编程语言的发展 编程语言分类 python解释器 Python Pyth ...

  2. Composer 部署国内镜像

    众所周知的原因,原版的镜像下载会比较慢,建议改成阿里的会比较快. 1 备份你的原镜像文件,以免出错后可以恢复.mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum ...

  3. ArrayList中的ConcurrentModificationException,并发修改异常,fail-fast机制。

    一:什么时候出现? 当我们用迭代器循环list的时候,在其中用list的方法新增/删除元素,就会出现这个错误. package com.sinitek.aml; import java.util.Ar ...

  4. C#调用WPS转换文档到PDF的的实现代码。

    1.WPS安装,最好用这个版本别的版本不清楚,安装Pro Plus2016版本. https://ep.wps.cn/product/wps-office-download.html 2.添加相关的引 ...

  5. 记录一次PyQt5内存泄漏的问题解决

    前言 前几天利用python-mpv写了一个播放器,但是跑着跑着发现内存越来越大,经过我反复调试终于解决了这个问题. 解决思路 模块定位 首先我是一个模块一个模块测试的,这样可以尽快缩减出问题的代码范 ...

  6. 关于linux fcitx输入法候选词中含有省略号的问题解决

    前言 这几天舍弃了 sogou 输入法,换上了google拼音输入法,因为我在纯文本终端调用中文输入法,搜狗显示出来的是加密的,候选词都是加密的,很烦这种 问题原因 这个问题主要是因为 云拼音 模块凉 ...

  7. ArcObjects SDK开发 003 宏观角度看ArcObjects SDK

    1.为什么要宏观上看ArcObjects SDK ArcObjects SDK库是一个非常庞大复杂COM组件集合,ArcGIS10.0有1000多个枚举.90多个结构体.5000多个接口以及4000多 ...

  8. day31-JQuery04

    JQuery04 6.jQuery的DOM操作02 6.9常用遍历节点方法 取得匹配元素的所有子元素组成的集合:children(),该方法只考虑子元素而不考虑任何后代元素 取得匹配元素后面的同辈元素 ...

  9. JavaScript入门⑦-DOM操作大全

    JavaScript入门系列目录 JavaScript入门①-基础知识筑基 JavaScript入门②-函数(1)基础{浅出} JavaScript入门③-函数(2)原理{深入}执行上下文 JavaS ...

  10. 实施 GitOps 的三个关键步骤

    GitOps 是一种自动化和管理基础架构和应用程序的模型,通过许多团队已经使用的相同 DevOps 最佳实践来形成的模型,例如版本控制.代码审查和 CI/CD 流水线.在实施 DevOps 时,我们找 ...