首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 汽车 游戏 社会热点 开源推荐 医疗健康 归档 标签 关于

显示 HN:LLM 注意力可视化

2026-09-09 1 阅读 约4分钟阅读 ifz
分享:
字号:
基于 Transformer 的大型语言模型的一个有趣的事情是,在生成阶段,它能够从任何先前的标记中提取信息。但它需要有选择性;如果每个代币对代币的影响都是平等的,那么效果不会很好。这个过程需要一种机制来决定一个令牌对下一个令牌的影响程度。事实证明,我们可以想象这个机制!您可以点击或将鼠标悬停在任何生成的令牌上,以查看影响*该生成的过去令牌。正在加载...(需要 JavaScript) *“受影响”可能不完全准确,因为此可视化已高度简化。它计算注意力权重,根据值向量的大小进行缩放,在所有注意力头上进行聚合,并对所有层进行求和。然后用它来控制先前标记的不透明度。最大值的不透明度始终为 1,其余值将进行插值。为了将可视化限制为每个过去的标记只有一个数值,必须丢弃大量信息。因此,当我开始实现这个时,我实际上认为它可能无法理解。但它实际上可以产生一些有趣的图案!例如,在默认的“Office Move Summary”提示中,您可以将鼠标悬停在逐字复制的文本(例如地址和日期)上。然后您可以看到原始数据非常突出,因为生成的令牌占用了源数据中的大量信息。这解决了我之前发现的关于法学硕士的不直观的一件事。如果他们通过概率性地预测下一个标记来工作,为什么他们在某种程度上如此擅长复制粘贴东西?他们最终会不会因为偶然的机会而犯错误呢?但通过这种机制,您可以看到它不会从某些有限的内部状态预测整个序列。由于它可以访问所有过去的令牌,因此它可以在复制时决定从哪些过去的令牌中提取,因此错误的可能性非常低。在“调试平均函数”示例中,您可以看到这个相当小的模型(6 亿个参数)可以轻松地重现整个 JS 函数,除了预期的修改之外。 (虽然它实际上并不能自己找到问题,所以它需要一些提示。)另一个有趣的部分是当您将鼠标悬停在“办公室搬迁摘要”提示中的“现有访问卡和电话号码保留”中的“保留”上时。您可以看到它取自“现有员工门禁卡将起作用”中的“工作”和“公司电话号码将保持不变”中的“保持不变”。所以这有点结合了两个短语中单词的信息,我觉得这很酷。实现可视化本身是一个非常基本的 React 应用程序,使用 Transformers.js 生成文本。但是,由于我们需要从模型中提取更多数据来对其进行可视化,因此它无法使用常规生成循环。我必须对应用程序中的生成循环进行振动编码,以便我们实际上可以跟踪要可视化的值。尽管为此使用了较小的模型,但它仍然有数百兆字节,并且在显示任何内容之前等待它下载是行不通的。所以我预先生成了一堆可以立即加载和查看的提示。另一个棘手的事情是,可视化中的某些内容实际上并不适合阅读,因此它们没有定义为输出。我想如果您使用 Python ML 库来实现这一点,那么访问它们仍然很容易。但 Transformers.js 使用包含整个计算图的 .onnx 文件。模型加载和计算逻辑是在 wasm 中实现的,因此据我所知,除了预定义的输出之外,没有简单的方法可以访问任何内容。最后,我使用了一个小脚本来修改 onnx 文件,使其足以公开这些内部值。但这意味着我不能只使用常规的 .onnx 模型。由于我想要具有基于浏览器的生成功能,因此我必须将单独的仪器模型上传到我自己的 Hugging Face 存储库,并将应用程序指向那里。您可以在 GitHub 存储库中找到代码。
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱