goldfish loss:减少训练数据泄漏,提高大语言模型输出的多样性

简介: LLMs(大型语言模型)能够记忆并重复它们的训练数据,这可能会带来隐私和版权风险。为了减轻记忆现象,论文作者引入了一种名为"goldfish loss"的微妙修改,在训练过程中,随机抽样的一部分标记被排除在损失计算之外。这些被舍弃的标记不会被模型记忆,从而防止模型完整复制训练集中的一整个标记序列。

LLMs(大型语言模型)能够记忆并重复它们的训练数据,这可能会带来隐私和版权风险。为了减轻记忆现象,论文作者引入了一种名为"goldfish loss"的微妙修改,在训练过程中,随机抽样的一部分标记被排除在损失计算之外。这些被舍弃的标记不会被模型记忆,从而防止模型完整复制训练集中的一整个标记序列。

论文行了广泛的实验,训练了十亿规模的 Llama-2 模型,包括预训练模型和从头开始训练的模型,并展示出在几乎不影响下游基准测试的情况下,可显著减少记忆现象。

goldfish loss

llm通常使用因果语言建模(CLM)目标进行训练,该目标表示令牌的平均对数概率,以所有先前的令牌为条件。对于包含L个训练标记的序列x = {xi},可以写成:

当模型以高置信度正确预测序列{xi}时,该目标最小化,从而使由下一个标记预测训练的模型易于记忆。而goldfish loss仅在令牌的一个子集上计算,因此阻止了模型学习整个令牌序列。选取goldfish mask G∈{0,1}L,定义损失为

当某些段落在不同文档中多次出现时,我们应该每次掩盖相同的标记,因为不一致的掩盖最终会泄露整个段落。

作者首先在序列中每隔 k 个标记丢弃一个标记,称之为静态掩码。这种静态掩码的方式在上面说的重复段落的情况下失败了,因为掩码对齐于预训练序列长度,而不是文本内容。

所以作者提出了新的局部哈希掩码来解决这个问题。对于确定哈希上下文宽度的正整数 h,如果应用于前 h 个标记的哈希函数 f : |V|^h → R 的输出小于 1/k,则掩盖标记 xi。

i) 处理重复段落的稳健性处理与哈希

当某些段落在不同文档中多次出现时,我们应该每次掩盖相同的标记,因为不一致的掩盖最终会泄露整个段落。

静态掩码基线在这里失败,因为掩码对齐于预训练序列长度,而不是文本内容。

作者们提出了新的局部哈希掩码来解决这个问题。对于确定哈希上下文宽度的正整数 h,如果应用于前 h 个标记的哈希函数 f : |V|^h → R 的输出小于 1/k,则掩盖标记 xi。通过这种策略,掩码在每个位置上仅依赖于前 h 个标记。每当相同的 h 个标记序列出现时,第 (h + 1) 个标记都会以相同的方式被掩盖。

验证记忆保留

因为进行了掩码的遮蔽,所以还需要验证LLM是否会丢掉记忆

作者首先将训练集中的每个测试序列切成长度为n个token的前缀和后缀。以前缀为条件,它们渐进式地生成温度为零的文本。使用两个指标将生成的后缀与真实后缀进行比较:

RougeL score: [Lin, 2004],它量化了最长公共(非连续)子序列的长度。得分为1.0表示记忆力很好。

精确匹配率:衡量与真实文本相比,正确预测的标记的百分比。

作者在仅包含 100 篇英文维基百科文章的数据集上,对 LLaMA-2–7B 模型进行了 100 个周期的训练。

上图为哈利·波特的结果显示,标准训练导致了对 84/100 篇文章的逐字记忆,而使用goldfish loss模型(k = 4)则没有记忆任何一篇文章。

RougeL 指标表明,使用goldfish loss损失训练的模型重复的非连续 n-gram 子序列长度大约是从未见过数据的模型的两倍。

针对于训练数据的重复:

作者预先训练了一个包含 1.1B 个参数和 32k 词汇量的语言模型。构建了来自两个来源数据集:RedPajama 2 的一个子集;混合了来自维基百科语料库的 2000 个目标序列,每个序列长度为 1024 到 2048 个标记。

下图绘制了训练后目标文档的 RougeL 记忆化分数分布。

当k = 3和k = 4时,RougeL值的分布与未在目标文档上训练的模型的分布大多重叠。对于较低的k值,可提取的记忆化接近于控制模型,并且标准损失中观察到的精确重复现象得到了有效缓解。

产生分歧的位置:

作者的直觉是,当损失放弃了标记时,模型不会记住这些标记,这会导致模型与基本事实偏离,或者说模型不会产生出与训练数据一模一样的输出

下图显示了 k = 4 的模型在每个序列位置上放弃标记的数量和与事实偏离的标记数量。

下表显示了在放弃标记处发生分歧的可能性。

可以看到大多数序列在第一个放弃的标记之后很快就会发生分歧,即使这些序列已经连续训练了 50 次,并且分歧位置几乎与被掩盖的位置完全重合。

对于静态掩码,观察到最大的对应率为 94.1%,随着损失中 k 的增加,这种对应关系逐渐减弱。而基于哈希的方法遵循类似的趋势,但由于此方法按照概率 1/k 丢弃任何标记,大多数分歧发生在第 k 个标记之前。

对模型性能的影响

对评估基准性能的影响

预训练的模型在整体表现上与使用标准因果语言建模(CLM)目标在相同数据上训练的模型表现类似。

下图显示,标准损失模型以及任何goldfish 模型的整体表现之间似乎没有系统性差异

由于goldfish 模型在某种程度上训练过的标记数量较少,可能会想到它们的原始标记预测能力会落后于看过更多数据的标准模型。

为了量化这种影响,作者跟踪模型在训练过程中的验证损失以及每个模型语义连贯性的能力进行对比

损失曲线

下图显示了在 RedpajamaV2 数据的 1200 万个标记上,模型的验证损失曲线,其中一个是使用标准损失训练的模型,另外两个是使用 4-GL 训练的模型。

所有模型收敛到几乎相同的验证损失值。随着批量大小的增加,损失遵循相同的验证曲线

Mauve分数:

Mauve分数是一个用来评估生成文本质量的指标,通过衡量生成文本与真实文本之间的多样性和自然性相似性来进行评估。

下图显示了使用模型在Slimpajama数据集样本上的Mauve分数。

对于贪婪解码,与使用因果语言建模(CLM)质量几乎没有明显下降。

当使用温度为0.7的多项式采样生成时,随着 k 增加和模型看到更多标记,分数略微有上升的趋势。

另外攻击者可能会尝试通过搜索序列的多种可能解码来提取数据,而最直接的实施方式是使用Beam Search。下图展示了使用30个束进行激进Beam Search的结果。

当k = 3时,goldfish loss仍然可以抵抗这种攻击,但当k值较大时,Beam Search抽样实现的可提取性增加。

总结

goldfish loss由于其简单性、可扩展性以及对模型性能影响相对较小,可以成为工业环境中的有用工具。不仅可以让模型不重复产生训练数据,这样可以规避训练数据泄露的风险,也可以让模型产生更多样的结果,丰富模型的输出。

但是更大的模型会记住更多的训练数据,因此研究goldfish loss对数十亿或数百亿参数规模模型带来的益处如何扩展,是一个有趣的开放问题。

最后金鱼的记忆只有7秒,虽然7秒记忆已经被研究证实是错的了,但是这个名字起的挺好,比哪些凑字的名字强多了,比如:谷歌的那个Lion (EvoLved SIgn MOmeNtum).

Paper: https://arxiv.org/abs/2406.10209

Code: https://github.com/ahans30/goldfish-loss

目录
相关文章
|
7月前
|
人工智能 安全 程序员
AI Gateway 分析:OpenRouter vs Higress
本文对比了两种AI网关——OpenRouter与Higress的定位、功能及演进历程。OpenRouter以简化AI模型调用体验为核心,服务于开发者群体;Higress则基于云原生架构,为企业级AI应用提供全面的流量治理与安全管控能力。两者分别代表了AI网关在不同场景下的发展方向。
|
10月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
算法 C++
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】 目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由关键字序列(4,9,0,1,8,6,3,5,2,7)创建一棵二叉排序树bt并以括号表示法输出。 (2)判断bt是否为一棵二叉排序树。 (3)采用递归方法查找关键字为6的结点,并输出其查找路径。 (4)分别删除bt中关键
353 11
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
|
人工智能 自然语言处理 机器人
【Prompt Engineering 提示词工程指南】​文本概括、信息提取、问答、文本分类、对话、代码生成、推理​
本文介绍了使用提示词与大语言模型(LLM)交互的基础知识。通过调整参数如温度(Temperature)、最高概率词元(Top_p)、最大长度(Max Length)及停止序列(Stop Sequences),可以优化模型输出。温度参数影响结果的随机性;Top_p 控制结果的多样性;最大长度限制输出长度;停止序列确保输出符合预期结构。此外,频率惩罚(Frequency Penalty)和存在惩罚(Presence Penalty)可减少重复词汇,提升输出质量。提示词需包含明确指令、上下文信息、输入数据及输出指示,以引导模型生成理想的文本。设计提示词时应注重具体性、避免歧义,并关注模型的具体行为
1808 1
【Prompt Engineering 提示词工程指南】​文本概括、信息提取、问答、文本分类、对话、代码生成、推理​
|
消息中间件 Prometheus 监控
RabbitMQ性能调优指南
【8月更文第28天】RabbitMQ 是一个非常流行的消息队列中间件,它支持多种消息协议,并且可以轻松集成到各种系统中。随着应用的扩展,确保 RabbitMQ 在高负载环境下能够高效稳定地运行变得至关重要。本文将深入探讨如何通过配置、监控以及最佳实践来优化 RabbitMQ 的性能。
2388 1
个人域名备案的流程是什么样的?
【10月更文挑战第10天】个人域名备案的流程是什么样的?
2507 0
Anaconda 与 Jupyter notebook
Anaconda 与 Jupyter notebook
|
安全 Android开发 开发者
探索安卓开发的未来:Kotlin的崛起与Flutter的挑战
在移动开发的广阔天地中,安卓平台始终占据着举足轻重的地位。随着技术的不断进步和开发者需求的多样化,Kotlin和Flutter成为了改变游戏规则的新玩家。本文将深入探讨Kotlin如何以其现代化的特性赢得开发者的青睐,以及Flutter凭借跨平台的能力如何挑战传统的安卓开发模式。通过实际案例分析,我们将揭示这两种技术如何塑造未来的安卓应用开发。
317 6
|
iOS开发
IOS编译报错‘ZipArchive.h‘ file not found|Use of undeclared identifier ‘SSZipArchive‘
IOS编译报错‘ZipArchive.h‘ file not found|Use of undeclared identifier ‘SSZipArchive‘
343 1