您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[未知机构]:大规模语言模型从理论到实践 - 发现报告
当前位置:首页/其他报告/报告详情/

大规模语言模型从理论到实践

2023-09-10-未知机构一***
大规模语言模型从理论到实践

预览版 从理论到实践 大规模语言模型 张奇桂韬郑锐⻩萱菁著 ·2023年9月10日 前言 处 引 2018年Google的研究团队开创性地提出了预训练语言模型BERT[1],该模型在诸多自然语言理任务中展现了卓越的性能。这激发了大量以预训练语言模型为基础的自然语言处理研究,也领了自然语言处理领域的预训练范式的兴起。然而,尽管这一变革影响深远,但它并没有改变每个模型只能解决特定问题的基本模式。2020年,OpenAI发布了GPT-3模型,其在文本生成任务 上的能力令人印象深刻,并在许多少标注(Few-shot)的自然语言处理任务上取得了优秀的成绩。但是,其性能并未超越专门针对单一任务训练的有监督模型。之后,研究者们陆续提出了针对大语言模型(LargeLanguageModel,LLM)的提示词(Prompt)学习方法,并在各式各样的自然语言处理任务中进行了试验,同时也提出了模型即服务范式(ModelasaService,MaaS)概念。然而,在大部分情况下,这些方法的性能并未明显地超过基于预训练微调范式的模型。所以,这些方法的影响主要还是局限在自然语言处理的研究人员群体中。 2022年11月,ChatGPT的问世展示了大语言模型的强大潜能,并迅速引起了广泛关注。Chat-GPT能够有效理解用户需求,并根据上下文提供恰当的回答。它不仅可以进行日常对话,还能够完成复杂任务,如撰写文章、回答问题等。令人惊讶的是,所有这些任务都由一个模型完成。在许多任务上,ChatGPT的性能甚至超过了针对单一任务进行训练的有监督算法。这对于人工智能领域具有重大意义,并对自然语言处理研究产生了深远影响。然而,由于OpenAI并未公开ChatGPT的详细实现细节,整体训练过程包括语言模型、有监督微调、类人对齐等多个方面,这些方面之间还存在大量的关联,这对于研究人员在自然语言处理基础理论和机器学习基础理论上要求很高。此外,大语言模型的参数量非常庞大,与传统的自然语言处理研究范式完全不同。使用大语言模型还需要分布式并行计算的支持,这对自然语言处理算法研究人员又进一步提高了要求。为了使得更多的自然语言处理研究人员和对大语言模型感兴趣的读者能够快速了解大语言模型和理论基础,并开展大语言模型实践,结合之前在自然语言处理领域研究经验,以及分布式系统和并行计算的教学经验,我们在大语言模型实践和理论研究的过程中,历时8个月完成本书。希望这本书能够帮助读者快速入门大语言模型的研究和应用,并解决相关技术挑战。 然 自然语言处理的研究历史可以追溯到1947年,当时第一台通用计算机ENIAC刚刚问世。自语言处理经历了20世纪50年代末到60年代初的初创期,20世纪70年代到80年代的理性主义时代,20世纪90年代到21世纪初的经验主义时代,以及2006年至今的深度学习时代。自2017年Transformer模型[2]提出并在机器翻译领域取得巨大成功后,自然语言处理进入了爆发式的发 ii大规模语言模型:从理论到实践--张奇、桂韬、郑锐、黄萱菁 展阶段。2018年,动态词向量ELMo[3]模型开启了语言模型预训练的先河。随后,以GPT[4]和BERT[1]为代表的基于Transformer模型的大规模预训练语言模型相继提出,自然语言处理进入了预训练微调的新时代。2019年,OpenAI发布了拥有15亿参数的GPT-2模型[4],2020年,Google发布了拥有110亿参数的T5模型。同年,OpenAI发布了包含1750亿参数的GPT-3模型[5],从而开启了大语言模型的时代。直到2022年11月,ChatGPT的问世将大语言模型的研究推向了新的高度,引发了大语言模型研究的热潮。尽管大语言模型的发展历程只有不到五年的时间,但其发展速度相当惊人。截至2023年6月,国内外已经发布了超过百种大语言模型。 大语言模型的研究融合了自然语言处理、机器学习、分布式计算、并行计算等多个学科领域。其发展历程可以分为基础模型阶段、能力探索阶段和突破发展阶段。基础模型阶段主要集中在2018年至2021年期间,期间发布了一系列代表性的大语言模型,如BERT、GPT、百度ERNIE、华为盘古-α、Palm等。这些模型的发布为大语言模型的研究打下了基础。能力探索阶段主要发生在2019年至2022年期间。由于大语言模型在针对特定任务上微调方面存在一定困难,研究人员开始探索如何在不进行单一任务微调的情况下发挥大语言模型的能力。同时,研究人员还开始尝试指令微调(InstructionTuning)方案,将各种类型的任务统一为生成式自然语言理解框架,并使用构造的训练语料对模型进行微调。突破发展阶段以2022年11月ChatGPT的发布为起点。ChatGPT通过一个简单的对话框,利用一个大语言模型就能够实现问题回答、文稿撰写、代码生成、数学解题等多种任务,而以往的自然语言处理系统需要使用多个小模型进行定制开发才能分别实现这些能力。ChatGPT在开放领域问答、各类生成式自然语言任务以及对话理解等方面展现出的能力远超过大多数人的想象。这些阶段的发展推动了大语言模型的突破,为自然语言处理研究带来了巨大的进展,并在各个领域展示了令人瞩目的成果。 本书围绕大语言模型构建的四个主要阶段:预训练、有监督微调、奖励建模和强化学习,详细介绍各阶段使用的算法、数据、难点以及实践经验。预训练,需要利用包含数千亿甚至数万亿单词的训练数据,并借助由数千块高性能GPU和高速网络组成的超级计算机,花费数十天完成深度神经网络参数的训练。这一阶段的核心难点在于如何构建训练数据以及如何高效地进行分布式训练。有监督微调阶段利用少量高质量的数据集,其中包含用户输入的提示词(Prompt)和对应的理想输出结果。提示词可以是问题、闲聊对话、任务指令等多种形式和任务。这个阶段是从语言模型向对话模型转变的关键,其核心难点在于如何构建训练数据,包括训练数据内部多个任务之间的关系、训练数据与预训练之间的关系以及训练数据的规模。奖励建模阶段的目标是构建一个文本质量对比模型,用于对于同一个提示词,对有监督微调模型给出的多个不同输出结果进行质量排序。这一阶段的核心难点在于如何限定奖励模型的应用范围以及如何构建训练数据。强化学习阶段根据数十万提示词,利用前一阶段训练的奖励模型,对有监督微调模型对用户提示词补全结果的质量进行评估,并与语言模型建模目标综合得到更好的效果。这一阶段的难点在于解决强化学习方法稳定性不高、超参数众多以及模型收敛困难等问题。除了大语言模型的构建,本书还进一步介绍了大语言模型的应用和评估方法。主要内容包括如何将大语言模型与外部工具和知识源进 iii 行连接、如何利用大语言模型进行自动规划完成复杂任务,以及针对大语言模型的各类评估方法。本书旨在为对大语言模型感兴趣的读者提供一个入门指南,并可作为高年级本科生和研究生 自然语言处理相关课程的大语言模型部分的补充教材。鉴于大语言模型的研究仍在快速发展阶段,许多方面尚未达成完整结论或普遍共识。在撰写本书时,我们力求全面展现大模型研究的各个方面,并避免给出没有广泛共识的观点和结论。大语言模型涉及深度学习、自然语言处理、分布式计算、分布式计算等众多领域。因此,建议读者在阅读本书之前,首先系统地学习深度学习和自然语言处理的相关课程。在分布式计算和异构计算方面,读者需要具备基本的概念。如果希望在大语言模型训练和推理方面进行深入研究,还需要系统学习分布式系统、并行计算、CUDA编程等相关知识。 本书的写作过程得到了众多专家和同学的大力支持和帮助。特别感谢陈璐、陈天泽、陈文翔、窦士涵、葛启明、郭昕、赖文斌、柳世纯、汪冰海、奚志恒、许诺、张明、周钰皓等同学(按照拼音排序)为本书撰写提供的帮助。大语言模型研究进展之快,即便是在自然语言处理领域开展了近三十年工作的我们也难以适从。其关注之火爆程度令人咋舌,自然语言处理领域重要国际会议EMNLP,2022年语言模型相关论文投稿占比只有不到5%。然而,2023年语言模型相关投稿则超过了EMNLP整体投稿的20%。如何能够兼顾大语言模型的基础理论,又能够在快速发展的各种研究中选择最具有代表性的工作介绍给大家,是本书写作中面临的最大挑战。虽然本书写作时间只有8个月,但是章节内部结构也是几易其稿,经过数次大幅度调整和重写。即便如此,受限于我们的认知水平和所从事的研究工作的局限,对其中一些任务和工作的细节理解仍然可能存在不少错误,也恳请专家、读者批评指正! 张奇 2023年9月于复旦曦园 数学符号 数与数组 α标量 α向量 A矩阵 A张量 Inn行n列单位矩阵 vw单词w的分布式向量表示 ew单词w的独热向量表示:[0,0,...,1,0,...0],w下标处元素为1 索引 αi向量α中索引i处的元素 α−i向量α中除索引i之外的元素 wi:j序列w中从第i个元素到第j个元素组成的片段或子序列 Aij矩阵A中第i行、第j列处的元素 Ai:矩阵A中第i行 A:j矩阵A中第j列 Aijk三维张量A中索引为(i,j,k)处元素 A::i三维张量A中的一个二维切片 集合 A集合 R实数集 C复数集 [0,1,...,n]含0和n的正整数的集合 [a,b]a到b的实数闭区间 (a,b]a到b的实数左开右闭区间 v 线性代数 A⊤矩阵A的转置 A⊙B矩阵A与矩阵B的Hadamard乘积 det(A)矩阵A的行列式 [x;y]向量x与y的拼接 [U;V]矩阵A与V沿行向量拼接 x·y或x⊤y向量x与y的点积 微积分 dx dyy对x的导数 6x 6yy对x的偏导数 ▽xyy对向量x的梯度 ▽Xyy对矩阵X的梯度 ▽Xyy对张量X的梯度 概率与信息论 a⊥b随机变量a与b独立 a⊥b|c随机变量a与b关于c条件独立 P(a)离散变量概率分布 p(a)连续变量概率分布 a∼P随机变量a服从分布P Ex∼P(f(x))或 E(f(x)) f(x)在分布P(x)下的期望 Var(f(x))f(x)在分布P(x)下的方差 Cov(f(x),g(x))f(x)与g(x)在分布P(x)下的协方差 H(f(x))随机变量x的信息熵 DKL(P∥Q)概率分布P与Q的KL散度 N(µ,Σ)均值为µ、协方差为Σ的高斯分布 vi大规模语言模型:从理论到实践--张奇、桂韬、郑锐、黄萱菁 数据与概率分布 X或D数据集 x(i)数据集中第i个样本(输入) y(i)或y(i)第i个样本x(i)的标签(输出) 函数 f:A−→B由定义域A到值域B的函数(映射)ff◦gf与g的复合函数 f(x;θ)由参数θ定义的关于x的函数(也可以直接写作f(x),省略θ) 函数 logxx的自然对数函数 σ(x)Sigmoid1 1+exp(−x) ||x||px的Lp范数 ||x||x的L2范数 1condition条件指示函数:如果condition为真,则值为1;否则值为0 本书中常用写法 •给定词表V,其大小为|V| •序列x=x1,x2,...,xn中第i个单词xi的词向量vxi •算法的空间复杂度为O(mn) •损失函数L为负对数似然函数:L(θ)=−Σ(x,y)logP(y|x1...xn) 目录 1绪论1 1.1大规模语言模型基本概念1 1.2大规模语言模型发展历程4 1.3大规模语言模型构建流程6 1.4本书的内容安排11 2大语言模型基础13 2.1Transformer模型13 2.1.1嵌入表示层15 2.1.2注意力层16 2.1.3前馈层18 2.1.4残差连接与层归一化19 2.1.5编码器和解码器结构19 2.2生成式预训练语言模型GPT24 2.2.1无监督预训练24 2.2.2有监督下游任务微调26 2.2.3基于HuggingFace的预训练语言模型实践26 2.3大语言模型结构31 2.3.1LLaMA的模型结构32 2.3.2注意力机制优化37 3语言模型训练数据45 3.1数据来源45 3.1.1通用数据46 3.1.2专业数据47 viii大规模语言模型:从理论到实践