传统的语言模型预训练方法,对每个Token都是采用下一个Token的预测损失,然而对于预训练模型来说,并非所有Token都是同等重要。为此,本文作者进行了深入的分析,将Token进行分类,并提出了一种新型的语言模型训练方法:选择性语言建模法(SLM),实验结果表明:SLM方法不仅提高了模型性能还提高了训练效率,在数学任务上,使用SLM方法预训练的模型在少量样本准确率上比传统方法提高了多达30%;在通用任务上,SLM方法也实现了平均6.8%的性能提升。
https://arxiv.org/pdf/2404.07965.pdf
随着神经网络模型参数和数据集规模的不断扩大,模型对下一个Token的预测越来越准确,这也使得人类正式进入了大模型时代,目前各行各业的人们也正在疯狂探索大模型的场景应用。然而接触过模型开发的人都知道,在模型训练过程中并不能将所有的可用数据集纳入到模型训练中,这就涉及到了数据过滤技术。
通过各种启发式方法和分类器来选择训练文档,可以显著提高数据集质量进而增强模型性能。但是尽管进行了彻底的文档级过滤,数据集中仍然会包含一些对训练结果产生影响的噪声词。如下图中红色背景框所示:
面对这些噪声词,直接移除这些词可能会改变文本的含义,并且严格的过滤方法可能会移除有用的数据信息,这也会导致模型出现偏见。此外,网络上的数据与模型所对应的下游任务场景可能并不匹配。比如,常见Token语料库中可能会包含高度模糊Token,如果对所有的Token采用同样的Loss(下一个Token的预测损失),那么在训练过程中将会在无意义的Token上浪费计算资源,并且还会影响模型效果。
为此,本文作者探索了语言模型在Token级别上的学习方式,分析了训练过程中Token的loss的动态变化,并在不同的Checkpoint评估模型的Token困惑度,并「将Token分类为不同类型」。作者发现,在模型训练期间,loss的下降仅限于一小部分选定的Token,很多的“Easy Token”已被学习了,而有些“Hard Token”会影响loss函数的收敛。
基于以上分析,本文提出了一种选择性语言建模(SLM)目标训练的模型:RHO-1,如上图右侧所示,该方法将完整序列输入到模型中,并有选择地删除不需要的Token 损失,结果表明SLM 显着提高了预训练期间的 token 效率,并提高了下游任务的性能。
在预训练过程中,作者们通过分析Token的训练动态,如下图所示,并将Token分为四类:
「持续高损失(H→H)」:这类Token在训练过程中loss始终保持在较高水平,可能是因为它们包含高度随机性或难以预测的内容。
「损失增加(L→H)」:这类Token在训练过程中loss不降反增,表明模型在学习这些Token时遇到了困难。
「损失减少(H→L)」:这类Token在训练过程中loss明显降低,表明模型正在学习并掌握这些Token。
「持续低损失(L→L)」:这类Token在训练过程中loss始终保持在较低水平,表明这些Token已经被模型学习到了。
通过对这些不同类型的Token进行分析,作者们发现,在训练过程中,只有少数Token(约26%)的损失有显著降低(H→L),而大多数Token(51%)已经学会了(L→L),还有一小部分Token(11%)持续难以学习(H→H),另外12%的Token在训练过程中损失增加(L→H)。
基于上述分析,本文提出了选择性语言建模(SLM)方法。SLM的核心思想是在预训练过程中,不是对所有Token进行训练,而是选择性地训练那些对模型性能提升有帮助的Token。
如上图所示,SLM方法包括以下几个步骤:
SLM方法的关键在于,它通过选择性地训练Token,排除了那些对模型性能提升帮助不大的Token,从而提高了训练效率和模型性能。
通过在数学任务和通用任务上的实验,验证了SLM方法的性能和训练效率。
「数学任务」使用SLM方法继续预训练1B和7B语言模型(LMs),与使用因果语言建模(CLM)的基线模型相比,在OpenWebMath语料库上继续预训练后,RHO-1在GSM8k和MATH数据集上的平均少量样本准确率(few-shot accuracy)提高了超过16%。
「通用任务」 如下图所示,在通用语料库上继续预训练的RHO-1模型,在15个不同的任务上实现了平均6.8%的性能提升。