李宏毅生成式AI

 

无论GPT展现出何种强大的能力,其本质的技术都是,

一个用于语言接龙的function,这个function非常大,有几千亿个参数,所以成为语言模型,或大模型

GPT是什么意思,

对于传统的机器学习都是监督学习,需要大量人类准备的资料,有限的资料就导致很难产生很好的模型

但对于语言模型,天然优势是他可以自督导学习,如下面的例子

自督导学习,一直到GPT3,因为他本质是文字接龙,所以如果直接用于和人对话,或其他目的,效果不会太好

但作为pre-train,基石模型

需要人来继续教,finetune,但是在基石模型之上,进一步学习所需要的资料不会太多

这样就产生了chatGPT,chatGPT是人基于chat场景对于GPT3进行finetune的结果,所以称为GPT3.5

最后一步是,增强学习,通过人的反馈

 

 这张图显示出Pre train带来的帮助,在pre train的基础上,哪怕对于英文QA进行fine tune,居然在中文QA的test中也能得到不错的结果 

 

对于机器学习,传统认为分成,回归和分类

其实还有一种是,结构化生成

生成式AI,分两种类型,逐个生成或一次生成

逐个生成,自回归AR,对于文字很容易理解,右边给出为何逐个生成的质量会更好,因为前面生成的内容可以作为后续生成的context

但对于图像,逐个生成像素效率过低,所以还是需要一次性生成

是否可以结合两者的优点,

有两者方法,

用逐个生成先生成sample向量,再作为一次生成的输入

多次使用一次生成,逐渐优化,即diffusion model

 除了GPT,还有一种Newbing这样的模型

比如,WebGPT,Toolformer,他们是要检索网络或利用网络服务的

会将任务拆解成多种固定的步骤,通过类似接龙的方式来一步步执行

至于如何形成任务,比较生成搜索关键字,选择收藏哪一个结果等,是要通过人工的例子去训练的 

 

现在正式来结束大模型

这里有两种,

专才,Bert,文字填空,无法直接生成完整的句子,对于特定任务需要改造

通才,GPT,文字接龙,可以直接用于各种任务

 

 

对于专才的改造,主要是通过外挂和Finetune

Adapter是特殊形态的Finetune,有点类似迁移学习,语言模型参数本身不变,实在tune后加上的adapter的参数

这样的好处自然就是不用保存很多大模型,只需要存很小的adapter

专才的tune还是类似传统的监督学习

通才的使用方法

GPT的思路已经和传统的监督学习不一样了,有点像魔法

他本身是语言模型,所有的东西完全黑盒,你无法确切知道他具有怎样的能力

所以将他用于一个场景,不是按传统的思路进行finetune,而是要明确让他知道你想干什么

模型能力本身是很强大的,但是你如何发掘出这样的能力是个问题

所以更重要的是,如何prompt,模型咏唱师,催眠师,这个太有趣了,超出传统认知。

其中两种方式,in-context learning和Instruction learning

in-context learning,说白了,就是给例子,让大模型学着做

比如情感分析, 注意这里不是训练集,只是告诉模型你要干什么

所以有研究表面,context例子中的正面和负面,哪怕给的不对不太会影响结果,但后续的研究表示,当模型足够大的时候,可以学习到context里面的错误的例子。

分为几种类型,指给例子的多少

可以看出这里是不会做gradient descent,即不会更新模型参数,所以不算训练

 

Instruction learning,用语言告诉模型,让他干啥。这个听着比给例子要难些

这个通过给出指令,和完成结果进行训练,这里仍然是告诉模型你想干什么,目的和in-context没有区别

只是交互方式不同 

这样的理解有些问题,其实是可以用Instruction learning对模型进行fine tuning的,比如下面的图,

CoT,这个很神奇的是数学题,你直接问是错的,但你在in-context中给出步骤,再让系统做,系统也会给出步骤,这样正确率就会提升。

更神奇的是,你不用给例子,直接告诉机器,分步骤,也能大幅提升准确率。

右图给出,如何prompt可以使得准确率更高,最高的那个也是用模型生成的。

看着不可思议,几点,

- 分步骤,分而治之会将问题简化,提升准确率,这个和人一样

- 给例子和下指令的目标类似的,主要是让模型知道你想干什么,所以都会大幅提升准确率,

- 模型并没有真正的推理和计算,只是根据模型中学习到的大量结题过程,生成结题步骤,中等模型也许只能生成步骤,无法计算对,所以要到很大的模型时,结果才能对

对于复杂的问题,可以显示的训练模型拆分成多个子问题来求解,提升准确率

 

当大家都期望成为prompt工程师的时候,告诉你其实模型也可以产生prompt

比较有意思的最后一种,告诉模型结果,让模型抽象问题prompt,然后可以拿模型生成的prompt反过来进行验证,看看准确率,最终找出合适的prompt

 

 

 

大模型在几十billion的时候会发生顿悟,之前看着屁用没有,这也是大模型之前一直无法实用的原因

对于前面描述的CoT,Instruction tuning这些也一样,只有到这个规模才会有效果,中小规模的模型完全无效

 

一样,只有大模型,才能知道自己给出的回答的置信度是否够,中小模型都差不多,无法判定给出回答的置信度

 

再来看看pretraining资料集大小的影响

可以看出,1B token的量级可以学会语言知识,但是如果要具备common sense,需要30B token的量级

这个问题是,相同计算资源下,是让模型变大还是资料集变大

研究看出,这里是有balance的,以Gohper为例,他的模型是过大的,如果降低模型规模,增加资料集,会有更好的效果

右图给出,模型参数和资料集token数的比例关系

 

这里的数据给出,除了pretrain以外,instruction-tuning可以在很小的代价下(1800tasks,0.2%的代价),大幅提升模型的效果,这里的模型规模下限是8B,可能再小就不行了

现在大模型finetune的套路,pretrain -> 监督学习 -> 强化学习

参考instructGPT的数据,可以看出,人后期teaching可以取得很大的效果,

中小规模的模型在足够的teaching后甚至可以超过大模型的效果

 

继续看图片如何生成,比如midjourney,dalle这样的系统

肯定可以像文字这样,用AR的方式,但是效率太低了,前面也说过

像VAE,GAN这样的生成方式,前面都说过,这里重点介绍diffusion

 

 

diffusion原理是不断去噪声,像米开朗基罗说雕塑一样,只是把多余的部分去掉

所有的denoise部分是同一个模型,不断传入不同的参数,进行去噪,可以看到参数有两个,一个是输入图片,一个是step数,这个参数表示当前图片的去噪程度

为什么会有这个思路,因为生成算法的思路,一般是训练decoder,可以从一个高维分布中的一个向量decode成一个图像

所以diffusion希望模拟这样的过程

可以看到denoise的内部构造,也不是end to end的,他包含一个noise predicter,来生成噪声,然后用原图减去噪声得到目标图

为何这么麻烦?给出的解释是,生成噪声比直接生成目标图会更加简单一些

如何训练这个Denoise,

训练方法很直觉,给原图逐步加随机sample的noise,然后拿每个中间结果去训练这个predicter

 这里记住,我们是要用文字生成图片,所以还是要加入文字进行训练的

 训练Midjourney,Dalle这样的模型,需要的图片量在5B规模

 Midjourney,Dalle的架构并不是直接训练一个denoise,而是会分成3个部分来训练

第一步,是将文本encoder成一个向量embedding,为什么要做这步,因为embedding所包含的信息量远大于文本本身,而文字到图片,本身就是个内容扩充的过程

第二步,diffusion模型,根据输入的embedding,将白噪声图,denoise成一个中间产物,可能是缩略图

第三步,将中间产物decode成目标图

一般而言,分步骤的模型效果要好于endtoend,并且也比较容易训练

比如这里的Decoder是用自编码去训练,是不需要标注数据的,可以使用极大的资料集来训练

那这里的diffusion模型的训练,会和之前有些不同,

训练的目标是denoise成中间产物缩略图

研究表面,第一步文本encoding至关重要,采用大模型会有更大的收益;而diffusion网络的大小对于结果影响不大

这个也好理解,从文本到embedding是信息量扩充的主要途径

这里衡量的两个指标,

FID, 用一个训练好的CNN的模型,用真实的图片和生成的图片通过该模型生成的向量之间的差异

CLIP,训练一个Text encoder和image encoder,让相关的文字和图片,encoding后所产生的向量也要相近;在实际生成中,只需要比较生成的图片的向量和文字向量的距离

 

这里再仔细分析一些diffusion算法

在某种意义上,VAE和DIffusion的过程很像

如果你把逐步加noise的过程看成是encoder,因为VAE encoder本身也是生成一个向量;把逐步denoise部分看出decoder

再看下diffusion算法的训练部分,

a参数,随着t变大会越来越小,所以t步骤大了以后,噪音的权重会越来越大,x0的权重会变小

实际的算法和想象中最大的不同是,noise不是一步步叠加的

而是每一步都是在x0的基础上去加noise,直接生成xt

gradient descent优化的目标,就是让生成的noise和目标noise尽可能接近

这个过程就是个denoise的过程,

其中比较奇怪的是,最后又加了层黄色noise,这是为何

这就要说到,为何生成算法往往都要加noise,sample,能不能每次都选概率最大了

研究发现人写的文章在模型下,只是并不是都是选择搞概率的词,

如果模型每次都选择高概率的词,会出现大量的重复,所以选择最大概率对于生成算法不是好的选择

最后的问题是,如何低成本复制ChatGPT

最简单的是用模型教模型,甚至连任务和问题都可以让,GPT去生成

比如Stanford Alpaca,就是用seed tasks,生成了52k的tasks,然后训练7B的LLaMA

而Vicuna,是通过sharegpt上面share出的人的真实交互来训练,13B的LLaMa

这里比较有意思的是,如何评价模型的效果

居然是用GPT4来给模型的回答打分,鬼才

LLaMA的license无法用于商业目的

Dolly是databricks出的模型,他的模型和数据都是可以用于商业目的的

 LLMZoo有很多GPT的衍生模型, 

模型的对比,这里是分别用chatGPT,和GPT4作为基准

可以看出Vicuna的效果非常的出色,是不是说明sharegpt上人类真实的case具有更高的学习价值

 

finetuning完,后续一步是RL,RL一般要基于用户的真实使用

这里的思路是可以用GPT4来模拟用户,是否有必要这样做

之前的思路都是用大模型,更强的模型来训练小模型

那么大模型自己怎么演进,这里的思路是Self-consistency,同一个问题问多次,选多数派作为正确答案

反过来,在用正确答案去训练大模型本身。

 

posted on 2023-04-28 00:35  fxjwind  阅读(427)  评论(0编辑  收藏  举报