chatpot和ChatGPT的区别gpt4和chatGPT的区别:ChatGPT 最全 技术解读 在哪里? 满满干货
引言待补充GPT-1[1]GPT-2[2]GPT-3[3]生成式任务主流的五种算法不同生成模型概览生成任务的核心思想就是保…...
互联网无处没有在,影响着我们的生活方方面面。从最近的新闻中,我们可以看到互联网正以1种令人难以置信的速度发展,让我们1起看看有哪些令人兴奋的故事。
引言待补充GPT⑴[1]GPT⑵[2]GPT⑶[3]生成式任务支流的五种算法
没有同生成模型概览生成任务的核心思想就是保证生成的样本的分布要取训练数据的分布接近,这样生成出来的数据和原有的数据就会十分相似,可以以假乱真的地步当今深度学习领域最支流的模型包括自回归模型Autoregressive Model (AR)、生成对抗网络Generative Adversarial Network (GAN)、标准化流模型Normalizing Flow (Flow)、自编码器Auto-Encoder (AE)取变分自编码器Variational Auto-Encoder (VAE)、去噪扩散模型Denoising Diffusion Probablistic Model (Diffusion)等等。
如上图所示[4],展示了没有同模型的处理流程为了不出现大量的数学公式,这里只是形式化得说明没有同生成框架的基本处理流程,如果大家对算法细节感兴趣,还是建议去阅读原始论文Generative Adversarial Network(GAN)。
GAN由两部分组成,1个是生成器,1个是判别器训练的时候,从1个先验分布中采样1个 zz ,输入到生成器中,得到1个样本然后再从真实的数据集中采样出1些真实的样本,跟生成器生成的样本1起输入到判别器,由判别器来判断生成样本的真实度,以此来指导生成器的训练。
理想状态下,生成器和判别器会达到1个均衡状态,此时,采样1个zz ,输入到生成器里就可以得到1个比较好的样本GAN从2014年发明以来,此类方法已经成为计算机视觉领域生成任务的主力,支配了图像生成、图像编辑、视频生成、视频编辑以致超分降噪增强等领域,近几年Stylegan系列方法把GAN的效果推到了1个顶峰。
没有过GAN类的方法在NLP领域1直没有大火,这有可能跟GAN没有太擅长处理离散空间有关,也有可能跟判断文本是真实的还是生成的这个任务更难有关(最近也有相关的工作去判断1段文本是没有是由ChatGPT生成的,效果也比较1般)。
Auto-Encoder(AE)Auto-Encoder是由两部分组成,1个是编码器,1个是解码器Auto-Encoder也是利用自监督的方式,编码器负责将输入编码成1个latent code,然后解码器负责将latent code恢复成输入的原始状态。
如果是在输入添加1个mask,在NLP领域就是大名鼎鼎的Bert,在CV领域就是MAE系列方法2014年,Auto-Encoder的变体Variational Auto-Encoder被提出,其结构上很像Autoencoder,但是思想上更像是变分贝叶斯和图模型,没有像是AE是把输入映射到1个固定维度的向量上,VAE则是映射到1个分布上。
VAE方法至今仍活跃在CV领域,如VQ-VAE等Normalizing Flow(Flow)在机器学习的问题中,想直接去做概率密度估计是非常难的[5]考虑到深度学习的训练过程中,需要做反向传播,那么某些概率分布,比如后验概率就需要变得非常简单,这样才能高效、容易得计算导数。
这就是为何即使真实天下是非常复杂的,高斯分布还能广泛得应用在含有隐变量的生成模型中Normalizing Flow是1种更好的更强大的概率分布近似方法,其通过应用1系列可逆的变换,将1个简单的分布映射成1个复杂的分布(其实思想上跟。
diffusion model有点类似)其中比较有代表性的是openai的Glow[6],和超分领域的SRFlow[7]Autoregressive Model(AR)Autoregressive model,中文称为自回归模型,1般来说是单向的,比如放在NLP里,就是从左到右依次预测单词(当然也可以从右往左),比较有代表性的就是GPT系列,放在CV里就是按照像素的遍历顺序,依次预测像素值,比较有代表性的就是PixelRNN、PixelCNN等。
如果取Auto-Encoder的方法作对比,Auto-encoder的方法基本上可以看到完整的高低文,即使是基于masked的方式,如bert,也是能看到整个语言序列或者整张图像的全局信息,而往往Autoregressive Model只能看到单向的信息,当然可能这种方式更符合人类说话的习惯。
从现在的发展情况看,可能基于Auto-encoder的方法如bert、MAE这种,更适合做理解,做预训练模型,然后迁移到下流的任务,而基于Autoregressive的方法如GPT系列可能更适合做生成Diffusion Model
Diffusion Model的概念启发于non-equilibrium thermodynamics领域包括两个过程,第1个过程从1张图像逐渐添加高斯噪声,最终完全变成1个noise图像,然后还有1个相反的过程,是从1张noise的图像中恢复出原始的图像。
Diffusion Model里也有latent的概念,只没有过是高维的,当然后续也有通过降低latent的维度来优化计算过程的,比如大名鼎鼎的stable diffusion从1个图像分布中采样1张图片,forward的过程是逐步向这张图片上加高斯噪声,每1步是由varaince beta控制的。
因为使用了重参数化技巧,所以可以在任意的时间T,采样出这个表达的形式这个过程可以类比朗之万动力学,朗之万随机梯度下落就是在sgd里添加随机的高斯噪声,避免走入local minimalReverse的过程则是从1个随机的高斯noise重建1张图片,经过1大波计算和简化,最终的目标变成了预测第T步的noise。
此外,为了加速推理的过程,可以跳几步采样,比如DDIM值得注意的是denoise用的模型是基于时间t的unet+cross attention机制,来灵活得处理没有同的条件信息,比如class、语义图等Diffusion Model
在最近两年已经成为CV生成领域最热门的方法尤其是在多模态生成领域,如text-image生成上,基本上是获得了统治性的地位,诸如stable diffusion、dalle2等方法都大量使用了diffusion model。
在单1的图像生成领域,Diffusion Model在生成的效果和多样性上也已经击败早年的1些GAN类方法当然如果在封闭的数据集上,最新的1些GAN[8][9]方法也还是能匹配diffusion model的效果。
当前的Diffusion Model依然面临在推理时需要消耗海量计算资源的问题,这也限制了其落地的场景总结
生成任务算法分类如上图所示,没有同的生成任务的算法,可以按照其没有同的特性分为这几类注意,图中所说的更好的生成质量和更好的概率密度建模是考虑整体方法的平均能力,并没有能代表特定任务的特定方法,比如现在有1些Diffusion Model就比1些GAN类方法的生成效果更好。
此外,这些生成任务的算法并没有是孤立的,互相排斥的,他们之前也完全可以相互结合,如VAE和Flow结合[10],Autoregressive和Flow结合[11]等等GPT发展史GPT⑴长暂以来,NLP领域的发展1直没有如CV领域,次要原因是因为CV领域有百万级别且标注质量还没有错的分类数据集ImageNet。
CV领域以往都是在ImageNet上预训练1个分类模型,然后把backbone finetune到下流的数据上相比而言,NLP领域1直都没有质量高的大型的有监督数据此外,就算是同样1个样本,1张图片上的信息量是要远大于1句话,综合这些因素造成NLP领域发展相对缓慢。
事实上,是从GPT⑴开始,NLP领域才开始应用大规模的无监督数据做预训练,并迁移到下流的当然本身这种做法在机器学习领域并没有罕见,同样的做法至少可以追溯到2012年word2vec时期,只没有过当时模型的参数量和数据的规模都没有现在这么大。
GPT⑴跟更早的工作ELMo[12]在idea上基本是1致的,相当是1个数据量和计算量更大的ELMo,次要的区别1个是GPT⑴的网络结构是多层transformer decoder如下图所示,而ELMo是双向LSTM,所以在网络结构上是完全没有创新的,第二个区别在于GPT⑴在finetune迁移到下流任务的时候,没有需要专门为了特定任务设计网络结果,而是直接在原有的base模型后接1个简单的线性层即可。
GPT⑴的transformer decoder前面提到,GPT⑴的训练过程分为两段,第1段是1个无监督训练,给定1个序列 xx , xix_{i} 是序列里第 ii 个词汇,给定1个滑动窗口 kk
,第ii个词则是由前kk个词预测而来,符合前文介绍的Autoregressive模式GPT⑴使用标准语言建模来最大化该序列的概率:(1)LLM=−∑ilogp(xi∣xi−k,…,xi−1)\mathcal{L}_\text{LM} = -\sum_{i} \log p(x_i\mid x_{i-k}, \dots, x_{i⑴}) \tag1。
在第二个阶段,GPT⑴利用半监督训练去迁移到下流任务也就是在第1阶段的无监督训练的目标上,叠加下流的目标,比如如果是文本分类,就是在GPT⑴的base model后面再接1个线性层,然后叠加的是1个普通的分类loss。
那至于为何在finetune阶段还需要把无监督的loss加上,论文给的解释是有两个好处,1个是能加快训练收敛的速度,1个是能提高监督模型的泛化能力顺便再八卦1句,GPT⑴的1作就是第1次把GAN方法在图像生成上做出make sense结果的大名鼎鼎的DCGAN的作者,我现在依稀还记得,就是在2015年底,DCGAN横空出世,大家都被论文披露的效果惊艳到了,然后彻底引爆了学术界对GAN的兴趣,才有了从2016年开始以致现在整个GAN领域的蓬勃发展。
这个大佬同样是里程碑式的text-image多模态模型CLIP的1作,甚至连openai提出的强化学习算法PPO里,都有这个大佬的参取这个大佬的工作横跨CV、NLP、强化学习,而且出品的都是顶级的工作,实在是令人惊叹。
希望能在未来的GPT⑷(据说会是1个多模态模型)中,看到这个大佬在这3个领域的顶级表现GPT⑵在GPT⑴和GPT⑵这两个工作之间,谷歌发布了Bert,更大的参数量、更大的数据量把GPT⑴击败了。
二者次要的区别在于Bert用的是Transformer的编码器,GPT⑴用的是Transformer的解码器,预训练的过程中,Bert利用的是MAE,GPT⑴是Autoregressive然而,在这个情况下,GPT⑵并没有变更技术路线,还是继续用解码器,用Autoregressive这种方式,然后把参数量提升到15亿(Bert最大也就3.4亿参数量),是前作GPT⑴的10倍多,数据量也上升至百万量级。
其实可以看到,从Bert、GPT⑵开始,基本宣告了大公司NLP领域军备竞赛,后面NLP领域就开始涌现出1个又1个大力出奇迹的模型没有过GPT⑵这篇文章贡献点没有只是在更大的参数量和更大的数据规模上,还关注了
zero-shot learning先前在NLP领域里,大家处理下流的任务,都是需要在新的任务上finetune的,而GPT⑵是想没有通过finetune,预训练的模型直接应用在下流任务上解决这个问题的办法,是给下流的任务设计1个提示的方法。
[13],这个其实也算是prompt learning早期的应用之1比如说,对1个下流的语言翻译任务来说,可以把输入的序列做成这样的形式 (translate to french, english text, french text),。
这个3元组分别就代表了任务、输入和输出如果要做阅读理解,输入序列可以长成这样:(answer the question, document, question, answer)然后通过模型自身强大的学习能力,去理解要去作这个下流任务。
GPT⑶GPT⑵发布以后,就在社交媒体上引发了没有小的热议,1方面,GPT⑵确实能生成1些似是而非的文章、假新闻,让人分没有清是没有是这些内容是没有是由AI撰写的,另1方面,在大部分的使用场景下,GPT⑵还是会经常胡说八道(这个特点1直延续到了ChatGPT)。
抛开zero-shot的任务,GPT⑵在常规的NLP任务上相比于先前的方法并没有优势可能zero-shot本身还是有点太极端了,所以GPT⑶采用few-shot(每个任务10⑴00个有标签的样本)的方式,想在常规任务上达到1个好的效果。
由于GPT⑶将模型的参数量提升到了1750亿,batch size来到了320万(有钱真好啊),所以GPT⑶的作者们在迁移到下流任务的时候依然没有想去finetune整个网络,没有想重新训练
GPT⑶的fewshot learning的方法如上图所示,GPT⑶在作zero-shot任务的时候,是先告知1个具体的任务,然后再给1个prompt,在作one-shot任务的时候,其实就是把已知的带标签的样本,放在输入序列里,1起输入模型,所以fewshot任务其实也就是把有限的这几个有标签的数据全部放在输入序列中。
这样1来,GPT⑶可以没有经过任何的finetune训练就可以吸收这些fewshot样本的知识,并且在推理的时候运用到GPT⑶的效果相比于GPT⑵来说提升太多了,所以其1经发布就在社交媒体上引起轩然大波。
又因为GPT⑶没有需要重新训练就可以迁移到下流任务上,所以才可以让这么多用户凭借自己的创意玩起来,写新闻、搞翻译、写代码都没有在话下,GPT⑶上已知的应用都已经有好几百了然而还是以前的老问题,GPT⑶因为训练数据的问题,在性别、种族、宗教上都存在1些偏见,而且也沿袭了GPT系列的老传统,总是喜欢胡说八道,只没有过相比于前几代,分辨GPT⑶是没有是在胡说八道的成本要大的多。
InstructGPT/ChatGPTInstructGPT和ChatGPT是GPT⑶和GPT⑷之间的过渡模型,据Openai的披露,这两个工作的没有同1个是在采集数据的方式上,ChatGPT因为任务没有同,所以需要收集多轮的对话数据。
另1个区别是InstructGPT是在GPT3上微调,ChatGPT是在GPT3.5上微调,除此以外技术原理基本上是1致的由于ChatGPT并没有公开的论文,所以要搞懂ChatGPT,我们必须要先读懂InstructGPT。
我们回顾1下GPT系列的训练目标,是给定前面的1些单词系列,预测下1个单词而用户在实际的使用过程中,是想要通过人类的指示,得到安全、可信、有帮助的答案从这个地方可以看到,GPT-系列的训练目标,跟用户的意图是没有匹配的。
所以InstructGPT就是为了解决训练目标和用户意图之间的alignment的问题InstructGPT解决这个alignment的技术就是RLHF(reinforcement learning from human feadback)。
如图所示,InstructGPT的训练过程分为以下3个阶段:第1阶段:训练监督模型 让人类标注人员写1些问题,比如“向1个小孩子解释什么是月亮”,这种问题有些是标注人员自己想的,有些是从已有的数据集里抽取的,也有1些是来自以往GPT3收到的问题请求。
这些问题就构成了prompt然后再由人类标注人员,给这些问题写答案,这就构建了1个有监督的数据集GPT⑶使用这些有监督的数据去finetune,获得SFT模型, Supervised Fine-Tuning。
此时的SFT模型在遵循指令/对话方面已经优于 GPT⑶,但没有1定符合人类偏好
InstructGPT的训练流程第二阶段:训练奖励模型(Reward Mode,RM) reinforcement learning from human feadback,顾名思义,是用人类的反馈指导强化学习训练。
然而,在强化学习里,非常重要的概念叫reward,强化学习的目标就是为了达成最大的reward这个reward本身是非常难定义的,把人类引入进来,在模型作生成的时候,人类对模型的输出 yy 做1个评价,可以当作reward指导强化学习训练。
但是事实上,没有可能在模型训练的时候找1小我,专门盯着模型,模型输出1个 yy 就作1个评价,这种方式时间上效率实在是太低了所以首先需要从人类的反馈中,先学习1个reward网络具体的做法是在数据集中随机抽取问题,然后对每1个问题都生成 。
kk 个答案,在原文里 k=9k=9 ,然后由人类对这9个答案进行排序在得到9个答案的排序名次以后,抽取里面任意两个答案用pair-wise ranking loss进行训练,这里的做法跟metric learning、检索、计算美学里的完全1样,基本的思路就是让同1个问题下,排序靠前的回答得分更高,排序较低的回答得分更低。
(2)loss(θ)=−1(K2)E(x,yw,yl)∼D[log(σ(rθ(x,yw)−rθ(x,yl)))]\operatorname{loss}(\theta)=-\frac{1}{\left(\begin{array}{c}K \\ 2\end{array}\right)} E_{\left(x, y_w, y_l\right) \sim D}\left[\log \left(\sigma\left(r_\theta\left(x, y_w\right)-r_\theta\left(x, y_l\right)\right)\right)\right] \tag2
值得注意的是,这个过程中只是用了3.3万小我工标注的数据,这个成本是相当低的,所以这个思路完全可以借鉴到大家自己的任务中去 第3阶段:采用PPO(Proximal Policy Optimization)结合无监督的目标进行优化。
如公式(3)所示,第1行是PPO的目标,第二行是通用的语言模型目标(根据前 kk 个的词预测当前的词)PPO的目标也由两部组成,左边那部分就是第二阶段提到的reward model,目的是让网络输出的回答的评分越高越好,右边那部分是度量KL散度,让优化后的模型的输出跟优化前模型的数据尽可能接近,避免结果跑偏。
(3) objective (ϕ)=E(x,y)∼DπϕRL[rθ(x,y)−βlog(πϕRL(y∣x)/πSFT(y∣x))]+γEx∼Dpretrain [log(πϕRL(x))]\text { objective }(\phi)=E_{(x, y) \sim D_{\pi_\phi}^{\mathrm{RL}}}\left[r_\theta(x, y)-\beta \log \left(\pi_\phi^{\mathrm{RL}}(y \mid x) / \pi^{\mathrm{SFT}}(y \mid x)\right)\right] + \gamma E_{x \sim D_{\text {pretrain }}}\left[\log \left(\pi_\phi^{\mathrm{RL}}(x)\right)\right] \tag3
至此,已经梳理完毕InstructGPT的核心技术,但是跟InstructGPT没有同的是,ChatGPT有很强大的高低文语义的理解能力,可以进行质量很高的多轮对话,这项能力背后的技术没有在Openai的官方信息中得到体现,有人猜测这个技术可能跟谷歌的Chain of Thought有关。
未完待续AIGC大事件时间线谷歌的问题生态上:TensorFlow的衰落、逐步走向闭源决策上:道德委员会技术路线:AE取AR、稠密取稀疏人才流失:陆陆续续也有没有少谷歌大佬从谷歌跑路去Openai[14]。
[15][16][17]参考^GPT⑴https://s3-us-west⑵.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf。
^GPT⑵https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf^GPT⑶https://arxiv.org/abs/2005.14165
^生成模型概述https://lilianweng.github.io/posts/2021-07⑴1-diffusion-models/^flow modelhttps://lilianweng.github.io/posts/2018⑴0⑴3-flow-models/
^Glowhttps://arxiv.org/pdf/1807.03039v2.pdf^SRFlowhttps://arxiv.org/pdf/2006.14200v2.pdf^Stylegan-Thttps://arxiv.org/pdf/2301.09515v1.pdf
^Stylegan-XLhttps://arxiv.org/pdf/2202.00273v2.pdf^f-VAEshttps://arxiv.org/abs/1809.05861^Masked Autoregressive Flow
https://arxiv.org/abs/1705.07057^ELMohttps://arxiv.org/abs/1802.05365^MQANhttps://arxiv.org/pdf/1806.08730.pdf
^https://twitter.com/_jasonwei/status/1625575747401441280^https://twitter.com/hwchung27/status/1625583734086045696
^https://twitter.com/shaneguML^https://twitter.com/rown/status/1624845687795101697?s=20&t=bYhIofvmBvM6G2PDeO1iaA
这篇文章就到这里啦,如果你觉得有用的话,没有妨给我1个赞,也可以关注我的账号,收藏我的文章,让我们1起学习进步吧!
当前非电脑浏览器正常宽度,请使用移动设备访问本站!