1.大模型基础:GPT模型家族&提示学习

文章目录

  • 1.大模型基础:GPT模型家族&提示学习
    • 1.GPT模型家族:从始至今
      • 1.1 从GPT-1到GPT-3:一路的风云变幻
      • 1.2 ChatGPT:赢在哪里
    • 2.提示学习(Prompt Learning)
      • 2.1 思维链(Chain-of-Thought,CoT):开山之作
      • 2.2 自洽性(Self-Consistency):多路径推理
      • 2.3 思维树(Tree-of-Thoughts,ToT):续写佳话

1.大模型基础:GPT模型家族&提示学习

1.GPT模型家族:从始至今

从下图可以看到,2020年开始,大语言模型的研究越来越热:

NLP语言模型技术发展一览:
深度学习到预训练模型的一个卡点:数据太多了标注不完。因此语言模型利用了无监督的方法来利用数据,技术栈的范式是Pre-training + Fine-tuning。Fine-tuning的一个特点是会改变模型,但是实际上我们很难调动大模型,所以能不能不调整模型,通过prompt来更改模型的输出结果,这也是大语言模型和语言模型在训练范式/技术栈上的一个区别。

1.1 从GPT-1到GPT-3:一路的风云变幻

预训练语言模型:
预训练语言模型通常遵循的架构:1.用大量的无标注数据在无监督学习 2.用特定任务测试集(比如QA问答)对模型进行参数微调 3.此时模型的参数已经不会再变了,用测试集测试即可
1.大模型基础:GPT模型家族&提示学习_第1张图片

预训练语言模型的三种网络架构(2018-2020)
transformer就是一个encoder+decoder的架构,encoder是根据整句话对每个单词做encoder,decoder是做了一个mask,只根据前面的内容去做下一个单词的decode。编码器天然的能看到所有的上下文信息,比较适合于处理文本分类等任务。解码器只能看到之前的词,不能看到未来的词,这使得它偏向于生成信息,适合各种生成类的任务,比如文本生成、对话系统等。还有一类又用编码器又用解码器的模型,比如T5和BART。
这也是预训练模型的三条路。

预训练语言模型的三条路:

2018年语言模型进展
2018年春天AI2发布了ELMo模型,GPT-1在夏天被发布,谷歌在10月发布了BERT。其中ELMo和GPT-1都是单向序列去学习,BERT是双向序列的去学习。
单向/双向学习
ELMo
ELMo基于LSTM,序列从左到右/从右到左分开分别进行训练,最后把这两个训练结果拼在一起作为embedding。和BERT很接近,但是区别在于BERT是从左到右/从右到左一起训练的。

GPT-1
GPT1-1:用泛化的通用的预训练方法来提升模型的语言理解能力。

GPT-1的架构基于12层的transformer,下游会接各种fine-tuning任务 比如文本预测,文本分类等。
整体来看整个预训练语言模型基本都是这样的架构:1.使用大量数据进行无监督学习学出一个语言模型,主要掌握语言的意思 2.在特定的任务上进行fine-tuning微调,使得大模型在下游任务的表现提升。

GPT-1总结
2018年的GPT-1是一个基于decoder的预训练模型的大成功。

  • 使用了12层decoder的Transformer架构,使用了117M(百万)个参数
  • 使用了768维的隐藏层,3072维的前馈网络
  • 做了40000多条字节对的encoding
  • 用7000多本独立的书的数据量来训练
    GPT-2
    2019年,GPT-2面世了(一直有一种声音,就是GPT没有特多技术上的创新,它就是死命的叠加transformer的层数,以力破巧)。从GPT-1到GPT-2是这样的,增加了模型参数,训练的数据量获得了模型更好的表现。
    但是GPT-2提出了一个概念:Language Model是一个无监督多任务的学习器,GPT-1希望先搞一个语言模型出来,然后通过下游特定任务对其进行微调,但是GPT-2希望把这两件事合二为一,直接为下游的各种任务搞一个语言模型出来,哪怕不调整模型也能做很多事。为后面的prompt-learning埋下了引子。

    GPT-3
    GPT-3比GPT-2又大了两个数量级的规模,从训练数据上来说,GPT-1从书上去学,GPT-2加入了reddit(在线社区问答),GPT-3引入了网络爬虫爬到的数据(410 billion的tokens 4100亿 还是过滤掉的)。

    GPT-3比GPT-2不只是怼数据,怼参数。我们使用大模型的方式一般是两种 1.fine-tuning 2.prompt。但是GPT-3做出的一个思考是我们能否不用梯度下降去修改我们的模型,这种超级大规模的模型做一次梯度下降的成本太高,能不能不做梯度下降还让模型的输出达到我想要的效果,这就变成了后面的in-context learning(基于上下文的学习)
    In-context learning
    基于上下文的学习,简单举个机器翻译的例子:我们给预训练模型几个英语到法语的翻译的例子,留一个让他填空的内容,大模型会自动的把这个空的内容loutre给生成出来。后面的GPT-3.5和GPT-4都在沿着这个思路去做。通过这种方式指定给大模型进行什么样的任务(GPT-1是先做出语言模型,再通过下游任务做微调;GPT-2是把下游任务一开始就学会,后面就不用怎么改了;GPT-3是把这么大的模型训练出来后,对每一个特定任务调模型成本很好,索性不调模型,给他一些例子,让他给出回答,理论上他已经学了这么多了应该什么都会)


    通过使用In-Context learning的效果
    模型参数量及提示数量给大模型准确性带来的差异:
    可以看到在不同的benchmark上基本都是few-shot的准确性比one-shot和zero-shot都高(n-shot,给n个例子)

    zero-shot/one-shot/few-shot
    先看右边的fine-tuning,根据一个一个带标注的训练数据采用梯度下降法迭代模型(没在gpt-3上使用)。
    从gpt-3开始,我们就不用再更新模型本身了,而是让模型理解你想让我干嘛,这里分为三层:zero-shot/one-shot/few-shot。
    通过实验发现,我们加上任务描述的语言会更好(比如之前的英译法,我们没有告诉大模型是做翻译工作,但是实际上加上任务描述,大模型的效果会更好,模型更能理解你要干什么事情,给几个例子就更好了,通常我们设置few-shot数量为3-5之前(经验值)),所以这里加上了task description:Translate Englist to French。
    不给任务例子,直接让大模型翻译:cheese => 是zero-shot
    给一个例子:one-shot,给n个例子:few-shot
    几个核心点:1.不改变模型的参数。2.说清楚我要做的任务 以此让大模型理解需要他完成什么样的任务。就是一个怎样跟花了这么多精力训练的大语言模型做交互的问题。

    由于大模型的微调成本非常高,所以我们尽量不要调了,直接用它。
    GPT1,GPT2,GPT3对比总结
    【模型类型】这个维度先不用关注,GPT迭代的核心更多的还是在transformer的叠加上,在方向上没有更多的调整。更多的看剩下的维度先。
    GPT-1:提出Pre-training+fine-tuning的范式
    GPT-2:希望把这两个步骤合二为一,直接变成一个多任务的无监督的学习机制
    GPT-3:提出少样本学习(In-Context learning)即提示学习(prompt engineering),以及增大模型规模和训练数据集带来的"涌现"

    3个关键概念

1.2 ChatGPT:赢在哪里

Pre-Trained LM + Fine-Tuning范式:

OpenAI的模型迭代:预训练和微调的共舞

Chat-GPT基于Text-davinci-002做了基于人类反馈的微调(人工给若干个回答打分,反馈是大模型,使大模型的回答不仅正确,还越来越让人满意)

code-davince-002

ChatGPT的三段训练法

利用强化学习给大模型输出的若干个回答打分,配合人工标注逐步让大模型的回答越来越好。

总结:ChatGPT是技术和商业的成功结合

GPT家族技术迭代与改进

GPT-4:一个新的开始
GPT-4:多模态开启LLM-native应用时代

GPT-4:NLP基准测试大幅提升

GPT-4:多语言能力提升
GPT-4:多模态-视觉理解能力
解释漫画笑点

逐步推理物理题(思维链)

2.提示学习(Prompt Learning)

Prompt Learning vs In-context Learning

Prompt Learning vs Prompt Tuning

2.1 思维链(Chain-of-Thought,CoT):开山之作

Chain-of-Thought Prompting

思维链CoT:开启大模型逻辑推理能力的钥匙
上下文窗口(In-Context Learning)起到了误导效果怎么办
1.大模型基础:GPT模型家族&提示学习_第2张图片
拆解问题,llm的回答体现了CoT的能力,一步一步的拆解回答问题
1.大模型基础:GPT模型家族&提示学习_第3张图片
体现GPT-3.5 CoT的一个例子
可以看出来回答错误,gpt3.5没有理解出来文章中的包含关系(其中xxx没有整明白)
1.大模型基础:GPT模型家族&提示学习_第4张图片
体现GPT-4 CoT的另一个例子
回答正确,这段话里【我还有几杯咖啡】算是prompt,上面那段话算是in-context。llm对prompt的理解非常到位,去掉了无用信息并且进行了逻辑推理,回答正确。
1.大模型基础:GPT模型家族&提示学习_第5张图片
改变一下prompt的方式,上下文的理解也更到位了(包含关系也理解到了),回答正确了

思维链让GPT不再是鹦鹉学舌(只能按照训练集中有的内容回答问题),而是能理解人类的问题,拆解答案的步骤进行回答。

CoT效果
大语言模型解决复杂数学问题

大语言模型解决常识推理

CoT实验结论
对于小模型效果不好是因为小模型理解不了这么大串的问题,反而会变成干扰。

一个黑魔法:告诉大模型,你一步一步的去想,大模型的效果就会好很多
一个小的trick:think step by step。和大模型沟通是有艺术的,是需要学习的

2.2 自洽性(Self-Consistency):多路径推理

黑魔法 think step by step 在各种问题的回答上有一定成果,但是有没有可能把它做的更好一点
简而言之可以,我已经链式的去思考了,能不能多路径的去链式思考。即让语言模型有多条思维路径(多思维链条),最后通过加权或者平权的方式选择一个少数服从多数的答案。

多路径思维链:

Self-Consistency提升CoT性能

关于CoT与大模型逻辑推理能力的现状:
通过思维链,我们可以看到大语言模型的强与弱:

  • 它强在,模型规模的提高,让语义理解、符号映射、连贯文本生成等能力跃升;从而让多步骤推理的思维链成为可能,带来"智能涌现"。
  • 它弱在,即使大语言模型展现出了前所未有的能力,但思维链暴露了它,依然是在鹦鹉学舌,而非真的产生了意识。
    没有思维链,大模型几乎无法实现逻辑推理。
    但有了思维链,大语言模型也可能出现错误推理,尤其是非常简单的计算错误。Jason Wei等的论文中,曾展示过在GSM8K的一个子集中,大语言模型出现了8%的计算错误,比如6*13=68(正确答案是78)。

2.3 思维树(Tree-of-Thoughts,ToT):续写佳话

我们已经提到和大语言模型沟通需要技巧,可以让大语言模型通过思维链的方法把复杂问题拆步骤解决,如果思维链行不通,还可以采用多路径的方式,达到三个臭皮匠顶个诸葛亮群策群力的效果。
我们可以把思维格局再打开,之前的这几种方式【prompt】【cot】【多路径】都有一个问题就是都是从左到右的,因为没有往回看(没有反思),并且在多路径的路径选择上没有很好的方法论。

Prompt示意图:
a:standard,也叫in and out。
b:Chain of Thought,在模型的内部,有一个拆解的思考过程,有一个多步的问询。
c:Self-Consistency(SC),GPT内部的多路径答案再汇总(GPT目前披露的是内部有8个大模型在群策群力,一起得到答案)。
d:Tree of Thought(ToT)一个思维就是树中的一个节点。

ToT实验结果:24点游戏
可以看到ToT的成功率有74%,比之前的方法是压倒性的胜利。b=n代表BFS搜索的层数,eg:b=5代表思考了5步

ToT实验结果:创意写作与迷你填字游戏

ToT设计灵感来源
一个真正的问题解决过程涉及到通过搜索重复利用所有可用的信息,进而揭示更多的信息,直到最终达到解决问题的方法。
1.大模型基础:GPT模型家族&提示学习_第6张图片
ToT工作原理解读:Step 1 思维分解
第一步类似CoT的地方是在于仍然是做问题分解,但是不同点在于CoT并没有给大模型分解问题的方法论,更多的是给一些参考样例。在ToT中,会给大模型一些规范的分解问题的过程

ToT工作原理解读:Step 2 思维生成
定义一个思维生成器,对每个节点(一个节点代表一个思维,每个思维可能衍生出多个思维)
1.大模型基础:GPT模型家族&提示学习_第7张图片
ToT工作原理解读:Step 3 状态评估
定义状态评估器,评估下一层生成的若干个思维

ToT工作原理解读:Step 4 搜索算法
通过搜索算法遍历树的所有节点,找到所有路径的思维链。在解空间里找到最好的prompt。

我们平时看到的提示词的玩法,是有人在正儿八经做研究的,我们已经追到了比较前沿的文章,推荐阅读论文:

后续我们会在langchain的学习上讲到向量库的相关知识。
**实战环境准备(下一讲会使用embedding):**准备python3.10
**在做In-Context learning的时候怎么节省token,因为和大语言模型交互的话是按token数算钱的,token很贵:**如果是一个qa的应用,有一些常用问答的话,使用向量数据库是一定能帮你解决问题的,因为都不需要和大模型进行交互了。如果说in-context比较复杂,还是必须访问大模型的话怎么办?如下面这个例子,context中的文章并不都是有价值的,比如这个问题中,咖啡是拿铁是美式冷的热的对答案没影响,因此为了节省向大模型提问的token数,需要我们去做预处理(简化上下文,不发全量文章了),langchain的价值也在这里,因为我们做预处理的话最好还是用语言模型本身(借用语言模型本身的能力)。
1.大模型基础:GPT模型家族&提示学习_第8张图片
cuda的环境和模型的微调:在私有化部署的时候才会需要,可以用公有云服务器。
ToT是用在提示工程上,不会动大模型本身的参数,ToT是工程侧的实现了
**ToT代码:**论文中有
**构建应用的时候,CoT或者ToT是怎么实现的?模型实现还是工程实现 ** chatgpt本身就是一个应用,并且它正在应用侧去实现这些内容。一个好的应用肯定是应用做多一点,用户用起来就爽一点。但是模型是不会做这样的工作的,因为模型微调起来成本是很高的,并且模型的微调是很玄学的。要理解应用是模型的包装,应用>模型。
prompt learning的一个核心就是在学习怎么去和大模型交互,这些如果应用实现了,那我们直接调接口就行。如果应用eg:chatgpt没实现,可能需要我们在工程侧实现

你可能感兴趣的:(LLM,gpt,学习)