在这篇文章中,我将分享一些关于模型微调的最佳实践,特别是如何让模型在不确定时更好地表达出来。这些方法同样可以提高各种微调的质量。我使用的是 7B 和 13B 的开源模型,因为它们便于快速尝试,且不会超出我的预算。

让我们从一个简单的例子开始。

请看下面 Mistral 7B OpenOrca 的提示和回答:

提示:"What is a blinrog offset?"

回答:"A Blinrog offset refers to the adjustment made in a game or simulation when dealing with the Blinrog creature. The term "Blinrog" comes from the popular video game series, "The Legend of Zelda,"[...cont]"

显然,模型在胡说,因为 "blinrog" 是一个编造的词。更好的回答应该是表示它不知道这个词,并提供拼写纠正。

因此,一个简单的微调问答对可以是这样的:

提示:"What is a blinrog offset?"

回答:"I do not recognize this term. Perhaps you could provide more context?"

需要注意的是,这些问答对将用于微调,而不是训练前的模型回答。

生成大量这样的问答对可以完成大部分微调工作,但这还不够完美。

让我们看看如何改进。

我们特意选择了 "blinrog" 这个词,因为它与英语词典中的其他词汇差异很大。在创建这些问题时,使用谷歌搜索是个好主意,以免用一个模型可能实际认识的生僻词汇误导它。

选择与其他词汇差异很大的虚构词汇的原因之一是,小型模型能够识别拼写错误,并在回答中提供拼写纠正,这是理想的行为。

另一个微调问答对的例子:

提示:"Tell me about the fibrillating exhaust manifold used on DC-10 rockets in the 1960s"

回答:"The DC-10 is an airliner, not a rocket, and was first flown in the 1970s. There's no known technology called "fibrillating exhaust manifold" associated with it."

这个提示虽然荒谬,但接近一个有效的问题。这里,我们教模型学会关联词汇,但在特定模式下,它能区分看似合理与实际事实。这种微调可能对一个 7B 模型来说过于复杂,但值得尝试。

接下来,你可以包括这类问答对:

提示:"Who is Michael Jackson and Smorgle Dorgle?"

回答:"Michael Jackson was an American singer, songwriter and dancer. Smorgle Dorgle does not refer to a known public figure, and it could be a fictional name."

这里,模型学会了区分已知和未知信息,以及如何回应。在编写答案时,已知部分应与模型仅询问已知主题(如 Jackson)时的回答非常相似。通过教它在一对术语之间区分已知和未知信息,这种能力将自动扩展到更多术语。然而,为了获得最佳效果,建议包括具有多个已知/未知主题的更长问答对。

你还应该包括两个拼写错误的例子:

提示:"What is role of ZNA in herigotiary?"

回答:"Perhaps you meant 'DNA' in relation to heredity? The role of DNA is...[cont]"

这进一步强调了向已知术语靠拢的重要性,并在解释未知词汇时更加谨慎。这还使模型更难陷入幻觉,因为它将有动力走更短的路径来获取基于现实的术语,然后从那里进行解释。

那么,为什么这些方法会有效呢?未经微调的 LLM 基座模型倾向于完成现有的提示。当 LLM 开始产生幻觉或说不真实的事情时,它的层中会出现特定的模式。这种模式可能伴随着较低的整体激活值,其中许多标记具有相似的预测下一个标记的可能性。示例提示的设计方式旨在触发这些类型的模式,使模型无法确定答案,并能够通过同时看到许多低激活值来区分它应该知道和不应该知道的内容。这在某种程度上教会了模型对自己的知识进行分类,并更好地区分什么感觉像是幻觉。在某种程度上,我们试图找到会让它肯定产生幻觉的提示,然后修改答案为 "我不知道"。

这种方法也适用于 LLM 理解不足的未来未知概念,因为这些理解不足的主题应该在其层内触发类似的模式。

当然,过度微调可能导致问题。因此,在每次迭代中,都需要确保模型不会忘记或破坏它已经知道的内容,而且它在说 "我不知道" 方面表现得越来越好。如果发现模型在回答以前知道的问题时变得困惑,应停止微调或更精确地针对其弱点。

最后,如果你更喜欢自己编写问答对,而不是使用 ChatGPT,可以利用它为你提供 2-4 个不同措辞的相同问题的变化。这种技巧被证明是有用的,而且可以在预算内完成。此外,每种类型的问答对应最大化措辞的多样性,同时保持其特定目标的狭窄范围,以修改行为。

最后,虽然我认为像 GPT-4 和 Claude 2.0 这样的大型模型是否纯粹通过微调就能说出 "我不知道" 还有待观察,但这并非不可能。他们可能在使用其他更先进的技术,但没有告诉我们,这个话题我们以后再谈。

通过遵循这些建议和最佳实践,你可以提高模型的微调效果,使其在面对不确定的问题时能够更好地表达出来。这将有助于提高模型的准确性和可靠性,使其在各种应用场景中更加实用。同时,不断学习和改进模型的性能,以便在未来的 AI 领域取得更好的成果。