深入探讨 Anthropic 的稀疏自编码器 ✍️

原文:towardsdatascience.com/deep-dive-into-anthropics-sparse-autoencoders-by-hand-%EF%B8%8F-eebe0ef59709?source=collection_archive---------1-----------------------#2024-05-31

探索大语言模型(LLMs)可解释性追求背后的概念

https://medium.com/@srijanie.dey?source=post_page---byline--eebe0ef59709--------------------------------https://towardsdatascience.com/?source=post_page---byline--eebe0ef59709-------------------------------- Srijanie Dey, PhD

·发表于 Towards Data Science ·阅读时长:11 分钟·2024 年 5 月 31 日

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/81130790966487c80fb82406f9fe2482.png

图片来源:作者(Zephyra,卢玛利亚的守护者,由我的 4 岁孩子绘制)

“在神秘的卢玛利亚大地上,古老的魔法弥漫在空气中,生活着 Zephyra,这只以狮身鹰翼为特征的空灵狮鹫。Zephyra 是《真理法典》的崇高守护者,这本古老的文献蕴藏着宇宙的秘密。

“在一座神圣的洞窟中,法典由 Zephyra 那双绿色的眼睛守护,她能看破虚伪,揭示纯粹的真理。一天,一位黑暗巫师降临卢玛利亚大地,试图通过隐藏《法典》将世界笼罩在无知之中。村民们呼唤 Zephyra,她如希望的灯塔在空中翱翔。随着一阵雄伟的翅膀挥动,Zephyra 在树林周围创造了一个保护光障,击退了巫师,揭示了真理。”

“经过一场长久的决斗,最终结论是黑暗巫师无法与 Zephyra 的光芒抗衡。通过她的勇气和警觉,真正的光明继续照耀着卢玛利亚。随着时间流逝,卢玛利亚在 Zephyra 的守护下走向繁荣,而她所守护的真理也始终照亮着这片土地。这就是 Zephyra 传奇延续下去的方式!”

Anthropic 的“提取可解释特征之旅”

追随 Zephyra 的故事,Anthropic AI 深入探讨了从模型中提取有意义特征的探索过程。这项研究的核心思想在于理解神经网络中不同组件如何相互作用,以及每个组件所扮演的角色。

根据论文**“迈向单一语义性:通过字典学习分解语言模型”**,稀疏自动编码器能够成功地从模型中提取有意义的特征。换句话说,稀疏自动编码器帮助解决‘多义性’问题——神经激活同时对应多个意义/解释,通过专注于稀疏激活那些只包含单一解释的特征——换句话说,它们更具单向性。

为了理解这一切是如何完成的,我们可以参考自动编码器稀疏自动编码器的精彩作品,这些作品由Tom Yeh 教授创作,解释了这些神奇机制的幕后工作原理。

(以下所有图片,除非另有说明,均来自 Tom Yeh 教授上面提到的 LinkedIn 帖子,已获他的许可进行编辑。)

首先,让我们首先探讨一下什么是自动编码器,它是如何工作的。

什么是自动编码器?

想象一个作家,他的桌子上散乱着各种纸张——有的是他写故事的笔记,有的是最终稿的副本,还有的是为他的动作故事绘制的插图。在这种混乱中,很难找到重要的部分——尤其是当作家很匆忙,出版社在电话中催促他两天内交书时。幸运的是,作家有一个非常高效的助手——这个助手确保杂乱的桌面被定期清理,类似的物品被分组整理,并把东西放到合适的位置。而且,当作家需要时,助手会帮助他快速找到正确的物品,帮助他按时完成出版社设定的截止日期。

嗯,这个助手的名字叫做自动编码器。它主要有两个功能——编码和解码。编码是指压缩输入数据并提取出关键特征(组织)。解码则是从编码表示中重建原始数据的过程,目标是尽量减少信息丢失(恢复)。

现在让我们看看这个助手是如何工作的。

自动编码器是如何工作的?

给定:四个训练样本 X1, X2, X3, X4.

[1] 编码器

第一步是将训练样本复制到目标 Y’。自动编码器的工作是重建这些训练样本。由于目标就是训练样本本身,所以使用了词***‘Auto’,它是希腊语的‘自我’***意思。

[2] 编码器:第一层 +ReLU

正如我们在之前的所有模型中所看到的,简单的权重和偏置矩阵结合 ReLU 非常强大,能够做出惊人的效果。因此,通过使用第一个编码层,我们将原始特征集的大小从 4x4 减少到 3x4。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c2c2896b0761620ef71f79dd24b7de1a.png

简要回顾:

线性变换:输入嵌入向量与权重矩阵 W 相乘,然后与偏置向量b相加,

z = Wx + b,其中W是权重矩阵,x 是我们的词嵌入,b是偏置向量。

ReLU 激活函数:接下来,我们将 ReLU 应用于这个中间的 z。

ReLU 返回输入和零之间的逐元素最大值。数学上,h = max{0, z}。

[3] 编码器:第二层 + ReLU

上一层的输出由第二个编码器层处理,该层进一步将输入大小减小到 2x3。这时,相关特征的提取发生在此层。这个层也叫做“瓶颈”,因为该层的输出特征远小于输入特征。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/486e9e67fbbfac831061f662d28f156c.png

[4] 解码器:第一层 + ReLU

一旦编码过程完成,下一步是解码相关特征,以构建最终输出。为此,我们将上一步的特征与相应的权重和偏置相乘,并应用 ReLU 层。结果是一个 3x4 的矩阵。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9f9ffd4521b3c28b6eba26be3b1c2100.png

[5] 解码器:第二层 + ReLU

第二个解码器层(权重、偏置 + ReLU)应用于之前的输出,给出最终结果,即重建的 4x4 矩阵。我们这样做是为了恢复原始维度,以便将结果与我们的原始目标进行比较。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/47b3bd18b0209d34df20b5cb9f242b97.png

[6] 损失梯度和反向传播

一旦获得解码器层的输出,我们计算输出(Y)目标(Y’)之间的均方误差(MSE)的梯度。为此,我们求解2*(Y-Y’),这给出了最终的梯度,激活反向传播过程,并相应地更新权重和偏置。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/286ca27d2139e0c693ec2fdcee1050b0.png

现在我们了解了自编码器的工作原理,接下来就该探讨它的稀疏变体如何实现大语言模型(LLMs)的可解释性。

稀疏自编码器——它是如何工作的?

首先,假设我们给定了:

  • 在经过前馈层处理后的变换器输出,即假设我们有五个标记(X)的模型激活值。它们很好,但并不能揭示模型如何得出决策或进行预测。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5c01141ce07bd9ff3330b673178216f6.png

这里的主要问题是:

是否有可能将每个激活(3D)映射到一个更高维度空间(6D),以帮助理解?

[1] 编码器:线性层

编码器层的第一步是将输入X与编码器权重相乘,并添加偏置(如在自编码器的第一步中所做)。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/312068c487f5a71ba089baf15668d291.png

[2] 编码器:ReLU

下一子步骤是应用 ReLU 激活函数,加入非线性并抑制负激活。这种抑制导致许多特征被设为 0,从而实现稀疏性概念——输出稀疏且可解释的特征f.

当我们只有一个或两个正特征时,就会发生可解释性。如果我们检查f6,我们可以看到X2X3是正的,并可以说它们两个有‘山’这一共同点。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7b8b7f37cd47ccde17cf92263a8a113b.png

[3] 解码器 : 重建

一旦完成编码器步骤,我们就进入解码器步骤。我们将f与解码器的权重相乘并添加偏置。这样输出的X’就是从可解释特征重建的X

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0ef0969dd32ed6d5a1a46041619c2efe.png

如同在自编码器中所做的那样,我们希望X’尽可能接近X。为了确保这一点,进一步的训练是必不可少的。

[4] 解码器 : 权重

作为一个中间步骤,我们计算每个权重的 L2 范数,并将它们保留下来以便稍后使用。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9208c5b6e536090638fa96455a2dc40b.png

L2-范数

也称为欧几里得范数,L2 范数使用以下公式计算向量的大小:||x||₂ = √(Σᵢ xᵢ²)。

换句话说,它对每个分量的平方进行求和,然后对结果取平方根。这个范数提供了一种直接的方式来量化向量在欧几里得空间中的长度或距离。

训练

如前所述,稀疏自编码器通过广泛的训练使得重建的X’尽可能接近X。为此,我们接下来执行以下步骤:

[5] 稀疏性 : L1 损失

这里的目标是尽可能获得接近零/零的值。我们通过调用L1 稀疏性来惩罚权重的绝对值——核心思想是我们希望使得和尽可能小。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f8aa5583bdaebc8564e7bd8b44ddd399.png

L1-损失

L1-损失是权重绝对值之和:L1 = λΣ|w|,其中λ是正则化参数。

这促使许多权重变为零,从而简化了模型,并增强了可解释性

换句话说,L1 有助于将注意力集中在最相关的特征上,同时防止过拟合,改善模型的泛化能力,并减少计算复杂性。

[6] 稀疏性 : 梯度

下一步是计算L1的梯度,对于正值为-1。因此,对于所有值为f >0的情况,结果将被设定为-1。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5e85338940e15e3475ce8be719ff40e3.png

L1 惩罚如何将权重推向零?

L1 惩罚的梯度通过一个过程将权重推向零,这个过程施加一个恒定的力,无论权重的当前值如何。下面是它的工作原理(本小节中的所有图片均为作者提供):

L1 惩罚表示为:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/04df48be6e16080c94467c08c9f248ef.png

这个惩罚相对于权重w的梯度是:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/52a15cda96d611eb04f7e52d79a4a817.png

其中***sign(w)***是:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5d0377f88ae46308b533ea7284c90ab7.png

在梯度下降过程中,权重的更新规则是:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c4cf2e8036e3f8abe10def8af14ab467.png

其中𝞰是学习率。

常量减法(或加法)操作中的λ(根据其符号)会减小权重值的绝对值。如果权重足够小,这个过程可以将其完全驱动为零。

[7] 稀疏性:零

对于所有已经是零的其他值,我们保持它们不变,因为它们已经被归零。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/35dcfe7c72319bdffd087a7baa4fe776.png

[8] 稀疏性:权重

我们将第 6 步中获得的梯度矩阵的每一行与第 4 步中获得的相应解码器权重相乘。这个步骤至关重要,因为它防止模型学习到较大的权重,避免在重建结果时加入错误的信息。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/306a1ce823111e9d815e4b7f1fd15802.png

[9] 重建:均方误差损失

我们使用均方误差或L2损失函数来计算X’X之间的差异。如前所述,目标是将误差最小化到最低值。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f4383312900f938f95dc354d99c296fe.png

[10] 重建:梯度

L2损失的梯度是2*(X’-X)

因此,正如原始自编码器所示,我们运行反向传播来更新权重和偏差。这里的关键是找到稀疏性和重建之间的良好平衡。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8b70731a04ecd7810360275f13324e41.png

这样,我们就结束了这一非常巧妙且直观的学习方法,帮助我们理解模型是如何理解一个概念,并在生成响应时采取的方向。

总结:

  1. 一个自编码器整体由两个部分组成:编码器解码器编码器利用权重和偏差以及 ReLU 激活函数将初始输入特征压缩到一个较低的维度,力图仅捕捉相关的部分。另一方面,解码器则接收编码器的输出,并努力将输入特征重建回其原始状态。由于自编码器的目标就是初始特征本身,因此才称之为“自”。目标和标准神经网络一样,是通过传播误差的梯度并更新权重和偏差来实现目标特征和输入特征之间的最小误差(差异)。

  2. 稀疏自编码器由与标准自编码器相同的所有组件以及一些额外的组成部分构成。这里的关键是训练步骤中的不同方法。由于目标是提取可解释的特征,我们希望将那些相对意义较小的值置为零。一旦编码器使用 ReLU 抑制负值,我们进一步使用 L1 损失对结果进行处理,通过惩罚权重的绝对值来促进稀疏性。这是通过向损失函数中添加一个惩罚项来实现的,该惩罚项是权重绝对值之和:λΣ|w|。那些保持非零的权重是对模型性能至关重要的。

利用稀疏性提取可解释特征

作为人类,我们的大脑仅对特定刺激激活一小部分神经元。同样,稀疏自编码器通过利用稀疏性约束,如L1正则化,学习输入的稀疏表示。通过这样做,稀疏自编码器能够从复杂数据中提取可解释的特征,从而增强所学习特征的简洁性和可解释性。这种类似生物神经过程的选择性激活有助于聚焦于输入数据中最相关的部分,使模型更加鲁棒和高效。

随着 Anthropic 致力于理解 AI 模型中的可解释性,其倡议强调了透明和易理解的 AI 系统的必要性,尤其是在 AI 系统越来越多地融入关键决策过程时。通过专注于创建既强大又可解释的模型,Anthropic 为开发可信赖且能有效应用于现实世界的 AI 做出了贡献。

总之,稀疏自编码器对于提取可解释的特征、增强模型的鲁棒性并确保效率至关重要。对这些强大模型的理解工作以及它们如何进行推理,突显了 AI 可解释性日益重要的趋势,为更加透明的 AI 系统铺平了道路。未来如何发展这些概念,并推动我们迈向一个将 AI 安全地融入我们生活的未来,值得期待!

附言:如果你想自己完成这个练习,下面有一个空白模板的链接供你使用。

空白模板用于手工练习

现在去玩吧,帮助 Zephyr 保持《真理法典》的安全!

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/eb16ec0901108e38f05e6bac5825305e.png

再次特别感谢 Tom Yeh 教授 对本项工作的支持!

参考文献:

[1] 朝着单义性:通过字典学习分解语言模型,Bricken 等人,2023 年 10 月 transformer-circuits.pub/2023/monosemantic-features/index.html

[2] 扩展单义性:从 Claude 3 Sonnet 中提取可解释特征,Templeton 等人,2024 年 5 月 transformer-circuits.pub/2024/scaling-monosemanticity/

欢迎使用“可调增益放大器 Multisim”设计资源包!本资源专为电子爱好者、学生以及工程师设计,旨在展示如何在著名的电路仿真软件Multisim环境下,实现一个具有创新性的数字控制增益放大器项目。 项目概述 在这个项目中,我们通过巧妙结合模拟电路与数字逻辑,设计出一款独特且实用的放大器。该放大器的特点在于其增益可以被精确调控,并非固定不变。用户可以通过控制键,轻松地改变放大器的增益状态,使其在1到8倍之间平滑切换。每一步增益的变化都直观地通过LED数码管显示出来,为观察和调试提供了极大的便利。 技术特点 数字控制: 使用数字输入来调整模拟放大器的增益,展示了数字信号对模拟电路控制的应用。 动态增益调整: 放大器支持8级增益调节(1x至8x),满足不同应用场景的需求。 可视化的增益指示: 利用LED数码管实时显示当前的放大倍数,增强项目的交互性和实用性。 Multisim仿真环境: 所有设计均在Multisim中完成,确保了设计的仿真准确性和学习的便捷性。 使用指南 软件准备: 确保您的计算机上已安装最新版本的Multisim软件。 打开项目: 导入提供的Multisim项目文件,开始查看或修改设计。 仿真体验: 在仿真模式下测试放大器的功能,观察增益变化及LED显示是否符合预期。 实验与调整: 根据需要调整电路参数以优化性能。 实物搭建 (选做): 参考设计图,在真实硬件上复现实验。
【数据融合】【状态估计】基于KF、UKF、EKF、PF、FKF、DKF卡尔曼滤波KF、无迹卡尔曼滤波UKF、拓展卡尔曼滤波数据融合研究(Matlab代码实现)内容概要:本文围绕状态估计与数据融合技术展开,重点研究了基于卡尔曼滤波(KF)、无迹卡尔曼滤波(UKF)、扩展卡尔曼滤波(EKF)、粒子滤波(PF)、固定区间卡尔曼滤波(FKF)和分布式卡尔曼滤波(DKF)等多种滤波算法的理论与Matlab实现,涵盖了非线性系统状态估计、多源数据融合、目标跟踪及传感器优化等应用场景。文中通过Matlab代码实例演示了各类滤波方法在动态系统中的性能对比与适用条件,尤其强调在复杂噪声环境和非线性系统中的实际应用价值。; 适合人群:具备一定信号处理、控制理论基础的研究生、科研人员及从事自动化、导航、机器人、电力电子等相关领域的工程技术人员。; 使用场景及目标:①用于动态系统的状态估计与噪声抑制,如目标跟踪、无人机姿态估计、电池SOC估算等;②为科研项目提供主流滤波算法的Matlab实现参考,支持算法复现与性能对比;③辅助教学与课程设计,帮助理解滤波算法的核心原理与编程实现。; 阅读建议:建议结合Matlab代码实践操作,重点关注不同滤波算法在非线性、非高斯环境下的表现差异,建议读者按章节顺序学习,并参考文档中提供的网盘资源获取完整代码与仿真模型以加深理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值