大模型关键技术:上下文学习、思维链、RLHF、参数微调、并行训练、旋转位置编码、模型加速、大模型注意力机制优化、永久记忆、LangChain、知识图谱、多模态

发布时间:2024年01月18日

?


大模型综述

你知道嘛,那个叫大规模语言模型,简单说就像是个超级大的脑袋,里头装的东西比咱们想的还要多,参数得有几百亿那么多。

这玩意儿就像是自学成才的,它通过看特别多的书、文章啥的,不需要别人教,自己就能学会说话和写字。

它的工作就像是个算命先生,总想算出来你下一句话可能会说什么。

比如有一堆词儿,它能算出这些词连一块儿说出来的可能性有多大。

就好像你掷个骰子,算命先生能告诉你可能掷出的点数一样。

要算这些词的联合可能性可不简单,因为要考虑的东西实在太多了。

就好比咱们手头有个《现代汉语词典》,里面有7万多个词。

你想,要是咱们随便组个20个词的句子,那可能的组合比天上的星星还多,数量大得惊人,高达 7.9792x1096 这么个天文数字。

要简化这个算法,咱们可以这么想:一个词出现的可能性,可能就跟前头几个词有关系。

就像咱们盖房子,一块砖接着一块砖,后面这块砖放的位置,得看前面几块砖放哪儿。

用一种叫前馈神经网络的方法,就能算出来每个词跟前面的词搭配的可能性。

例如,要算“把努力变成一种习惯”这句话的可能性,就是算“把”出现的可能,再算“努力”跟在“把”后面的可能,依此类推。

  • P ( 把?努力?变成?一种?习惯 ) = P ( 把 ) × P ( 努力|把 ) × P ( 变成|把?努力 ) × P ( 一种 ∣ 把?努力?变成 ) × P ( 习惯 ∣ 把?努力?变成?一种 ) \begin{aligned} P(\text{把 努力 变成 一种 习惯})=& P(\text{把})\times P(\text{努力|把})\times P(\text{变成|把 努力})\times \\ &P(\text{一种}|\text{把 努力 变成})\times P(\text{习惯}|\text{把 努力 变成 一种}) \end{aligned} P(?努力?变成?一种?习惯)=?P()×P(努力|)×P(变成|?努力)×P(一种?努力?变成)×P(习惯?努力?变成?一种)?

恩,这就是大语言模型,就像是个自学成材的超级计算机,它能通过看大量的书和文章,自己学会怎么用词造句。

这模型的本事就是算出来你下句话可能说啥,就像个现代算命先生。

但因为要考虑的可能性太多,就像是从词典里随便拼凑出天文数字那么多的句子一样,所以得用一些巧妙的方法来简化计算。

这就像盖房子,一块砖一个脚印,后面的得看前面的摆放。

用这个方法,这大脑袋计算机就能算出一个词跟它前面的词搭配的可能性,帮我们更好地理解和用语言。
?


上下文学习

和以前不同的地方在于,他不仅仅是学习单纯的词和句子,还学会了词和词之间的关系。

你想啊,一个词在不同的句子里,意思可能完全不一样,就像“苹果”在“打开苹果电脑”和“我想吃苹果”里的意思就不一样。

这大模型得学会这些变化,才能真正明白咱们说的话。

之所以有今天,都是因为他们发现了一本秘籍。

前置:《【史上最本质】序列模型:RNN、双向 RNN、LSTM、GRU、Seq-to-Seq、束搜索、Transformer、Bert

秘籍:《从【注意力机制】开始,到【Transformer】的零基础【大模型】系列》。

?


思维链 CoT

最初的语言模型都是基于经验的,只能根据词汇之间的相关性输出答案,根本没有思考能力……

但是从使用思维链后,大模型已经是有思考能力的。能进行一定的推理。

2021年,OpenAI在训练神经网络过程中有一个意外发现。

神经网络他可以很好地模仿现有的数据,很少犯错误。

可是如果你给他出个没练过的题目,他还是说不好。于是你就让他继续练。

继续训练好像没什么意义,因为现在只要是模仿他就都能说得很好,只要是真的即兴发挥他就不会。

但你不为所动,还是让他练。


1 0 2 10^2 102 1 0 5 10^5 105 训练完全没有成果。

就这样练啊练,惊奇地发现,他会即兴演讲了!给他一个什么题目,他都能现编现讲,发挥得很好!

  • 一千步乃至一万步,模型对训练题的表现已经非常好了,但是对生成性题目几乎没有能力
  • 练到10万步,模型做训练题的成绩已经很完美,对生成性题也开始有表现了
  • 练到100万步,模型对生成性题目居然达到了接近100%的精确度

这就是量变产生质变。研究者把这个现象称为「开悟(Grokking)」。

2022年8月,谷歌大脑研究者发布一篇论文,专门讲了大型语言模型的一些涌现能力,包括少样本学习、突然学会做加减法、突然之间能做大规模、多任务的语言理解、学会分类等等……

而这些能力只有当模型参数超过1000亿才会出现 —— 涌现新能力的关键机制,叫 思维链

思维链就是当模型听到一个东西之后,它会嘟嘟囔囔自说自话地,把它知道的有关这个东西的各种事情一个个说出来。

思维链是如何让语言模型有了思考能力的呢?

比如你让模型描写一下“夏天”,它会说:“夏天是个阳光明媚的季节,人们可以去海滩游泳,可以在户外野餐……”等等。

只要思考过程可以用语言描写,语言模型就有这个思考能力。

怎么用思维链呢?

思维链的主要思想是通过向大语言模型展示一些少量的样例,在样例中解释推理过程。

那大语言模型在回答提示时也会显示推理过程,这种推理的解释往往会引导出更准确的结果。

既然如此,只要我们设置好让模型每次都先思考一番再回答问题,ta就能自动使用思维链,ta就有了思考能力。

CoT(链式思考)已被证实能够改善大型AI模型在算术、常识和符号推理等任务上的表现。

用户发现,当他们在问题中添加“让我们一步步来思考”时,模型仿佛被施了魔法,之前答错的数学题突然能够正确解答,原本无理的论述变得有条有理。

不过,CoT对模型性能的提升与模型的大小成正比关系,模型参数至少达到100亿才有效果,达到1000亿效果才明显。

研究中指出,处理策略性问题通常需要大量的世界知识。

然而,小型模型由于其有限的参数,往往难以存储这些庞大的知识信息,这限制了它们在产生正确推理步骤方面的能力。

?


奖励建模

【挑战全网最易懂】深度强化学习 — 零基础指南

大模型 RLHF 实战!【OpenAI独家绝技RLHF!RLHF的替代算法DPO!Claude 暗黑科技 RAIHF!】

?


参数微调

大模型微调方法:冻结方法 Freeze、P-Tuning 系列、LoRA、QLoRA

?


并行训练

大模型并行训练、超大模型分布式训练

?


模型加速

【所有方法一览】大模型推理优化:在更小的设备运行、推理增速

?


永久记忆:大模型遗忘

大部分方法都是临时修补,帮助那些大型计算机(LLM)临时记住些东西。

但MemGPT,能让大模型能永远记住东西!

他们搞了个叫虚拟上下文管理的玩意儿,灵感是从电脑操作系统里那一层层的记忆体系里来的。

就好像是给计算机装了个超级大的储物间,让它能记住更多的东西。

这个MemGPT就像是一个聪明的仓库管理员,懂得怎么在快速记忆(内存)和慢速记忆(硬盘)之间转移东西。

就好像有些东西经常用,就放在手边,不常用的就放远点。

这样,计算机就能在有限的记忆空间里,更聪明地处理大量的信息。

而且,它还会自己决定啥时候跟用户聊天,啥时候专心处理信息。
?


LangChain

【解决复杂链式任务,打造全能助手】LangChain 大模型 打造 钢铁侠的全能助理 Jarvis

?


知识图谱

统一大语言模型和知识图谱:如何解决医学大模型-问诊不充分、检查不准确、诊断不完整、治疗方案不全面?

?


多模态

ViT:视觉 Transformer

Swin Transformer:将卷积网络和 Transformer 结合

CLIP 对比预训练 + 文字图像相似度:离奇调查,如何训练视觉大模型?

?


大模型系统优化

【附带大模型训练数据】大模型系统优化:怎么计算模型所需的算力、内存带宽、内存容量和通信数据量?

?


AI 绘图

【史上最小白】变分自编码器 VAE:从降维本质,到自编码器,再到变分自编码器

Diffusion 扩散模型:论生成领先多样性,GAN太单一;论尊贵清晰度独占鳌头,VAE常失真

DALL-E 系列:AI绘画背后的惊人真相!!【1个离奇内幕、3个意想不到、5大秘密揭示】

?


从 GPT1 - GPT4 拆解

大语言模型构建流程:

  • 预训练阶段:使用大量数据构建基础模型,赋予模型生成文本和理解世界知识的能力
  • 有监督微调阶段:使用高质量数据集对模型进行细化,增强其理解和执行指令的能力
  • 奖励建模阶段:构建模型以评估文本质量,为强化学习提供基础
  • 强化学习阶段:根据用户反馈调整模型,以生成更高质量的文本

训练数据:

GPT1:更适用于文本生成领域

GPT-1:仅使用Transformer的解码器部分。

是一个自回归模型,使用了单向(从左到右)的训练方式。

它预测下一个词是基于之前所有词的。

其自回归特性,它更擅长根据之前的上下文生成文本。

主要用于文本生成任务,如文本补全、翻译、摘要等。

12 个(图中12x)Transformer的解码器 组成:

左边

  • 展示了模型的主要组件,包括12层的堆叠结构
  • 这些层包括文本和位置嵌入层(Text & Position Embed),多头遮蔽自注意力(Masked Multi Self Attention),层归一化(Layer Norm),和前馈网络(Feed Forward)。
  • 在顶部是文本预测分类器(Text Prediction Classifier),用于输出模型预测的结果。

右边

  • 展示了该模型如何被应用于四种不同的NLP任务:分类(Classification)、蕴含(Entailment)、相似性(Similarity)和多项选择(Multiple Choice)。
  • 每种任务的处理流程都有所不同,但都遵循着开始(Start)、文本(Text)/前提(Premise)/假设(Hypothesis)/答案(Answer)等部分的提取(Extract),之后通过Transformer处理,最后通过一个线性层(Linear)得到结果。
  • 这些流程说明了模型如何处理不同类型的输入,如在相似性任务中比较两段文本,在多项选择任务中从多个选项中选择一个答案等。

?
无监督预训练

给定一个无标签的序列u={u1,···,un},优化目标是最大化下面的似然函数:

L 1 ( U ) = ∑ i log ? P ( u i ∣ u i ? k , … , u i ? 1 ; Θ ) h 0 = U W e + W p h l = transformer_block ( h l ? 1 ) ? i ∈ [ 1 , n ] P ( u ) = softmax ( h n W e T ) \begin{gathered} L_{1}(\mathcal{U}) =\sum_i\log P(u_i|u_{i-k},\ldots,u_{i-1};\Theta) \\ h_0=UW_e+W_p \\ h_l=\text{transformer\_block}(h_{l-1})\forall i\in[1,n] \\ P(u)=\text{softmax}(h_nW_e^T) \end{gathered} L1?(U)=i?logP(ui?ui?k?,,ui?1?;Θ)h0?=UWe?+Wp?hl?=transformer_block(hl?1?)?i[1,n]P(u)=softmax(hn?WeT?)?

这个公式描述的是一个语言模型的工作原理,一步步拆解:

  1. 首先,你有一串没有标记的词语,就像一串珍珠,我们叫它u。这串珍珠里每一颗都有它的位置,比如u1, u2, ... , un,就像是第1颗, 第2颗, ... , 最后一颗

  2. 要猜每颗珍珠(每个词)是什么,只能看它前面几颗珍珠(前面的词)。这就是L1(U)这个公式告诉我们的,我们要尽可能地猜得准确,这样游戏得分就会越高。

  3. 游戏开始前,我们给每颗珍珠配上了一个UWe,让它们看起来更容易被识别,还有一个计分板Wp记录分数。

  4. 然后,我们开始一轮轮游戏,每一轮我们都用transformer_block来帮助我们,让我们更好地猜下一颗珍珠。这个超级电脑每轮都会变得更聪明。

  5. 最后,当我们猜完所有的珍珠后,超级电脑会使用softmax来告诉我们每颗珍珠最可能是什么。

你在玩一个猜词游戏,你要猜的不是珍珠,而是一连串的词,电脑会帮你记住前面的词,然后猜下一个词。

你想让你的得分越高越好,因为这意味着你猜的越准确。

游戏规则,就是最大化这个似然函数L1(U),这个函数告诉我们我们的猜词游戏得分多高。

?

有监督的精调

对于有标签的数据集C,每个实例有m个输入token{x1,...,xm} 和标签y组成

P ( y ∣ x 1 , … , x m ) = ? . s o f t m a x ( h l m W y ) L 2 ( C ) = ∑ x , y log ? P ( y ∣ x 1 , … , x m ) L 3 ( C ) = L 2 ( C ) + λ L 1 ( C ) \begin{gathered}P(y|x^1,\ldots,x^m)\overset{.}{\operatorname*{=}}\mathrm{softmax}(h_l^mW_y)\\\\L_2(\mathcal{C})=\sum_{x,y}\log P(y|x^1,\ldots,x^m)\\\\L_3(\mathcal{C})=L_2(\mathcal{C})+\lambda L_1(\mathcal{C})\end{gathered} P(yx1,,xm)=.softmax(hlm?Wy?)L2?(C)=x,y?logP(yx1,,xm)L3?(C)=L2?(C)+λL1?(C)?

就像教一台机器分辨不同的水果一样。

在这个任务中,每个水果(比如苹果、香蕉、橘子)都有一些特征(比如形状、颜色、大小),这些特征就像是输入的tokens(令牌)。

  1. 第一部分(P(y|x1,…,xm)):预测标签的概率

    • 这个部分的公式是在计算机器根据水果的特征来预测这个水果是什么的概率。
    • 比如,给定一个水果的形状、颜色和大小,机器会计算出这个水果是苹果、香蕉还是橘子的概率。
    • "softmax"是一种特殊的数学函数,它可以把输入的数据转换成概率,使得所有可能的水果的概率加起来总和是1。
  2. 第二部分(L_2?):损失函数

    • 这部分是一个“损失函数”,它用来衡量机器的预测有多准确。
    • 如果机器的预测很准确,这个损失值会很小;如果预测不准确,损失值就会变大。
    • 具体来说,这个损失函数是计算机器预测的概率和实际的标签(比如,这个水果真的是苹果还是香蕉)之间的差异。
  3. 第三部分(L_3?):正则化的损失函数

    • 最后这部分是在原来的损失函数基础上加了一点调整,这种调整叫做“正则化”,它有助于让机器学习得更好。
    • 如果不使用正则化,这个模型可能会非常“刻板”。它可能只学会识别它看到的那些特定的苹果和橘子,而不是学会识别这两种水果的一般特征。
    • 这里的λ是一个小数,用来控制正则化的程度。

GPT1 训练数据:BookCorpus 7000 本书籍。

核心思想是:

  • 做打生成式,输入都是一问一答

  • 使用无监督生成式预训练代替传统标注数据,这意味着它在训练时不依赖于标记好的数据集。

    让机器通过广泛阅读来自主学习语言,通过阅读大量文本来学习如何生成文本,而不是依赖于特定的“问题-答案”对。

    这种方法允许GPT-1掌握语言的广泛用法,并能在各种情境中灵活应用所学知识,而不仅仅是回应特定的提示或问题。
    ?


GPT2:扩展数据集、模型参数,实现一脑多用(多个任务)

GPT1 的问题在于:

  • 一个简单的专家模型,还不是很专家
  • 只能做一个特定任务,不能迁移

GPT2 扩展数据集、模型参数,实现一脑多用(多个任务)。

p ( x ) = ∏ i = 1 n p ( s n ∣ s 1 , … , s n ? 1 ) p ( output|input ) p ( s n ? k , … , s n ∣ s 1 , s 2 , … , s n ? k ? 1 ) p ( output|input,task ) \begin{aligned}p(x)&=\prod_{i=1}^np(s_n|s_1,\ldots,s_{n-1})&&p(\text{output|input})\\\\p(s_{n-k},\ldots,s_n|s_1,s_2,\ldots,s_{n-k-1})&&p(\text{output|input,task})\end{aligned} p(x)p(sn?k?,,sn?s1?,s2?,,sn?k?1?)?=i=1n?p(sn?s1?,,sn?1?)?p(output|input,task)?p(output|input)

GPT2被训练来学习很多很多的故事和对话:

  1. 第一部分(p(x)):预测下一个词

    • 这部分的公式是关于如何预测故事中的下一个词。
    • 比如,如果到目前为止的故事是“有一个小猫爬上了…”,机器人需要猜测下一个词是什么。
    • 它通过学习大量的故事来做出这样的猜测,可能会猜“树”因为在它读过的很多故事里,小猫常常爬上树。
    • 公式中的 “s_1, …, s_{n-1}” 就像是到目前为止的故事部分,而机器人要预测的就是“s_n”,也就是接下来的词。
  2. 第二部分(p(output|input)):基于输入预测输出

    • 这部分是说,如果我们给机器人一些特定的信息或提示(input),它可以根据这些信息来讲故事(output)。
    • 比如,如果我们告诉机器人“讲一个关于太空的故事”,它就会基于它学过的关于太空的知识来讲故事。
  3. 第三部分(p(output|input, task)):针对特定任务的预测

    • 最后这部分是更具体的。这里不仅仅是告诉机器人要讲什么样的故事(input),还告诉它要完成一个特定的任务(task)。
    • 比如,“讲一个关于太空的故事,故事里要有一只名叫Tom的宇航员猫”。
    • 这时,机器人会根据这些更详细的要求来讲一个符合要求的故事。

牛逼之处,在于当模型容量非常大、数据量非常丰富的时候,仅仅靠训练语言模型的学习便可以完成其他有监督学习的任务。

通过阅读海量的文本,学到了很多东西。

GPT-2这样的模型因为读过很多东西,学了很多知识,所以它能处理各种不同的任务,就算这些任务以前没直接学过。

GPT2 训练数据:Reddit 高赞文章 800 万篇 40G。
?


GPT3:元学习 + 大力出奇迹

GPT2 的极限没有被开发出来,模型参数、训练数据还是太少了。

GPT3 参数增长到 1750 亿,45 TB 训练数据。

除了大,GPT3 还提出了提示的情景式学习方式。


左图是传统的方式,右图是GPT3提出的提示引导。

在一个预训练模型处理多种不同的任务中,不是每个任务都有一个单独的模型,而是使用“提示”(Prompts)来指导同一个预训练模型完成不同的任务。

这种方法的优势在于它不需要针对每个任务训练一个完整的模型,只需要调整相对较小的提示部分,就可以引导同一个大模型完成不同的任务。

这种原理来自于 — 元学习。

通过学习任务间共性和差异,发现规律,并迁移到新任务上。

使用少量数据,寻找初始化范围,使得模型在有限数据集上,快速拟合。

prompt学习方法,根据提示情景,有针对的回答。

用户:你觉得tiktok是个好应用吗?

GPT:Do you think tiktok is a good app?
GPT:tiktok 是什么呀?
GPT:我不能做出有偏袒的评价。

提示学习方法的核心在于,通过给模型不同的指令或情境,可以影响模型的输出,使其更适合特定的用途或遵循特定的交流原则。

在实际应用中,这使得同一个模型可以在不同的情境下以不同的方式回答相同的问题,这非常有用,尤其是在需要模型适应多种对话风格和需求的场合。

有 3 种学习方式:

  • 零样本:没有任何例子,直接干活
  • 单样本:给一个例子,直接干活
  • 少量样本:给几个例子,直接干活

GPT3 只需要给一个或者几个例子,就能一直按照原意去干活。

GPT3 受限 Transformer 建模能力,对于长文章会重复输出;也不能保证生成的内容不包含敏感内容。
?


InstructGPT:指示和提示学习 + 人工反馈强化学习 RLHF

GPT-3.5 是 GPT-3 的一个更新版本,提供了更好的性能和更准确的语言理解能力。

InstructGPT 在 GPT-3.5 的基础上通过进一步的训练来专门优化执行指令的能力。

InstructGPT 是 GPT-3.5 的一个特定版本,专门针对理解和执行复杂指令进行了优化,旨在提供更加精准的指令执行和更好的用户体验。

这意味着 InstructGPT 更擅长根据用户给出的指令产生相关的输出,比如回答问题、解释概念、生成文本等。

指示学习和提示学习:

  • 指示学习:更加依赖于人类提供的示范数据和指令 — 快速获取专业知识和技能
  • 提示学习:更加依赖于模型自身的推断能力,以及少量的提示信息 — 缩小搜索空间,更准确学习任务的关键特征和规律

俩者,是一起用的。

?
人工反馈强化学习 RLHF

训练流程:

  • 数据集
  • 有监督微调 SFT
  • 奖励模型 RM
  • 强化学习 PPO

?


GPT4

?


GPTs

?


对比主流大模型技术点

当前绝大多数大语言模型结构都采用了类似GPT架构,使用基于Transformer架构构造的仅由解码器组成的网络结构,采用自回归的方式构建语言模型。

但是在位置编码、层归一化位置以及激活函数等细节上各有不同。

旋转位置编码

层归一化

激活函数

注意力机制优化

?


文章来源:https://blog.csdn.net/qq_41739364/article/details/135639929
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。