深入LLM:指令预训练(Instruction Pretraining LLMs)

上个月发生了好几件大事:苹果公司宣布要把大型语言模型(LLMs)集成到设备上,Nvidia也不甘示弱,分享了他们研发的超大型Nemotron模型。还有呢,FlashAttention-3闪亮登场,Google的Gemma 2也横空出世,真是一波接一波的惊喜。

我想你肯定已经在各大新闻网站上看到这些消息了吧。不过,今天我不打算重复这些新闻,咱们来聊聊更深入的东西。这篇文章,我要带大家深入了解指令微调,这是训练大型语言模型的一个超有用的技术。

咱们要聊的内容包括:

  1. 一种新鲜出炉的、性价比超高的方法,专门用来生成指令微调所需的数据。

  2. 从零开始,一步步教你怎么做指令微调。

  3. 用指令数据来预训练LLMs,这招儿可厉害了。

  4. 还有,咱们得好好聊聊Gemma 2的新特性,这个你肯定感兴趣。

好啦,废话不多说,咱们这就进入正题吧!

这篇论文《喜鹊:通过无中生有地提示已对齐的LLMs来从头合成对齐数据》(https://arxiv.org/abs/2406.08464) 真是个宝,它介绍了一种特别巧妙的方法,用来给大型语言模型(LLMs)的指令微调生成超棒的数据集。虽然这方法可能看起来没有带来什么突破性的研究洞见,但它的实用性和创新性绝对让人眼前一亮。

最关键的是,这种生成指令数据的方法完全自动化,不需要任何预先的问题或指令。就像论文标题说的,它能够从“零”开始,创造出一个指令数据集。而我们唯一需要的,就是一个本地运行的Llama 3 8B模型。想象一下,这就像是用魔法,从虚无中创造出有用的数据。

下图总结了这种方法的工作原理。

本质上,就像我们通常看到的图表所展示的那样,我们要做的就是给Llama 3 8B Instruct模型一个预设的查询模板,让它基于这个模板给我们生成指令。接下来,我们把这条指令再送回模型,它就会根据指令给我们一个回答。我们只要这样来回操作几千次,就能积累出一个用于指令微调的丰富数据集。如果需要,我们还可以利用模型本身来筛选出高质量的指令和回答对。

更有意思的是,当作者们用这个生成的数据集,只进行简单的指令微调,没有用到RLHF和DPO这些复杂的偏好微调技术,结果却显示,微调后的Llama 3 8B基础模型在性能上超过了Meta AI原先的Llama 2 8B Instruct模型。这就像是用更少的调料,却做出了更美味的菜肴,如下图所示。

起初,我对这个方法的效果还是半信半疑的。但毕竟,百闻不如一见嘛,于是我就亲自动手试了试。结果真是让人惊喜,它不仅有效,而且效果出奇的好!我这里还有一段我用Ollama重新实现的代码,它甚至在MacBook Air上都能跑得挺顺畅的。

原作者们准备了两套数据集,一套用的是Llama 3 70B Instruct模型,我们称之为"Pro"版;另一套用的是Llama 3 8B Instruct模型,就是"Air"版。就像之前图表展示的,用Magpie-Pro版数据集进行指令微调后,得到的模型性能比用Magpie-Air版的数据集微调的要稍微强上那么一些。

接下来的图表里,还有通过LLM对这两个数据集的质量和难度做的额外比较分析。

就像我们之前看到的那张图所展示的,Air版和Pro版数据集在质量上基本上是不分伯仲的。而且,要是能拿来跟Alpaca数据集比一比,那也挺有意思的。虽然我们假设Magpie数据集的质量比Alpaca要高得多,但如果能有个具体的对比点,那就更有参考价值了。

论文里还做了个分析,发现这个数据集在广度和多样性上,比起其他流行的指令微调数据集,比如Alpaca、Evol Instruct和UltraChat,都要丰富得多。而且,如果拿用这些数据集训练出来的模型来比较,用Magpie-Pro数据集微调后的模型也显得特别有优势。

总的来说,我觉得Magpie这个方法挺有意思的,它不仅效果显著,而且实用性也很高。将来我肯定会考虑用它,作为一种有趣、简单又经济的方式来构建通用的指令数据集。

至于那篇论文《指令预训练:语言模型是受监督的多任务学习者》(https://arxiv.org/abs/2406.14491), 研究人员探讨了能不能通过加入合成的指令-响应对,而不是单纯的原始文本,来提高LLM预训练的效率。这里的“原始文本”指的是那些还没经过特定格式处理的书籍、网站、论文等文本。

研究人员正在尝试一种新的方法来提高大型语言模型(LLM)的预训练效率。这个方法的核心是一个“指令合成器”,它是一个经过特别微调的LLM,能够利用原始训练资料库生成指令和响应数据。

值得注意的是,这并不是首个提出将原始文本转化为指令数据概念的论文。另一篇值得关注的相关工作是“Genie: Achieving Human Parity in Content-Grounded Datasets Generation”(https://arxiv.org/abs/2401.14367),这篇论文提出了一种通过大型语言模型生成与内容相关的数据集,以达到与人类相似的水平。此外,我记得几个月前还看到过另一篇论文或博客文章讨论了在预训练期间使用指令数据,尽管我找不到确切的参考资料了。但无论如何,当前讨论的这篇论文非常有趣,因为它基于可以本地运行的公开可用的LLMs,不仅涵盖了预训练,还包括了持续预训练。

在深入研究预训练和持续预训练的结果之前,我们需要了解这个方法的一个关键部分:指令合成器。这是一个公开可用的Mistral 7B v0.1 LLM,它已经被微调,可以从原始文本中生成指令-响应对。

为了微调这个合成器,研究人员使用了HotpotQA数据集(https://arxiv.org/abs/1809.09600),该数据集由与问题和答案相关的维基百科段落组成。为了确保数据集的多样性,作者还涵盖了各种任务,包括常识推理、情感分析、数学问题等。这表明,研究人员致力于让LLM能够处理各种类型的任务,并通过微调来提高其性能。

通过这种方法,研究人员希望能够提高LLMs的预训练效率,并且通过生成与任务相关的指令-响应对来增强模型的多任务学习能力。这种技术的发展可能会对LLMs的进一步研究和应用产生重要影响。

一旦指令合成器经过微调并开发完成,它就能够用来生成用于预训练目标大型语言模型(LLMs)的输入数据。这个过程听起来像是在为模型准备一顿丰盛的"知识大餐",让模型从这些数据中学习并提升自己的能力。

关于指令合成器,一个关键的细节是它将多个原始文本(我们称之为Tn)和指令-响应对(表示为In ⊕ Rn,这里的⊕代表连接操作)结合起来,形成少量样本示例。这就像是把不同的食材和调料混合在一起,制作出一道道精美的小菜,每道小菜都是模型学习的一部分。

接下来,让我们看看在这个增强的数据集上训练的模型表现如何。首先,研究人员观察了两个从头开始训练的小型模型,一个有500M参数,另一个有1.3B参数,这两个模型都是基于Mistral架构设计的。这就像是比较两个不同大小的种子,看看它们在同样的土壤和环境下,哪个能长得更好。

这些实验结果将帮助我们理解指令合成器生成的数据对于提升模型性能的真正价值。通过这种方式,研究人员希望能够找到更有效的训练方法,让大型语言模型变得更加智能和有用。

正如我们之前讨论的,指令预训练方法(Instruct PT)在多个基准测试中显示出了卓越的性能,这表明通过精心设计的指令和响应对来训练模型可以带来显著的效果提升。这种方法训练出的模型在处理各种任务时,相比其他方法能够获得更高的分数,这在评估模型性能时是一个积极的信号。

然而,这里有一个重要的观察点:尽管Instruct PT方法使用了合成的指令-响应对,但它所处理的令牌数量比传统的纯文本预训练方法(Vanilla PT)要多。这意味着Instruct PT方法可能因为它使用的丰富数据而获得了优势。

为了公正地比较,研究者们引入了另一种方法,即Mix PT,这种方法将原始文本和用于训练合成器的指令数据混合在一起进行训练。通过这种方式,Mix PT提供了一个对比基准,帮助研究者们理解仅增加数据量是否足以提升模型性能。

实验结果显示,并非简单地引入指令数据就能提升模型性能。事实上,Instruct PT在大多数任务上都优于Mix PT,这强调了指令-响应数据的质量是至关重要的。也就是说,不是所有的指令数据都是平等的;与原始数据紧密相关的、高质量的指令-响应对才是提升模型性能的关键因素。这一点在所有使用相同数量令牌的实验中都得到了验证。

这些发现对于我们理解如何更有效地训练大型语言模型具有重要意义,它们表明通过精心设计的指令预训练,可以显著提升模型在多任务学习中的表现。

另外,值得注意的是,Instruct PT预训练模型还有另一个优势:它们在之后进行指令微调时改进得更多,如下图所示。

从头开始进行预训练确实是一个有趣的过程,因为它代表了大型语言模型(LLMs)最初的创建方式。这个过程就像是在一张白纸上作画,所有的知识和能力都是从零开始逐渐构建的。

然而,对于许多实际应用来说,人们更关心的是如何对已有的模型进行持续预训练和微调,以适应特定的领域或任务。这种持续预训练的过程,就像是给已经学会走路的孩子提供更多的训练和指导,让他们能够跑得更快、跳得更远。

在这个过程中,我们可以采用一个已经在广泛的文本语料库上预训练过的模型,比如Llama 3 8B基础模型,然后针对特定的领域,比如金融、医疗或法律,进行进一步的预训练。这样做的目的是让模型能够更好地理解和处理特定领域的文本和问题。

研究人员在将指令预训练方法应用于Llama 3 8B基础模型时,进行了一系列的实验。他们使用了生物医学文本和金融文本作为新的训练数据,对模型进行持续预训练。这种方法的目的是评估模型在吸收新领域知识后的性能提升。

通过这种持续预训练,研究人员希望能够观察到模型在特定领域的性能提升。例如,如果模型在生物医学领域的文本上进行预训练,我们希望它在处理医学相关的查询和任务时表现得更加出色。同样,如果模型在金融领域的文本上进行预训练,我们也希望它能够更好地理解和分析金融报告、市场趋势等金融相关的信息。

总结的表格展示了这种持续预训练方法的应用结果,为我们提供了关于模型在不同领域适应性的重要信息。这些结果不仅能够帮助我们了解模型的性能改进,也能够为未来的模型微调和应用提供指导。

指令预训练方法(Instruct PT)在提升模型性能方面显示出了明显的优势。与常规的香草预训练方法(Vanilla PT)相比,也就是对基础模型进行标准的持续预训练,Instruct PT方法让模型在特定任务上表现得更加出色。

这种提升可能是因为指令预训练的数据更加针对模型需要学习和适应的任务,提供了更具体的指导和反馈,从而使得模型能够更快地掌握领域的特定知识。

此外,文中提到了Llama 3 70B基础模型作为一个参照点,这可能是为了证明即使是较小规模的专业模型,只要训练得当,也有可能超越更大规模的通用模型。这一点对于资源有限但需要特定领域模型的情况非常有价值。

然而,尽管指令预训练方法带来了性能上的提升,它在实际操作中也面临着一些挑战。特别是对于大型的预训练语料库来说,创建一个同样规模的指令增强语料库可能需要相当高的成本。这包括了生成指令-响应对所需的时间和计算资源。不过,一旦这些数据生成完成,它们就可以在多个不同的项目中重复使用,这在一定程度上缓解了成本问题。

总的来说,指令预训练提供了一种新的思路来提升和定制大型语言模型的性能,尽管它在实施上可能需要更多的考量和资源投入。这种方法的长期效益和在不同领域的应用潜力,使其成为了一个值得进一步探索的研究方向。

我不能在不提及Google的新Gemma 2模型的情况下写这篇文章,这可以说是上个月最大的模型发布。然而,在纯粹的规模方面,Nvidia的Nemotron-4 340B获得了第一名(https://arxiv.org/abs/2406.11704)。Gemma 2模型有2. 6B、9B和27B参数版本。

由于这篇文章已经相当长,而且你可能已经从其他来源熟悉了Gemma 2,让我们直奔主题。Google新发布的Gemma 2 LLMs的主要亮点和值得注意的更新是什么?主题主要集中在不增加训练数据集的大小,而是专注于开发相对较小和高效的LLMs。

具体来说,他们混合了三种主要的架构和训练选择来创建2.6B和9B参数模型:滑动窗口注意力、分组查询注意力和知识蒸馏。

滑动窗口注意力(例如,由Mistral推广的)是一种使用固定大小的注意力块的技术,允许当前令牌只关注一定数量的先前令牌,而不是所有先前令牌,如下图所示。

在Gemma 2的情况下,作者在常规注意力和滑动窗口注意力层之间交替。滑动注意力块大小为4096个令牌,跨越了8192个令牌的总块大小。

滑动窗口注意力主要用于提高计算性能,研究人员还包括了一个小型消融研究,表明在推理期间缩小块大小对9B参数模型的建模性能几乎没有影响。

分组查询注意力(像Llama 2和3中一样)可以被视为多查询注意力的更一般形式。这背后的动机是通过为多个查询头共享相同的键和值头,减少可训练参数的数量,从而降低计算要求。

知识蒸馏的一般思想(如MiniLLM中所述,https://arxiv.org/abs/2306.08543) 是将知识从较大的模型(教师)转移到较小的模型(学生)。在这里,他们从头开始训练了一个27B(教师)模型,然后训练了较小的2B和9B(学生)模型,这些模型基于较大教师模型的输出。27B模型不使用知识蒸馏,而是从头开始训练,作为较小模型的“教师”。

论文中还包含了许多其他有趣的细节。例如,Gemma 2的一个标志是其相对较大的词汇量:256,000个令牌。这与第一个Gemma模型类似,但仍然值得注意,因为它是Llama 3词汇量的两倍(128,000),也是Phi-3词汇量的八倍(32,000)。

LLM的词汇量指的是模型能够识别和生成的独特令牌(单词、子词或字符)的数量。

LLM中的大型词汇量允许更好地覆盖单词和概念,改善处理多语言内容,并减少标记化伪影。然而,大型词汇量也伴随着权衡,例如增加模型大小和可能由于更大的嵌入层和输出层而导致的较慢推理。(这就是滑动窗口注意力和多查询注意力机制重要的地方,以抵消这一点。)

还有一节有趣的“logit capping”技术,我以前没有见过。本质上,它是一种最小-最大归一化和裁剪logit值的形式,以保持它们在一定范围内。我推测这是为了在训练期间提高稳定性和梯度流动。

logits ← soft_cap × tanh(logits/soft_cap)。

此外,他们利用模型合并技术将具有不同超参数的不同运行的模型结合起来,尽管论文没有提供太多关于这方面的细节。(然而,感兴趣的读者可以阅读更多关于WARP:On the Benefits of Weight Averaged Rewarded Policies的内容,Gemma 2就是用这个的。)

在建模性能方面,Gemma 2几乎和3倍大的Llama 3 70B一样好,它击败了旧的Qwen 1.5 32B模型。看看与最近的Qwen 2模型的比较会很有趣。

个人而言,一个亮点是Gemma 2报告包括了一些其架构选择的消融研究。这曾经在学术研究中是理所当然的,但对于LLM研究来说越来越罕见。

看到Google这样相对详细的技术报告真是爽。就模型本身而言,根据公众共识,Gemma 2可能是今天单GPU用例中最有能力的模型。对于更大的模型,Llama 3 70B和Qwen 2 72B仍然是强有力的竞争者。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值