前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ChatGPT 基于倾向性识别的续写模型

ChatGPT 基于倾向性识别的续写模型

作者头像
叶锦鲤
发布于 2023-03-21 10:15:47
发布于 2023-03-21 10:15:47
9110
举报
文章被收录于专栏:悦思悦读悦思悦读

ChatGPT

ChatGPT是由OpenAI发布的一款基于对话的GPT模型,于去年11月30日发布,并在发布半个月后进行了一次迭代升级。这款模型因其出色的语言表达能力和广泛的应用领域而引起了巨大的关注。

发布后不到一周时间,ChatGPT就迅速获得了100万用户,但同时也被Stack Overflow禁用。随后,Google发布了一个“code red”,提醒公司对ChatGPT这款模型提高警惕。到了今年1月3日,纽约市禁止学校计算机访问ChatGPT。

https://openai.com/blog/chatgpt

▍空前强大的大型语言模型(LLM

ChatGPT的独特之处在于它是一个非常人类化的对话模型。早期的对话模型往往会生成听起来不像人话的文本,但ChatGPT则不会。它的回答语法、句法和词法都非常通顺,使得它的回答看起来非常像人类语言。

同时,它还是一个无所不知的模型,可以回答各种各样的问题,甚至可以写代码、写报告、出具文件等。另外,它还具有非常深刻的理解力,能够深刻理解人类提出的问题或需求。

针对ChatGPT善于理解人类问题内含的倾向性这一点,我们来看一个例子。

下图是我自己来写的两个小故事。

这两个故事都描述了一只猫和一只狗在街上相遇的场景。猫问狗要去哪里,狗回答说要去旅游。猫认为外面很危险,建议狗回家。这是故事的分叉点。之后,故事-1 是狗听从猫的劝告回家,故事-2 是狗不听劝告,坚持去旅游。

我们把这两个故事分别给ChatGPT续写,发现它能够理解到人原始的意思,并且根据输入的故事情境来续写故事。

回家版故事的续写描述狗回家后的情况,表明回家是一个正确的选择。

左右滑动查看| ChatGPT续写故事-1

而如下旅游版故事的续写则描述狗旅游后的情况,表明旅游是一个好的选择。

左右滑动查看| ChatGPT续写故事-2

这说明ChatGPT能够理解人原始的意思,并且根据输入的故事情境来续写故事。

▍ChatGPT的原理

ChatGPT是如何做到回答通顺、无所不知,并且能够理解人类的意图的呢?那么它能具有这些特点是因为它背后的模型基础原理。

我们需要知道的是ChatGPT并不是一个从零开始的模型,而是基于GPT-3.5进行了微调。它是基于巨量的训练数据得出的结果。这些数据可以理解为整个互联网的数据。此外,ChatGPT使用了强化学习的训练方法,即根据人类反馈进行学习。这种方法可以让模型更加智能。

需要注意的是,ChatGPT目前还没有发表论文,但是其开发者在其主页介绍中表示,它使用的方法与Instruct GPT相同。Instruct GPT是已经发表论文的模型 ([2203.02155] Training language models to follow instructions with human feedback (arxiv.org)),大家可以去阅读它的论文来了解更多细节。

https://arxiv.org/abs/2203.02155

▍认识 GPT

GPT(Generative Pre-trained Transformer)是一种预测下一个词(Predict Next Word)的模型,也可以称为续写模型。它接受一个文本序列作为输入,并在这个文本序列之后生成文本。下面是GPT模型的基础网络架构——基于注意力机制和深度转换器,包括了Attention层和Feedforward Network层,是一种典型的Language Model架构。

GPT是一种生成模型。这意味着,对于一个输入,输出不是唯一的,而是基于概率分布生成的。例如,如果输入是"I often go",输出可能是"to"、"home"或"shopping",其中每种输出都有不同的概率。GPT模型在生成输出时,会根据概率最高的词来生成输出,但这并不意味着每次都会输出概率最高的词。对于“I often go”这个输入,GPT只是以“to”对应的概率去生成 “to”,还会用一个比较小的概率来生成“home”,用更小的概率来生成 “shopping”等其他词。

GPT模型是一种大型的语言模型,它最早的版本发布于2018年。当时,它只有约1亿个参数,这意味着它有约1亿个权重。随着时间的推移,GPT模型不断演进。在2019年2月,它发布了版本2.0,参数量增加到了15亿。到了2020年5月,GPT模型发布了版本3.0,参数量增加到了1750亿。

这是一个非常庞大的模型,它具有非常强大的语言理解能力。随后,经过一年多的时间,GPT模型又发布了版本3.5,它的参数量与GPT 3.0相当,但经过了进一步的优化。

ChatGPT是基于GPT 3.5 fine tune出来的,由此可见它的参数量肯定不会小于1750亿。难怪它会有这样强大的语言能力。

▍ChatGPT的训练

目前没有直接的文献来描述ChatGPT的训练过程,不过根据InstructGPT的论文可以推测,ChatGPT的训练方法大致可以分为四个主要步骤:

首先,我们来看ChatGPT的预训练模型GPT。

GPT在学习续写的时候,使用互联网上大量的文本作为训练数据。由于互联网上的文本是有顺序的,我们可以将其分为两部分:输入和输出。输入部分是我们要输入给模型的文本,而输出部分是我们希望模型继续生成的文本。通过这种方式,我们就可以自动地为模型标注数据,而不需要人工干预。

通过这样的训练数据,GPT模型可以学习文本之间的概率关系,并在生成文本时通过这些概率关系来生成对应的输出。因为每次的输出都有一定的随机性,所以GPT生成的文本是不同的。这就是GPT模型的基本原理。

其次,当使用GPT 模型进行文本生成时,需要引导模型的续写方向。

这就涉及到数据收集,也就是需要一些人类导师专门提供一些问题和答案对,来帮助GPT 模型学习如何回答这些问题。

然而,人类专门生成的数据量毕竟是有限的,所以我们并不需要人类导师提供全部数据,只需要一些范例来帮助GPT 模型学习如何回答问题即可。这样,GPT模型就能够自主学习并回答更多的问题。

然后,需要人类标注员对数据来进行标注。

在训练自然语言处理模型时,数据标注是一个重要步骤。当我们使用GPT模型生成答案时,需要人类标注员来评估这些答案的质量。标注员需要打分来评估答案是否符合人类预期。人类标注员来对GPT生成的答案进行打分,评估生成答案的优劣。

这些标注数据将用于训练另一个称为Teacher Model的模型。这个Teacher Model训练出来以后就可以给GPT模型生成的答案自动打分,代替人工评估答案是否符合人类预期。

最后,进入到ChatGPT的训练,其训练方法叫做基于人类反馈的强化学习。

强化学习的基本原理是,根据模型的输出来给它打分,如果输出符合预期,我们就给它一个高分,如果输出不符合预期,我们就给它一个低分。模型会根据反馈来更新自己,向高分的方向去靠近,尽量避免低分的情况出现。

这里有一个例子,如果我们给ChatGPT输入一段话,最后结尾是“小明说:好的,我不去了,然后他就回家了”,ChatGPT就会有不同的输出。

当ChatGPT输出“小明于是就回到了家,开始写作业”时,这个输出是我们预期的,因为我们希望ChatGPT能够接着输入的话续写出“小明回家以后怎么样”的内容。这时候,利用人类标注数据训练出来的Teacher Model就会给这个输出打一个高分。反之,但是如果输出是“小明没回家,跑到另外一条街玩去了“,这个输出显然和我们的输入不相符,我们就会给它一个低分。

当有了这样一个训练框架之后,ChatGPT根据 Teacher Model的反馈来不断优化自己的输出。它就可以越来越多地符合人类的倾向。

这就是为什么我们之前讲的那个猫狗相遇的故事,当结局不同时会得到不同的续写。让狗回家就会得到“回家好”的版本,而让狗去旅游就会得到“旅游好”的版本。

ChatGPT的成本

最后我们还需要说一点的是ChatGPT 的训练和运行成本。

训练/运维一个模型的成本主要由以下几个因素组成:

  • 首先是硬件成本,训练模型需要大量的算力,这部分算力来自于硬件设备,比如说硬件集群。
  • 其次是算法成本,我们需要算法科学家和算法工程师来设计和实现算法,这部分成本是人工成本。
  • 还有,不论是数据收集和整理,还是训练本身,都是耗时且复杂的事情,这也是成本的一部分。训练大型模型可能需要长达9个月到1年的时间,这样就需要考虑硬件租用和折旧等成本;同样的,人工成本也是根据时间来计算的。

训练大型语言模型是一项非常耗费成本的工作。根据目前的估算,ChatGPT训练一次的成本约为460万美元——注意这里的数据根据GPT 3的训练成本估计。

而且ChatGPT的运行成本也不低,按照当前(2023年1月)百万级别的用户量计算,它每个月的运行成本约为300万美元。这也就是说, 不仅训练ChatGPT,使用它进行inference也非常昂贵。

注:本文是由 ChatGPT 根据下列视频经 ASR 自动导出的字幕改写生成的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 智汇AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【Jetpack】Navigation 导航组件 ② ( Navigation 核心要点说明 | 创建 Navigation Graph | 创建 NavHostFragment | 完整代码示例 )
必须按照上述流程进行创建 : Fragment -> Navigation Graph -> NavHostFragment -> NavController , 后面的组件依赖于前面的组件 , 否则无法实现 Navigation 导航 ;
韩曙亮
2023/10/11
7810
【Jetpack】Navigation 导航组件 ② ( Navigation 核心要点说明 | 创建 Navigation Graph | 创建 NavHostFragment | 完整代码示例 )
Android的Fragment的第一种声明方式
Android的Frangment的第一种声明方式 实际效果图如下: image.png 项目结构图如下: image.png fragment1: package com.demo.fragemen
Dream城堡
2019/03/04
4950
Android Navigation + Fragment 制作APP主页面导航(步骤 + 源码)
  我相信你肯定见过这样的App主页面,底部或者顶部有多个按钮,点击之后会切换当前的页面,滑动当前页面也会切换底部按钮,这里我用几个App的主页面来说明一下吧
晨曦_LLW
2020/12/11
10.6K4
Android Navigation + Fragment 制作APP主页面导航(步骤 + 源码)
Android学习笔记(七)两个Fragment简单跳转示例
codingblock
2017/12/29
9250
Android学习笔记(七)两个Fragment简单跳转示例
Android开发之漫漫长途 XII——Fragment详解
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索》以及《深入理解Android 卷Ⅰ,Ⅱ,Ⅲ》中的相关知识,另外也借鉴了其他的优质博客,在此向各位大神表示感谢,膜拜!!!
LoveWFan
2018/08/07
4470
Android开发之漫漫长途 XII——Fragment详解
kotlin--SharedFlow运用
Flow为上流发射,下流接收,是一对一的,而SharedFlow可以一对多,发射一次,多端接收 效果: 1.定义一个类,来对MutableSharedFlow对象作操作 package com.aruba.flowapplyapplication.common import kotlinx.coroutines.flow.MutableSharedFlow /** * Created by aruba on 2021/9/21. */ object LocalEventBus { val
aruba
2021/12/06
4840
kotlin--SharedFlow运用
kotlin--StateFlow运用
StateFlow当值发生变化,就会将值发送出去,下流就可以接收到新值。在某些场景下,StateFlow比LiveData更适用 效果: 1.定义ViewModel StateFlow需要初始值 package com.aruba.flowapplyapplication.viewmodel import android.view.View import androidx.lifecycle.ViewModel import kotlinx.coroutines.flow.MutableStateFl
aruba
2021/12/06
6800
kotlin--StateFlow运用
【Jetpack】Navigation 导航组件 ④ ( Fragment 跳转中使用 safe args 安全传递参数 )
之前的 默认 Navigation 跳转方法 , 只需要传入 navigation 资源 ID , 即可完成页面跳转 ;
韩曙亮
2023/10/11
6740
【Jetpack】Navigation 导航组件 ④ ( Fragment 跳转中使用 safe args 安全传递参数 )
Android 学习之Fragment的创建
本节学习Fragment, Fragment是Android3.0引入的新的API。引入的初衷是为了适合大屏幕的平板电脑。Fragment代表了Activity的子模块,因此可以把Fragment理解为Activity的片段。本节学习如何创建Fragment。
DragonKingZhu
2022/05/08
8250
Android 学习之Fragment的创建
android之Fragment介绍
Fragment:是Android3.0开始新增的概念,意为碎片。Fragment是依赖于Activity的,不能独立存在的。
李小白是一只喵
2020/12/08
8760
JetPack--Navigation
当想要切换Fragment时,使用NavController对象,指定跳转Navigation Graph中哪个Fragment,那么NavHostFragment会切换成相应的Fragment
aruba
2021/12/06
6550
JetPack--Navigation
【Jetpack】Navigation 导航组件 ⑤ ( NavigationUI 类使用 )
NavigationUI 类支持一些系统自带的控件 , 配置后 , 自动跳转 Fragment 界面的功能 , 使用起来非常简洁 , 支持的可配置 Navigation 跳转的控件有 :
韩曙亮
2023/10/11
1.2K0
【Jetpack】Navigation 导航组件 ⑤ ( NavigationUI 类使用 )
ViewPager 2 使用讲解「建议收藏」
之前早有耳闻 Google 为我们提供新的控件来替换老旧的 ViewPager 进而解决一些不好解决的bug问题,巴拉巴拉一大堆,就是前因后果啥的…相信读者已经在“张鸿洋”大神、“郭霖”大神或者是其他Android 大佬的公众号那里看见了许许多多了,或许各位感觉很无聊了,笔者菜鸟,分析不了历史背景,也不是很懂源码,但是小菜鸟,可以带给位看官尝个鲜,教你怎么用,怎么上手哈,闲话不多说,我们步入正题。
全栈程序员站长
2022/09/15
1.4K0
ViewPager 2 使用讲解「建议收藏」
【Jetpack】LiveData 架构组件 ( LiveData 简介 | LiveData 使用方法 | ViewModel + LiveData 示例 )
在 视图 View 与 数据模型 Model 通过 ViewModel 架构组件 进行绑定后 , 可以立即 将 ViewModel 中的数据设置到 UI 界面中 ,
韩曙亮
2023/03/30
1.5K0
【Jetpack】LiveData 架构组件 ( LiveData 简介 | LiveData 使用方法 | ViewModel + LiveData 示例 )
Android的Fragment中的互相通信-桥梁activity
Android的Fragment中的互相通信-桥梁activity 效果图如下: image 项目结构图如下: image Fragment1: package com.demo.fragmentto
Dream城堡
2019/03/04
4880
android之TabLayout介绍
TabLayout是Android support中的一个控件android.support.design.widget.TabLayout,Google在升级了AndroidX之后,将TabLayout迁移到material包下面去了com.google.android.material.tabs.TabLayout,原来的support下面的TabLayout从API 29开始就不再维护了。
李小白是一只喵
2020/12/08
1.2K0
相关推荐
【Jetpack】Navigation 导航组件 ② ( Navigation 核心要点说明 | 创建 Navigation Graph | 创建 NavHostFragment | 完整代码示例 )
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档