实时了解业内动态,论文是最好的桥梁,专栏精选论文重点解读热点论文,围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技术跟踪。若对于具身智能感兴趣的请移步具身智能专栏。技术宅麻烦死磕AI架构设计。
稀疏自动编码器 (SAE) 最近因机器学习模型的可解释性而变得流行(尽管SAE自 1997 年以来一直存在)。机器学习模型正在使LLMs变得越来越强大和有用,但它们仍然是黑匣子,如何看穿LLM的灵魂,且若能理解它们是如何工作的,那对于大模型的进化有足够的帮助和启示意义。
使用SAE,可以开始将模型的计算分解为可理解的组件。本文将简介的介绍下SAE的工作原理,然后读者可以回头去温习“大模型的灵魂解读:Anthropic AI的Claude3 Sonnet可解释性研究”,应该更加深有感触。
自动编码器
神经网络最自然的组成部分是单个神经元。单个神经元并不对应于单个概念。语言模型中的任何概念,例如学术引用、英语对话、HTTP 求和韩语文本都是神经单元的叠加,或者换句话说是神经元的组合表示。
产生这种现象的原因可能是因为世界上存在的很多变量是稀疏的。例如,一个名人的出生地可能不到十亿分之一的训练Tokens,LLMs在训练的过程中掌握了这点,加上训练的Token远远大于神经元的数量,因此自然而然就会进行叠加表示。
稀疏自动编码器最近作为一种将神经网络分解为可理解组件的技术而广受欢迎。SAE 的灵感来自神经科学中的稀疏编码假说。有趣的是,SAE是解释人工神经网络的最有前途的工具之一。SAE 类似于标准自动编码器。
常规自动编码器是一种神经网络,旨在压缩然后重建其输入数据。例如,它可以接收一个 1000 维向量(1000个数字的列表)作为输入,通过编码器层馈送该输入以将输入压缩为512维向量,然后通过解码器馈送压缩编码表示以产生1000维输出向量。重建通常是不完美的,因为压缩过程会有信息损失。
稀疏自动编码器将输入向量转换为中间向量,该中间向量的维度可以高于、等于或低于输入。当应用于LLM时,中间向量的维度通常大于输入的维度。在这种情况下,如果没有额外的约束,任务就很简单。
SAE可以使用单位矩阵完美地重建输入,作为额外的约束,在训练过程中的损失函数中添加了稀疏性惩罚,这会引导SAE创建稀疏中间向量。例如,可以将1000维输入扩展为200维编码表示向量,并且可以训练SAE使其在编码表示中仅包含约20个非零元素。
上图中黑色的方块代表着稀疏的激活值
将SAE应用于神经网络中的中间激活,神经网络可以由许多层组成。在前向传递期间,每层内部和之间都有中间激活。例如,GPT-3有96 层。在前向传递期间,输入中的每个标记都有一个12,288 维向量(包含 12,288 个数字的列表),该标记从一层传递到另一层。此向量累积了模型在每一层处理下一个Token时用于预测下一个Token的所有信息,但它是不透明的,很难理解其中包含哪些信息。
若使用SAE来理解这种中间激活的方法如下:SAE基本上是一个矩阵 -> ReLU 激活 -> 矩阵。例如,如果GPT-3 SAE的扩展因子为4,则输入激活为12,288维,SAE的编码表示为49,512 维 (12,288 x 4)。
第一个矩阵是形状的编码器矩阵(12,288,49,512),第二个矩阵是形状的解码器矩阵(49,512,12,288)。通过将GPT的激活与编码器相乘并应用 ReLU,我们生成了一个 49,512 维的SAE编码表示,该表示是稀疏的,因为 SAE 的损失函数激励了稀疏性。
通常的目标是在SAE的表示中少于 100个数字为非零。通过将SAE的表示与解码器相乘,我们产生了一个12,288 维重建的模型激活。这种重建并不完全匹配原始的 GPT 激活,毕竟这么一折腾,信息会有所丢失。
现在只在模型中的一个位置训练单个SAE。例如,可以在第25层和第26层之间的中间激活上训练单个 SAE。为了分析 GPT-3 中所有96层的输出中包含的信息,可以训练 96 个单独的SAE——每层一个。
上图说明了这个过程,是拿激活值出来训练。原激活值通过与编码矩阵相乘,之后通过激活函数,然后得到稀疏表示,最后通过解码矩阵还原。
如果还想分析每层中的各种中间激活,这将需要数百个SAE。对这些SAE 的训练数据来自通过 GPT 模型提供各种文本并收集每个选定位置的中间激活(样本)。
功能
SAE表示的每个活动数字都对应于可以理解的组件。假设12,288 维向量对 GPT-3 [1.5, 0.2, -1.2, ...] 来说意味着“桥”。SAE 解码器是形状矩阵 (49,512, 12,288),但我们也可以将其视为49,512个向量的集合,每个向量都是形状(1, 12,288)。如果SAE解码器向量519学习了与GPT-3相同的“桥”概念,则解码器向量将近似等 [1.5, 0.2, -1.2, ...] 。每当 SAE 激活的元素 519不为零时,就相当于对应“桥”的向量。上面描述了SAE的工作原理,用专业的术语来讲就是“解码器对应于残差流空间中特征的线性表示”。
特征519代表什么?目前的做法是只看那些能最大限度地激活功能的输入,并对其可解释性做出直觉反应。每个功能激活的输入通常是可解释的。例如,Anthropic在Claude Sonnet上训练了SAE,并发现了单独的 SAE功能,这些功能可以在与金门大桥、神经科学和热门旅游景点相关的文本和图像上激活。其他功能在不太明显的概念上激活。
这里值得一提的是,在大量的激活值上面进行训练,通过稀疏矩阵的确可以明显看到一些特征,因为这个向量大部分的数值都为0了。通过研究Decoder矩阵就可以研究大模型在学习某个知识的时候,到底是如何融会贯通的。
如果存在基于特定主题激活的神经元,那么激活某些神经元是否会强制生成这些主题?回想一下AutoEncoder结构,虽然同时拥有编码器和解码器,但在训练后,只有编码器用于将激活向量转换为字典向量。是否可以使用解码器从所选特征重建激活向量?换句话说,能操纵神经元吗?答案可以用 Anthropic 的一句话来概括:“稀疏的自编码器功能可用于干预和控制变压器的生成。” 下图单独操纵神经元以实现不同的结果。
由于 SAE 解码器向量与LLMs中间激活的形状匹配,因此可以通过简单地将解码器向量添加到模型激活中来执行因果干预。这里通过将解码器向量乘以比例因子来缩放干预的强度。当人类学研究人员将金门大桥SAE解码器向量添加到大模型的激活中时,大模型不得不每次回复中都提到金门大桥。
如何评估SAE,目前存在L0和Loss Recovered两个指标 。L0是SAE编码中非零元素的平均数。Loss Recovered是用重建的激活替换GPT或者其他大模型的原始激活并测量不完美重建的额外损失。这两个指标之间通常存在跷跷板效应,需要进行权衡,。毕竟SAE会选择降低重建精度以增加稀疏性。
许多新的SAE方法,例如Deepmind的门控SAE和OpenAI的TopK SAE,都修改了稀疏性惩罚以改善这种权衡。
下图来自 Google Deepmind的Gated SAE 论文,它引入了门控稀疏自动编码器 (Gated SAE),它比使用流行方法的训练实现了帕累托改进。在 SAE 中,用于鼓励稀疏性的 L1 惩罚引入了许多不良偏差,例如收缩 - 系统性地低估特征激活。门控 SAE 分离 “确定使用哪些方向”和“估计这些方向大小的功能”。这使得在典型的超参数范围内解决了收缩问题,具有类似的可解释性,并且只需要一半的触发特征即可实现相当的重建保真度。
门控SAE的红线更靠近图表的左上角,这意味着在这种权衡中表现更好。
应用
上图展示一种研究方法,a) 对语言模型的内部激活进行采样,无论是残差流、MLP 子层还是注意头子层;b) 使用这些激活来训练神经网络,稀疏自动编码器,其权重形成特征字典<注意是Decoder Matrix!!>;c) 使用诸如 OpenAI 的自动解释性分数之类的技术来解释生成的特征
上图以“括号”为例显示每个特征之间的关系,同时每个特征上面都有人工解释。边缘厚度表示连续残差流层中字典特征之间的因果关系强度,以消融为衡量标准。许多跨层的字典特征具有相似的解释,并且通常指向激活空间中的相似方向,以余弦相似度为衡量标准。