什么是 LLM 幻觉?

262 阅读10分钟

本文为英文翻译后的文章


你可能见过模型幻觉。这些是 LLM 生成错误、误导性或完全虚构信息的实例,但这些信息看起来却很合理。这些幻觉之所以会发生,是因为 LLM 并不像人类那样“知道”事实;相反,它们是根据训练数据中的模式来预测单词的。几年前发布的早期模型在幻觉问题上曾严重受挫。随着时间的推移,缓解策略改善了这一情况,尽管幻觉仍未被完全消除。

“Zyler Vance” 是我虚构的名字。当我将提示“Zyler Vance 是谁?”输入到 falcon-7b-instruct 模型时,它生成了虚构的信息。Zyler Vance 并不是 2018 年电影《科洛弗悖论》中的角色。这个模型是较老的版本,容易出现幻觉。

LLM 训练流程

要理解幻觉的起源,你必须熟悉训练流程。训练 LLM 通常涉及三个主要阶段:

  1. 预训练
  2. 后训练:监督式微调(SFT)
  3. 后训练:基于人类反馈的强化学习(RLHF)

预训练

这是 LLM 训练的初始阶段。在预训练期间,模型会接触到大量从互联网爬取的高质量且多样化的文本。预训练帮助模型学习通用的语言模式、语法和事实。这一训练阶段的输出称为基础模型。它是一个标记模拟器,用于预测序列中的下一个单词。

你可以通过查看 FineWeb 数据集来了解预训练数据集可能是什么样子。FineWeb 数据集是一个企业级语言模型的典型代表。像 OpenAI、Google 或 Meta 这样的主要 LLM 提供商都会有一个类似于 FineWeb 数据集的内部数据集。

后训练:监督式微调

正如前面提到的,基础模型是一个标记模拟器,它只是对互联网文本进行采样。我们需要将这个基础模型转变为一个能够回答问题的助手。因此,我们会使用对话数据集对预训练模型进行进一步优化。这些对话数据集包含数十万段对话,这些对话是多轮且内容广泛的,涵盖了各种主题。

这些对话来自人类标注员。在给定对话上下文的情况下,人类标注员会为助手在任何情境下写出理想的回答。随后,我们用对话数据集替换基础模型的训练数据集,并继续在新的对话数据集上训练模型。通过这种方式,模型能够迅速调整并学习助手对查询的统计响应方式。训练结束后,模型能够模仿人类的回答。

OpenAssistant/oasst1 是 Hugging Face 上的一个开源对话数据集。这是一个由人类生成并标注的助手风格对话语料库,包含 161,443 条消息,涵盖 35 种不同语言。

后训练:基于人类反馈的强化学习

监督式微调使模型具备了能力,但即使是经过良好训练的模型,也可能生成误导性、有偏见或无帮助的回答。因此,需要基于人类反馈的强化学习来使其与人类期望保持一致。

我们从经过监督式微调训练的助手模型开始。对于给定的提示,我们生成多个模型输出。人类标注员会根据质量、安全性以及与人类偏好的一致性对多个模型输出进行排名或评分。我们使用这些数据来训练一个完全独立的神经网络,我们称之为奖励模型。

奖励模型模仿人类评分。它是一个人类偏好的模拟器。它是一个完全独立的神经网络,可能采用 Transformer 架构,但它并不是一个生成多样化语言的通用语言模型,它只是一个评分模型。

现在,LLM 使用强化学习进行微调,奖励模型为生成的输出提供反馈。因此,我们不是询问真实的人类,而是询问模拟人类对输出的评分。目标是最大化奖励信号,这反映了人类的偏好。

为什么会出现幻觉?

现在我们对大型语言模型的训练过程有了更清晰的了解,可以继续讨论幻觉的问题。

幻觉起源于训练流程中的监督式微调阶段。以下是训练集中可能出现的三种潜在对话的示例。

正如前面展示的那样,这是训练时人类助手对话的样子。这些对话是由人类标注员在严格指导下创建的。当标注员为每个案例中的助手写下正确答案时,他们要么知道这个人,要么在互联网上搜索他们。然后,他们写出一个具有自信回答风格的助手回应。

在测试阶段,如果模型被问及在训练中未见过的个体,它不会简单地以承认无知的方式回应。简单来说,它不会回答“哦,我不知道”。相反,模型会统计地模仿训练集。

在训练集中,以“X 是谁?”形式的问题都会以自信的回答给出正确答案。因此,在测试阶段,模型会以训练集中答案的风格进行回答,并给出统计上最有可能的猜测。所以它只是编造出一些在统计上与其训练集风格一致的内容。

模型审问

现在的问题是,我们如何缓解幻觉?显然,我们的数据集应该包含一些例子,其中助手的正确答案是模型不知道某个特定事实。然而,这些答案只应在模型确实不知道的情况下产生。所以关键问题是,我们如何知道模型知道什么,又不知道什么呢?我们需要审问模型,以实证地找出答案。

任务是确定模型知识的边界。因此,我们需要审问模型,以找出它知道什么,又不知道什么。然后,我们可以将模型不知道的内容的例子添加到训练集中。在这种情况下,正确的回答是模型不知道它们。

让我们看看 Meta 是如何在 Llama 3 系列模型中使用这一概念来处理幻觉的。

在他们 2024 年的论文《Llama 3 模型群》中,Touvron 等人描述了他们是如何开发一种知识审问技术来实现这一目标的。他们的主要方法是生成数据,将模型生成的内容与预训练数据中存在的事实数据子集对齐。他们描述了以下数据生成过程:

  • 从预训练数据中提取一个数据片段。
  • 通过提示 Llama 3,针对这些片段(上下文)生成一个事实性问题。
  • 从 Llama 3 中采样对该问题的回答。
  • 使用原始上下文作为参考,以及 Llama 3 作为评判,对生成内容的正确性进行评分。
  • 使用 Llama 3 作为评判,对生成内容的信息性进行评分。
  • 对于那些在生成中一致表现出信息性但错误的回答,使用 Llama 3 生成拒绝回答的内容。(第 27 页)

之后,通过知识审问生成的数据被用来鼓励模型只回答它知道的问题,并避免回答它不确定的问题。实施这一技术随着时间的推移改善了幻觉问题。

使用网络搜索

我们还有比简单地说“我不知道”更好的缓解策略。我们可以给 LLM 提供一个机会,让它生成基于事实的回答,并准确地回答问题。如果你问我一个你不知道答案的事实性问题,你会怎么回答?你会怎么做?你可以进行一些研究,搜索互联网,找出问题的答案,然后告诉我答案。我们也可以对 LLM 做同样的事情。

你可以将训练后的神经网络中的知识视为模型在很久以前预训练期间看到的内容的模糊记忆。模型中的知识类似于你一个月前读过的东西。你可以记住那些你经常阅读的内容,而不是偶尔读过的内容。如果你对读过的信息没有很好的记忆,你会怎么做?你会去查找它。当你查找信息时,你实际上是在刷新你的工作记忆,让你能够检索和讨论它。

我们需要一种类似的机制,让模型能够刷新它的记忆或对信息的回忆。我们可以通过引入工具来实现这一点。模型可以使用网络搜索工具,而不是简单地回答“很抱歉,我不知道答案”。为此,我们需要引入特殊的标记,例如 <SEARCH_START><SEARCH_END>,以及定义模型如何使用这些标记的协议。在这种机制下,语言模型可以发出特殊标记。当模型不知道答案时,它可以选择发出 <SEARCH_START>,而不是回答“我不知道答案”。之后,模型会发出搜索查询和 <SEARCH_END>

当从模型中采样的程序在推理过程中遇到特殊标记 <SEARCH_START> 时,它会暂停生成过程,而不是继续采样下一个标记。它会启动一个与搜索引擎的会话,将搜索查询输入搜索引擎,并检索所有提取的文本结果。然后,它会将这些文本插入到上下文窗口中。

从网络搜索中提取的文本现在位于上下文窗口内,这个上下文窗口可以被模型直接访问。你可以将上下文窗口视为模型的工作记忆,其中的数据直接输入到神经网络中。因此,它不再是模糊的记忆信息。现在,当模型采样新标记时,它可以轻松引用粘贴在那里的数据。这就是网络搜索工具的基本工作原理。

如何教模型正确使用这些工具,比如网络搜索呢?我们同样通过训练集来实现。我们需要足够多的数据和大量的对话示例,展示模型应该如何使用网络搜索。我们需要通过示例说明以下方面:“在什么场景下使用搜索?它看起来是什么样的?如何开始搜索?”由于预训练阶段,模型已经具备了对网络搜索的自然理解,以及什么是好的搜索查询。因此,如果你的训练集包含数千个示例,模型将能够清楚地理解工具的使用方式。

结论

大型语言模型的幻觉是训练流程的固有结果,尤其是起源于监督式微调阶段。由于语言模型被设计为生成统计上可能的文本,它们经常会生成看似合理但缺乏事实依据的回答。

早期模型曾严重受到幻觉问题的困扰。然而,随着各种缓解策略的实施,这一问题得到了改善。知识审问技术和训练模型使用网络搜索工具已被证明是缓解幻觉的有效方法。尽管如此,完全消除幻觉仍然是一个持续的挑战。随着 LLM 的不断发展,大幅减少幻觉对于确保其作为可靠知识库的可信度至关重要。

原文链接:medium.com/ai-advances…