goldfish loss:减少训练数据泄漏,提高大语言模型输出的多样性
goldfish loss:减少训练数据泄漏,提高大语言模型输出的多样性
大型语言模型(LLMs)在训练过程中可能会记忆并重复其训练数据,这可能会带来隐私和版权风险。为了解决这个问题,研究人员提出了一种名为"goldfish loss"的训练方法,在训练过程中随机排除一部分标记的损失计算,从而防止模型完整复制训练数据中的标记序列。这种方法在实验中被证明可以在几乎不影响模型性能的情况下显著减少记忆现象。
goldfish loss的工作原理
LLMs通常使用因果语言建模(CLM)目标进行训练,该目标表示令牌的平均对数概率,以所有先前的令牌为条件。对于包含L个训练标记的序列x = {xi},可以写成:
当模型以高置信度正确预测序列{xi}时,该目标最小化,从而使由下一个标记预测训练的模型易于记忆。而goldfish loss仅在令牌的一个子集上计算,因此阻止了模型学习整个令牌序列。选取goldfish mask G∈{0,1}L,定义损失为
当某些段落在不同文档中多次出现时,我们应该每次掩盖相同的标记,因为不一致的掩盖最终会泄露整个段落。
静态掩码与局部哈希掩码
作者首先尝试了每隔k个标记丢弃一个标记的静态掩码方法,但这种方法在处理重复段落时效果不佳,因为掩码对齐于预训练序列长度,而不是文本内容。
为了解决这个问题,作者提出了新的局部哈希掩码方法。对于确定哈希上下文宽度的正整数h,如果应用于前h个标记的哈希函数f : |V|^h → R的输出小于1/k,则掩盖标记xi。通过这种策略,掩码在每个位置上仅依赖于前h个标记。每当相同的h个标记序列出现时,第(h+1)个标记都会以相同的方式被掩盖。
验证记忆保留效果
为了验证LLM是否会因为掩码而丢失记忆,作者设计了以下实验:
- 将训练集中的每个测试序列切成长度为n个token的前缀和后缀
- 以前缀为条件,渐进式地生成温度为零的文本
- 使用两个指标将生成的后缀与真实后缀进行比较:
- RougeL score:量化最长公共(非连续)子序列的长度,得分为1.0表示记忆力很好
- 精确匹配率:衡量正确预测的标记的百分比
实验结果表明,使用goldfish loss(k = 4)的模型没有记忆任何一篇文章,而标准训练导致了对84/100篇文章的逐字记忆。
对模型性能的影响
评估基准性能
预训练的模型在整体表现上与使用标准因果语言建模(CLM)目标在相同数据上训练的模型表现类似。下图显示,标准损失模型以及任何goldfish模型的整体表现之间似乎没有系统性差异。
损失曲线与Mauve分数
实验结果显示,所有模型都收敛到几乎相同的验证损失值。对于贪婪解码,使用goldfish loss的质量几乎没有明显下降。当使用温度为0.7的多项式采样生成时,随着k增加和模型看到更多标记,分数略微有上升的趋势。
总结
goldfish loss由于其简单性、可扩展性以及对模型性能影响相对较小,可以成为工业环境中的有用工具。不仅可以让模型不重复产生训练数据,这样可以规避训练数据泄露的风险,也可以让模型产生更多样的结果,丰富模型的输出。
但是更大的模型会记住更多的训练数据,因此研究goldfish loss对数十亿或数百亿参数规模模型带来的益处如何扩展,是一个有趣的开放问题。
最后,虽然金鱼的记忆只有7秒的说法已经被证实是错误的,但是这个名字起得挺好,比那些凑字的名字强多了,比如谷歌的那个Lion (EvoLved SIgn MOmeNtum)。