在机器学习界,如何让机器”解释”自己的决策过程,一直是热议的焦点。尤其是随着 大语言模型(LLMs) 的崛起——毕竟它们的主要任务就是”解释”——这个议题变得更加突出。在 Normal 公司,我们正致力于开发能自主运作的 AI 系统,它们不仅能完成特定任务,还能清晰地向我们阐释自己的思考逻辑。
这既是一项挑战,也是我们构筑更智能解决方案的关键一步,目的是应对更为高阶和复杂的人类任务——这就是所谓的 Generative AI 的“第二幕”。要攻克这些难题,靠的是可信赖且可追溯的逻辑推理。如今,我们已经在 Normal 的企业级全栈 平台 中看到,产品形态正在从个人工具演变为系统级的生产力工具,并从需要人类参与的模式过渡到更为自动化和以执行为导向的代理系统。
在本文中,我们会详细介绍和评估一些语言模型的可解释性技术,其中不乏 Normal 的一些创新尝试(比如与概率机器学习相关的技术),它们都旨在提升 AI 系统的可靠性和推理能力。我们将尝试以浅显的方式介绍这些技术,同时指出在实际应用中,直觉有时候可能会带来误导。
我们首先要明确的是,所谓的可解释性,在统计和机器学习的语境下到底意味着什么。目前已有多种定义,有时候“可解释性”和“可理解性”之间还存在细微的差别。但在此,我们选择不区分它们,按照 Doshi-Velez 和 Kim 在 朝着可解释机器学习的严谨科学 中的看法,我们认为这两个概念都是指 向人类清晰展示信息的能力。
在介绍这些技术的时候,我们会特别关注那些令我们兴奋的突破——比如一种新颖的监督式幻觉侦测技术、透过树状结构思维过程进行明晰推理的方法,以及将生成技术和高效检索结合起来处理大规模上下文信息的新途径(这超出了传统的 RAG 方法)。
未来的博客文章和演示中会对这些技术做进一步的阐述,所以请保持关注哦!
两个领域的碰撞
超过二十年前,Leo Breiman 对比了传统统计和机器学习这两个学派(他分别称之为“数据模型”与“算法模型”)的截然不同。他认为,传统统计更偏好于使用定制化的模型和易于理解的参数,而机器学习更看重预测效果。Breiman 强烈支持更多地采用后者,即机器学习方法。
根据 2001 年 Breiman 的理论——“数据建模”与“算法建模”,我想现在的情况可能已经有所改变…… 图中左侧展示了一个参数较少、易于理解的传统模型。而右侧则是一个参数庞大且复杂,只注重预测表现的现代模型。
我们不妨说,Breiman 的预见成真了,那些专注于预测的模型已经取得了让人瞩目的成就,甚至能够自行组织派对。这并不表示传统的统计模型已落伍,在需要理解背后过程或追求此类理解的场合,它们仍然是理想之选。而在我们几乎只关注预测性能的场景(例如,生成流畅的自然语言文本),更大更灵活的模型将是我们的强大工具。
全然追求预测效能的代价是牺牲了模型的可解释性,这种损失是在非常基础的层面上发生的。
这并不是说我们无法追求模型建造过程中的可解释性,而是意味着我们需要以不同的视角去追求可解释性。去噪扩散模型(它们已经在图像生成领域掀起了革命)就是通过转换问题方式来增强可解释性的一个例子。通过精确定义噪声过程,我们能让机器学习模型学会逆转这一过程。即便模型的构架可能不够直观,我们对噪声过程有了全面的理解,从而更深刻地掌握如何运用模型(包括进行部分去噪和图像插值等有趣的操作)。
在语言模型领域,我们也可以寻求可解释性,就像我们尝试理解人类一样 1。具体来说,我们可以通过以下方式让模型“自述”:
- 查询它对自己输出结果的置信度
- 解释其推理过程
- 引用它所依赖的信息源
本篇文章的剩余部分,我们将深入探讨一些自然而然的策略来达到我们的研究目标,并且揭示在此过程中遇到的挑战和困难。
这里有一些技巧我们将不会讨论,它们被归类为 更值得信赖的输出。其中包括 编辑事实知识 和 引导式生成(顺带一提,你或许还不知道,它在 Outlines 〰️ 中的速度非常快)。这些技术与可解释性间接相关,通过为模型输出设定一些标准来实现。然而,我们这里要专注于的是那些能够提供更多解释性信息、从而增强输出的技术。
如果你对技术界两种文化之间的区别感兴趣,那么 Boaz Barak 的博客 以及它里面的故事和参考资料绝对是精彩的读物。
幻觉与不确定性 🤷
在改善语言模型的可解释性方面,一个非常吸引人的理由是要理解所谓的幻觉现象。语言模型在面对不确定的信息时,其反应和人类大相径庭。向一个明智的人提出一个复杂的问题时,他们可能会说“我不知道”,或者“我不确定,但我可以试着猜”,或者“我不确定,但我可以告诉你一些相关的信息”。但是,语言模型往往会给出一个错误的答案,并附带着貌似有理的解释(也就是所谓的“幻觉”)。
ChatGPT 这次尝试得不错,但是“whiskers”这个词并不是由七个字母组成的,至于那个解释嘛,我就不点评了…
这种现象主要是因为模型在训练过程中接触到的“我不知道”这类回答太少——比如,你在维基百科上很难找到很多这样的例子。通过在精心策划的数据集上进行训练或细致调整,或许能在很大程度上解决这个问题。
Token 级别的概率表示模型采样的序列分布情况。Token 是模型用来表达字符和词语的方式,一个 Token 词汇表会包含所有字符和大多数常用词语——例如这里的 Llama-2-7b 包括了“Cris”和“Lion”,但不包括“Cristiano”和“Lionel”,后者需要组合两个或更多的 Token 来构建。
一种更为简单的方法是观察模型提供的 Token 级别概率分布。如果模型在“幻觉”,我们可能会期待看到许多从高熵2分布中生成的 Token。不过,并不是所有不确定的 Token 生成都意味着“幻觉”,例如当多个同义词可能时,或者 Token 是新句子的开始,甚至在主观表达中(比如“史上最佳足球运动员是……”)时,这种不确定性也是很自然的。
在令牌级别或序列级别上,我们有很多种方法来衡量不确定性。特别有趣的是一种叫做语义熵的概念,这种方法能够评估生成过程中对“意义”的不确定性。所谓的“意义”,是由一个辅助小模型通过评价一系列生成的序列来确定的。这个模型不需要完全了解生成模型的所有背景 3,它的任务仅仅是识别出哪些序列是含义相同的。不过,计算语义熵在计算上可能代价较高,起步就需要生成 MM 个序列,然后可能要做到 M2M^2 次比较 4,虽然大多数比较可以并行处理,但这一过程还是会被生成模型的调用所主导。
事实上,要编程检测出模型何时产生了幻觉(hallucination)是个棘手的挑战。一个针对单个序列生成的策略是自我评估,也就是让模型自己来评价其输出的正确性。不过,研究表明,如果用自然语言提问,这个方法可能效果并不理想,因为会导致错觉的上下文或提示同样会在模型作为评估者时导致混淆。但是,通过训练模型增加一个额外的置信度头部(confidence head),用以评估输出正确的可能性,似乎是一个有前景的方向。另外,错觉检测器可以独立于语言模型而存在,并独立训练,当然,它也可以利用内部模型的特征。通过在现有数据集中插入并标记错误信息,我们可以相对容易地生成训练错觉检测分类器的数据集。
演示:如何监督检测“幻觉”现象 💑
在处理不确定性分析时,我们并非只能培养一个特定的模型,还可以将其与市面上广泛存在的各种预训练语言模型进行比较 — 确实,可以选的模型非常之多看看这里!
一种名为推测性解码的技术(很快会出现在 Outlines〰️ 的更新中敬请期待),就是基于这样的思路来提高序列生成的速度。在这种方式中,我们使用一个较小的模型 qq 来进行序列的逐个生成,同时使用一个较大的模型 pp 进行快速的并行评估。将这与拒绝抽样相结合,可以显著加快序列生成的速度 — 并且生成的序列与大模型完全一样。
在 Normal 公司,我们将这个理念应用到了(监督式)“幻觉”检测上。与其拒绝生成序列,不如报告每个词元被拒绝的概率5,将其作为“幻觉”的可能性。这里的序列是直接由小模型 qq 生成的,没有经过修改。这个方法非常巧妙,因为它适用于所有模型,而且不需要进行额外的训练。你可能想知道,为什么我们不直接使用推测性解码来生成更高质量的序列?实际上,两种方法可以同时使用!小模型仍然可以通过推测性解码来生成序列,但更大的模型还是可以在之后用来检测“幻觉”,并且几乎不会增加额外的执行时间。但不同于语义熵,这种监督方法确实需要大模型能够完全了解小模型的上下文信息。
在之前的段落中,我们对比了向 Llama-2-7b 发送两个不同提示时的 token 级别不确定性。研究中不仅包括了 token 的熵值分析,还有一个监督式流程——在这个流程中,Llama-2-13b 会并行运行,并提供拒绝概率的数据。在第一组提示中,我们发现 Llama-2-7b 最青睐的哈利·波特书籍是《阿兹卡班的囚徒》,熵值数据展示了“the”一词在句首出现时的高度不确定性,这表明可能有多种合理的补全方式,但可以肯定这并非虚构内容。监督方法对此进行了修正,准确地指出了补全部分唯一的不确定性——即“Pr”token 的主观性 6(之后的序列部分则完全可以确定)。而在第二个提示中,我们看到的是一个实际的虚构情况,而非主观不确定性。较小的模型错误地认为 1 是质数。这一错误被较大的模型识别为虚构内容,但熵值分析未能显示这一 token 相较于后续更合理的 token 有更高的不确定性。
监督式虚构内容检测是一个非常有前景的领域,它可以为语言模型输出的不确定性提供可靠的量化方法,尤其是当监督模型可以采用 mixture-of-experts 或者 ensemble of models 时。在这种情况下,不确定性可以基于不同模型,甚至可能是基于不同训练数据集来进行平均计算。
逻辑推理的力量 🤔
我们是否能教会一个语言模型去逻辑思考呢?如果能够实现,我们不仅可以更深入地洞察模型是如何给出答案的,还能提升它在一些复杂任务上的表现——比如玩单词游戏、解数学题或者编写代码。
一个行之有效的策略是在包含了大量解释的数据集上对模型进行训练或调整。数据集中的解释越丰富,模型的输出也就越详尽。这种方法虽然简单,但开销不小,还需要大量精心准备的数据,例如人工注解的数据。
对于已经训练好的模型,我们有另一个直接可行的方案,那就是运用scratchpad或chain-of-thoughts式的提示技巧。其思路相当直接:我们可以在模型的提示信息中嵌入一些已经进行过推理的示例,或者直接引导它“一步接一步地思考”。
图示为Kojima et al的研究中提出的零次尝试链式思考提示法。
这种做法已经广受欢迎并取得了成功。它还衍生出了其他一些通过使用如树或图形状的迭代提示来进一步完善的方法。迭代提示的一个重要进展是加入了一种状态评估器,用来评价对于当前问题的每一条推理链的质量。然后可以将推理生成器和状态评估器一起经过束搜索(或者可能是序列蒙特卡洛方法),以此来探索各种可能性,并产生高质量的思考链。
但我们也必须认识到,顺序提示并不总是能保证推理过程的一贯性。有时候,我们甚至可以看到中间出现了错误的步骤,但最终结果仍然正确。尽管如此,这种详细展示推理过程的方法仍具有其价值,因为它可以帮助我们更好地理解模型在处理问题时的逻辑流程,或者了解它在某些环节上遇到的挑战。
把一个复杂的任务拆解成多个推理步骤,甚至包括了验证环节,这种方法可以被进一步扩展应用。这就是 语言模型级联 的核心思想,该方法通过概率编程将不同模型在一个统一的框架下组合起来。尤其当模型 被允许使用外部工具 时,模块化设计的好处更加显著,而且透明地展示模型如何以及何时使用这些工具,还增强了模型的可解释性。
一个 自主代理 的目标是它能够独立规划和执行子任务,而不需要进行复杂的迭代式提示。有用的(混合型)代理系统,尤其是那些包含人机协作的系统,显然可以从可解释性中受益,这对于增强推理、规划和探索等难题至关重要。即便没有人类参与,一个能够自我解释决策的代理也可能更加擅长自我反省和持续进步。
演示:思维之树 🌴
我们乐于将连贯思维的形式与 System 2 行为 相比较,后者代表深思熟虑的慢速思考。树状搜索涵盖了多条推理路径和每条思路的自我评估。这个缓慢而审慎的探索过程不仅能解释模型的逻辑过程,也能增强模型解决问题的能力。
我们开发了一种工具,能够清晰地显示出在思维之树过程中的推理过程,通过可视化,我们能看到模型探究了哪些推理路径,这些路径是如何被评估和优化的,以及模型最终的结论是什么。
这是为 HumanEval 代码生成任务设计的思维之树可视化。我们的可视化工具强调了多条推理路径,并且其中一个节点在测试案例中产生了一个
AssertionError
这个错误被用自然语言在旁边栏里总结,并反馈给语言模型,然后模型据此调整解决方案。
生成过程将思维之树与 Reflexion 风格的反馈结合在一起,通过外部执行代码并将错误信息反馈给模型。
更多详情和完整的演示版本将在不久后发布!
引用能力 📚
如果语言模型能够精准地引用资料,它将帮助我们更好地理解其提供的信息。一种简单的方式是输入大量的引用库,并通过链式思考来请求引用。不过,这种方式需要消耗大量资源,并不是变换模型的强项。模型能够处理大量信息,但是根据模型的性能会随着信息量的增加而降低所述,处理长篇幅的信息时,性能会有所下降。为了制作出可以高效引用资料的扩展模型,我们需要将它们与能够高效提取或总结信息的工具结合起来。
据 Liu et al的研究,语言模型特别擅长提取长篇幅信息中开头和结尾的内容。
一个不错的想法是结合搜索引擎来增强模型的能力,并将搜索结果的前几名及其链接纳入提示中。这个方法可以通过应用强化学习与人工评估,促使模型生成更可靠的输出,并确保这些输出所引用的证据是精准且相关的。
perplexity.ai在它的上下文和输出中包含了搜索引擎的热门结果。
更高级的引用方法会为核心语言模型增加一个额外的知识检索器模型,用以从语料库中找到相关文献。知识检索器可以与语言模型分开训练,也可以像 REALM 或 RAG 那样进行端到端的训练。知识检索器通常通过查找与查询最匹配的向量数据库条目来实现检索(向量数据库包含了文档嵌入的分块)。
演示:扩展心智变压器 (EMT) 🧠
在 Normal,我们开创了一种新颖的方法,这种方法是对已有的 RAG 技术原理的一次广泛拓展。我们不再单一次性地使用与模型分离的嵌入技术来筛选信息,而是允许模型利用自身在各层中的内置表征能力,从一个外置的、不参与梯度下降的缓存中动态提取记忆。我们将这种做法称之为“主动的外在主义”,并创造了一个名为 扩展心智 变压器的模型。实践证明,这种变压器可以天生就有效利用外部记忆,并且这个过程不需要经过细微调整。
我们为 Mosaic 公司的 MPT-7b 模型应用了这种主动外在主义技术,并在下面展示了其困惑度的测试结果。困惑度是衡量模型生成每个词汇时不确定性的一个指标,它和我们常说的交叉熵损失函数有着密切的联系。我们发现,随着允许每个查询词汇关注的外部记忆数量的增加,模型的不确定性降低了(困惑度越小越好)。
我们的主动外在主义技术将每个输入序列划分为不断增长的块(以 x 轴为表示),并将最后一个 2048 令牌之前的部分作为外部记忆来使用。我们展示了不同 k 值下的测试结果,这里的 k 表示每个查询词汇所检索到的记忆数量。我们将这种主动外在主义技术与一种“截断”的基线方法进行了对比,后者在计算困惑度时会简单地抛弃最后 2048 个之前的所有令牌。
困惑度测试结果(数值越小表示效果越好)。
由于模型能够在每一个生成步骤中挑选出最相关的记忆,这还使得我们能够对引用内容进行细致的标记。上图中的例子显示了生成特定词汇时,模型咨询了最多的外部记忆。
在生成正确答案“1971”时所关注的记忆片段。
敬请关注,我们将很快公布这项技术的更多细节!
检索增强技术对于未来的语言模型来说至关重要,因为它不仅为模型提供了基于证据支持的可解释输出,还使模型能够访问实时更新的数据,同时降低了模型因训练数据造成信息泄露的风险。
下一步会发生什么?
Normal Computing 正在构建面向企业的 AI 决策代理系统。可解释性——无论是在语言模型还是其他领域——都是我们全栈服务的关键组成部分,包括硬件、软件、算法和模型。如果你对推动 AI 在推理和可靠性方面的创新进展同样感兴趣,请通过 info(at)normalcomputing.ai 联系我们!
注释
-
要认识到大语言模型(LLMs)与人类的学习方式迥异,比如说,我们不会指望它们拥有自知之明。↩︎
-
当我们说一个数据集的“熵”很高时,你可以理解为它的“变异性”或“不确定性”很高。↩︎
-
正如我们随后将讨论的那些推理或引用实例。↩︎
-
实际上,只有当每一次生成的内容都完全不同,我们才需要进行 M2M^2 次比较。通常情况下,我们所需的比较次数远少于此,且整个计算过程更多地受到生成这些 MM 个序列所需成本的影响。↩︎
-
1−min(1,p(token∣previous tokens)q(token∣previous tokens)))1 – min left(1, frac{p(text{token}|text{previous tokens})}{q(text{token}|text{previous tokens})} right))↩︎
-
PoA 可能是最棒的电影,但就书本来说,它也是最佳选择吗?↩︎
再使用
https://creativecommons.org/licenses/by-nc/4.0/