一文读懂ChatGPT模型原理

news2024/11/14 1:25:35
alt

本文是ChatGPT原理介绍,但没有任何数学公式,可以放心食用

前言

这两天,ChatGPT模型真可谓称得上是狂拽酷炫D炸天的存在了。一度登上了知乎热搜,这对科技类话题是非常难的存在。不光是做人工智能、机器学习的人关注,而是大量的各行各业从业人员都来关注这个模型,真可谓空前盛世。

我赶紧把 OpenAI 以往的 GPT-n 系列论文又翻出来,重新学习一下,认真领会大规模预训练语言模型(Large Language Model)的强大之处。

可能很多深度学习相关从业人员的感受和我一样,大家之前对 LLM 的感受依然是,预训练+finetune,处理下游任务,依然需要大量的标注数据和人工干预,怎么突然间,ChatGPT 就智能到如此地步?

接下来,我简要梳理一下 OpenAI 的 GPT 大模型的发展历程。

一、还得从 Bert 说起

2018年,自然语言处理 NLP 领域也步入了 LLM 时代,谷歌出品的 Bert 模型横空出世,碾压了以往的所有模型,直接在各种NLP的建模任务中取得了最佳的成绩。

Bert做了什么,主要用以下例子做解释。

请各位做一个完形填空: ___________和阿里、腾讯一起并成为中国互联网 BAT 三巨头。

请问上述空格应该填什么?有的人回答“百度”,有的人可能觉得,“字节”也没错。但总不再可能是别的字了。

不论填什么,这里都表明,空格处填什么字,是受到上下文决定和影响的

Bert 所作的事就是从大规模的上亿的文本预料中,随机地扣掉一部分字,形成上面例子的完形填空题型,不断地学习空格处到底该填写什么。所谓语言模型,就是从大量的数据中学习复杂的上下文联系。

二、GPT 初代

与此同时,OpenAI 早于 Bert 出品了一个初代 GPT 模型。

它们大致思想是一样的。都基于 Transformer 这种编码器,获取了文本内部的相互联系。

Transformer结构
Transformer结构

编解码的概念广泛应用于各个领域,在 NLP 领域,人们使用语言一般包括三个步骤:

接受听到或读到的语言 -> 大脑理解 -> 输出要说的语言。

语言是一个显式存在的东西,但大脑是如何将语言进行理解、转化、存储的,则是一个目前仍未探明的东西。因此,大脑理解语言这个过程,就是大脑将语言编码成一种可理解、可存储形式的过程,这个过程就叫做语言的编码

相应的,把大脑中想要表达的内容,使用语言表达出来,就叫做语言的解码

在语言模型中,编码器和解码器都是由一个个的 Transformer 组件拼接在一起形成的。

Transformer编码器组成的 Encoder-decoder模型
Transformer编码器组成的 Encoder-decoder模型

这里不展开讲 Transformer 里的内部结构,仅仅讲一下 Bert 和 GPT 的区别。

两者最主要的区别在于,Bert 仅仅使用了 encoder 也就是编码器部分进行模型训练,GPT 仅仅使用了 decoder 部分。两者各自走上了各自的道路,根据我粗浅的理解,GPT 的decoder 模型更加适应于文本生成领域

GPT 初代其实个人认为(当然普遍也都这么认为)略逊色于 Bert,再加上宣传地不够好,影响力也就小于 Bert。

我相信很多的 NLP 从业者对 LLM 的理解也大都停留在此。即,本质上讲,LLM 是一个非常复杂的编码器,将文本表示成一个向量表示,这个向量表示有助于解决 NLP 的任务。

三、GPT-2

自从 Bert 炸街后,跟风效仿的改进模型也就越来越多了,比如 albert、roberta、ERNIE,BART、XLNET、T5 等等五花八门。

最初的时候,预训练任务仅仅是一个完形填空任务就可以让语言模型有了极大进步,那么,很多人就想,给 LLM 模型出其它的语言题型,应该也会对模型训练有极大的帮助。

想要出语言题型不是很简单么,什么句子打乱顺序再排序、选择题、判断题、改错题、把预测单字改成预测实体词汇等等,纷纷都可以制定数据集添加在模型的预训练里。很多模型也都是这么干的。

既然出题也可以,把各种NLP任务的数据集添加到预训练阶段当然也可以。那就把机器翻译、文本摘要、领域问答统统往预训练里加。

这个过程也和人脑很像,人脑是非常稳定和泛化的,既可以读诗歌,也可以学数学,还可以学外语,看新闻,听音乐等等,简而言之,就是一脑多用

我们一般的 NLP 任务,文本分类模型就只能分类,分词模型就只能分词,机器翻译也就只能完成翻译这一件事,非常不灵活。

GPT-2 主要就是在 GPT 的基础上,又添加了多个任务,扩增了数据集和模型参数,又训练了一番。效果如下:

GPT-2学习效果图
GPT-2学习效果图

既然多个任务都在同一个模型上进行学习,还存在一个问题,这一个模型能承载的并不仅仅是任务本身,“汪小菲的妈是张兰”,这条文字包含的信息量是通用的,它既可以用于翻译,也可以用于分类,判断错误等等。也就是说,信息是脱离具体 NLP 任务存在的,举一反三,能够利用这条信息,在每一个 NLP 任务上都表现好,这个是 元学习(meta-learning)

四、GPT-3

大模型中的大模型

首先, GPT-3 的模型所采用的数据量之大,高达上万亿,模型参数量也十分巨大,学习之复杂,计算之繁复不说了,看图吧。

alt

GPT-3 里的大模型计算量是 Bert-base 的上千倍。统统这些都是在燃烧的金钱,真就是 all you need is money。如此巨大的模型造就了 GPT-3 在许多十分困难的 NLP 任务,诸如撰写人类难以判别的文章,甚至编写SQL查询语句,React或者JavaScript代码上优异的表现。

首先 GPT-n 系列模型都是采用 decoder 进行训练的,也就是更加适合文本生成的形式。也就是,输入一句话,输出也是一句话。也就是对话模式。

对话

我们是如何学会中文的?从0岁开始,听、说,也就是对话

我们是如何学外语的?看教材,听广播,背单词。唯独缺少了对话!正是因为缺少了对话这个高效的语言学习方式,所以我们的英语水平才如此难以提高。

对于语言模型,同理。对话是涵盖一切 NLP 任务的终极任务。从此 NLP不再需要模型建模这个过程。比如,传统 NLP 里还有序列标注这个任务,需要用到 CRF 这种解码过程。在对话的世界里,这些统统都是冗余的。

其实 CRF 这项技术还是蛮经典的,在深度学习这块,CRF这也才过去没几年。sigh……

in-context learning

以往的预训练都是两段式的,即,首先用大规模的数据集对模型进行预训练,然后再利用下游任务的标注数据集进行 finetune,时至今日这也是绝大多数 NLP 模型任务的基本工作流程。

GPT-3 就开始颠覆这种认知了。它提出了一种 in-context 学习方式。这个词没法翻译成中文,下面举一个例子进行解释。

用户输入到 GPT-3:你觉得 JioNLP 是个好用的工具吗?

GPT-3输出1:我觉得很好啊。

GPT-3输出2:JioNLP是什么东西?

GPT-3输出3:你饿不饿,我给你做碗面吃……

GPT-3输出4:Do you think jionlp is a good tool?

按理来讲,针对机器翻译任务,我们当然希望模型输出最后一句,针对对话任务,我们希望模型输出前两句中的任何一句。显然做碗面这个输出句子显得前言不搭后语。

这时就有了 in-context 学习,也就是,我们对模型进行引导,教会它应当输出什么内容。如果我们希望它输出翻译内容,那么,应该给模型如下输入:

用户输入到 GPT-3:请把以下中文翻译成英文:你觉得 JioNLP 是个好用的工具吗?

如果想让模型回答问题:

用户输入到 GPT-3:模型模型你说说,你觉得 JioNLP 是个好用的工具吗?

OK,这样模型就可以根据用户提示的情境,进行针对性的回答了。

这里,只是告知了模型如何做,最好能够给模型做个示范

用户输入到 GPT-3:请把以下中文翻译成英文:苹果 => apple; 你觉得 JioNLP 是个好用的工具吗?=>

其中 苹果翻译成 apple,是一个示范样例,用于让模型感知该输出什么。只给提示叫做 zero-shot,给一个范例叫做 one-shot,给多个范例叫做 few-shot。

alt

不能再给多了!一个是,咱们没那么多标注数据,另一个是,给多了不就又成了 finetune 模式了么?

在 GPT-3 的预训练阶段,也是按照这样多个任务同时学习的。比如“做数学加法,改错,翻译”同时进行。这其实就类似前段时间比较火的 prompt

alt

这种引导学习的方式,在超大模型上展示了惊人的效果:只需要给出一个或者几个示范样例,模型就能照猫画虎地给出正确答案。注意啊,是超大模型才可以,一般几亿参数的大模型是不行的。(我们这里没有小模型,只有大模型、超大模型、巨大模型)

alt

这个结果曲线图展示了用175 billion 的参数得到了优质的效果。彷佛在嘲讽我:哎,你没钱,你就看不着这种优质的效果,你气不气?

alt

五、ChatGPT

终于说到了主角,能看到这里的,可以关注一下 JioNLP 公众号吗?我写的也够累的。

ChatGPT 模型上基本上和之前 GPT-3 都没有太大变化,主要变化的是训练策略变了,用上了强化学习。

强化学习

几年前,alpha GO 击败了柯洁,几乎可以说明,强化学习如果在适合的条件下,完全可以打败人类,逼近完美的极限。

强化学习非常像生物进化,模型在给定的环境中,不断地根据环境的惩罚和奖励(reward),拟合到一个最适应环境的状态。

NLP + 强化学习

强化学习之所以能比较容易地应用在围棋以及其它各种棋牌游戏里,原因就是因为对于 alpha Go 而言,环境就是围棋,围棋棋盘就是它的整个世界。模型就是不断根据棋盘的状态以及输赢状况调整策略,战胜了柯洁。

而几年前知乎上就有提问,NLP + 强化学习,可以做吗?怎么做呢?

alt

底下回答一片唱衰,原因就是因为,NLP 所依赖的环境,是整个现实世界,完全无法设计反馈惩罚和奖励函数。除非人们一点点地人工反馈。

哎,OpenAI 的 ChatGPT 就把这事给干了。

不是需要人工标反馈和奖励吗?那就撒钱,找40个外包,标起来!

alt

这种带人工操作的 reward,被称之为 RLHF(Reinforcement Learning from Human Feedback)

具体操作过程就是下图的样子,采用强化学习的方式来对模型进行训练。已经抛弃了传统的 LM 方式。

alt

这里重点是第二步中,如何构建一个 reward 函数,具体就是让那40名外包人员不断地从模型的输出结果中筛选,哪些是好的,哪些是低质量的,这样就可以训练得到一个 reward 模型。

通过 reward 模型来评价模型的输出结果好坏。

讲真,这个 reward 模型,《黑客帝国》的母体 matrix 既视感有木有??!!

alt

只要把预训练模型接一根管子在 reward 模型上,预训练模型就会开始像感知真实世界那样,感知reward。

由此,我们就可以得到这个把全世界都震碎的高音!(误,模型)

ChatGPT 功能一览

ChatGPT 原理介绍完了,再来看看它能干啥工作?

  • 能回答知乎上的问题 alt

  • 你别想耍它 alt

  • 能回答困难的问题 alt

  • 能理解乱序文本 alt

  • 会做高数 alt

  • 知道自己是程序,不会做你女票 alt

  • 还能处理程序 bug

alt

六、影响

NLP 领域的影响

个人认为,NLP 领域的一些里程碑性的技术重要性排序如下:

ChatGPT > word2vec > Bert (纯个人看法)

ChatGPT 的关注度已经很大程度让人们感觉到,什么天猫精灵、小爱同学等等人工智障的时代似乎过去了。只要模型足够大,数据足够丰富,reward 模型经过了更多的人迭代和优化,完全可以创造一个无限逼近真实世界的超级 OpenAI 大脑。

当然,ChatGPT 依然是存在回答不好的情况的,比如会重复一些词句,无法分清楚事实等等。

而且,ChatGPT 目前看,它是没有在推理阶段连接外部信息的。

alt

模型知道自己的回答边界,知道自己只是一个没有情感的回答工具。那么,试想 OpenAI 把外部信息也导入到 ChatGPT 里,那是怎样的一副图景。

alt

另一些影响

我看到 ChatGPT 居然可以写代码,还能帮我改代码,debug,作为程序员,我不禁深深陷入了沉思

alt

据说,debug 程序员网站 stackoverflow,已经下场封杀 ChatGPT 了。

alt

当然,完全不仅仅是程序界。据说 GPT-4 正在做图文理解,那么,对于教师、医生、咨询师、等等等等,各行各业,是不是都是一个巨大的冲击?所谓专业领域的知识门槛,也将被模型一步踏平。

有人讲 google 将被替代,我认为也就还好吧,没准 google 此时此刻,NLP+强化学习也已经在路上了。

本文由 mdnice 多平台发布

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

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

相关文章

ORB-SLAM2 ---- Tracking::TrackWithMotionModel函数

目录 1.函数作用 2.步骤 3.code 4.函数解释 4.1 更新上一帧的位姿;对于双目或RGB-D相机,还会根据深度值生成临时地图点 4.2 根据之前估计的速度,用恒速模型得到当前帧的初始位姿。 4.3 用上一帧地图点进行投影匹配,如果匹…

JDK版本对应其major.minor version,看这一篇就够啦(附java历史版本下载地址)

文章目录前言JDK版本对应其major versionJDK历史版本下载地址前言 今天博主在学习SpringBoot,启动项目时遇到这样一个问题 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project springbo…

[附源码]JAVA毕业设计企业信息安全评价系统(系统+LW)

[附源码]JAVA毕业设计企业信息安全评价系统(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目…

[附源码]Python计算机毕业设计Django小区疫情事件处理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Git学习笔记 Git Gitee GitHub GitLab

目录 Git GitHub Gitee码云 GitLab Git 概述 何为版本控制 为什么需要版本控制 集中式版本控制工具 分布式版本控制工具 Git和代码托管中心 Git命令 git init命令 git config git status 查看 git 状态 git rm --cached xx git commit -m “备注” xx git reflo…

PHP代码审计系列(二)

PHP代码审计系列&#xff08;二&#xff09; 本系列将收集多个PHP代码安全审计项目从易到难&#xff0c;并加入个人详细的源码解读。此系列将进行持续更新。 strcmp比较字符串 源码如下 <?php $flag "flag"; if (isset($_GET[a])) { if (strcmp($_GET[a], …

DBCO-PEG3-Maleimide,Mal-PEG3-DBCO,二苯并环辛炔-三聚乙二醇-马来酰亚胺

​ 中英文名&#xff1a; CAS号&#xff1a;N/A| 英文名&#xff1a;DBCO-PEG3-Maleimide&#xff0c;Mal-PEG3-DBCO |中文名&#xff1a;二苯并环辛炔-三聚乙二醇-马来酰亚胺物理参数&#xff1a; CASNumber&#xff1a;N/A Molecular formula&#xff1a;C34H38N4O8 Molecul…

[附源码]计算机毕业设计绿色生鲜Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

一键免密登录云平台!ZStack Cloud 4.5.0等你来解锁……

近日&#xff0c;ZStack Cloud 4.5.0发布&#xff0c;新增支持多种标准单点登录&#xff08;SSO&#xff09;协议。云平台现可对接OIDC/OAuth2/CAS三种协议的统一身份认证系统&#xff0c;使认证系统中的用户可一键免密登录云平台&#xff0c;大大提高了云平台的访问效率和安全…

在 Git Bash 中为 vim 设置 Dracula 配色

因为本人一直习惯了用 Jetbrains 家的产品&#xff0c;而且一直独钟 Dracula 配色&#xff0c;因此想要在 Git Bash 中为 vim 配一款 Dracula 配色。本博客将详细介绍如何为 vim 配置暗系主题 Dracula。 一、安装 Dracula 在 Dracula 的官网其实已经给出了关于如何在 vim 中配…

Pygame入门

目录一、初始化pygame环境&#xff08;一&#xff09;在pycharm中新建一个工程&#xff08;二&#xff09;安装pygame&#xff08;三&#xff09;测试安装是否成功二、pygame基础&#xff08;一&#xff09;pygame初始化&#xff08;二&#xff09;设置显示界面&#xff08;三&…

[附源码]计算机毕业设计JAVA在线二手车交易信息管理系统

[附源码]计算机毕业设计JAVA在线二手车交易信息管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; S…

《PyInstaller打包实战指南》第二十二节 单文件模式打包Playwright

第二十二节 单文件模式打包Playwright 打包示例源码下载: 请看文章末尾 版本信息: playwright==1.28.0 pyinstaller==5.3 打包系统: Windows 10 打包前我们要先运行下代码,确保没有报错: # belle.py from playwright.sync_api import sync_playwrightwith sync_playw…

【Android】 android | as | android studio 安装与使用

一、说明 1、本文重点介绍android studio的使用&#xff0c;做Android应用开发 2、主要包括&#xff1a; 下载&#xff0c;安装&#xff0c;sdk配置&#xff0c;工具使用说明 二、下载Android Studio与配置 1、下载链接 https://developer.android.google.cn/studio 2、安装 参…

特征工程特征预处理归一化与标准化、鸢尾花种类预测代码实现

一、特征预处理 特征工程目的&#xff1a;把数据转换成机器更容易识别的数据 scikit-learn&#xff1a;提供几个常见的实用程序函数和转换器类&#xff0c;以将原始特征向量更改为更适合下游估计器的表示形式。即通过一些转换函数将特征数据转换成更加适合算法模型的特征数据…

IDEA基本配置

1.设置maven 1.在File->settings->搜索maven 2.Mavan home directory--设置maven安装包的bin文件夹所在的位置 3.User settings file--设置setting文件所在的位置 4.Local repository--设置本地仓库 2.IDEA 设置代码行宽度 1.在File->settings->Editor->Code St…

深度学习训练营之彩色图片分类

深度学习训练营原文链接环境介绍前置工作设置GPU导入数据归一化操作图片可视化构建CNN网络进行编译模型训练结果可视化图片展示对图片的内容进行辨别模型的精度评估原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&…

我为什么选择博客园!

过去一段时间我尝试了很多平台&#xff0c;说下感受。但是最后我还是选择了博客园。 1. 开始写csdn的原因&#xff1a; 积累一些东西&#xff0c;从而为自己的简历以及工作加分。 分享知识。 梳理知识和记录&#xff0c;因为好多东西做过&#xff0c;再问就忘了。尤其是面试…

深度学习-扩张卷积(dilated convolution)

1. 前言 扩张卷积&#xff08;DilatedConvolution&#xff09;也被称为空洞卷积或者膨胀卷积&#xff0c;是在标准的卷积核中注入空洞&#xff0c;以此来增加模型的感受野&#xff08;receptionfield&#xff09;\color{blue}{扩张卷积&#xff08;Dilated Convolution&#xf…

IOS内测记录:在自有App中运行小程序游戏

作为FinClip的老用户&#xff0c;很早就向官方提出了希望支持微信小游戏的建议。现如今&#xff0c;官方也把小游戏支持提上了日程&#xff0c;近期开启了公测通道。团队用小游戏进行了测试&#xff0c;在这里记录分享一下测试情况。 实现效果将微信小游戏搬到自己的APP中使用…