1、其中编码器-解码器架构,适合进行序列到序列的任务,比如文本翻译、内容摘要。
2、编码器架构,适合需要对输入内容分析但不需要生成新序列的任务,比如情感分析、文本分类。
3、解码器架构,适合基于已有信息生成新序列的任务,比如文本生成、对话系统。
备注:指令微调【监督微调】或继续预训练
1、目前大模型基本使用的模型结构是:解码器+下一个词预测(可以理解为一种通用任务);
2、书籍(综述):https://github.com/RUCAIBox/LLMSurvey/;https://www.bestblogs.dev/article/91b247
”一般来说,编码器架构被认为更适合去解决自然语言理解任务(如完形填空等),而解码器架构更适合解决自然语言生成任务(如文
本摘要等)“
解释:(1)编码器架构的核心目标是将输入的文本信息进行有效的特征提取和表示,把自然语言文本转换为计算机能够处理和理解的向量空间表示。在自然语言理解任务中,例如完形填空,需要对整个上下文有准确的理解,才能预测出合适的缺失词汇。
编码器通常采用诸如 Transformer 编码器这样的结构,它通过多头自注意力机制(Multi - Head Self - Attention)来捕捉输入序列中不同位置之间的依赖关系。这种机制能够让模型学习到文本中各个词汇之间的语义和句法联系,从而生成一个包含丰富语义信息的序列表示。
在完形填空任务里,编码器会对给定的上下文文本进行编码,将其转化为一个向量表示,这个向量表示整合了整个句子的语义和语法信息。模型可以基于这个表示来分析句子的结构和语义,从而预测出缺失的词汇。因为编码器专注于理解输入文本的整体信息,所以能够很好地处理这类需要理解上下文语义的自然语言理解任务。
(2)解码器架构的主要功能是根据给定的输入信息生成新的文本序列。它通常在生成过程中会考虑到已经生成的部分内容,并逐步预测下一个合适的词汇。
解码器同样基于注意力机制,不过它使用的是掩码多头自注意力机制(Masked Multi - Head Self - Attention),这种机制可以确保在生成每个位置的词汇时,模型只能关注到该位置之前的词汇,从而保证生成过程的顺序性和合理性。
在文本摘要任务中,解码器会接收编码器对原文的编码表示作为输入,然后根据这个表示和已经生成的部分摘要内容,逐步生成后续的摘要文本。解码器的这种逐步生成和基于已生成内容进行预测的特性,使得它非常适合处理自然语言生成任务,能够生成连贯、有逻辑的文本序列。
备注:(1)以 ELMo、BERT、GPT-1 为代表的预训练语言模型确立了“预训练-微调”这一任务求解范式。其中,预训练阶段旨在通过大规模无标注文本建立模型的基础能力,而微调阶段则使用有标注数据对于模型进行特定任务的适配,从而更好地解决下游的自然语言处理任务。
记录:随着模型参数、训练数据、计算算力的大规模扩展,最新一代大语言模型(LLM)的任务求解能力有了显著提升,能够不再依靠下游任务数据的微调进行通用任务的求解。说明:之前的预训练模型,均需要经过”微调“阶段才能够展现解决特定下游任务的能力,而大语言模型,则不需要。另外,通过预训练与微调两个阶段的学习,大语言模型具备了较好的人类指令遵循能力,能够直接通过自然语言描述下达任务指令(又称为“提示学习”)。这里的理解:LLM在预训练完成后,如果想要在某一【具体】领域具有很好的能力,则需要有针对性的微调,然后投入使用,之后人类的【提示学习】也可以看作是模型的【泛华】,这里的提示学习称谓应该指的是将LLM视为一个agent。结论:LLM既可以进行微调也可以不进行微调。
通用人工智能(Artificial General Intelligence,AGI),也被称为强人工智能,是人工智能领域追求的终极目标之一。它指的是一种具有高度自主性的智能系统,该系统能够像人类一样理解、学习、适应各种不同的任务和环境,拥有广泛的认知能力,包括但不限于语言理解、知识推理、问题解决、感知、创造力等,并且能够在没有人类过多干预的情况下,灵活地应对和处理前所未有的复杂情况。
与当前广泛应用的狭义人工智能(也叫弱人工智能)不同,狭义人工智能通常是为特定的、单一的任务而设计,例如图像识别系统只能专注于图像识别任务,语音助手主要用于语音交互和执行特定指令;而通用人工智能则具备跨领域、通用化的智能表现,能够胜任多种类型的任务,就如同人类可以在生活中同时处理学习、工作、社交等多方面事务一样。
摘录:(1)实际上,基于大规模无标注文本的下一个词元预测任务本质上可以看作一个多任务学习过程 [17],因为针对不同词元的预测任务可能涉及到情感分类(“... 这部电影真好看”)、数值计算(“3+4=7”)、知识推理(“中国陆地面积最大的省份是新疆”)等非常多样的训练任务。
(2)数据工程主要包括三个方面。首先,需要对于数据进行全面的采集,拓宽高质量的数据来源;其次,需要对于收集到的数据进行精细的清洗,尽量提升用于大模型训练的数据质量;第三,需要设计有效的数据配比与数据课程,加强模型对于数据语义信息的利用效率。
(3)上下文学习能力是指模型能够理解和利用文本周围的信息来更好地处理和生成内容的能力。
(4)思维链能力是指模型能够将一个复杂的问题分解为多个步骤,并通过一系列连贯的推理和思考来解决问题的能力,就像人在思考问题时一步一步推导的过程。
(5)通常来说,现有的研究认为指令微调无法向大模型注入新的知识,而是训练大模型学会利用自身所掌握的知识与信息进行任务的求解。在提示学习方面,需要设计合适的提示策略去诱导大语言模型生成正确的问题答案。为此,研究人员提出了多种高级提示策略,包括上下文学习、思维链提示等,通过构建特殊的提示模板或者表述形式来提升大语言模型对于复杂任务的求解能力。
指令微调(Instruction Tuning)和提示策略(Prompting Strategies)是在自然语言处理和大语言模型领域中用于优化模型性能和引导模型生成的重要技术手段,以下是具体介绍:指令微调:含义:指令微调是一种对预训练语言模型进行进一步训练的方法,旨在使模型更好地遵循特定的指令或任务要求。通过使用大量包含指令和相应期望输出的数据集对预训练模型进行微调,让模型学习如何根据不同的指令生成合适的响应。
提示策略:含义:提示策略是在与语言模型交互时,通过设计特定的提示信息来引导模型生成期望的输出。提示可以是一个问题、一段文本、一个情境描述等,目的是为模型提供更多的上下文信息或引导模型朝着特定的方向进行思考和生成。
(6)OpenAI 提出了基于人类反馈的强化学习算法(Reinforcement Learning fromHuman Feedback, RLHF)[28],将人类偏好引入到大模型的对齐过程中:首先训练能够区分模型输出质量好坏的奖励模型,进而使用强化学习算法来指导语言模型输出行为的调整,让大语言模型能够生成符合人类预期的输出。由于强化学习算法的优化过程较为复杂,最近学术界开始涌现出一批使用监督微调的对齐方式,从而简化 RLHF 优化过程的算法,如 DPO 算法等。
(7)在技术路径上,工具调用能力主要是通过指令微调以及提示学习两种途径实现,而未经历过特殊训练或者缺乏有效提示的大语言模型则很难有效利用候选工具。理解:特殊训练指的是经过特定数据集进行微调了。
(8)一般来说,LLM训练过程可以分为大规模预训练和指令微调与人类对齐两个阶段。一般来说,预训练是指使用与下游任务无关的大规模数据进行模型参数的初始训练,可以认为是为模型参数找到一个较好的“初值点”。
OpenAI 前首席科学家 Ilya Sutskever 在公开采访中指出大规模预训练本质上是在做一个【世界知识的压缩】,从而能够学习到一个编码世界知识的参数模型,这个模型能够通过解压缩所需要的知识来解决真实世界的任务。
(9)由于 GPT 系列模型的爆火,【“解码器架构 + 预测下一个词”】的有效性得到了充分验证,已经成为现有大语言模型主要采纳的技术路径。
备注:词元化(Tokenization)是将文本数据分割成一个个词元(Tokens)的过程,词元可以是【单词、子词、字符等】,这在自然语言处理中至关重要,为后续的分析和处理奠定基础。以下为你介绍常见的词元化方式及其应用场景:
1、基于单词的词元化
原理:以空格、标点符号等作为分隔符,将文本按单词进行划分。例如,对于句子 “I love natural language processing.”,基于单词的词元化会将其分割为 [“I”, “love”, “natural”, “language”, “processing”]。
应用场景:适用于大多数需要基于完整单词进行处理的任务,如文本分类、情感分析等。在这些场景下,单词作为独立的语义单元,能够反映文本的关键信息。例如在分析电影评论的情感倾向时,“terrible”(糟糕的)、“excellent”(出色的)等单词能直接体现情感态度。
2、基于字符的词元化
原理:将文本按照单个字符进行分割。例如,句子 “Hello” 会被词元化为 [“H”, “e”, “l”, “l”, “o”]。
应用场景:在处理形态丰富的语言(如阿拉伯语、芬兰语)或处理一些对字符级信息敏感的任务时很有用。例如在光学字符识别(OCR)后的文本校正中,基于字符的词元化有助于识别和纠正单个字符的错误;在处理密码学相关文本时,字符级的分析也十分关键。
3、子词词元化
原理:介于单词和字符之间,将单词拆分成有意义的子词单元。当遇到词汇表中未出现的单词(即 OOV,Out - Of - Vocabulary)时,子词词元化能将其分解为多个子词。例如,单词 “unaffordable” 可能被拆分为 [“un”, “afford”, “able”]。常见的子词词元化算法有字节对编码(Byte - Pair Encoding,BPE)和 WordPiece 等。
应用场景:有效解决 OOV 问题,提高模型对罕见词和新词汇的处理能力。在机器翻译中,由于不同语言的词汇差异大,子词词元化能帮助模型更好地处理源语言中的生僻词,准确地将其翻译成目标语言。
(10)预训练后的模型就像进入工作岗位的毕业生,尽管学习了很多通用的文化课,具备了一定的实习经验,但是仍然需要加强面向特定岗位的工作能力,并且深入了解工作岗位所涉及的相关要求。因此,用人单位往往需要设置特定的培训环节,对于新入职的人员针对业务场景以及所需要的技术进行专门提升。相似地,当预训练结束后,通常需要对于大语言模型进行微调与对齐,使之更好地被用于任务求解,为人类服务。
(11)比较广泛使用的微调技术是“指令微调”(也叫做有监督微调,Supervised Fine-tuning, SFT),通过使用任务输入与输出的配对数据进行模型训练,可以使得语言模型较好地掌握通过问答形式进行任务求解的能力。
(12)一般来说,指令微调很难教会大语言模型预训练阶段没有学习到的知识与能力,它主要起到了对于模型能力的激发作用,而不是知识注入作用。与预训练相比,指令微调通常来说需要的指令实例数据规模要小的多。通常来说,数十万到百万规模的指令微调数据能够有效地激发语言模型的通用任务解决能力,甚至有些工作认为数千条或者数万条高质量指令数据也能达到不错的微调效果。
(13)LLM的三种典型涌现能力:上下文学习(In-context Learning, ICL)、指令遵循(Instruction Following)和 逐步推理(Step-by-step Reasoning),其中思维链提示特别适合帮助大语言模型解决复杂数学问题
(14)目前还缺少对于大语言模型涌现机理的基础性解释研究工作。与这一问题较为相关的研究叫做“顿悟”(Grokking),是指训练过程中的一种数据学习模式:模型性能从随机水平提升为高度泛化。
(15)GPT 系列模型的基本原理是训练模型学习恢复预训练文本数据,将广泛的世界知识压缩到仅包含【解码器(Decoder-Only)】的 Transformer 模型中,从而使模型能够学习获得较为全面的能力。其中,两个关键要素是:(I)训练能够准确预测下一个词的 Transformer (只包含解码器)语言模型;(II)扩展语言模型的规模以及扩展预训练数据的规模。
备注:GPT,Generative Pre-Training 生成式预训练模型。
(16)GPT-2 的论文 [17] 中得到了着重论述,它试图使用无监督预训练的语言模型来解决各种下游任务,进而不需要使用标注数据进行显式的模型微调。形式化来说,多任务学习(Multi-task Learning)可以通过一种较为通用的概率形式刻画,即 𝑃(output|input, task)——根据输入和任务信息来预测输出。
(17)*GPT-3: 上下文学习可以指导大语言模型学会“理解”自然语言文本形式描述的新任务,【从而消除了针对新任务进行微调的需要】。基于这一学习范式,大语言模型的训练与利用可以通过语言建模的形式进行统一描述:【模型预训练】是在给定上下文条件下预测后续文本序列,【模型使用】则是根据任务描述以及示例数据来推理正确的任务解决方案。问题:什么是上下文学习,请举出一个例子进行解释。
(18)LLaMA 已经成为了最受欢迎的开源大语言模型之一,许多研究工作都是以其为基座模型进行【微调或继续预训练】,衍生出了众多变体模型
(19) MiniCPM 在训练前进行了模型沙盒实验,通过预先使用小模型广泛实验寻找更优的训练设置,并最终迁移至大模型上。在训练方法上,MiniCPM 首先采用了稳定训练与退火的两阶段学习方法,然后进行了有监督微调和人类偏好对齐。
(20)DeepSpeed 为分布式训练提供了各种优化技术支持,如内存优化(ZeRO 技术、梯度检查点)、数据并行、混合精度训练等,使得整个训练过程变得更加高效、稳定。
笔记:模型分布式训练和混合精度训练是深度学习领域中用于提高训练效率和模型性能的重要技术,以下是对它们的详细介绍:
### 模型分布式训练
- **定义**:模型分布式训练是指将一个大规模的深度学习模型的训练任务分割到多个计算节点(如多个GPU或多台服务器)上并行执行的技术,目的是利用多个计算资源来加速模型训练过程,缩短训练时间。
- **实现方式**
- **数据并行**:将训练数据划分成多个子集,每个计算节点处理不同的数据子集,但都拥有完整的模型副本。在训练过程中,各个节点分别计算梯度,然后通过通信机制将梯度进行聚合,更新模型参数。例如,在一个有4个GPU的系统中,将数据集分成4份,每个GPU处理一份数据,计算出梯度后进行汇总平均,再更新模型参数。
- **模型并行**:将深度学习模型划分成多个部分,每个计算节点负责处理模型的不同部分。例如,对于一个具有多个隐藏层的神经网络,可以将不同的隐藏层分配到不同的GPU上进行计算,数据在不同的节点之间传递,依次经过各个节点上的模型部分进行计算和处理。
- **混合并行**:结合数据并行和模型并行的方法,在多个计算节点之间既对数据进行划分,又对模型进行划分,以充分利用计算资源和提高训练效率。
- **关键技术**
- **通信机制**:为了保证各个计算节点之间的信息交互和同步,需要高效的通信机制,如使用MPI(Message Passing Interface)等通信库来实现节点之间的梯度传递和模型参数更新。
- **同步与异步训练**:同步训练时,所有节点在每个训练步骤都等待彼此完成计算,然后进行梯度聚合和参数更新;异步训练则允许节点在完成计算后立即更新参数,不需要等待其他节点,各节点之间的更新时间可能不同,能提高训练速度,但可能会影响收敛性。
### 混合精度训练
- **定义**:混合精度训练是指在深度学习训练过程中,同时使用不同精度的数据类型来表示模型参数、梯度和中间计算结果,以提高训练效率并减少内存占用,同时尽量保持模型的准确性。
- **实现方式**
- 通常是将传统的单精度浮点数(float32)与半精度浮点数(float16)结合使用。在正向传播和反向传播计算中,大部分计算可以使用半精度浮点数来加速计算,因为半精度浮点数的计算速度更快,占用内存更少。
- 对于一些对精度要求较高的操作,如某些复杂的数学运算或对模型参数的更新操作,仍然使用单精度浮点数,以确保计算的准确性。
- **关键技术**
- **动态损失缩放**:由于半精度浮点数的表示范围相对较小,在计算梯度时可能会出现下溢问题,导致梯度消失。动态损失缩放技术可以根据训练过程中的实际情况,自动调整损失值的缩放因子,使得梯度在半精度计算中能够正确表示,避免下溢,并在更新模型参数时再将梯度还原到正确的尺度。
- **精度转换与存储**:需要合理地设计数据在不同精度之间的转换策略,以及如何在内存中高效地存储不同精度的数据。例如,在将单精度参数转换为半精度进行计算时,要确保数据的准确性和一致性,计算完成后再正确地转换回单精度进行参数更新和存储。
模型分布式训练和混合精度训练可以结合使用,进一步提高深度学习模型的训练效率和性能,使训练能够在更短的时间内完成,同时减少对计算资源的需求。
(21)词元化(Tokenization)是数据预处理中的一个关键步骤,旨在将原始文本分割成模型可识别和建模的【词元序列】,作为大语言模型的输入数据。例如:假设语料中包含了五个英文单词:“loop”,“pool”,“loot”,“tool”,“loots” 在这种情况下,BPE 假设的初始词汇表即为:[“l”, “o”, “p”, “t”, “s”]
(22)Transformer 是由多层的多头自注意力(Multi-head Self-attention)模块堆叠而成的神经网络模型。
(23)多头自注意力是 Transformer 模型的核心创新技术。相比于循环神经网络(Recurrent Neural Network, RNN)和卷积神经网络(Convolutional Neural Network, CNN)等传统神经网络,多头自注意力机制能够直接建模【任意距离的词元】之间的交互关系。
(24)*在 Transformer 模型中,编码器(Encoder)(图 5.1 (a))的作用是将每个输入词元都编码成一个上下文语义相关的表示向量。编码器结构由多个相同的层堆叠而成,其中每一层都包含多头自注意力模块和前馈网络模块。在注意力和前馈网络后,模型使用层归一化和残差连接来加强模型的训练稳定度。其中,残差连接(Residual Connection)将输入与该层的输出相加,实现了信息在不同层的跳跃传递,从而缓解梯度爆炸和消失的问题。
(25)Transformer 架构中的解码器(图 5.1 (b))基于来自编码器编码后的最后一层的【输出表示】以及已经由【模型生成的词元序列】,执行后续的序列生成任务。
备注:与编码器不同,解码器需要引入掩码自注意力(Masked Self-attention)模块,用来在计算注意力分数的时候掩盖当前位置之后的词,以保证生成目标序列时不依赖于未来的信息。这里的输出:就是我们对LLM的输入数据。
(26)注意力机制是 Transformer 架构中的核心技术,它能够针对序列中的【词元对】构建交互关系,聚合来自于不同位置的语义信息。下面介绍四种常见的注意力机制的设计方法。
备注;解码器架构还可以细分为两个变种架构,包括因果解码器(Causal Decoder)架构和前缀解码器(Prefix Decoder)架构。值得注意的是,学术界所提到解码器架构时,通常指的都是因果解码器架构。
(27)然而,Transformer 的自注意力机制在计算每个词元时都需要利用到序列中所有词元的信息,这导致计算和存储复杂度随输入序列长度的平方级别增长。在处理长序列时,这种复杂性会消耗大量的计算资源与存储空间。为了解决这个问题,研究人员致力于新型模型架构的设计。这些新型模型大多基于参数化状态空间模型(State Space Model, SSM)进行设计,在长文本建模效率方面相比 Transformer 有了大幅改进,同时也保持了较好的序列建模能力。
(28) 状态空间模型是一种动态时域模型,在控制系统、经济学等多个领域都有着广泛应用。
(29)与传统神经网络的优化类似,通常使用批次梯度下降算法来进行模型参数的调优。同时,通过调整学习率以及优化器中的梯度修正策略,可以进一步提升训练的稳定性。为了防止模型对数据产生过度拟合,训练中还需要引入一系列正则化方法。下面将详细介绍适用于大模型场景的训练优化设置。
备注:在已有的工作中,大语言模型的训练通常采用Adam [195] 及其变种AdamW [196]作为优化器。Adam 优化器使用梯度的“动量”作为参数的更新方向,它使用历史更新步骤中的梯度加权平均值来代替当前时刻的梯度,从而缓解样本随机性带来的损失震荡。进一步,Adam 使用自适应的学习率方法,通过梯度的加权“二阶矩”对梯度进行修正(可以看做使用“标准差”进行“归一化”),从而防止梯度过小导致模型难以优化。
(30) 指令微调(Instruction Tuning)是指使用自然语言形式的数据对预训练后的大语言模型进行参数微调。就是监督微调。指令微调过程需要首先收集或构建指令化的实例,然后通过有监督的方式对大语言模型的参数进行微调。经过指令微调后,大语言模型能够展现出较强的指令遵循能力,可以通过零样本学习的方式解决多种下游任务。
(31)*一般来说,一个经过指令格式化的数据实例包括【任务描述】(也称为指令)、【任务输入-任务输出】以及【可选的示例】。例如:例如“请把这个中文句子翻译成英文”,输入是“大语言模型已经成为机器学习的一个重要研究方向”,而相应的输出则是“Large language models have become one important research direction for machine learning”。
(32)相关研究表明在现有 NLP 数据集的输入-输出数据中添加合适的【任务描述】是提升大模型指令跟随能力的关键因素;如果去除了这些任务描述,仅使用输入-输出数据对模型进行微调,模型的性能会出现显著下降
(33)在训练方式上,指令微调与预训练较为相似,很多设置包括数据组织形式都可以预训练阶段所采用的技术。本节主要介绍指令微调所特有的一些训练策略。
(34)首先介绍常用于 Transformer 架构的参数高效微调方法,然后以 LoRA 微调方法为例介绍参数高效微调的代码实现。【既要又要】:避免全量的参数调整,又需要达到模型能力。
(33) 在自回归架构中,模型针对输入内容(即提示文本,详见第 10 章)逐个单词生成输出内容的文本。这个过程一般被称为【解码】。在本章的内容中,我们将首先介绍常见的解码策略(第 9.1 节)以及相应的优化加速算法。大语言模型的生成方式本质上是一个概率采样过程,需要合适的解码策略来生成合适的输出内容。
(34)模型压缩的三张方法:量化、蒸馏和剪枝(Pruning)也是一种常用的方法。
剪枝(Pruning):剪枝技术通过移除神经网络中不重要或冗余的权重或神经元,来减少模型的大小和计算量。这可以通过分析权重的重要性,删除对模型性能影响较小的部分,从而实现模型的压缩和加速。
模型蒸馏(Model Distillation)的目标是将复杂模型(称为教师模型)包含的知识迁移到简单模型(称为学生模型)中,从而实现复杂模型的压缩。一般来说,通常会使用教师模型的输出来训练学生模型,以此来传递模型知识。
(35)*一般而言,针对大语言模型的提示设计需要考虑四个关键要素,即任务描述、输入数据、上下文信息和提示策略。
(36)输入数据. 通常情况下,用户可以直接使用自然语言描述输入数据的内容。对于特殊形式的输入数据,则需要采用合适的方法使其能够被大语言模型读取与理解。例如,对于结构化数据(如知识图谱、表格等),通常使用线性化方法将其转换为易于处理的文本序列
(37)上下文信息. 除了任务描述和输入数据外,上下文信息对某些特定任务也非常重要。例如,搜索引擎可以为开放问答任务提供参考文档,可以通过将检索到的参考文档以上下文信息的形式引入提示作为大语言模型的输入。
(38)提示策略. 针对不同的大语言模型设计合适的提示策略对于激发模型解决特定任务的能力非常重要。在某些情况下,添加特定的前缀或后缀有助于引导大语言模型解决复杂任务。例如,使用前缀“让我们一步一步地思考”可以激发大语言模型的逐步推理能力,而使用前缀“你是这项任务(或这个领域)的专家”可以提高大语言模型在某些特定任务(或领域)中的表现。
(39)思维链:思维链提示 [25, 282] 是一种高级提示策略,旨在增强大语言模型在各类复杂推理任务上的表现。常见的推理任务包括算术推理 [283]、常识推理 [284] 以及符号推理 [25] 等多种任务。与上下文学习方法仅使用 ⟨ 输入,输出 ⟩ 二元组来构造提示不同,思维链提示进一步融合了中间的推理步骤来指导从输入到输出的推理过程。
(40)如图 11.1 所示,基于大语言模型的规划方法主要由三个组件构成,包括【任务规划器(Task Planner)】、【规划执行器(Plan Executor)】以及【环境(Environment)】1。具体来说,大语言模型作为任务规划器,其主要职责是生成目标任务的解决方案。该方案包含一系列执行动作,每个动作通过合适的形式进行表达,例如自然语言描述或代码片段。