大模型“记性差一点”反而更聪明:金鱼损失随机剔除 token,让 AI 不再死记硬背

训练大模型时,有时让它“记性差一点”,反而更聪明!

大语言模型如果不加约束,很容易把训练数据原封不动地复刻出来。为解决这个问题,来自马里兰大学、图宾根大学和马普所的研究团队提出了一个新方法 —— 金鱼损失(Goldfish Loss)

顾名思义,金鱼损失就是让模型像金鱼一样,不去死记每一个细节,而是在损失函数计算时随机剔除一小部分 token。

由此,模型不再逐字记住训练集内容,但仍能学会语言规律。

实验显示,LLaMA-2 在使用金鱼损失后:

  • 记忆化内容显著减少:模型不再复现训练数据

  • 下游任务性能几乎不受影响:仍然能流畅生成文本

用网友的精辟评论概括就是:dropout,但损失函数!

在梯度计算中随机屏蔽部分 token

金鱼损失的核心理念非常简单,就是在模型训练过程中随机剔除一部分训练文本中的 tokens,使其不参与损失计算。

这样一来,当模型在推理阶段遇到这些位置时,就只能“猜测”,而不是逐字逐句复现训练数据的完整序列。

此外,为了保证被剔除 token 的一致性,研究人员设计了一种基于哈希(hashing)的掩码策略。

那么,这和同样是防止模型背会的正则化方法有什么不同呢?

Dropout 这样的正则化方法为例,它通过在训练时“加噪声”来防止模型过度依赖某些参数,从而提高模型举一反三的能力。

但这样做的问题在于:如果只是随机丢 token,那么,每次看到同一段落时,丢掉的地方不一样,模型累计几次就能拼凑出完整段落。

所以,说到底,模型还是靠死记硬背,记住了答案。

相比之下,金鱼损失则用哈希掩码确保每次遇到同一段落,掩盖位置都一样,这就从根本上阻止了模型复现完整训练文本。

接下来,我们来看金鱼损失具体是怎么做的。

在传统的 next-token prediction 中,模型以序列中的下一个真实 token 作为目标,输出预测分布,并基于该分布计算交叉熵损失。

在金鱼损失下,模型虽然也在前向传播中预测序列里下一个 token。但在计算损失时,会以一定的概率将某些位置的 token 从损失计算里“抹掉”。

也就是说,有些真实的下一个 token 不会作为目标来训练。

在这里,研究人员采用了简单的静态掩码(static mask),剔除每序列中的第 4 个 token。

更进一步,为了确保模型不会从其他地方学到被掩码的数据(例如不同的文档会在不同的网页中反复出现),研究团队还提出了一种局部化哈希掩码(localized hashed mask),使得当相同的前 h 个 token 出现时,掩盖模式是相同的(可重复)。

实验测试与结果

为了验证金鱼损失确实能防止记忆化,研究团队设计了两种实验场景:

一种是极端场景,通过对少量样本进行多个训练周期(即重复)来强烈促使记忆化;

另一种是标准场景,模拟现实模型训练中使用的批次处理方式。

同时,为了评估模型的记忆化程度,研究采用了以下指标:

  • RougeL 得分:该指标衡量最长公共(非连续)子序列的长度。得分为 1.0 表示完美记忆。

  • 精确匹配率(Exact Match):该指标衡量正确预测的序列占真实序列的百分比.

实验表明,在极端场景下,标准训练导致模型逐字记忆了 100 篇文章中的 84 篇,而金鱼损失没有记忆任何文章

注:实验让 LLaMA-2-7B 在《哈利・波特》第一章或 100 篇维基百科文档上进一步训练了 100 个 epoch

此外,在标准训练场景下,金鱼损失也明显减少了模型逐字复现训练语料库中目标序列的情况。

但这里可能有个直觉式的反应 —— 如果让模型“随机漏学”一些 token,它的能力会不会也随之降低呢?

对此,研究人员进行了测试:研究表明,金鱼损失模型、标准损失模型和对照模型之间的总体性能没有系统性差异。

需要注意的是,金鱼损失的核心在于忽略部分 token 的梯度计算。因此,为了学到足够的语言模式,模型必须通过更多数据来补偿这些空缺,这可能导致计算效率的下降。

参考链接

  • [1]https://arxiv.org/pdf/2406.10209

本文来自微信公众号:量子位(ID:QbitAI),作者:henry,原标题《大模型“记性差一点”反而更聪明!金鱼损失随机剔除 token,让 AI 不再死记硬背》

Published by

风君子

独自遨游何稽首 揭天掀地慰生平