LLM
文章平均质量分 92
2022 年底,ChatGPT 震撼上线,大语言模型技术迅速“席卷”了整个社会,人工智能技术因此迎来了一次重要进展。面对大语言模型的强大性能,我们不禁要问:支撑这些模型的背后技术究竟是什么?本专栏会详细分析LLM背后基础原理与关键技术。
三月七꧁ ꧂
尚未佩妥剑,转眼便江湖。愿历尽千帆,归来仍少年! 跨考计算机上岸,下一站:月薪3W!
展开
-
模型参数量计算与效率分析
介绍如何计算基于 Transformer 架构的大语言模型的参数数量,并给出训练模型时所需要的运算量、训练时间和显存开销估计,方便可以估算训练所需要的时间、GPU 显存等计算资源开销。 由于当前主流的大模型普遍采用因果解码器架构,因此下面以 LLaMALLaMALLaMA 模型为范例,深入剖析其参数数量计算方式。对于其他模型,其参数量计算算法可参照此方法计算。首先,假设词表大小为 VVV,模型包含 LLL 层解码器,中间状态的维度大小为 HHH,前馈网络层的中间状态维度大小为 H′H'H′。我原创 2024-07-22 17:15:09 · 88 阅读 · 0 评论 -
大模型可扩展的训练技术
对于每个 GPU,在模型传播到某一层时,其他层的模型和优化器参数并不参数计算,这导致了严重的显存冗余现象,同时也限制了每个 GPU 可以支持的前向传播数据量,降低了训练效率。以上图为例,1 号 GPU 在前向传播后需要等待 2 号 GPU反向传播的结果才能进行梯度传播,因此整个流程是“1 号前向-2 号前向-2 号反向-1 号反向”的串行操作,大大降低了 GPU 的利用率。在流水线并行中使用了梯度累积后,1 号卡前向传播完第一个批次后,便可以不用等待,继续传播第二个和后续的批次,从而提高了流水线的效率。原创 2024-07-22 15:17:06 · 6 阅读 · 0 评论 -
大模型预训练优化参数设置
在大模型预训练中,通常将批次大小(Batch Size)设置为较大的数值,例如1M 到 4M 个词元,从而提高训练的稳定性和吞吐量。在模型训练的初始阶段,由于参数是随机初始化的,梯度通常也比较大,因此需要使用较小的学习率使得训练较为稳定。此外,谷歌的研究者提出了 Adafactor优化器,它是 Adam 优化器的一个变种,通过引入了特殊设计可以在训练过程中节省显存,被用于 PaLM 和 T5 等大语言模型的训练。常见的衰减策略有线性衰减,余弦衰减,平方根倒数衰减,它们的学习率变化如下图所示。原创 2024-07-18 20:48:25 · 889 阅读 · 0 评论 -
模型预训练任务
然而,在模型预训练阶段的损失函数中,由于并未将所有词元的损失都纳入计算,当使用相同规模的数据集进行训练时,采用前缀语言建模训练的模型在性能上通常会稍逊于使用标准语言建模任务训练的模型。混合去噪器,又称 UL2 损失,通过将语言建模和去噪自编码的目标均视为不同类型的去噪任务,对于预训练任务进行了统一建模。除了传统的语言建模任务外,去噪自编码任务是另一种常见的语言模型预训练任务,广泛应用于 BERT、T5 等预训练语言模型中。,语言建模任务的目标定义为词元的预测任务:基于序列中当前位置之前的词元序列。原创 2024-07-18 20:39:15 · 533 阅读 · 0 评论 -
新型模型架构(参数化状态空间模型、状态空间模型变种)
然而,Transformer 的自注意力机制在计算每个词元时都需要利用到序列中所有词元的信息,这导致计算和存储复杂度随输入序列长度的平方级别增长。Mamba是一种状态空间模型的变种,主要思想是在状态空间模型的状态更新中引入了基于当前输入的信息选择(Selection)机制,来确定当前时刻状态如何从前一时刻状态以及当前输入中提取信息,从而提升其在语言建模上的性能。在循环计算的时候,状态空间模型不需要和 Transformer 一样对前面所有时刻的状态进行访问,而是仅仅需要前一个时刻的状态。原创 2024-07-08 14:54:17 · 67 阅读 · 0 评论 -
长上下文模型(扩展位置编码、调整上下文窗口、长文本数据、)
在实际应用中,大语言模型对于长文本数据的处理需求日益凸显,尤其在长文档分析、多轮对话、故事创作等场景下。在这些情况下,模型需要处理的文本的长度常常超出预定义上下文窗口大小。例如,LLaMA-2 的上下文窗口限制为 4,096个词元。为了支持长文本处理,多家机构均已推出面向具有超长上下文窗口的大语言模型或 API。例如,OpenAI 发布了支持 128K 上下文窗口的 GPT-4 Turbo,而Anthropic 则推出了具有 200K 上下文窗口的 Claude-2.1。给定一个预训练后的大语言模型原创 2024-07-08 14:23:40 · 136 阅读 · 0 评论 -
在预训练语言模型主流架构
在预训练语言模型时代,自然语言处理领域广泛采用了预训练 + 微调的范式,并诞生了以 BERT 为代表的编码器(Encoder-only)架构、以 GPT 为代表的解码器(Decoder-only)架构和以 T5 为代表的编码器-解码器(Encoder-decoder)架构的大规模预训练语言模型。基于编码器-解码器设计的预训练语言模型(诸如 T5 等)在众多自然语言理解与生成任务中展现出了优异的性能,但是目前只有如 FLAN-T5 等少数大语言模型是基于编码器-解码器架构构建而成的。原创 2024-06-28 15:55:48 · 189 阅读 · 0 评论 -
Transformer 模型的详细配置---归一化、位置、激活函数和注意力机制
大语言模型的预训练过程中经常会出现不稳定的问题。为了应对这一问题,深度学习方法通常会采用特定的归一化策略来加强神经网络训练过程的稳定性。原始的 Transformer 模型主要使用了层归一化方法(Layer Normalization, LN)。随着研究工作的不断深入,基于层归一化的改进技术不断涌现,例如均方根层归一化(Root Mean Square Layer Normalization, RMSNorm)和 DeepNorm,这些新技术已经在一些大语言模型中得到应用。 LayerNorm原创 2024-06-28 15:38:40 · 633 阅读 · 0 评论 -
混合专家模型和LLAMA的详细配置
目前具有代表性的混合专家模型是 Mixtral (8×7B),该模型在 Mistral (7B) 的基础上,使用了混合专家模块。在每次计算被激活的参数仅仅有 13B的情况下,其性能超越了规模更大的 LLaMA-2 (70B),进一步证明了混合专家架构的有效性。为了解决这一问题,研究人员在大语言模型中引入了基于稀疏激活的混合专家架构(Mixture-of-Experts, MoE),旨在不显著提升计算成本的同时实现对于模型参数的拓展。之后,每个被选择的词元的输出的加权和将作为该混合专家网络层的最终输出。原创 2024-06-17 20:09:25 · 717 阅读 · 0 评论 -
大语言模型架构---Transformer 模型
由于输入数据是完全可见的,编码器中的自注意力模块通常采用双向注意力,每个位置的词元表示能够有效融合上下文的语义关系。与 BERT 等早期的预训练语言模型相比,大语言模型的特点是使用了更长的向量维度、更深的层数,进而包含了更大规模的模型参数,并主要使用解码器架构,对于 Transformer 本身的结构与配置改变并不大。Transformer 架构中的解码器基于来自编码器编码后的最后一层的输出表示以及已经由模型生成的词元序列,执行后续的序列生成任务。然后,对于每个查询,将和所有没有被掩盖的键之间计算点积。原创 2024-06-16 10:36:20 · 572 阅读 · 0 评论 -
大模型的数据调度
数据收集,建议在预训练数据中尽量包含较为多样化的数据来源。除了大规模网页数据外,还可以融入多样化的高质量文本,如代码、书籍、科学论文等。如果希望优化大语言模型的某种特定能力,还可以相应地调整对应数据来源的比例。例如,代码数据可以优化模型的长文本和推理能力;而书籍数据可以增强模型的写作和文学表达能力。除此以外,在特定的应用场景,如 AI4Science,我们可能还需要专门收集与自然科学相关的数据集合。原创 2024-05-31 09:33:42 · 1254 阅读 · 0 评论 -
大模型数据预处理---词元化(分词)
其中,出现频率最高的是 “oo”,出现了 48 次,因此,学习到的第一条合并规则是(“o”, “o”)→ “oo”,这意味着“oo”将被添加到词汇表中,并且应用这一合并规则到语料库的所有词汇。语料库:(“l”“oo”“p”,15),(“p”“oo”“l”,10),(“l”“oo”“t”,10),(“t”“oo”“l”,5),(“l”“oo”“t”“s”,8)语料库:(“loo”“p”,15),(“p”“oo”“l”,10),(“loot”,10),(“t”“oo”“l”,5),(“loot”“s”,8)原创 2024-05-23 11:47:05 · 1561 阅读 · 1 评论 -
数据对大模型预训练效果的影响
为了定量分析数据质量对于模型性能的影响,GLaM 模型对比了在原始数据和经过质量过滤的数据集上训练的模型性能,发现在各种自然语言处理任务上,在高质量数据上训练的模型都能取得更为出色的表现。此外,大语言模型所掌握的知识信息也来源于预训练数据,这意味着如果模型在包含事实性错误的、过时的数据上进行训练,那么它在处理相关主题时可能会产生不准确或虚假的信息,这种现象被称为“幻象”。例如,相关研究表明,在测试集合完全泄露的极端情况下,1.3B 的模型甚至在大部分任务超过了正常测评的 65B 的大语言模型。原创 2024-05-23 11:22:04 · 791 阅读 · 0 评论 -
如何编写提示词
给模型思考的时间,这里的“时间”是比喻性的,意味着应该给模型足够的信息,让它能够基于充足的上下文来产生回应。例如,如果我们要模型续写一篇故事,我们可以先提供故事的背景信息、人物关系和已发生的事件等,这样模型就有了足够的“思考时间”,能够在现有信息的基础上进行合理的创作。3.提取人物,人物指:过生日的人物、过纪念日的人物、来月经的人物、放物品的人物。• few shot示例要有明显的风格:提供给大模型的few shot示例,要人工摘选出有明显风格的文本,大模型才能够更好的学习其具体的风格。原创 2024-05-17 17:24:35 · 805 阅读 · 0 评论 -
大语言模型的数据预处理
当收集了丰富的文本数据之后,为了确保数据的质量和效用,还需要对数据进行预处理,从而消除低质量、冗余、无关甚可能有害的数据。一般来说,需要构建并使用系统化的数据处理框架(如开源库 Data-Juicer),从而保证预训练数据的质量。 直接收集到的文本数据往往掺杂了很多低质量的数据。例如,从网页抓取的数据中可能包含由机器自动生成的广告网页。为了优化模型学习的性能,需要去除语料库中的低质量数据。目前,研究人员主要使用以下两种数据清洗方法:(1)基于启发式规则的方法,和(2)基于分类器的方法。原创 2024-05-13 10:56:36 · 1427 阅读 · 1 评论 -
大语言模型的数据来源
此外,为了进一步提升大语言模型在特定专业任务上的表现,人们还将预训练语料的范围扩展至更专业的数据集,如多语数据、科学数据和代码数据等。这些书籍文本在大语言模型的学习过程中,发挥着非常重要的作用,它们不仅能够帮助模型积累丰富的语言知识,还可以加强其长程语义关系的建模。预训练是研发大语言模型的第一个训练阶段,也是最为重要的一个阶段。有效的预训练能够为大语言模型的能力奠定坚实的基础:通过在大规模语料上进行预训练,大语言模型可以获得通用的语言理解与生成能力,掌握较为广泛的世界知识,具备解决众多下游任务的性能潜力。原创 2024-05-13 09:44:12 · 978 阅读 · 0 评论 -
大语言模型用到的代码库资源
Megatron-LM 引入了一系列分布式训练的优化技巧,支持多种并行化策略,包括(1)数据并行,通过在每个工作节点复制模型,并将输入数据切分多份分配给多个节点,定期同步所有梯度来提升 GPU 的使用效率;(2)训练通路完整。该框架复现了 InstructGPT的训练过程,包括有监督微调、奖励模型训练和基于人类反馈的强化学习,还提供了数据抽象和混合功能,以帮助用户运行完整的训练流程;在使用中,用户仅需一行代码便能加载指定的数据集,同时,该库还集成了强大的数据处理能力,以满足各种复杂的数据操作需求。原创 2024-05-09 15:49:17 · 688 阅读 · 0 评论 -
大模型常用微调数据集
然后,每次随机抽取了 8 个指令作为示例,以此提示 GPT-3 生成了新的指令,之后在这些已有指令的基础上,继续利用 GPT-3 生成实例输入及其对应的输出,从而获得了更多数据。Alpaca-52K 数据集同样是基于 self-instruct 方法进行构建的,它是在 Self-Instruct-52K 的 175 个种子任务上,利用 OpenAI 的 text-davinci-003模型获得了 52K 个不重复的指令,并根据指令和输入生成了输出,进而构成了完整的实例数据。原创 2024-05-09 15:39:57 · 2652 阅读 · 0 评论 -
大模型常用的预训练数据集
此外,该数据集针对不同需求,发布了多个子版本:en(英文数据,806G),en.noclean(未清洗的原始数据,6T),realnewslike(仅包含 Real News 涉及的领域的内容,36G),webtextlike(仅包含来自 Open WebText 中URLs 的内容,17G)和 multilingual (多语言数据,38T)。值得注意的是,该数据集内部充斥着大量的噪声和低质量数据,在使用前必须进行有效的数据清洗,以确保数据质量和准确性,常用的自动清洗工具有 CCNet 等。原创 2024-05-03 11:04:53 · 1601 阅读 · 0 评论 -
大模型公开可用的模型检查点或 API
众所周知,大模型预训练是一项对计算资源要求极高的任务。因此,经过预训练的公开模型检查点(Model Checkpoint)对于推动大语言模型技术的渐进式发展起到了至关重要的作用。得益于学术界和工业界的共同努力,目前开源社区已经积累了大量的模型检查点资源,用户可以根据自身研究或开发需求,灵活选择并下载使用这些检查点。此外,对于那些仅需利用模型进行解码生成的用户而言,商业公司提供的闭源模型的 API 接口也是一种便捷的选择。这些接口为用户提供了与模型进行交互的渠道,而无需关心模型内部的复杂结构和训练过程原创 2024-05-03 10:00:19 · 1074 阅读 · 0 评论 -
大语言模型的涌现能力
大语言模型的涌现能力被非形式化定义为“在小型模型中不存在但在大模型中出现的能力”,具体是指当模型扩展到一定规模时,模型的特定任务性能突然出现显著跃升的趋势,远超过随机水平。类比而言,这种性能涌现模式与物理学中的相变现象有一定程度的相似,但是仍然缺乏相应的理论解释以及理论证实,甚至有些研究工作对于涌现能力是否存在提出质疑 。整体来说,涌现能力的提出有助于使得公众认识到大语言模型所具有的能力优势,能够帮助区分大语言模型与传统预训练语言模型之间的差异。 尽管涌现能力可以定义为解决某些复杂任务的能力水原创 2024-04-26 10:15:37 · 1123 阅读 · 2 评论 -
大语言模型的构建过程
大语言模型是指在海量无标注文本数据上进行预训练得到的大型预训练语言模型,例如 GPT-3,PaLM和 LLaMA。目前大语言模型所需要具有的最小参数规模还没有一个明确的参考标准,但是大语言模型通常是指参数规模达到百亿、千亿甚至万亿的模型;也有部分工作认为经过大规模数据预训练(显著多于传统预训练模型如 BERT 所需要的训练数据)的数十亿参数级别的模型也可以称之为大语言模型(如 LLaMA-2 7B)。对于大语言模型,本书泛指具有超大规模参数或者经过超大规模数据训练所得到的语言模型。与传统语言模型相比原创 2024-04-19 11:20:00 · 994 阅读 · 0 评论 -
语言模型的发展
一般来说,语言模型旨在对于人类语言的内在规律进行建模,从而准确预测词序列中未来(或缺失)词或词元(Token)的概率。根据所采用技术方法的不同,针对语言模型的研究工作可以分为以下四个主要发展阶段: 统计语言模型(Statistical Language Model, SLM),在 20 世纪 90 年代兴起的统计语言模型是基于统计学习方法研发的。具体来说,统计语言模型使用马尔可夫假设(Markov Assumption)来建立语言序列的预测模型,通常是根据词序列中若干个连续的上下文单词来预测原创 2024-04-19 10:38:55 · 1037 阅读 · 0 评论