本人系第九届华为ICT大赛实践赛云赛道选手,曾包揽省赛、中国总决赛及全球总决赛三项一等奖,并持有HCIE-Cloud Service认证。现通过本平台分享备赛经验与参赛心得,供各位同学参考。文中所述内容若有疏漏之处,恳请各位不吝指正,在此先行致谢!(建议首先阅读专栏首篇文章——【备赛指南】华为ICT大赛 实践赛 云赛道01,之后再逐步阅读后续内容)
(1) 统计模型
(2) 机器学习
(3) 神经网络:CNN、RNN、LSTM
(4) AlexNet、VGG、ResNet
(5) Transformer、Bert、GPT
(6) ChatGLM、GPT4、Gemini
(1) 大语言模型是一种语言模型,大语言模型是一种神经网络语言模型,大语言模型是一种预训练语言模型
①区别于已有的较小规模并主要用于理解类任务的预训练语言模型(如BERT)
②特指规模较大(数十亿到数干亿参数)并具有较强生成能力的语言模型
(2) 指具有大量参数和计算资源的深度学习型。这些模型在训练过程中需要大量的数据和计算能力,并且具有数十亿参数
目的是提高模型的表示能力和性能,在处理复杂任务时能更好地捕捉数据中的模式和规律
(3) 大模型“大”的定义
①参数数量与模型复杂度:相比于普通的神经网络,大型通常由数百亿个参数组成,这使得它们能够处理更大规模、更复杂的数据集,并拟合更为复杂的函数
· 由于大模型具有更多的参数和更复杂的结构,它们能够更好地学习和拟合数据中的规律和模式,从而具有更强的学习能力和泛化能力
· 模型规模大到一定程度后突然涌现很多高阶能力
②数据集:大模型需要大量的数据进行训练,以便捕捉到各种可能的模式和特征。因此训练数据集应该包含足够的样本,以覆盖模型可能遇到的各种情况
③算力:大模型训练所需的算力非常庞大,通常需要分布式计算、高性能计算中心、云计算服务支持
(1) 更强的学习能力:由于大模型拥有更多的参数和更复杂的结构,它们可以更好地拟合数据,并具备更强的学习能力。这使得大模型能够处理更大规模的数据集,更深入地发现数据中的规律和模式,从而在多个任务上展现出更高的性能
(2) 更好的泛化能力:大模型的泛化能力更强,这意味着它们在新数据或未见过的数据上也能表现出良好的性能。这种能力使得大模型能够更好地适应各种实际应用场景,减少过拟合的风险
(3) 更强的多任务处理能力:大模型通常具有较强的多任务处理能力,这意味着它们可以在一个模型中同时处理多个任务,而无需为每个任务单独训练一个模型。这种能力提高了模型的灵活性和效率,降低了维护成本
(1) N-gram语言模型
(2) 神经网络语言模型
(3) 循环神经网络语言模型
(4) Transformer语言模型
(5) 预训练语言模型(PLMs):BERT(双向掩码语言模型),GPT(纯解码器语言模型)
(6) 大型生成式预训练语言模型(LLMs):GPT-3,ChatGPT
(1) 第一个阶段:标注数据驱动的深度学习模型
①静态词向量:如Word2vec
②模型架构:RNN架构,如LSTM
(2) 第二个阶段:自监督预训练大模型
①基于上下文的动态词向量,如BERT
②模型架构:Transformer架构,即Self-Attention
Transformer能够解决之前RNN架构的一些缺陷:
(1)难以并行化,反向传播过程中需要计算整个序列
(2)长时依赖关系建模能力不够强
(3)模型规模难以扩大
(1) 涌现
1. 涌现的概念
涌现是一种现象,为许多小实体交互作用后产生了大实体,而这个大实体展现了组成它的小实体所不具有的特性
在大模型领域指当模型突破某个规模时,性能显著提升,表现出意想不到的能力。比如语言理解能力、生成能力、逻辑推理能力
2. 涌现带来的能力(LLM的关键技术)
①语境学习(上下文学习In-context learning):如果模型已经获得了自然语言描述的指令(包括一些任务示例),则模型给予预期输出结果,而无需额外的模型训练(Zero-shot或Few-shot earning)
指在特定上下文环境中学习的机器学习方法,能够直接让语言模型根据给定的几个实例理解任务,并给出问题的答案
与需要使用反向梯度更新模型参数的训练阶段的监督学习不同,ICL不需要参数更新,并可以直接对预先训练好的语言模型进行预测
②指令遵循(Instruction following):通过在格式化的指令数据集上fine-tuning,LLM也表现出用指令形式描述未知任务,并达到不错效果,这提高了模型的泛化能力,表现了模型具有理解自然语言指令的能力,寻找合适的Prompt来激发模型能力就变成了显性需求
指令微调(Instruction Tuning):是指通过构建指令格式的实例,然后以有监督的方式对大语言模型进行微调。指令格式通常包含任务描述,一对输入输出以及示例(可选)
③逐步推理(Step-by-step reasoning):在LLM中表现出,可以提供一些解题步骤提示,让模型具有逐步推理的能力,这被称为思维链(CoT),有人认为这是从代码数据中学习到的
3. 思维链CoT
①思维链CoT的概念
是一种改进的提示策略,用于提高LLM在复杂推理任务中的性能,如算术推理、常识推理、符号推理。CoT没有像In-Context Learning那样简单地用输入输出对构建提示,而是结合了中间推理步骤,这些步骤可以将最终输出引入提示
②思维链CoT的限制
(1)思维链需要用户提供一些自然语言形式的推理过程,这可能对用户有一定的负担和要求
(2)思维链提示可能不适用于所有类型的问题,特别是一些需要专业知识或常识的问题。思维链只在有限的领域效果较好,如数学逻辑推理能力,其他领域提升较小
· 即使有思维链提示,依然不能解决小学水平的数学问题
(3)思维链提示可能导致大语言模型过度依赖于给定的推理过程,而忽略了其他可能的解决方案或角度
(4)思维链必须在模型规模足够大时才能涌现
· Fine-tune-CoT:利用非常大的语言模型的思维链推理能力来指导小模型解决复杂任务
③思维链CoT的特点
(1)逻辑性:思维链中的每个思考步骤都应该是有逻辑关系的,它们应该相互连接,从而形成一个完整的思考过程
(2)全面性:思维链应该尽可能地全面和细致地考虑问题,以确保不会忽略任何可能的因素和影响
(3)可行性:思维链中的每个思考步骤都应是可行的,也就是说它们应该可以被实际操作和实施
(4)可验证性:思维链中的每个思考步骤都应该是可以验证的,也就是说它们应该可以通过实际的数据和事实来验证其正确性和有效性
④思维链CoT的组成与分类:一个完整的包含CoT的Prompt往往由三部分组成
(1)指令(Instruction):用于描述问题并且告知大模型的输出格式
(2)逻辑依据(Rationale):指CoT的中间推理过程,可以包含问题的解决方案、中间推理步骤、与问题相关的任何外部知识
(3)示例(Exemplars):指以少样本的方式为大模型提供输入输出对的基本格式,每个示例都包含:问题、推理过程、答案
⑤CoT以是否包含示例为区分
· Few-Shot-CoT
则在示例中详细描述了“解题步骤”,让模型照猫画虎得到推理能力
这种方式是给模型展示少量的示例,每个示例都包括了手写的(或模型生成的)高品质的推理过程
· Zero-Shot-CoT
不添加示例而仅仅在指令中添加一行经典的“Let's think step by step”,就可以“唤醒”大模型的推理能力
零样本思维链(Zero-shot-CoT)提示过程是对CoT prompting的后续研究,引入了一种非常简单的零样本提示。通过在问题的结尾附加“Let's think step by step”这几个词,大语言模型能够生成一个回答问题的思维链。从这个思维链中,他们能够提取更准确的答案
优势:
(1)通用性:Zero-shot-CoT使用单一模板,无需为每个任务专门设计提示,可跨多种推理任务工作而few-shot提示需要为每个任务设计专门的示例
(2)无需人工设计示例:Zero-shot-CoT不需要人工设计多步推理的示例,减少了提示工程的工作量而few-shot提示需要精心设计每个任务的示例
(3)更强的零样本推理基准:Zero-shot-CoT作为更强的零样本推理基准,为困难的多步推理任务提供了更好的性能,而标准的零样本提示性能较差
(4)更好的可扩展性:随着模型规模的扩大,Zero-shot-CoT的性能提升更加明显,展现出更好的可扩展性,而few-shot提示对模型规模不太敏感
(5)减少偏差:Zero-shot-CoT减少了手工设计示例引入的偏差,使对语言模型偏差的研究更加公正
⑥思维链CoT的应用场景
(1)思维链提示主要适用于需要复杂推理的领域,例如数学、常识、符号推理
(2)其中,多模态CoT具有很大的应用前景,在CoT中,多态可以分为两类:输入多模态 / 输出多模态
(3)除了多模态CoT以外,CoT目前也已经用于如文本摘要(SumcoT)、开放域问答(SelfPrompting LLMs)、机器翻译(MAPS)、化学(Chemcrow)、医学(Med-PaLM)
4. 如何更好地使用模型
①编写清晰、具体的指令
(1)使用符号清晰区分提示词的不同部分
(2)输出结构化的提示词
(3)提供少量示例
②给模型思考的时间
(1)制定完成任务所需的步骤
(2)做判断前让模型自己提出一个解决方案,再进行比较判断
③提示工程(Prompt Engineering)
指通过结构化文本等方式来完善提示词,引导LLM输出期望的结果。可利用提示工程来提升大语言模型处理复杂任务场景的能力,如问答和算术推理能力。可通过提示工程设计研发强大的工程技术,实现和大语言模型或其他生态工具的高效接轨
提示工程在实现和大语言模型交互对接,以及理解大语言模型能力方面都起着重要作用。用户可以通过提示工程来提高大语言模型的安全性,也可以赋能大语言模型,比如借助专业领域知识和外部工具来增强大语言模型能力
· 零样本提示(Zero-Shot Prompting)
用户不提供任务结果相关的示范,直接提示语言模型给出任务相关的回答
大语言模型有能力实现零样本提示,但也取决于任务的复杂度和已有的知识范围
· 少样本提示(Few-Shot Prompting)
虽然大型语言模型展示了惊人的零样本能力,但在使用零样本设置时,它们在更复杂的任务上仍然表现不佳
少样本提示可以作为一种技术,以启用上下文学习,在提示中提供演示以引导模型实现更好的性能。演示作为后续示例的条件,希望模型生成响应。Few可以任意选择
· 思维链提示(CoT Prompting)
思维链(CoT)提示通过引入中间推理步骤实现了复杂的推理能力,它逐步展开问题并在每个回答中保留之前问题的背景信息,链式思考可以使对话变得内容丰富和连贯
核心特点:
(1)有序性:链式思考提示要求将问题分解为有序的步骤,每个步骤都建立在前一个步骤的基础上形成一条清晰的思考链条
(2)关联性:每个思考步骤之间必须存在紧密的逻辑联系,以确保整个思考过程的连贯性和一致性
(3)逐步推理:模型在每个步骤中只关注当前问题和相关信息,通过逐步推理的方式逼近最终答案
(2) 逻辑推理
在逻辑推理方面,大模型能够对输入的信息进行分析,从而在没有明确训练过的任务上展现出一定的能力。例如在解决复杂的数学问题或进行逻辑推理题时,大模型能够给出合理且准确的答案
假设大模型接受了大量的法律文本数据训练,当用户向该大模型提出一个法律问题时,大模型会利用其逻辑推理能力,从训练数据中找到相关的法律条文、案例判决、法律原理,进而推导答案
(3) 自然语言理解
大模型的自然语言理解和生成能力体现在其能够解析并理解输入的文本信息,同时根据这些理解生成自然语言回应
向模型输入一个简单的问题:“今天天气怎么样?”模型会解析这个问题,识别出其中的关键信息。然后,它会利用在训练过程中学习到的知识,去检索和理解与天气相关的信息。这可能包括从历史天气数据、新闻报道、社交媒体来源获取的信息
在理解了问题的意图和相关信息后,模型会开始生成回应。这个回应会是一个自然语言句子描述了今天的天气情况
(4) 调用工具
大模型调用外部工具的能力是其功能的重要扩展,使得模型能够在处理复杂任务时更灵活和高效。这种能力主要体现在模型能够根据需要,能够与外部应用程序、服务、数据库进行交互,以获取额外信息、执行特定任务或增强自身的功能
大模型可通过调用搜索引擎等外部工具来获取实时信息,从而提供具有时效性的回答
大模型可以连接到数据库,并执行SQL查询来获取所需的数据
(1) 稳定性:指模型在遇到意外输入或攻击时保持正常运行的能力
稳定性高的模型,在面临数据变化、噪声干扰或攻击时,仍能保持良好的预测和决策能力
提升模型稳定性:
①对抗训练,是一种在训练过程中包括对抗样本的方法,这些样本是特意设计来欺骗模型
②定期对模型进行审计,更新模型和依赖库,修补已知的安全漏洞
③确保模型的启动和配置过程安全,避免由于配置错误或恶意代码导致的不稳定性
(2) 鲁棒性:指模型在面对干扰或错误数据时仍能产生准确输出的能力
(1) 这种训练方法将强化学习与人类反馈相结合,通过人类的反馈来优化模型的训练
(2) 在训练过程中,以人类的偏好作为奖励信号,指导模型的行为,使得模型能够学习到有效的策略,并捕捉复杂的人类偏好,从而优化模型性能
(3) 通过RLHF模型能够理解并满足人类的意图。通过人类的反馈,可以指导模型避免学习有害或不适当的行为,从而提高模型的安全性和可靠性。使型输出更加符合人类的期望
(4) 基于人类反馈的强化学习(RLHF)是一种利用人类反馈来优化模型,而有效地进行自我学习的方法
(5) RLHF将人类反馈纳入奖励功能,因此大模型可以执行更符合人类目标、愿望和需求的任务
(6) 大模型对齐微调-RLHF
用人类更喜欢的数据去做训练:
①真实性:是虚假信息还是误导性信息?
②无害性:它是否对人或环境造成身体或精神上的伤害?
③有用性:它是否解决了用户的任务?
(7) RLHF的训练步骤
①监督学习:在特定领域或指令和人类示范语料库上微调预训练的LLM
②奖励模型:收集人类标注的数据集,训练奖励模型(RM)
(1)在数据集中随机抽取问题,使用有监督指令微调生成的模型(SFT Model),对于每个问题,生成多个不同的回答。人类标注者对这些结果综合考虑给出排名顺序。这过程类似于教练或老师辅导
(2)接下来使用这个排序结果数据来训练奖励模型。对多个排序结果,两两组合,形成多个训练数据对
(3)RM模型接受一个输入,给出评价回答质量的分数。这样对于一对训练数据,调节参数使得高质量回答的打分比低质量的打分要高
③强化学习:使用强化学习(例如PPO),用此数据集和奖励模型进一步微调LLM
(1)强化学习相较于监督学习更可能考虑整体影响:监督学习针对单个词元进行反馈,其目标是模型针对给定输入后得到确切答案;强化学习则是针对整个输出结果进行反馈而不针对特定词元。反馈的颗粒度不同使得强化学习更适合大语言模型
(2)强化学习更容易解决幻觉问题:监督学习会促使模型给出一个结果,即使是在模型不包含或不知道答案的情况下;而强化学习则可以通过答案的奖励分数,促使模型放弃低分值的答案
(3)强化学习可更好地解决多轮对话奖励累计问题:多轮对话的交互情况及是否达成最终目标,很难有效通过监督学习方法构建,但是通过强化学习构建奖励函数,可以通过整个对话的连贯性及背景对当前模型输出的优劣做判断
(1) Transformer的概念
Transformer是深度学习模型架构,最初在NLP任务取得成功,并逐渐扩展到其他领域如CV等
Transformer能捕获输入序列中的长距离依赖关系,同时兼具并行计算能力。这一结构使得深度学习模型参数突破了1亿,为大型模型的构建定了基础
随后,BERT(基于Transformer)等预训练模型的推出进一步推动了大模型的发展,使得模型参数量快速增长,并在多个NLP任务上取得性能提升
(2) Transformer的自注意力机制
1. 与循环神经网络等传统模型不同,Transformer模型仅仅使用一种被称作自注意力机制的方法和标准的前馈神经网络,完全不依赖任何循环单元或者卷积操作
自注意力机制的优点在于可直接对序列中任意两个单元之间的关系进行建模,这使得长距离依赖等问题可以更好地被求解
2. 基于Tansformer的大模型采用了自注意力机制,这本身就带来大量的参数。自注意力机制允许模型独立地考虑输入席列中的每个位置,并捕捉长距离依赖关系,这进一步增加模型参数量的需求
自注意力机制的作用:随着模型处理输入序列的每个单词,自注意力会关注整个输入序列的所有单词,帮助模型对本单词更好地进行编码
3. 为什么要引入Attention注意力
①当我们用CNN模型识别图像时,如何让模型知道图像中不同局部信息的重要性呢?
②当我们用RNN模型去处理NLP相关任务时,长距离“记忆”问题如何解决呢?
4. Attention机制计算步骤
第一步:query和key进行相似度计算,得到权值
第二步:将权值进行归一化,得到直接可用权重
第三步:将权重和value进行加权求和
首先我们了解一下如何使用向量来计算自注意力,然后再看怎样用矩阵来实现:
· 计算自注意力的第一步就是从每个编码器的输入向量中生成三个向量。也就是对于每个单词,我们创造一个查询向量、一个键向量和一个值向量
第一步:生成查询向量、键向量、值向量
①通过词嵌入与三个权重矩阵相乘后创建
-
第二步:计算得分
①使用点积计算
-
第三步:归一化
①将分数除以8(向量维度的平方根)后通过Softmax计算每一个单词对于其他单词的attention系数
②Softmax的作用是使所有单词的分数归一化,得到的分数都是正值且和为1
-
第四步:对加权值向量求和
①在编码某个单词时,将所有单词的表示(值向量)进行加权求和,而权重是通过该词的表示(键向量)与被编码词表示(查询向量)的点积并归一化得到即第三步得到的结果
②是以矩阵形式完成的
5. 以机器翻译为例理解Attention
①目标机器翻译是利用计算机将一种自然语言转换为另一种自然语言的过程
②神经网络机器翻译通常采用编码器-解码器结构,实现对变长输入句子的建模
编码器实现对源语言句子的“理解”,形成一个特定维度的浮点数向量
之后解码器根据此向量逐字生成目标语言的翻译结果
③Seq2seq
Seq2seq的概念:是通用的编码器-解码器结构,用于机器翻译、文本摘要、聊天机器人、阅读理解、语音识别、图像描述生成、图像问答
Seq2seq的组成:Seq2Seq(序列到序列)模型,由编码器(Encoder)和解码器(Decoder)两部分组成,一般选用RNN、LSTM、GRU等网络实现。Seq2seq的输入是一个不定长的序列,输出也是一个不定长的序列
(1)编码器:将长度可变的输入序列转换成长度固定的上下文向量(context vector),并且将输入序列的信息在该上下文向量中进行编码
(2)解码器:进行相反的过程,将上下文向量进行解码,转换成长度可变的输出序列
Seq2seq的缺点:Seq2seq模型在处理过长序列数据时表现不佳,其原因主要在两方面
(1)RNN模型固有的长期依赖问题(可以用LSTM、GRU解决)
(2)上下文向量(context vector)无法完全表达整个输入序列的信息
解码器在解码时,需要考虑所有序列,而这其中夹杂了无关的噪声或信息,会出现信息过载的问题。其实大部分输出,只跟输入序列的部分序列有关,而非整个列。因此基于Seq2seq模型,引入了注意力机制
· 注意力机制:在解码器的每个步骤中,使用与编码器的直接连接来聚焦于源序列的特定部分
· 注意力机制在输入信息中聚焦于更关键的信息,降低对其他信息的关注度,甚至过滤掉无关信息,就可以解决信息过载问题,并提高任务处理的效率和准确性
(3) Transformer的模块
①自注意力子层:使用自注意力机制对输入的序列进行新的表示
· 为了进一步完善自注意力层,增加一种多头注意力机制
多头注意力是多组自注意力构成的组合,自注意力机制能帮助建立包括上下文信息的词特征表达,多头注意力能帮助学习到多种不同类型的上下文影响情况。头越多,越有利于捕获更大更多范围的相关性特征,增加型的表达能力
提高注意力层的性能:
(1)扩展了模型专注于不同位置的能力
(2)它给出了注意力层的多个“表示子空间”
②前馈神经网络子层:使用全连接的前馈神经网络对输入向量序列进行进一步变换
③残差连接(标记为“Add”):对于自注意力子层和前馈神经网络子层,都有一个从输入直接到输出的额外连接,也就是一个跨子层的直连。残差连接可以使深层网络的信息传递更为有效
④层正则化:自注意力子层和前馈神经网络子层进行最终输出之前,会对输出的向量进行层正则化,规范结果向量取值范围,这样易于后面进步的处理
(4) Transformer的模型结构
①Encoder
(1)自注意力子层
(2)前馈神经网络子层
(3)残差连接(标记为“Add”)
(4)层正则化
②Decoder:包含两个Multi-Head Attention层
(1)第一个Attention层采用了Mask操作
(2)第二个Attention层的Key、Value使用Encoder输出结果信息,而Query使用Decoder中的信息
③Encoder和Decoder采用堆叠的形式,各有6个。最后一层Encoder的输出被各Decoder加以利用
④模型结构的分类
Encoder-only:对于此模型,预训练任务通常是“完形填空”
(1)这类模型擅长进行文本表示
(2)适用于做文本的分类、实体识别、关键信息抽取等任务
Decode-only:对于此模型,预训练任务通常是CLM(因果语言模型)
(1)对于decoder,在训练时是无法看到全文的,只能看到前面的信息
(2)因此这类模型适合做文本生成任务
Encoder-Decoder:由于包含了Encoder和Decoder,所以预训练的目标通常融合了各自的目标,但通常还会设计一些更加复杂的目标
(1)比如对于T5模型,会把一句话中一片区域的词都mask掉,然后让模型去预测
(2)Encoder-Decoder架构的模型,就适合做翻译、对话等需要根据给定输入来生成输出的任务这跟decoder-only的模型有很大差别
(5) Transformer的工作流程
①获取输入
Transformer中的输入X是由单词Embedding和位置编码(Positional Encoding)相加得到的。最终,每个单词都被嵌入为一个512维的向量
· 单词Embedding
单词的Embedding有多种方式可以得到,如可以采用Word2vec、Glove算法预训练得到,也可以在Transformer中训练得到
(1)Word2vec:是基于统计方法来获得词向量的方法,是套词嵌入方法,这种算法有2种训练模式
· 通过上下文来预测当前词
· 通过当前词来预测上下文
(2)Glove:是对Word2Vec方法的扩展,它将全局统计和Word2vec的基于上下文的学习结合起来
· 位置编码(Positional Encoding)
对Transformer来说,因句子中的词语都是同时进入网络进行处理,顺序信息在输入网络时就已丢失。因此Transformer需要额外的处理来告知每个词语的相对位置。其中的一个解决方案就是论文中提到的位置编码,能表示位置信息的编码添加到输入中,让网络知道每个词的位置和顺序
Positional Encoding就是句子中词语相对位置的编码,让Transformer保留词语的位置信息
②将输入传入Encoder
将得到的单词表示向量矩阵传入Encoder中经过6个Encoder block后可以得到句子所有单词的编码信息矩阵
每一个Encoder block输出的矩阵维度与输入完全一致
③将编码矩阵传递给Decoder
将Encoder输出的编码信息矩阵传递到Decoder中,Decoder依次会根据当前翻译过的1~i的单词翻译第i+1个单词
在整个过程中,翻译到第i+1个单词的时候,需要通过Mask(掩盖)操作遮盖住第i+1之后的单词
(1) GLM
1. GLM的概念
GLM(通用语言模型)架构是一种基于Transformer架构的语言模型,它主要针对自然语言处理任务进行设计和优化,可以用于各种NLP任务,如文本分类、情感分析、自然语言生成
GLM模型的设计目标是通过通用的预训练框架来解决自然语言理解、无条件生成、有条件生成任务。训练目标是自回归空白填充,从文本序列中采样文本片段(span),对其进行掩码(mask),然后要求模型对这些被掩码的片段进行自回归恢复
2. GLM的结构
①利用自回归填空的思想,基于Transformer的编码器实现同时在NLU和有无条件生成任务上较好的表现
依次重建这些跨度对于输入文本中随机地空白/删除连续的标记跨度,并按照自回归预训练的思想来训练模型来:
(1)文本原始输入:x1,x2,x3,x4,x5,x6,随机筛选部分跨度的token进行mask,原句子中的位置用mask表示
(2)筛选跨度长度的方式是使用lambda为3的泊松分布进行抽样
(3)PartA部分:x1,x2,M,x4,M,其中M表示mask的跨度
(4)对挑选出的跨度token进行随机排序,跨度的起始位置加入tokens,PartB 部分:S,x5,x6,S,x3
(5)拼接PartA和PartB作为输入,x1,x2,M,x4,M,S,x5,x6,S,x3
注意1:PartA内的各token可以互相注意
注意2:PartB内的tokens可以注意到PartA和PartB中已经生成的token
②模型结构调整细节
(1)调整了LN和残差连接的顺序
(2)对于token的预测输出用的是单个的线性层
(3)激活函数由ReLu调整为GeLUs
(2) ChatGLM
1. ChatGLM的概念
ChatGLM在GLM-130B的基础上持续进行文本和代码预训练并通过有监督微调技术实现人类意图对齐,具备文案写作、信息抽取、角色扮演、问答、对话能力
2. ChatGLM-6B的概念
还有基于ChatGLM-6B的开源大语言模型,这个模型有着62亿个参数,它采用GLM架构,并且通过模型量化技术,可以在普通的显卡上运行(只需6GB显存)
3. ChatGLM 2-6B的技术改进
①SwiGLU激活函数
②ROPE,旋转位置编码
③Multi-Query Attention:是多查询注意力的变体,也是用于自回归解码的注意力机制。与MHA不同的是,MQA让所有的头之间共享同一份Key和Value矩阵,每个头只单独保留一份Query参数,从而减少Key和Value矩阵的参数量
(3) LLaMA
1. LLaMA的概念
一个大型基础语言模型,共有(7B、13B、33B、65B)四种版本。其数据集来源都是公开数据集,无任何定制数据集,保证了其工作与开源兼容和可复现,整个训练数据集在token化之后大约包含1.4T的token
LLaMA的性能非常优异:具有130亿参数的LLaMA模型在大多数基准上可以胜过GPT-3(参数量达1750亿)
2. LLaMA的模型结构:由Transformer中的decoder堆叠而成,并进行了一些列的优化
①Tokenizer:BPE算法
②RMS Pre-Norm:对每个Transformer的子层输入都进行归一化,使用RMS Norm归一化函数
③SwiGLU:在前馈神经网络(FFN)使用SwiGLU激活函数替换了Transformer中的ReLU激活函数来提升性能
④ROPE:可以兼顾相对位置和绝对位置的信息以提高模型的泛化能力
⑤使用causal mask保证每个位置只能看到前面的tokens
3. LLaMA2的技术改进
①LLaMA2在预训练语料上比LLaMA增加了40%,增至2万亿个token,且训练数据中的文本来源更加的多样化。此外LLaMA2对应的微调模型是在超过100万条人工标注的数据下训练而成
②LLaMA2的上下文长度比LLaMA扩大了一倍,从2048个token拓展至4096个token。更长的上下文窗口意味着更多的聊天用例可被采用,进而模型的理解能力得以提升
③使用Grouped-Query Attention(GQA)代替Multi-Head Attention(MHA)
· Group Query Attention:自回归模型生成回答时,需要前面生成的KV缓存起来,来加速计算
· 多头注意力机制(MHA):需要的缓存量很大GOA将查询头分成了G个组,每个组共享一个公共的键(K)和值(V)投影
(1)当G=1时,等价于MQA
(2)当G=H时,等价于MHA
④Reward Model:LLaMA2训练了两个独立的奖励模型,一个针对帮助性helpfulness进行了优化,另一个针对安全safety进行了优化
(1) 多模态大模型的概念
多模态AI指能够处理和理解多种类型信息的人工智能,如文本、图像、音频、视频。这种AI不仅能够处理单一数据类型的任务,而且可以在不同数据类型间建立联系和融合,从而实现一个综合、全面的理解多模态
(2) 多模态的重要性
①很多应用场景如果没有多模态技术支持几乎难以实现,尤其是在需要处理多种类型数据的领域,例如医疗、机器人、电商、零售、游戏
②综合使用多种数据模式的信息,可以提升模型的性能。如一个能够同时处理文本和图片的模型,其效果应该比只能处理文本或只能处理图片的模型更出色
③多模态技术使得我们与系统交互更加灵活多样,可以根据自己的喜好或场合选择交互方式,比如键盘输入、语音对话、拍照识别
(3) 多模态模型的特点
①汉堡包模型:逻辑是出入口,会执行单条数据的编码和解码。利用Transformer结构去获取多个数据间的关联性质进行修正
②文本类模型:编解码过程使用分词+查表的机制,是简单和轻量级的,前向过程算力消耗极低
③因图像冗余信息很多,使用一个信息压缩层能节省主模块算力,在压缩后再切分。所以扩散过程是在Transformer-Decoder部分执行的。文本这块可以使用更高级的编码器,比如一个训练好的大语言模型。多模态模型强调通过多路编解码将不同模态映射到同一个隐空间,直接可以统一计算。因此核心转移到编解码的质量上
(4) 多模态模型的发展
1. 近些年多模态模型发展速度飞快,一路从①特定任务模型(Task-Specific Models) -> ②预训练模型(Pre-trained Models) -> ③任务统一模型(Unified Models with Emerging Capabilities) -> ④通用Agent助手(General-purpose Assistants)
多模态模型按照下游任务,可划分为理解式任务(视觉问答、视觉推理、图文检索)和生成式任务(文生图、图生图、图生视频、视频生视频
2. Sora模型
①内容上
最大支持60秒、1080p高保真视频生成,视频质量高,内容一致性强,电影级别的镜头语言
支持短视频扩展,编辑已有视频,连接已有视频,生成图像
目前效果较好的视频生成和图像生成模型,都是基于扩散模型(DDPM)进行训练:
(1)DDPM模型主要分为两个过程:forward加噪过程(从左往右)和reverse去噪过程(从右往左),当前图片状态的概率只与上一时刻有关
(2)加噪过程满足一定的数学规律,而去噪过程则采用神经网络来学习。这么一来神经网络就可以从一堆杂乱无章的噪声图片中生成真实图片
②技术上
(1)将视频压缩为空间时间块(Spacetime patches)使用Diffusion Transformer作为主干网络建模
(2)使用原始视频进行训练,可支持不同尺寸、时间、分辨率的直接生成
③数据工程
(1)使用DALLE 3 recaption技术进行视频文本标注
(2)利用GPT4将用户输入的简短提示词,扩充为复杂细节文本
④其他
物理交互的细节仍有缺陷,如玻璃破碎与水流、雪地脚印无法生成
⑤训练步骤
Step1:使用DALLE3 recaption技术对原始视频生成文字描述
Step2:提前将视频解码预处理成一种新的格式作为输入,或者直接输入视频再解码
Step3:通过VAE编码器压缩成低维空间表示,然后提取时空patch输入DiT
Step4:基于Diffusion Transformer学习图像语义生成,完成从文本语义到图像语义进行映射
Step5:DiT生成的低维空间表示,通过VAE解码器恢复成像素级的视频数据
3. SD/SDXL模型
Stable Diffusion(SD)训练过程主要包含以下几步:
①图像压缩:通过VAE将输入图像压缩到一个非常小的latent space(隐空间)
②前向扩散:将隐特征逐渐添加高斯噪声直至变成随机噪声
③Text Encoder:使用CLIP模型将人类语言转换成机器能理解的数学语义向量
④学习去噪:结合语义向量,让U-Net模型学习预测噪声,并计算和真正噪声图之间的loss,反向更新CLIP和U-Net
4. DALL-E模型
①DALL-E 2是个可以根据自然语言描述生成逼真的图像和艺术品的AI应用。它使用CLIP、Prior和decoder模型组合来生成图像,其质量取决于文本提示的具体性
(1)CLIP模型
(2)图像生成模型
· 训练过程:
(1)预训练CLIP模型用于生成文本和图像编码
(2)Prior阶段:对于一个文本x,经由CLIP可以产生text embedding和lmage embedding,产生的text embedding经过auto regressive或difussion的prior模型生成Image embedding,这一个阶段用CLIP中生成的Image embedding对其做监督
(3)Decoder阶段:用于从Image embedding中解码出图像
②DALL-E 2工作流程
(1)首先,将文本prompt输入到经过训练以将prompt映射到表征空间的文本编码器中
(2)接下来,称为先验的模型将文本编码映射到相应的图像编码,该图像编码捕获文本编码中包含的prompt的语义信息
(3)最后,图像解码模型随机生成图像,该图像是该语义信息的视觉表现
5. MoE混合专家模型
①混合专家模型(MOE)的优势是它们能够在远少于稠密模型所需的计算资源下进行预训练
(1)与稠密模型相比,预训练速度更快
(2)与具有相同参数数量的模型相比,具有更快的推理速度
(3)需要大量显存,因为所有专家系统都需要加载到内存中
②作为一种基于Transformer架构的模型,混合专家模型主要由两个关键部分组成
(1)稀疏MoE层:这些层代替了传统Transformer 模型中的前馈网络(FFN)层。MOE层包含若干“专家”,每个专家本身是一个独立的神经网络
(2)门控网络或路由:这个部分用于决定哪些令牌(token)被发送到哪个专家
(1) Huggingface PEFT的概念
是开源的模型调优工具包,用于有效地将预训练的语言模型适应各种下游应用,而无需微调模型的所有参数,显著降低了计算和存储的成本
PEFT基于Hugging Face的Transformers库,提供了丰富的插件和扩展功能,使得模型调优变得更简单和高效。PEFT支持多种主流模型架构,如BERT、ROBERTa、GPT等,并且可以与Hugging Face的Model Hub无缝集成,方便用户快速获取和使用预训练模型
PEFT支持自定义损失函数、自定义评估指标、自定义数据加载器等,使模型调优更加灵活和高效
(2) Huggingface PEFT支持以下四类模型调优方法
1. LoRA
①LoRA的实现思想很简单,就是冻结一个预训练模型的矩阵参数,并选择用A和B矩阵来替代,在下游任务时只更新A和B
(1)在原始预训练语言模型(PLM)旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的内在秩
(2)训练的时候固定PLM的参数,只训练降维矩阵A与升维矩阵B
(3)模型的输入输出维度不变,输出时将BA与PLM的参数叠加
(4)用随机高斯分布初始化A,用0矩阵初始化B,保证训练的开始此旁路矩阵依然是0矩阵
②LoRA基本思路:LoRA并不会直接训练原始的模型,而是将原始模型的参数固定,尝试去优化原始模型变化的秩分解矩阵
LoRA是跟Prompt Tuning和Prefix Tuning完全不相同的另一条技术路线
③LoRA背后有一个假设:我们现在看到的这些大语言模型,它们都是被过度参数化的,而过度参数化的大模型背后,都有一个低维的本质模型
④LoRA的优点
(1)可泛化至全量微调,自由度高
(2)可插拔,没有额外的推理时延
(3)在GPT-3(175B)微调中,训练参数数量降低4个数量级,精度保持相当
2. Prefix Tuning
①前缀微调(prefix-tunning),用于生成任务的轻量微调。前缀微调在原始模型基础上,增加一个可被训练的Embedding层,该Embedding层特定于模型微调面向的任务,该层称之为前缀,该层在训练过程中不断优化参数,让模型更好地理解提示词的意图
相比于传统的微调,前缀微调只优化了前缀。因此只需要存储一个大型Transformer和已知任务特定前缀的Embedding层,对每个额外任务产生非常小的开销。从而提供一种自动地、能够改进模型表现的提示机制
②Prefix Tuning是在输入token之前构造一段任务相关的virtual tokens作为Prefix,然后训练的时候只更新Prefix部分的参数,而Transformer中的其他部分参数固定
③Prefix Tuning的灵感是基于Prompt Engineering的实践表明,在不改变大模型的前提下,在Prompt上下文中添加适当的条件,可以引导大模型有更加出色的表现。Prefix Tuning的出发点跟Prompt Tuning的是类似的,只不过它们的具体实现上有一些差异
· Prompt Tuning:是在Embedding环节,往输入序列X前面加特定的Token
· 而Prefix Tuning:是在Transformer的Encoder和Decoder的网络中都加了一些特定的前缀。Prefix Tuning也保证基座模型本身是没变的,只在推理的过程中,按需要在W前面拼接一些参数
3. P-Tuninng/ P-Tuningv2
①该方法可以看作是Prefix Tuning的简化版本,只在输入层加入prompt tokens,并不需要加入MLP进行调整来解决难训练的问题
②固定预训练参数,为每一个任务额外添加一个或多个embedding,之后拼接query正常输入LLM,并只训练这些embedding
③Prompt tuning(P-tuning)是微调方法,相当于Prefix Tuning简化版本,无需调整模型参数,而是在已有的参数中选择一部分参数作为学习参数,用于创建每个Prompt前缀
④P-Tuning是在Prompt Tuning的基础上,通过新增LSTM或MLP编码模块来加速模型的收敛
⑤P-tuning v2是P-tuning的优化和适应实现,但最重要的改进之一是将连续提示应用于预训练模型的每个层,而不仅仅是输入层
· P-Tuning v2通过在每一层加入Prompts tokens,实现了更多的可学习参数和更深层结构中的Prompt对模型预测的直接影响,提高了模型的灵活性和效率
4. Prompt Tuning
①Prompt Tuning的出发点,是基座模型(Foundation Model)的参数不变,为每个特定任务,训练一个少量参数的小模型在具体执行特定任务的时候按需调用
②Prompt Tuning的基本原理是在输入序列X之前,增加一些特定长度的特殊Token,以增大生成期望序列的概率
③Prompt Tuning是发生在Embedding这个环节的
5. 大模型有多种微调方法,核心思想是尽可能“不动”或者“少动”预训练模型参数,达到提升模型在特定领域或者特定下游任务的能力。其他的有监督微调
①SFT
SFT有监督微调是指在源数据集上预训练一个神经网络模型即源模型。然后创建一个新的神经网络模型,即目标模型
· 目标模型复制了源模型上除了输出层外的所有模型设计及其参数
· 这些模型参数包含了源数据集上学习到的知识,且这些知识同样适用于目标数据集。源模型的输出层与源数据集的标签紧密相关,因此在目标模型中不予采用
微调时,为目标模型添加一个输出大小为目标数据集类别个数的输出层,并随机初始化该层的模型参数。在目标数据集上训练目标模型时,将从头训练到输出层,其余层的参数都基于源模型的参数微调得到
大模型指令微调-SFT:指令微调(Instruction Tuning)是指通过构建指令格式的实例,然后以有监督的方式对大语言模型进行微调。指令格式通常包含任务描述,一对输入输出以及示例(可选)
②Adapter Tuning
随着计算机硬件性能的提高,预训练模型参数量越来越多,在训练下游任务时进行全模型微调变得昂贵且耗时,Adapter的出现缓解了这个问题
Adapter在预训练模型每层中插入用于下游任务的参数,在微调时将模型主体冻结,仅训练特定于任务的参数,减少训练时算力开销
在预训练模型每一层(或某些层)中添加Adapter模块,微调时冻结预训练模型主体,由Adapter模块学习特定下游任务的知识
6. 主流大模型微调技术对比
①原始模型参数微调
(1)全量微调理论上限最高但所需语料、硬件资源训练时间最多,当语料不够大时,易出现过拟合
(2)部分微调不高效,局部更新参数
(3)逐层微调表现不佳
②参数高效微调(PEFT)
(1)LoRA没有额外的推理延时,减少内存和存储资源消耗大致收敛于训练原始模型,运用最广
(2)Adapter Tuning添加适配器层引入额外的计算,带来推理延迟
(3)Prefix Tuning难以优化,性能随可训练参数规模非单调变化
(4)P-Tuning前缀保留部分序列长度会减少下游任务的序列输入长度
(1) DeepSpeed的概念
基于多卡多节点集群对大模型进行训练微调时,集群系统训练效率较低,集群中单个节点的效率达不到节点机器所能达到的最大效率的50%
DeepSpeed是开源深度学习优化库,旨在提高大规模模型训练的效率和可扩展性。它通过多种技术手段来加速训练,包括模型并行化、梯度累积、动态精度缩放、本地模式混合精度
DeepSpeed还提供一些辅助工具,如分布式训练管理、内存优化、模型压缩等,以帮助开发者更好地管理和优化大规模深度学习训练任务
(2) DeepSpeed的组成
①APIs:提供API接口,训练模型、推理模型只需要简单调用几个接口即可。其中最重要的是initialize接口,用来初始化引擎,参数中配置训练参数及优化技术等。配置参数一般保存在config.json文件中
②Runtime:运行时组件,是DeepSpeed管理、执行和性能优化的核心组件。如部署训练任务到分布式设备、数据分区、模型分区、系统优化、微调、故障检测、checkpoint保存和加载等。该组件使用python语言实现
③Ops:用c++和cuda实现底层内核,优化计算和通信,例如ultrafast transformer kernels, fuse LANkernels, customary deals等
(1) MindPet集成在MindFormers中,是Mindspore领域实现大模型微调的算法套件。专注于低参微调算法的开发,对外提供低参微调算法接口,使能开发者修改自己开发的模型进行低参微调
(2) 目前MindPet已提供6种低参微调算法API接口,包括LoRA,PrefixTuning,Adapter,LowRank,AdapterBitFit,R_Drop,用户可快速适配原始大模型,提升下游任务微调性能和精度