0
点赞
收藏
分享

微信扫一扫

2024年大唐杯备考

文章目录

大规模预训练

    大语言模型是指在海量无标注文本数据上进行预训练得到的大型预训练语言模型,例如 GPT-3,PaLM和 LLaMA。目前大语言模型所需要具有的最小参数规模还没有一个明确的参考标准,但是大语言模型通常是指参数规模达到百亿、千亿甚至万亿的模型;也有部分工作认为经过大规模数据预训练(显著多于传统预训练模型如 BERT 所需要的训练数据)的数十亿参数级别的模型也可以称之为大语言模型(如 LLaMA-2 7B)。对于大语言模型,本书泛指具有超大规模参数或者经过超大规模数据训练所得到的语言模型。与传统语言模型相比,大语言模型的构建过程涉及到更为复杂的训练方法,进而展现出了强大的自然语言理解能力和复杂任务求解能力(通过文本生成的形式)。

    从机器学习的观点来说,神经网络是一种具有特定模型结构的函数形式,而大语言模型则是一种基于 Transformer 结构的神经网络模型。因此,可以将大语言模型看作一种拥有大规模参数的函数,它的构建过程就是使用训练数据对于模型参数的拟合过程。尽管所采用的训练方法与传统的机器学习模型(如多元线性回归模型的训练)可能存在不同,但是本质上都是在做模型参数的优化。大语言模型的优化目标更加泛化,不仅仅是为了解决某一种或者某一类特定任务,而是希望能够作为通用任务的求解器。为了实现这一宏大的目标,大语言模型的构建过程需要更为复杂、精细的训练方法。一般来说,这个训练过程可以分为大规模预训练和指令微调与人类对齐两个阶段。

    一般来说,预训练是指使用与下游任务无关的大规模数据进行模型参数的初始训练,可以认为是为模型参数找到一个较好的“初值点”。这一思想最早在计算机视觉领域被广泛使用,通过使用大规模的图像标注数据集合 ImageNet 用于初始化视觉模型的参数。在自然语言处理领域,word2vec 采用了类似的预训练思想,使用无标注的文本语料训练可通用的词嵌入模型;后来被 ELMo、BERT和 GPT-1 推广到训练可迁移的自然语言任务架构,逐步成为了研发大语言模型的核心技术路径。早期的预训练技术还是聚焦于解决下游某一类的特定任务,如传统的自然语言处理任务。OpenAI 在 GPT-2 的论文中,提出通过大规模文本数据的预训练实现通用任务的求解器(尽管 GPT-2 论文中所验证的实验还是主要以自然语言处理任务为主),并且将这一思路在 GPT-3 中推广到了当时最大的千亿规模。OpenAI 前首席科学家 Ilya Sutskever 在公开采访中指出大规模预训练本质上是在做一个世界知识的压缩,从而能够学习到一个编码世界知识的参数模型,这个模型能够通过解压缩所需要的知识来解决真实世界的任务。在 BERT 等传统预训练模型中,所采用的模型架构以及训练任务还比较多样。由于 GPT 系列模型的爆火,“解码器架构 + 预测下一个词”的有效性得到了充分验证,已经成为现有大语言模型主要采纳的技术路径。

    为了预训练大语言模型,需要准备大规模的文本数据,并且进行严格的清洗,去除掉可能包含有毒有害的内容,最后将清洗后的数据进行词元化(Tokenization)流,并且切分成批次(Batch),用于大语言模型的预训练。由于大语言模型的能力基础主要来源于预训练数据,因此数据的收集与清洗对于模型性能具有重要的影响。收集高质量、多源化的数据以及对于数据进行严格的清洗是构建大语言模型关键能力的重中之重,需要大模型研发人员的高度关注。目前的开源模型普遍采用 2∼3T 规模的词元进行预训练,并有趋势进一步扩大这一规模。这一过程对于算力需求量极高,一般来说训练百亿模型至少需要百卡规模的算力集群(如 A100 80G)联合训练数月时间(与具体的算力资源相关);而训练千亿模型则需要千卡甚至万卡规模的算力集群,对于算力资源的消耗非常惊人。

    尽管整体的预训练技术框架非常直观,但是实施过程中涉及到大量需要深入探索的经验性技术,如数据如何进行配比、如何进行学习率的调整、如何早期发现模型的异常行为等。预训练过程需要考虑各种实施细节,而这些细节有很多并没有公开发表的经验可循,需要研发人员具有丰富的训练经验和异常处理能力,避免大规模训练开始以后进行回退和反复迭代,从而减少算力资源的浪费,提升训练成功的几率。大语言模型的研发看似是一个算力需求型的工程,实际上相关人才是最重要的。可以说,一个大语言模型项目的核心训练人员的能力最后会决定模型的整体水平。

指令微调与人类对齐

    经过大规模数据预训练后的语言模型已经具备较强的模型能力,能够编码丰富的世界知识,但是由于预训练任务形式所限,这些模型更擅长于文本补全,并不适合直接解决具体的任务。尽管可以通过上下文学习(In-Context Learning, ICL)等提示学习技术进行适配,但是模型自身对于任务的感知与解决能力仍然较为局限。这里做一个简单的类比。预训练后的模型就像进入工作岗位的毕业生,尽管学习了很多通用的文化课,具备了一定的实习经验,但是仍然需要加强面向特定岗位的工作能力,并且深入了解工作岗位所涉及的相关要求。因此,用人单位往往需要设置特定的培训环节,对于新入职的人员针对业务场景以及所需要的技术进行专门提升。相似地,当预训练结束后,通常需要对于大语言模型进行微调与对齐,使之更好地被用于任务求解,为人类服务。

    目前来说,比较广泛使用的微调技术是“指令微调”(也叫做有监督微调, Supervised Fine-tuning, SFT),通过使用任务输入与输出的配对数据进行模型训练,可以使得语言模型较好地掌握通过问答形式进行任务求解的能力。这种模仿示例数据进行学习的过程本质属于机器学习中的模仿学习(Imitation Learning)。给定一个特定任务,虽然可能存在很多解答方式,模仿学习旨在加强对于标准答案(即师傅的示范动作)的复刻学习。一般来说,指令微调很难教会大语言模型预训练阶段没有学习到的知识与能力,它主要起到了对于模型能力的激发作用,而不是知识注入作用。与预训练相比,指令微调通常来说需要的指令实例数据规模要小的多。通常来说,数十万到百万规模的指令微调数据能够有效地激发语言模型的通用任务解决能力,甚至有些工作认为数千条或者数万条高质量指令数据也能达到不错的微调效果。因此,指令微调对于算力资源的需求相对较小。一般情况下,若干台单机八卡(A100-80G)的服务器就能在一天或数天的时间内完成百亿模型的指令微调,当指令数据规模较大的时候可以进一步增加所需要的算力资源。这个过程还可以进一步加入多轮次的对话数据来增强模型的人机对话能力。

    除了提升任务的解决能力外,还需要将大语言模型与人类的期望、需求以及价值观对齐(Alignment),这对于大模型的部署与应用具有重要的意义。OpenAI 在 2022 年初发布了 InstructGPT 的学术论文,系统地介绍了如何将语言模型进行人类对齐。具体来说,主要引入了基于人类反馈的强化学习对齐方法 RLHF(Reinforcement Learning from Human Feedback),在指令微调后使用强化学习加强模型的对齐能力。在 RLHF 算法中,需要训练一个符合人类价值观的奖励模型(Reward Model)。为此,需要标注人员针对大语言模型所生成的多条输出进行偏好排序,并使用偏好数据训练奖励模型,用于判断模型的输出质量。由于强化学习需要维护更多的辅助模型进行训练,通常来说对于资源的消耗会多于指令微调,但是也远小于预训练阶段所需要的算力资源。目前还有很多工作试图通过消除奖励模型的使用,或其他使用 SFT 方式来达到与 RLHF 相似的效果,从而简化模型的对齐过程。

    经历上述两个过程后,大语言模型就能够具备较好的人机交互能力,通过问答形式解决人类所提出的问题。这个构建过程需要大量的算力资源支持,也需要具有良好洞察力和训练经验的研发人员进行相关技术路线的设计与执行。因此,实现具有 ChatGPT 或者 GPT-4 能力的大语言模型绝非易事,需要进行深入的探索与实践。

KM扩展法则

    大语言模型获得成功的关键在于对“规模扩展”(Scaling)的充分探索与利用。在实现上,大语言模型采用了与小型预训练语言模型相似的神经网络结构(基于注意力机制的 Transformer 架构)和预训练方法(如语言建模)。但是通过扩展参数规模、数据规模和计算算力,大语言模型的能力显著超越了小型语言模型的能力。有趣的是,这种通过扩展所带来的性能提升通常显著高于通过改进架构、算法等方面所带来的改进。因此,建立定量的建模方法,即扩展法则(Scaling Law),来研究规模扩展所带来的模型性能提升具有重要的实践指导意义。在本部分,将首先介绍两种常见的语言模型扩展法则的定义,并且进一步对于扩展法则进行深入讨论。

    2020 年,Kaplan 等人(OpenAI 团队)首次建立了神经语言模型性能与三个主要因素——模型规模(𝑁)、数据规模(𝐷)和计算算力(𝐶)之间的幂律关系(Power-Law Relationship)。由于原始论文中没有给出具体的扩展法则命名,本部分内容中使用两位共同第一作者姓氏的首字母来进行命名。在给定算力预算 𝑐 的条件下,可以近似得到以下三个基本指数公式来描述扩展法则:

图片名称

    这里,𝐿(·) 表示用以 nat为单位的交叉熵损失。其中,𝑁𝑐、𝐷𝑐 和 𝐶𝑐 分别表示非嵌入参数数量、训练数据数量和实际的算力开销。为了便于讨论,我们在不影响表达和理解的情况下对于原始的公式符号进行了适度简化。这三个公式是通过模型在不同数据规模(22M 到 23B 词元)、模型规模(768M 到 1.5B 非嵌入参数)和算力规模下的性能表现拟合推导得到的。为了推导这些公式,需要约定一些基本假设:一个因素的分析不会受到其他两个因素的限制,如当变动模型参数规模的时候,需要保证数据资源是充足的。

    由公式可见,模型性能与这三个因素之间存在着较强的依赖关系,可以近似刻画为指数关系。上述公式为规模扩展效应提供了一种定量的普适建模方法。通过普适规则能够更好地探究问题的本质,排除其他复杂因素的影响与干扰(如OpenAI 研究团队发现模型形状对于上述公式的影响并不大)。为了便于理解扩展法则对于模型性能的影响,OpenAI 的研究团队又将这里的损失函数进一步分解为两部分,包括不可约损失(真实数据分布的熵)和可约损失(真实分布和模型分布之间 KL 散度的估计):

图片名称

    这里 𝑥 是一个占位符号,可以指代公式中的 𝑁、𝐷 和 𝐶。其中,不可约损失由数据自身特征确定,无法通过扩展法则或者优化算法进行约减;模型性能的优化只能减小可约损失部分。

Chinchilla 扩展法则

    Hoffmann 等人(DeepMind 团队)于 2022 年提出了一种可选的扩展法则,旨在指导大语言模型充分利用给定的算力资源进行优化训练。通过针对更大范围的模型规模(70M 到 16B 参数)和数据规模(5B 到 500B 词元)进行实验,研究人员拟合得到了另一种关于模型性能的幂律关系:

图片名称

    其中 𝐸 = 1.69, 𝐴 = 406.4, 𝐵 = 410.7,𝛼 = 0.34 和 𝛽 = 0.28。进一步,利用约束条件𝐶 ≈ 6𝑁𝐷 对于损失函数 𝐿(𝑁, 𝐷) 进行推导,能够获得算力资源固定情况下模型规模与数据规模的最优分配方案(如下所示):

图片名称

    这里,𝑎 =𝛼/(𝛼+𝛽),𝑏 =𝛽/(𝛼+𝛽),𝐺 是由 𝐴、𝐵、𝛼 和 𝛽 计算得出的扩展系数。进一步,研究人员发现 KM 扩展法则和 Chinchilla 扩展法则都可以近似表示成上述算力为核心的公式:

图片名称

    即当算力 𝐶 给定的情况下,最优的模型参数规模和数据规模由指数系数 𝑎 和 𝑏 分别确定。可以看到,𝑎 和 𝑏 决定了参数规模和数据规模的资源分配优先级:当 𝑎 > 𝑏时,应该用更多的算力去提高参数规模;当 𝑏 > 𝑎 时,应该用更多的算力去提高数据规模。尽管 KM 扩展法则和 Chinchilla 扩展法则具有相似的公式形式,但是在模型规模和数据规模的扩展上存在一定的差异。随着算力预算的增加,KM 扩展法则(𝑎 ≈ 0.73, 𝑏 ≈ 0.27)倾向于将更大的预算分配给模型规模的增加,而不是分配给数据规模的增加;而 Chinchilla 扩展法则主张两种规模参数应该以等比例关系增加(𝑎 ≈ 0.46, 𝑏 ≈ 0.54 [22])。

    Chinchilla 扩展法则这项研究的意义并不在于给出了资源在数据规模与模型规模上的具体分配方案,而是首次形式化指出了之前的预训练工作可能忽视了训练数据的规模扩展。例如,具有 175B 参数的 GPT-3 仅仅使用了 300B 的词元进行训练,所使用的数据量远远没有达到模型能够编码的最大数据容量。根据 Chinchilla 扩展法则的指导,DeepMind 的研究团队进一步训练得到了具有 70B 参数的 Chinchilla模型,使用大概 1.4T 的词元进行训练。虽然后续有些人借鉴 Chinchilla 模型的线性分配比例(数据规模大概是模型参数规模的五倍),但是目前这一分配系数已经基本没有参考意义了。越来越多的工作表明,现有的预训练语言模型对于数据的需求量远高于这些扩展法则中所给出的估计规模。例如,LLaMA-2 (7B) 的模型就使用了 2T 的词元进行训练,很多更小的模型也能够通过使用超大规模的预训练数据获得较大的模型性能提升。这种现象的一个重要原因是由于 Transformer 架构具有较好的数据扩展性,到目前为止,还没有实验能够有效验证特定参数规模语言模型的饱和数据规模(即随着数据规模的扩展,模型性能不再提升)。

关于扩展法则的讨论

    可预测的扩展(Predictable Scaling):在实践中,扩展法则可以用于指导大语言模型的训练,通过较小算力资源可靠地估计较大算力资源投入后的模型性能,这被称为可预测的扩展。这种可预测性主要体现在两个方面:使用小模型的性能去预估大模型的性能,或者使用大模型的早期训练性能去估计训练完成后的性能。可预测扩展对于大模型训练具有两个主要的指导作用。首先,对于大语言模型来说,详细进行各种训练技巧或变体的测试需要耗费巨大的算力资源。因此,一个较为理想的经验性方法是,基于小模型获得训练经验然后应用于大模型的训练,从而减少实验成本。例如,可以训练小型代理模型来确定适合大型模型的预训练数据混合的最佳比例。其次,大语言模型的训练过程较长,经常面临着训练损失波动情况,扩展法则可以用于监控大语言模型的训练状态,如在早期识别异常性能。尽管扩展法则刻画了模型性能增长(或模型损失减少)的平滑趋势,但是指数形式的变化趋势意味着可能会出现随规模扩展的收益递减情况,即后期的扩展增益开始变得缓慢甚至停滞。根据 OpenAI 团队的一项研究表明,即使接近递减收益点(即接近不可规约的模型损失),模型表征的质量仍然能够随着规模扩展而有效提升。这一发现表明,训练大型模型对于改善下游任务的性能是非常重要的。随着模型规模的不断增加,一个潜在问题是可供用来训练大语言模型的数据量实际上是有限的,公共文本数据将很快变得“枯竭”。因此,如何在数据受限的情况下建模扩展法则,仍然具有重要的实践意义。在这一情况下,数据重复或数据合成可能有助于缓解数据稀缺问题。

    任务层面的可预测性,现有关于扩展法则的研究大多数是基于语言建模损失开展的,例如预测下一个词元的平均交叉熵损失,这一度量本身是平滑的,是对于模型整体能力的宏观度量。在实践中,我们则更关注大语言模型在真实任务中的性能提升。为了建立扩展法则与模型任务性能的关联,一个基础问题就是语言建模损失的减少是否真正意味着(或对应着)真实任务上模型性能的提高。整体上来说,语言建模损失较小的模型往往在下游任务中表现更好,因为语言建模的能力可以被认为是一种模型整体能力的综合度量。然而,语言建模损失的减少并不总是意味着模型在下游任务上的性能改善。对于某些特殊任务,甚至会出现“逆向扩展”(Inverse Scaling)现象,即随着语言建模损失的降低,任务性能却出人意料地变差。总体而言,探索和描述任务层面的扩展法则更加困难,因为它可能还依赖于任务相关的信息(如任务指标、任务难度等)。根据 GPT-4 的报告,通过扩展法则可以准确预测某些任务能力(例如编码能力),但是对于有些任务的性能预测是非常困难的。此外,有些重要能力(例如上下文学习能力)根据扩展法则是不可预测的,只有当模型大小超过一定规模时才会出现涌现能力。

举报

相关推荐

0 条评论