首页 > 其他分享 >chatGPT原理详解

chatGPT原理详解

时间:2024-01-26 10:34:17浏览次数:37  
标签:训练 模型 学习 详解 GPT 原理 chatGPT SFT InstructGPT

 

        自从chatGPT问世以来,它一路爆火,目前注册用户已达1亿。它的出圈让各大公司纷纷布局AIGC,有不少人预言,称ChatGPT带来的变革,将会颠覆谷歌的现有搜索产品和商业模式。就在发文前一个小时,谷歌宣布推出Bard对抗ChatGPT,打响保卫战,bard将在数周后面向大众使用。能引起人工智能领域这么大反响的chatGPT究竟是怎么运行的呢?下面我汇总了网络上关于chatGPT原理的资源。

        从整体技术路线上来看,ChatGPT使用了GPT-3.5大规模语言模型(LLMLarge Language Model,并在该模型的基础上引入强化学习来Fine-turn预训练的语言模型。这里的强化学习采用的是RLHFReinforcement Learning from Human Feedback,即采用人工标注的方式。目的是通过其奖励惩罚机制(reward)让LLM模型学会理解各种NLP任务并学会判断什么样的答案是优质的(helpfulness、honest、harmless三个维度)。下面分别讲解相关基础知识和chatGPT原理。

1,GPT

        GPT的全称是Generative Pre-Trained Transformer,顾名思义,GPT的目的就是通过Transformer为基础模型,使用预训练技术得到通用的文本模型。

        (1)GPT-1比BERT诞生略早几个月。它们都是采用了Transformer为核心结构,不同的是GPT-1通过自左向右生成式的构建预训练任务,然后得到一个通用的预训练模型,这个模型和BERT一样都可用来做下游任务的微调。GPT-1当时在9个NLP任务上取得了SOTA的效果。

        (2)对比GPT-1,GPT-2并未在模型结构上大作文章,只是使用了更多参数的模型和更多的训练数据(见表1)。GPT-2最重要的思想是提出了“所有的有监督学习都是无监督语言模型的一个子集”的思想,这个思想也是提示学习(Prompt Learning的前身。GPT-2在诞生之初也引发了不少的轰动,它生成的新闻足以欺骗大多数人类,达到以假乱真的效果。甚至当时被称为“AI界最危险的武器”,很多门户网站也命令禁止使用GPT-2生成的新闻。

        (3)GPT-3被提出时,除了它远超GPT-2的效果外,引起更多讨论的是它1750亿的参数量。GPT-3除了能完成常见的NLP任务外,研究者意外的发现GPT-3在写SQL,JavaScript等语言的代码,进行简单的数学运算上也有不错的表现效果。GPT-3的训练使用了情境学习(In-context Learning,它是元学习(Meta-learning的一种,元学习的核心思想在于通过少量的数据寻找一个合适的初始化范围,使得模型能够在有限的数据集上快速拟合,并获得不错的效果

表1 GPT系列

2,指示学习(Instruct Learning)和提示学习(Prompt Learning)

       指示学习是谷歌Deepmind的Quoc V.Le团队在2021年的一篇名为《Finetuned Language Models Are Zero-Shot Learners》文章中提出的思想,文中提出一种基于instruction-tuning的方法叫做FLAN(Finetuned Language Net),其中Instruction-tuning——finetuning language models on a collection of tasks (more than 60 NLP tasks) described via instructions。

         Prompt Learning是指对输入文本信息按照特定模板进行处理,把任务重构成一个更能充分利用预训练语言模型处理的形式。下图表示了微调和提示学习的区别:Fine-tuning中:是预训练语言模型“迁就“各种下游任务;Prompting中,是各种下游任务“迁就“预训练语言模型。

        Instruct是激发语言模型的理解能力,它通过给出更明显的指令,让模型去做出正确的行动。Prompt是激发语言模型的补全能力,例如根据上半句生成下半句,或是完形填空等。举例如下:

(1)提示学习:给女朋友买了这个项链,她很喜欢,这个项链太____了。

(2)指示学习:判断这句话的情感:给女朋友买了这个项链,她很喜欢。选项:A=好;B=一般;C=差。

        指示学习的优点是它经过多任务的微调后,也能够在其他任务上做zero-shot,而提示学习都是针对一个任务的。泛化能力不如指示学习。可以通过下图来理解微调,提示学习和指示学习:

在这里插入图片描述

3,强化学习

        强化学习两个最基本的要素就是状态等观测值和奖励函数。监督学习两个最基本的要素就是训练数据和标签。这俩完全就是无缝链接,因为观测值可以作为训练数据,奖励函数可以作为损失函数,标签也有了。这样就可以在agent在环境里跑的时候不断获得训练数据和标签,本质上就是agent的行为逐渐拟合奖励函数。强化学习并不需要人工标注数据,而是让机器自动学习标注。监督学习往往需要人为大量标注数据集,而强化学习需要人为创造环境和目标,让一个可以与环境交互的agent(代理人)自己学到达成目标的方法。

        强化学习通过奖励(Reward)机制来指导模型训练,奖励机制可以看做传统模训练机制的损失函数。奖励的计算要比损失函数更灵活和多样(AlphaGO的奖励是对局的胜负),这带来的代价是奖励的计算是不可导的,因此不能直接拿来做反向传播。强化学习的思路是通过对奖励的大量采样来拟合损失函数,从而实现模型的训练。同样人类反馈也是不可导的,那么我们也可以将人工反馈作为强化学习的奖励,基于人工反馈的强化学习便应运而生。

        InstructGPT/ChatGPT使用的RLHF最早可以追溯到Google在2017年发表的《Deep Reinforcement Learning from Human Preferences》,它通过人工标注作为反馈,提升了强化学习在模拟机器人以及雅达利游戏上的表现效果。

图:人工反馈的强化学习的基本原理

        InstructGPT/ChatGPT还使用了强化学习的另外一个算法——最近策略优化(Proximal Policy Optimization,PPO),PPO算法是一种新型的Policy Gradient算法,Policy Gradient算法对步长十分敏感,但是又难以选择合适的步长,在训练过程中新旧策略的的变化差异如果过大则不利于学习。PPO提出了新的目标函数可以在多个训练步骤实现小批量的更新,解决了Policy Gradient算法中步长难以确定的问题。

4,InstructGPT/ChatGPT原理解读

(1)InstructGPT流程

        InstructGPT/ChatGPT都是采用了GPT-3的网络结构,通过指示学习构建训练样本来训练一个反应预测内容效果的奖励模型(RM),最后通过这个奖励模型的打分来指导强化学习模型的训练。流程如下:

InstructGPT的计算流程:(1)有监督微调(SFT);(2)奖励模型(RM)训练;

(3)通过PPO根据奖励模型进行强化学习。

        具体步骤解释如下:

        步骤1.)从GPT-3的输入语句数据集中采样部分输入,基于这些输入,采用人工标注完成希望得到输出结果与行为,然后利用这些标注数据进行GPT-3有监督的训练。该模型即作为指令式GPT的冷启动模型。

        步骤2.)在采样的输入语句中,进行前向推理获得多个模型输出结果,通过人工标注进行这些输出结果的排序打标。最终这些标注数据用来训练reward反馈模型。

        步骤3.)采样新的输入语句,policy策略网络生成输出结果,然后通过reward反馈模型计算反馈,该反馈回过头来作用于policy策略网络。以此反复,这里就是标准的reinforcement learning强化学习的训练框架了。

        所以总结起来ChatGPT(对话GPT)其实就是InstructGPT(指令式GPT的同源模型,然后指令式GPT就是基于GPT-3,先通过人工标注方式训练出强化学习的冷启动模型与reward反馈模型,最后通过强化学习的方式学习出对话友好型的ChatGPT模型

(2)InstructGPT使用到的数据集

       InstructGPT使用了三个数据集,分别是:SFT数据集,RM数据集,PPO数据集。

        SFT数据集是用来训练第1步有监督的模型,即使用采集的新数据,按照GPT-3的训练方式对GPT-3进行微调。因为GPT-3是一个基于提示学习的生成模型,因此SFT数据集也是由提示-答复对组成的样本。RM数据集用来训练第2步的奖励模型。

表2:InstructGPT的数据分布

(3)InstructGPT三个阶段详释

        InstructGPT总结一下:RLHF用于第一二阶段,首先通过人工标注微调gpt模型得到SFT模型,用SFT模型生成k个回答人工排序,训练RM模型。第三阶段,把SFT模型参数拿来,用RM模型获得的reward进行训练,得到pro和pro-ptx模型。

  • 有监督微调(SFT)

        该阶段的输入是从测试用户提交的prompt(就是指令或问题)中随机抽取的一批数据(SFT数据集),主要分为两步:

  1. 对抽取的prompt数据人工进行高质量回答,获得<prompt,answer>数据对
  2. 通过高质量回答微调(fine-turn) gpt-3.5(InstructGPT)模型,在第一阶段帮助模型更好地理解输入指令。

        这样,一个基本的 GPT-3.5语言模型就被学习成了这里的 SFT 模型。

  • 奖励模型(RM)

        RM结构是将SFT训练后的模型的最后的嵌入层去掉后的模型。它的输入是prompt和Reponse,输出是奖励值。大致分为两步:

  1. 对于每个prompt,InstructGPT/ChatGPT会随机生成K个输出(4<=K<=9),然后向每个labeler(标注人员)成对的展示输出结果,也就是每个prompt共展示 个结果,然后用户从中选择效果更好的输出,即人工标注排名顺序。
  2. 用排序结果训练数据对<prompt,answer>,在训练时,InstructGPT/ChatGPT将每个prompt的 个响应对作为一个batch,这种按prompt为batch的训练方式要比传统的按样本为batch的方式更不容易过拟合,因为这种方式每个prompt会且仅会输入到模型中一次。

        奖励模型的损失函数是:最大化labeler更喜欢的响应和不喜欢的响应之间的差值。公式如下:

        其中rθ(x,y) 是提示x和响应y在参数为θ的奖励模型下的奖励值,yw是labeler更喜欢的响应结果, yl是labeler不喜欢的响应结果。D是整个训练数据集。

  • 强化学习模型(PPO)

        这一步数据集规模更大一些且和第一二阶段不同,且不再需要人工。其方法可以概括为以下四个部分:

  1. 由第一阶段的监督模型初始化PRO模型的参数
  2. PRO模型生成回答
  3. 用第二阶段RM模型对回答进行评估和打分
  4. 通过打分,更新训练PRO模型参数

        InstructGPT/ChatGPT在训练过程中遇到了两个问题:

        问题1:随着模型的更新,强化学习模型产生的数据和训练奖励模型的数据的差异会越来越大。作者的解决方案是在损失函数中加入KL惩罚项βlog(πφRLyx/πSFT(y|x))确保PPO模型的输出和SFT的输出差距不会很大

        问题2:只用PPO模型进行训练的话,会导致模型在通用NLP任务上性能的大幅下降,作者的解决方案是在训练目标中加入了通用的语言模型目标γEX~Dpretrain[log⁡(πφRL(x))] ,这个变量在论文中被叫做PPO-ptx。

       综上,PPO的训练目标为:

5, 实验与模型的衡量

  • Helpful——是否可以推断用户意图

        测试方法是标注员在待测试模型的输出和 SFT 模型的输出中选择一个更好的。如果得分为 0.5 则表示该模型和 SFT 相比性能差不多。下图左侧为GPT提供prompt,右侧即为instructGPT提供的prompt测试得到的结果。可以看出pro和pro-ptx模型相对于其它模型取得了更好的效果。

 

  • honest

        方法是在模型前加上如下这样的 instruction prompt,提示模型该小心什么问题,该怎样回答。

 

        结果如下,右图即为加上instruction的效果。其中灰色代表可信度,有颜色的即代表同时可信和包含信息量的额比率:

 

  • harmless

        方法也是加上instruction,从而减少模型产生有害/不礼貌/带有偏见的回答,效果如下所示:

 

标签:训练,模型,学习,详解,GPT,原理,chatGPT,SFT,InstructGPT
From: https://www.cnblogs.com/oopo/p/17988786

相关文章

  • 【跟着ChatGPT学深度学习】ChatGPT带我入门深度学习
    【跟着ChatGPT学深度学习】ChatGPT带我入门深度学习【跟着ChatGPT学深度学习】ChatGPT带我入门深度学习【跟着ChatGPT学深度学习】第一弹,入门深度学习。本次ChatGPT老师共教我三个知识点,分别是深度学习基础、深度学习的学习资源和深度学习需要掌握的技能和知识。最后,ChatGPT老......
  • 文心一言 VS 讯飞星火 VS chatgpt (187)-- 算法导论14.1 4题
    四、用go语言,写出一个递归过程OS-KEY-RANK(T,k),以一棵顺序统计树T和一个关键字k作为输入,要求返回k在由T表示的动态集合中的秩。假设T的所有关键字都不相同。文心一言,代码正常运行:以下是用Go语言编写的递归过程OS-KEY-RANK(T,k),用于返回关键字k在由T表示的动态集合......
  • 神经网络优化篇:详解超参数调试的实践:Pandas VS Caviar(Hyperparameters tuning in prac
    超参数调试的实践如今的深度学习已经应用到许多不同的领域,某个应用领域的超参数设定,有可能通用于另一领域,不同的应用领域出现相互交融。比如,曾经看到过计算机视觉领域中涌现的巧妙方法,比如说Confonets或ResNets。它还成功应用于语音识别,还看到过最初起源于语音识别的想法成功应......
  • Unity 的行为决策树的技术原理
    Unity的行为决策树是一种强大的工具,用于创建复杂的游戏人工智能(AI)。行为决策树是一种图形化的编程工具,它可以将游戏角色的行为和决策过程可视化,从而使开发人员更容易理解和调试游戏AI。在本文中,我们将详细讲解Unity的行为决策树的技术原理,并给出相应的代码实现。对啦!这里有个游戏......
  • Vue 3高级响应式数据探秘:原理、用法详解与实战示例!
     在Vue3中,数据的变化通过响应式系统来实现,该系统基于ES6的Proxy对象。Proxy对象允许拦截并自定义操作,因此Vue可以通过代理对象来实现对数据的监听和触发相应的操作。以下是Vue3中监测数据改变的原理、使用方法和步骤的详细描述,以及一个实例代码:原理:Vue3的响应式系统基于P......
  • Kafka 的高可用原理
    Kafka集群由若干个Broker组成,Topic由若干个Partition组成,每个Partition可存在不同的Broker上。可以这样说,一个Topic的数据,分散在多个机器上,即每个机器上都存放一部分数据。Kafka0.8以前Kafka0.8以前是没有高可用机制的。假设一个Topic,由3个Partiton组成。......
  • Java方法详解
    Java方法详解1、何谓方法System.out.println(),那么它是什么呢?Java方法是语句的集合,他们在一起执行以一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法的程序中被创建,在其他地方被引用设计方法的原则:方法的本意是功能块,就是实现某个功......
  • 一文详解全栈可观测的实现路径
    作者:曾庆国作者简介:曾庆国,来自阿里云智能-云原生可观测团队。过去多年一直从事云原生相关领域工作。从运营开源产品到商业产品研发;从应用交付、平台工程到深入云原生可观测。多次通过KubeCon、ArchSummit、A2M、云原生峰会等平台分享云原生实践经验。今天给大家带来一个非常让人兴......
  • 【ChatGPT 和文心一言哪个更好用?】
    ChatGPT和文心一言哪个更好用?随着人工智能技术的飞速发展,AI助手已经成为人们日常生活和工作中不可或缺的一部分。在众多AI助手中,ChatGPT和文心一言备受关注。本文将从智能回复、语言准确性、知识库丰富度等方面对这两大AI助手进行比较,以探讨它们在不同方面的优势和劣势。......
  • TCP与UDP协议的区别以及原理
    网络(11):TCP与UDP协议的区别以及原理TCP和UDP协议的区别以及原理最近重新认知了一下TCP和UDP的原理以及区别,做一个简单的总结。一、作用首先,tcp和udp都是工作在传输层,用于程序之间传输数据的。数据一般包含:文件类型,视频类型,jpg图片等。二、区别TCP是基于连接的,而UDP是基于非连接......