照片由 Jeffery Ho 在 Unsplash 上拍摄,经作者修改。
在这篇文章中,我们将探讨一个最流行的工具,用于可视化 transformer 架构的关键特征:注意力机制。阅读下去,了解 BertViz 是如何借助 Comet 将注意力可视化工具融入您的 NLP(自然语言处理)和 MLOps(机器学习运维)工作流中的。
您可以按此完整代码教程,或者如果您等不及了,可以直接查看最终项目。
简介Transformer被描述为近年来NLP领域最重要的技术进步,但其内部过程仍然很大程度上是不透明的。这是一个问题,因为在我们取得重大机器学习进展的同时,我们并不总是能够解释这些进展是如何或为何发生的——这可能导致模型偏见、崩溃等问题,同时也会引发伦理和可重复性方面的挑战。特别是在这些模型被越来越广泛地应用于医疗、法律、金融和安全等敏感领域时,模型的可解释性变得至关重要。
性别和种族在不同职业中的预测,根据Word2Vec计算得出。这些学到的偏见可能会因为此类模型的应用而产生各种负面后果。图片来自原文链接《自然语言处理嵌入中的偏见》by Simon Warchal 撰写。
什么是BertViz?
BertViz 是一个开源工具,它可以以多个层次(包括模型层面、注意力头层面和神经元层面)可视化变压器模型的注意力机制(Attention机制)。但 BertViz 并不新奇,实际上,BertViz 的早期版本早在 2017 年就已经出现了。
那么我们为什么依然在讨论BertViz呢?
BertViz 是一个可解释性工具,它所在的领域(NLP)通常被认为非常不透明。虽然名字叫 BertViz,它不仅仅局限于 BERT。BertViz 的 API 可以支持各种 transformer 语言模型,包括但不限于 GPT 系列模型、T5,以及 大多 HuggingFace 模型。
尽管名字如此,BertViz 实际上支持多种模型。在左边,我们使用一个仅编码的模型来展示一个问答任务;而在右边,我们用一个仅解码的模型来展示一个文本生成任务。GIF 图由作者制作。
近年来,Transformer架构在机器学习领域越来越流行,同时也再次引发了关于AI可解释性和透明度的老生常谈。虽然BertViz可能并不新鲜,但是它作为解释性工具,在AI领域的应用现在比任何时候都更相关。
但是首先,先来看看Transformer在解释BertViz之前,最好先对Transformer和自注意力机制有个基本的了解。如果你已经熟悉这些概念,可以直接跳到我们开始编码的地方。
我们在这里不会深入探讨transformer的所有复杂细节,因为这超出了本文的范围,但我们会介绍一些基础知识。我也鼓励你查阅文章末尾的额外资源。
在最初的时候(NLP的远古时代)<sup>(NLP,即自然语言处理)</sup>所以,计算机到底是如何“处理”自然语言的呢?实际上,它们做不到,至少不是直接做到的。计算机只能处理数值数据,所以第一步是将句子分解为“词汇”并为这些词汇分配数值。那么,自然语言处理的主要问题就是如何准确地将语言和交流过程转化为计算过程。
一些最早的NLP模型包括前馈神经网络,如多层感知机(MLP),以及今天更常用于计算机视觉的CNN。这些模型可以用于一些简单的分类任务(如情感分析等任务),但有一个主要缺点:这意味着在每个时间点,网络只看到一个词作为输入。想象要预测“the”后面的那个词,有多少种可能?
在几乎没有上下文的情况下,词预测可能会变得极其困难。作者制图。
为了解决这个问题,循环神经网络(RNNs)和长短时记忆网络(如Seq2Seq中的LSTMs)允许了反馈,也就是循环。这意味着每次计算都会参考之前的计算,从而能更好地理解上下文。
这种上下文仍然有限。如果输入序列非常长,模型倾向于在读到序列末尾时忘记序列开头。此外,它们无法进行并行处理,这使得它们极其低效。RNN 还因梯度爆炸问题而臭名昭著。
来介绍一下Transformer吧Transformer是一种序列模型,它放弃了RNN和LSTM的顺序性,转而采用完全基于注意力的方法。Transformer最初是为文本处理而设计的,如今几乎所有最先进的NLP神经网络都离不开Transformer,但它们也可以应用于图像、视频、音频等几乎任何形式的序列数据。
Transformer与之前的NLP模型相比,其关键的区别在于注意力机制,这一机制在《注意力机制即你所需》(https://arxiv.org/abs/1706.03762) 论文中被提出。这带来了更快的并行训练和优化性能。注意力机制还允许比递归机制能够处理更大范围的上下文,这意味着Transformer能够生成更连贯、更相关和更复杂的输出。
最初的变压器架构,如2017年那篇著名的论文《注意力就是你所需的一切》中所述,Attention Is All You Need。
Transformer模型由编码器和解码器构成,我们可以用它们完成的任务取决于我们是否使用其中的一个或两个组件。NLP中常见的Transformer任务包括文本分类、命名实体识别、问答、文本摘要、完形填空、下一个词预测、翻译和文本生成。
变压器由编码器和解码器构成,我们可以用它们完成的任务取决于我们是否使用其中的一个或两个组件。需要注意的是,还有一些“序列到序列”模型并不使用变压器。图表由作者绘制。
在更大的NLP模型生态系统中,Transformer是如何融入的?
你可能听说过像ChatGPT或LLaMA这样的大型语言模型(LLMs)。变压器架构是LLMs的基本构建模块,这些模型在大量未标记的数据上进行自监督学习。这些模型有时也被称作“基础模型”,因为它们通常能够很好地泛化到各种任务上,并且在某些情况下也可以针对特定任务进行微调。BERT就是这类模型的一个例子。
并非所有的大型语言模型(LLM)或基础模型都采用变压器,但它们通常都采用。并非所有的基础模型是大型语言模型,但它们通常都是。并非所有的变压器是大型语言模型或基础模型。重要的是,所有采用变压器的模型都用到注意力机制。图由作者提供。
这有很多信息,但这里的关键点是,transformer 模型(以及由此扩展的所有基于 transformer 的基础 LLM)最重要的区分特征是 自注意力 概念,我们接下来会详细讲解。
注意哦!一般来说,注意机制描述了模型聚焦于句子(或图像或其他任何序列输入)中重要部分的能力。它通过根据特征的重要性及其在序列中的位置来说分配权重来实现这一点。
记得注意力是这样一个概念,通过使其易于并行处理来提升先前的自然语言处理模型(如RNN和LSTM)的性能。但注意力不仅仅是关于优化的。它在扩展语言模型处理和生成文本时能够考虑的上下文方面起着关键作用。这使得模型能够在更长的文本序列中生成上下文合适且连贯的文本。
在这一示例中,GPT-2 用“感到害怕”完成了输入序列。那么模型是如何知道“它”指的是什么的呢?通过检查注意力头,我们发现模型将“它”关联成了“动物”(而不是例如“街道”)。图片为作者所作。
如果我们把Transformer分解为一个“通信”阶段和一个“计算”阶段,那么注意力就代表了“通信”阶段。在另一个类比中,注意力类似于一个搜索查找问题,即给定一个查询 q ,我们需要找到一组与 q 最相似的键 k ,并返回相应的值 v。
- 查询: 我在找什么呢?
- 键: 我有什么东西呢?
- 值: 我要传达什么呢?
这是注意力计算的可视化图,来自Erik Storrs(https://storrs.io/attention/)。
注意力的种类自注意力机制指的是每个节点都会产生自己的键、查询和值。多头自注意力机制是指并行应用多组自注意力机制,每组使用不同的初始化权重。跨注意力意味着查询由解码器节点产生,而键和值则来自编码器节点。
这是对变压器架构过于简化的概述,我们略过了许多细节(例如位置编码、分段编码(segment编码)以及注意力掩码)。如需更多信息,请参阅以下额外资源。
在使用BertViz之前,先看看注意力可视化的样子。尽管变压器不是天生可解释的,但是人们已经尝试过为基于注意力的模型提供各种事后解释工具。
之前的注意力的可视化尝试常常过于复杂,难以让非技术背景的人理解。而且在不同的项目和应用场景之间差异很大。
之前的注意力的可视化尝试并未标准化,往往过于复杂或混乱。图表由作者根据基于注意力的神经机器翻译的交互式可视化及操作(2017)和序列到序列模型的可视化调试工具(2018)整理。
一些成功解释注意力行为的尝试包括注意力热图和二分图模型,这两种方法现在仍然被广泛使用。但这些方法也存在一些明显的局限。
注意力矩阵热图(左图)显示模型没有进行逐字翻译,而是考虑更广泛的上下文来调整词序。但它忽略了注意力机制中的许多细节。
BertViz 最终因其能够清晰展示自注意力机制的低级细节而广受欢迎,同时仍然易于使用。
BertViz这样一个工具因其能显示自注意力机制的低层次细节而流行起来,同时仍然保持简单直观。GIF由作者制作
那是一个很好的、干净的可视化图。不过,我们真正看到的是什么呢?
BertViz 如何拆解一切BertViz 可以在多个局部尺度上展示注意力机制的可视化效果:神经元级别、注意力头级别以及模型级别。从最细粒度的层级开始,依次向上,我们逐步解释这些层级的含义。
BertViz 可以展示注意力机制在不同层次上,包括模型层、注意力头层和神经元层次。图表由作者绘制。
使用Comet来可视化BertViz我们会把 BertViz 的图表保存到 Comet 上,这是一个实验跟踪工具,这样我们以后就可以对比结果。开始使用 Comet 的话,在这里免费创建一个账户,然后拿到你的 API 密钥,然后运行以下代码:
我们只需要三行代码就能搞定 Comet。
在 Comet 中可视化注意力机制将帮助我们通过展示模型如何关注输入的不同部分来解释模型的决策过程。在这次教程里,我们使用这些可视化来比较和拆解几个预训练的大型语言模型(LLMs)的性能。这些可视化也可以在微调过程中帮助我们调试。
要将BertViz添加到您的仪表盘中,请导航到Comet的公共面板页面,并选择“Transformers模型查看器”或“Transformers注意力头查看器”中的一个。
要将BertViz添加到您的Comet仪表板,您可以先在公共面板中找到并选择它,然后根据您的喜好调整视图和设置。(图源:作者提供)
我们将定义一些函数来解析模型的结果,并记录注意力信息到Comet。完整代码的教程请参阅Colab教程。接下来,我们将运行以下命令,开始将数据记录到Comet中:
文本生成例子 问答示例 情感分析的例子 神经视角在最低层次上,BertViz 可视化用于计算该神经元中注意力的查询、键和值嵌入。对于选定的标记,此视图会追踪它与其他标记之间的注意力计算过程。
在下面的 GIF 动图中,正数显示为蓝色,负数显示为橙色,颜色的深浅表示数值的大小。连接线的粗细根据相应词语之间的注意力得分来调整。
神经元视角分解了预测每个词元所需的计算过程,包括key和查询权重。
以下两个部分将展示模型学习了哪些注意力模式,而不过对于本教程来说,神经元视图可能有些过于细致。如果我们想更深入地了解,我们可以利用这种视图来将神经元与特定的注意力模式关联起来,并且更广泛地,与模型的行为关联起来。
重要的是要注意,注意力权重与模型输出之间的关系并不完全清楚。比如 Jain 等人在《注意力不是解释》一文中指出,标准的注意力模块不应被视为对预测结果提供有意义的解释。但他们并未提出任何替代方案,而 BertViz 仍然是最受关注的注意力可视化工具之一。
头部视角注意力头视角展示了注意力如何在同一个变压器层内的各个令牌之间流动,通过揭示注意力头之间的模式。在这个视角中,左侧的令牌关注着右侧的令牌,注意力以连接每对令牌的线的形式表现出来。颜色代表不同的注意力头,线的粗细表示注意力的权重。
在下拉菜单中,我们可以选择想要可视化的实验,如果我们实验中记录了多个资产,我们还可以选择我们的资产。接着可以选择想要显示的注意力层,并可选择任意注意力头。请注意,连线的色彩强度反映了令牌间的注意力权重。
用户可以在 Comet 用户界面上选择实验、资产、层和注意力格式等参数。
我们还可以指定希望标记的格式。对于下面的问题回答示例,我们将选择“Sentence A → Sentence B”,这样我们就可以观察问题和答案之间的注意力机制。
这是BertViz的注意力的三种不同可视化方式。作者绘制的图形
头部注意力模式注意力头不共享参数,因此每个头都会学习到不同的注意力机制。下面的图显示了同一个输入在同一个模型中,各层注意力头的表现。可以看出,不同的注意力头似乎关注了非常独特的模式。
在左上角,注意力最强的部分是相同的单词(注意两个“the”交叉的地方)。在顶部中央,注意力集中在句子中的下一个词。右上角和左下角的注意力分别集中在分隔符([SEP]和[CLS])上。底部中央则强调了逗号。而在右下角,几乎是一个词袋模式(bag-of-words模式)。
BertViz显示注意力机制可以捕捉语言中的各种模式,包括位置相关的模式、分词模式和词袋模型。图片由作者制作。
注意力头还能捕捉词汇模式。下面的图形中展示了注意力头专注于列表中的项目(左边)、动词(中间)和缩写(右边)的情况。
BertViz展示了注意力头(Attention head)捕捉到类似于列表项、动词和首字母缩略词的词汇模式。图片由作者制作。
注意力头偏差从头部视角的一个应用是检测模型偏差。如果我们给模型(这里指的是GPT-2)提供两个只在最后的代词上不同的输入,我们会看到非常不同的生成结果:
在左边,模型假设“她”是护士。在右边,模型假设“他”是问问题的医生。一旦我们检测到模型偏差,我们该如何扩充训练数据来抵消这种偏差?图片来自作者。
模型假定“他”指的是医生,“她”指的是护士,这可能表明该共指机制存在性别偏见。我们希望,通过找到偏见的源头,我们就可以采取措施来对抗它(比如通过更多的训练数据)。
模型视图组件模型视图是从所有层和头的角度提供注意力的概览。在这里,我们可以注意到跨层的注意力模式,展示了从输入到输出注意力模式的演变过程。每一行代表一个注意力层,每一列代表一个注意力头。点击任何特定头即可放大图表。请留意,模型视图中的线条模式与头视图中的是一样的。
如果你想放大模型视图中的注意力头,只需点击它。注意注意力模式是如何在各层间演变的。作者制作的图片。
模型视图应用程序所以,我们如何使用模型视图?首先,由于每一层都有独立初始化的权重,因此专注于某一句子特定模式的层在处理另一个句子时可能会关注不同的模式。因此,我们不能简单地假设同一注意力头会在不同实验中关注相同的模式。借助模型视图,我们可以更一般地识别出哪些层可能在特定句子中关注感兴趣的部分。请注意,这门不精确的科学正如许多人所说,“如果你寻找,你就会找到。”可以说,这种视图确实为我们提供了一些有趣的见解,说明模型可能关注的部分。
如下图所示,我们使用了教程前面的例子(左图)。在右图中,句子略有不同。在两种情况下,GPT-2 生成了句子的最后一个词。乍一听,可能觉得那只狗有太多去公园的计划很搞笑。但通过查看注意力头,我们发现模型可能指的是“公园”这个词的意思是“太忙了”。
左边的图中,当GPT-2用“害怕”结尾这句话时,它可能是指“动物”。右边的图中,当它用“忙碌”结尾这句话时,它可能是指“公园”。作者供图。
AI的解释性在2018年,亚马逊终止了他们花了四年时间建立的求职者推荐系统,因为在发现该模型存在明显的性别偏见后,这个系统从现有的性别招聘差异中学习,并开始延续这些差异。图片来自Reuters。
随着人工智能变得越来越先进,模型的计算几乎变得难以理解,甚至是创建这些模型的工程师和研究人员也无法解读。这可能导致一系列意想不到的后果,包括但不限于:延续偏见和刻板印象,组织决策的信任缺失,甚至法律问题。可解释的人工智能(XAI)是一套用于解释模型预期影响和潜在偏见的方法。致力于XAI有助于:
- 组织以负责任的方式开发AI
- 开发人员确保模型按预期运行,并且符合监管要求
- 研究人员保证决策的准确性、公平性和透明度
- 组织增强信心和信任
那么,实践者们如何将XAI实践融入他们的日常工作中,当今天最流行的机器学习架构——transformers这种架构以其不透明性著称时?但这并不是一个简单的答案,可解释性需要从多个角度来探讨。我们希望本教程能帮助你的XAI工具箱再多一个工具,使你更好地可视化transformers中的注意力机制。
最后:谢谢你读到最后,希望你喜欢这篇文章。如果你有任何问题、意见或建议,欢迎随时通过我们的Community Slack群组与我们联系!你可以通过点击这里直接加入我们的Community Slack群组。
更多资源- PyTorch自然语言处理 作者:Delip Rao和Brian McMahan
要是你喜欢这篇文章并希望看到更多类似的内容,给我点个赞哦!也可以看看我下面推荐的其他内容:
SDXL 1.0基础模型图像修复+精炼模型以及如何在generativeai.pub中记录实验结果 SAM + Stable Diffusion 文本到图像上色流程与 GroundingDINO、Segment Anything 和 Stable Diffusion 结合使用,并在该平台上跟踪结果 如何使用混淆矩阵调试图像分类器,并直观地探索特定图像预测随时间的变化 比较和评估TorchVision中的物体检测模型:Fast RCNN、Faster RCNN、Mask RCNN、RetinaNet和FCOS 助力工业4.0的异常检测构建、追踪和管理生产级异常检测模型medium.datadriveninvestor.com这个故事发布在Generative AI。在LinkedIn上加入我们,获取更多动态,获取最新的AI故事和见解。让我们一起打造AI的未来!
共同學習,寫下你的評論
評論加載中...
作者其他優質文章