想象你拿到了一张由 AI 自己绘制的城市地图。这座城市没有路名,每一条街道都是模型内部激活值构成的“语义坐标”;每一栋楼都代表一个词或一个概念。你很快会发现一个惊人规律:凡是跟“图书馆”有关的信息,在地图上都沿着某个固定方向排列——不是挤在某个街区,而是散布在一条贯穿城市的长轴上。找到这条轴,就等于握住了一把表达“知识”的指南针。概念向量技术要做的,就是把这种肉眼看不见的结构变成可审计的证据:用方向刻画概念、用夹角衡量语义远近、用投影判断概念对决策的影响。这篇内容会带你从“高维空间里的方向”出发,依次学会构建概念激活向量、计算 TCAV 归因分数、设计探测实验、搭建概念瓶颈模型,并最终用因果干预回答那个最难的问题——模型是真的在用它表达概念,还是仅仅碰巧相关。你还会看到这些工具如何被用在偏见检测与模型审计中,让 AI 决策从“黑盒猜测”变成“沿着方向的逻辑”。

岗位关联

对 AI 从业者而言,掌握概念向量意味着有能力回答“模型为什么这样判断”这一高价值问题,它是模型行为审计、偏见排查与可解释性研究中的核心技能。

目录
  1. 可视化演示
  2. 高维语义空间
  3. 概念激活向量
  4. TCAV归因
  5. 概念探测实验
  6. 概念瓶颈模型
  7. 因果归因分析
  8. 评估与验证
  9. 安全应用场景
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示概念向量在高维空间中的方向性表征与TCAV概念敏感性分析流程,揭示模型内部语义结构。

本节配有交互动效(进入视口后自动加载,约 3KB)。

概念向量高维空间 C1条纹方向:纹理特征方向 C2颜色方向:色相饱和度方向 C3形状方向:几何轮廓方向 v_c = mean(act(positive)) - mean(act(negative)) 概念向量是高维空间中语义方向。

高维语义空间

我们还是回到那张 AI 自绘的城市地图。普通人看神经网络,只能看到一排排数字;但如果你把某一层的激活值当作坐标,就会看到无数“建筑”自动排列出了语义地块:表示“图书馆”的样本聚集在一条轴的两侧,表示“咖啡”的样本聚集在另一条轴附近。这座城市的奇妙之处在于:概念不是某个具体的坐标点,而是一条可以无限延伸的方向。就像你站在市中心问路,别人不会说“图书馆在经纬度 (116.4, 39.9)”,而会说“沿着这条大街一直往北偏西走”——方向比位置更能概括一座城市的语义。

在技术世界里,这个“城市”就是神经网络内部的高维特征空间。模型把输入映射成一个向量 $\mathbf{l}_x$,向量的每一维没有固定含义,但整体排列却隐含规律:同概念样本的激活值会沿某个共同方向聚集。于是“概念”被形式化为空间中的一个方向,而判断两个方向是否一致,就用到余弦相似度。

有了余弦相似度这把“量角器”,地图上的任意两个方向都能比较远近。但这张地图是谁画的、方向从哪来,还没有答案。下一页我们进入正题:如何亲手制作一只指南针。

cos⁡(θ)=u⋅v∥u∥∥v∥=∑i=1duivi∑i=1dui2∑i=1dvi2\displaystyle \cos(\theta) = \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\| \|\mathbf{v}\|} = \frac{\sum_{i=1}^{d} u_i v_i}{\sqrt{\sum_{i=1}^{d} u_i^2}\sqrt{\sum_{i=1}^{d} v_i^2}}
余弦相似度只关心方向是否一致,不关心向量长短,就像问路时只关心“朝哪走”而不管“走多远”。
  1. 分子点积把两个向量的对应维度相乘再累加,度量两个方向的重合程度,方向越接近数值越大。
    u⋅v=∑i=1duivi\mathbf{u} \cdot \mathbf{v} = \sum_{i=1}^{d} u_i v_i
  2. 分母模长乘积分别为两个向量求模长并相乘,用于把分数归一化到固定区间,消除向量长度差异的干扰。
    ∥u∥=∑i=1dui2,∥v∥=∑i=1dvi2\|\mathbf{u}\| = \sqrt{\sum_{i=1}^{d} u_i^2},\quad \|\mathbf{v}\| = \sqrt{\sum_{i=1}^{d} v_i^2}
  3. 比值即夹角余弦最终值落在 $[-1,1]$。越接近 $1$ 表示两方向越同向,越接近 $-1$ 表示越反向,$0$ 表示垂直无关联。
    cos⁡(θ)∈[−1,1]\cos(\theta) \in [-1,1]

概念激活向量

制作指南针,不能只听一个人的话。你要在市中心拦住一大群刚参观完图书馆回来的游客,再拦下一群没有去过图书馆的人,分别记录他们的行走痕迹,然后问:这两群人的出发点差异最大的方向是什么?把那个方向画成箭头,就是“图书馆概念”的指南针。概念激活向量(Concept Activation Vector, CAV)的构建思路就藏在这个场景里:找一组包含目标概念的正样本,一组明确不包含的负样本,让它们分别穿过模型,记录某一层的激活向量,然后取均值相减。

为什么是“激活向量”而不是“输入图片”?因为概念是模型内部形成的抽象表示,输入层的像素差异太杂乱,而中间层激活已经完成了语义浓缩。就像你在市中心问路时,别人不会描述每一栋楼的颜色,而是直接告诉你主干道的走向。

制作 CAV 时还有一个实践技巧:概念必须成对设计。比如“条纹”对应的负样本应该是“斑点”,而不是随机图片。因为均值差只有在两个对比概念之间才有判别性。这就像指南针必须有“北”和“南”两个极端,指针才能稳定指向。

vc=1n+∑i∈Pli(l)−1n−∑j∈Nlj(l)\displaystyle \mathbf{v}_c = \frac{1}{n_+}\sum_{i \in P}\mathbf{l}_i^{(l)} - \frac{1}{n_-}\sum_{j \in N}\mathbf{l}_j^{(l)}
公式把“正样本共同涌向的方向”与“负样本所在方向”相减,得到一条从负指向正的差异轴,这条轴就是概念方向。
  1. 正样本平均激活取所有包含该概念的样本在第 $l$ 层的激活向量求平均,得到“概念聚集中心”。
    μ+=1n+∑i∈Pli(l)\boldsymbol{\mu}_+ = \frac{1}{n_+}\sum_{i \in P}\mathbf{l}_i^{(l)}
  2. 负样本平均激活取所有不包含该概念的样本的激活向量求平均,得到“非概念聚集中心”。
    μ−=1n−∑j∈Nlj(l)\boldsymbol{\mu}_- = \frac{1}{n_-}\sum_{j \in N}\mathbf{l}_j^{(l)}
  3. 两者相减两个中心连线的方向,即从“非概念”指向“概念”的差异方向。
    vc=μ+−μ−\mathbf{v}_c = \boldsymbol{\mu}_+ - \boldsymbol{\mu}_-
  4. 归一化(可选)将 $\mathbf{v}_c$ 缩放到单位长度,使方向纯粹、便于与其他向量做相似度比较。
    v^c=vc∥vc∥\hat{\mathbf{v}}_c = \frac{\mathbf{v}_c}{\|\mathbf{v}_c\|}

TCAV归因

指南针造好了,可它到底有什么用?我们真正想知道的是:“这个模型判断一张图是斑马时,'条纹'这个概念起了多大作用?”类比成城市故事:警方要查明一个案件的决策路径,需要测一测“朝图书馆方向走”对最终的落脚点贡献了多少能量。这就是 TCAV(Testing with Concept Activation Vectors)要解决的问题。它不再满足于“地图上存在一条条纹轴”,而是追问“模型的输出是否沿着这条轴敏感地变化”。

TCAV 使用梯度来回答这个问题。梯度本身就携带方向信息:它指明输出变化最快的方向。如果模型对某个输入的预测在“条纹”方向上有很大的梯度分量,说明沿着这个概念方向微调内部表示会显著改变预测。把梯度向量与概念向量做点积,就是概念敏感度分数。

TCAV 的优势在于它的“探针”粒度:不是看单个神经元,而是看整条方向。就像警探调查案件时不纠结某一个路人说了什么,而是统计整条街道的监控数据,得出“这个人确实朝图书馆方向走了”的证据链。这也让 TCAV 成为模型审计中最常用的工具之一。

SC,k,l(x)=∇fk(lx(l))⋅vc\displaystyle S_{C,k,l}(x) = \nabla f_k(\mathbf{l}_x^{(l)}) \cdot \mathbf{v}_c
TCAV 分数回答的是:把内部表示沿概念方向推一下,预测结果会被推动多少?推得动,说明模型在依赖这个概念。
  1. 计算梯度方向求预测输出 $f_k$ 对第 $l$ 层激活向量 $\mathbf{l}_x$ 的梯度,得到“对输入敏感的上升方向”。
    ∇fk=(∂fk∂l1,∂fk∂l2,…,∂fk∂ld)\nabla f_k = \left(\frac{\partial f_k}{\partial l_1}, \frac{\partial f_k}{\partial l_2}, \ldots, \frac{\partial f_k}{\partial l_d}\right)
  2. 与概念向量点积把梯度方向与概念方向 $\mathbf{v}_c$ 对齐,若两者同向则分数为正,表示该概念正向推动预测。
    ∇fk⋅vc=∑i=1d∂fk∂li⋅vc,i\nabla f_k \cdot \mathbf{v}_c = \sum_{i=1}^{d} \frac{\partial f_k}{\partial l_i} \cdot v_{c,i}
  3. 分数解释分数越大,说明概念对预测的影响越强;接近零说明概念与预测方向垂直,几乎没有贡献。
    SC,k,l(x)>0⇒沿概念方向增强会提升预测类别 kS_{C,k,l}(x) > 0 \Rightarrow \text{沿概念方向增强会提升预测类别 } k

概念探测实验

有了指南针,还得检验它是否在野外真的可用。概念探测实验(Concept Probing)就像把指南针带到深山老林里校准:你手里有一批带着“条纹”或“斑点”标签的样本,让它们经过模型各层提取激活,然后训练一个极简分类器——通常是一个线性逻辑回归——去预测这些概念标签。如果线性分类器能轻松分开两簇激活,就说明该层确实“编码”了这个概念;如果分不开,说明概念信息在这一层要么不存在、要么表达方式太复杂。

这个实验之所以强调“线性”,是因为线性可分性恰好对应“方向可分离”:城市地图上,两个街区如果能用一条笔直的大道分开,说明它们各自的方向足够清晰;如果必须绕很多弯才能分开,说明语义在这层还很混乱。概念探测的损失函数可以写成:

除了准确率,探测实验还关心两个指标:概念完整性——所有概念是否足够覆盖模型依赖的信息;概念鲁棒性——给激活加一点噪声或扰动后,探针是否依然稳定。这就像在风雨天测试指南针:如果稍微晃动指针就乱转,说明这个方向并不可靠。

Lprobe=−1m∑i=1m[cilog⁡σ(w⊤li+b)+(1−ci)log⁡(1−σ(w⊤li+b))]\displaystyle \mathcal{L}_{\text{probe}} = -\frac{1}{m}\sum_{i=1}^{m} \left[ c_i \log \sigma(\mathbf{w}^\top \mathbf{l}_i + b) + (1 - c_i) \log(1 - \sigma(\mathbf{w}^\top \mathbf{l}_i + b)) \right]
逻辑回归探针用一条线性边界分割正负概念样本,分类准确率越高,说明概念在该层越“直线可读”。
  1. 线性得分给每个激活向量 $\mathbf{l}_i$ 施加权重 $\mathbf{w}$ 和偏置 $b$,把方向信息压缩成一个标量。
    zi=w⊤li+bz_i = \mathbf{w}^\top \mathbf{l}_i + b
  2. Sigmoid 映射把线性得分压缩到 $(0,1)$ 区间,解释为“属于正概念的概率”。
    σ(zi)=11+e−zi\sigma(z_i) = \frac{1}{1 + e^{-z_i}}
  3. 交叉熵损失将预测概率与真实标签 $c_i$ 比较,两者偏差越大损失越大,训练就是不断减小这个偏差。
    min⁡w,b Lprobe\min_{\mathbf{w}, b}\ \mathcal{L}_{\text{probe}}

概念瓶颈模型

前面的方法都是“事后分析”——模型训练完后,我们再去它的内部翻找概念方向。概念瓶颈模型(Concept Bottleneck Model)换了一种更激进的思路:既然你要用概念,不如把概念变成必经之路。这就像机场安检:无论你想去哪个登机口,都得先经过唯一的安检通道,在那里被检查、被记录。模型的结构变成:输入 $x$ 先被编码成一组显式的概念评分 $h$,再基于这些人类可读的概念去做最终预测。

这种设计让 AI 的决策流程被迫透明。医生使用 AI 辅助诊断时,模型不能直接说“恶性概率 85%”,而是先给出“有肿块 = 0.9、边缘不规则 = 0.7、钙化 = 0.2”这些概念评分,再由一个轻量模型综合这些评分给出诊断。医生可以逐项审查概念分数是否合理,甚至手动修正某个概念值来探索“假如这里不是钙化,结果会怎样”。

瓶颈模型当然有代价:把信息压缩进少数几个概念维度会丢失细节,模型性能通常会略低于自由的黑箱模型。这是“透明”与“性能”之间的权衡,也是可解释 AI 领域永恒的话题。但它的价值在于:当安全关键场景需要问责时,一条看得见的决策链路远比 95% 的准确率更重要。

y^=f(h),h=g(x)\displaystyle \hat{y} = f(\mathbf{h}), \quad \mathbf{h} = g(\mathbf{x})
概念瓶颈把“原始输入 → 黑箱输出”变成“原始输入 → 可见概念 → 可审计决策”,每一环都能被人类复核。
  1. 概念编码器函数 $g$ 把输入映射为概念向量 $\mathbf{h}$,每个分量对应一个人类可理解的概念评分。
    h=g(x)=(h1,h2,…,hk)⊤\mathbf{h} = g(\mathbf{x}) = (h_1, h_2, \ldots, h_k)^\top
  2. 决策器函数 $f$ 根据概念向量 $\mathbf{h}$ 生成最终预测,由于 $\mathbf{h}$ 维度低且语义明确,$f$ 通常可以是一个简单的线性模型。
    y^=f(h)=Whh+bh\hat{y} = f(\mathbf{h}) = \mathbf{W}_h \mathbf{h} + \mathbf{b}_h
  3. 干预条件当人类修正某个概念分量 $h_j$ 时,可通过前向传播直接观察 $\hat y$ 的变化,实现“动手修改概念”的诊断。
    hj←hj+δ⇒y^ 随之变化h_j \leftarrow h_j + \delta \Rightarrow \hat{y} \text{ 随之变化}

因果归因分析

我们在第四节的探测器里看到“这一层能分开条纹和斑点”,在第三节的 TCAV 里看到“条纹方向能推动预测”。但这都还只是相关性证据——就像你发现每次图书馆方向出现时,案件发生率也上升,却不能说明图书馆导致了案件。要真正证明因果,你需要做实验:把概念方向人为拧掉,或者强行赋值,看输出是否真的改变。这就是因果归因分析(Causal Attribution Analysis)。

在城市故事里,这相当于做一个“反事实实验”:派一支工程队把通往图书馆的大道封死,然后观察原本要去图书馆的人是不是真的改变了目的地。如果封路后大家毫无反应,说明那条路根本不是关键路径;如果交通彻底瘫痪,说明这条路承担了核心功能。在模型上,我们用干预符号 $do(\cdot)$ 表达“主动把概念设定为某个值”。

因果归因是审计偏见的关键武器。例如,要检测模型中是否存在“性别偏见”,不能只看男性样本和女性样本的预测差异(可能混淆了职业、年龄等因素),而要通过概念瓶颈或方向干预,把“性别”这一概念从相关变量中剥离出来单独操作。只有经过这样的干预实验,我们才有底气说出那句最有分量的话:“这个模型的决策确实依赖于某个概念。”

Effect(C→y^)=E ⁣[y^∣do(C=c1)]−E ⁣[y^∣do(C=c0)]\displaystyle \text{Effect}(C \to \hat{y}) = \mathbb{E}\!\left[\hat{y} \mid do(C = c_1)\right] - \mathbb{E}\!\left[\hat{y} \mid do(C = c_0)\right]
因果效应比较的是“强行设定概念为不同值”时输出的变化,因为干预打碎了原有相关结构,剩下的差异就是真正的因果贡献。
  1. 干预操作$do(C = c_1)$ 表示外部强制把概念变量设为 $c_1$,而不是被动地观测它自然取值。
    y^c1=f(hC=c1)\hat{y}_{c_1} = f(\mathbf{h}_{C = c_1})
  2. 反事实对照$do(C = c_0)$ 表示同样结构下把概念设为另一个参考值,形成对照实验。
    y^c0=f(hC=c0)\hat{y}_{c_0} = f(\mathbf{h}_{C = c_0})
  3. 期望差对多个样本求平均,得到概念 $C$ 从 $c_0$ 变成 $c_1$ 时输出的平均因果效应。
    1n∑i=1ny^i,c1−1n∑i=1ny^i,c0\frac{1}{n}\sum_{i=1}^{n} \hat{y}_{i, c_1} - \frac{1}{n}\sum_{i=1}^{n} \hat{y}_{i, c_0}

评估与验证

指南针造好了、实验也做了,但用户还会问一句最实在的问题:“你的概念方向到底有多可靠?”这就引出了评估与验证环节。第一个常用指标是概念完整性(Completeness):把所有概念向量收集起来,仅用这些方向上的信息去预测输出,看看预测损失下降了多少。如果概念集越完整,说明模型决策所需的信息越能被这些方向覆盖;反之说明还有大量关键概念未被发现。

除完整性外,评估还包含对齐性检查——概念方向是否与人类直觉一致;跨层概念追踪——观察概念从浅层的边缘方向逐步组合成深层的抽象方向;以及组合探索——验证“条纹 + 马形”能否组合出“斑马”这样的复合概念。这就像在全面质检指南针:不仅要测它准不准,还要测它在不同天气、不同地形下的稳定性,以及多个指南针组合起来能否导航出完整路线。

Completeness(C)=1−Lmin⁡(y^∣概念方向 C)Lmin⁡(y^∣完整激活)\displaystyle \text{Completeness}(\mathcal{C}) = 1 - \frac{\mathcal{L}_{\min}\left(\hat{y} \mid \text{概念方向 } \mathcal{C}\right)}{\mathcal{L}_{\min}\left(\hat{y} \mid \text{完整激活}\right)}
完整性衡量“只用这套概念能解释多少预测”。比值接近 1,说明这套概念方向几乎覆盖了模型全部决策依据。
  1. 概念子空间预测把激活投影到概念方向集合 $\mathcal{C}$ 上,并用投影后的少量特征训练预测器,记录其最小损失。
    lproj=LC⊤l,Lmin⁡=min⁡fcLoss(y,fc(lproj))\mathbf{l}_{\text{proj}} = \mathbf{L}_\mathcal{C}^\top \mathbf{l},\quad \mathcal{L}_{\min} = \min_{f_c} \text{Loss}(y, f_c(\mathbf{l}_{\text{proj}}))
  2. 完全激活预测用原始完整激活训练预测器,得到理论上限的损失下限。
    Lfull=min⁡fLoss(y,f(l))\mathcal{L}_{\text{full}} = \min_{f} \text{Loss}(y, f(\mathbf{l}))
  3. 归一化完整度两者相减并归一化,得到 $[0,1]$ 区间的完整性分数。
    Completeness∈[0,1]\text{Completeness} \in [0,1]

安全应用场景

当概念方向的可靠性得到验证,它就从学术工具变成了安全基础设施。想象城市执法部门拥有了一套经过校准的指南针系统:每只指南针指向一个敏感概念,比如“性别”“种族”“年龄”。审计员不再需要逐条翻看模型的预测案例,而是直接观测哪只指南针在特定决策场景中剧烈摆动。偏见检测因此变得可度量:如果一个贷款审批模型中,“年龄”概念方向的 TCAV 分数异常偏高,这就不再是模糊的猜疑,而是一条可展示、可复核的证据链。

在模型行为审计中,概念向量还能定位“机制开关”。想象模型像一栋大楼,每层走廊有电闸。跨层概念追踪会发现:某些偏见信号在第 8 层的特殊方向中已经形成,之后每一层都在放大它。审计员据此精确找到需要修复的层,而不是盲目微调整个模型。可解释报告则把这些发现凝结成结构化文档:“模型主要依赖条纹方向判断斑马,依赖斑点方向判断豹子;对'性别'概念的敏感度在统计上不显著。”这种报告在金融、医疗、司法等高合规场景中,是 AI 系统上线前不可或缺的通行证。

从解读一张 AI 自绘的城市地图,到亲手制作指南针、验证其可靠性,再到把它用于全城的安全巡逻——概念向量技术的价值不在于炫酷,而在于把“模型为什么这么想”从一个哲学问题变成了可操作、可检验、可问责的工程问题。这正是可解释 AI 深入产业后最需要的底层能力。

Bias(k,C)=1n∑i=1nSC,k,l(xi)\displaystyle \text{Bias}(k, \mathcal{C}) = \frac{1}{n}\sum_{i=1}^{n} S_{\mathcal{C}, k, l}(\mathbf{x}_i)
平均 TCAV 敏感度把“某个概念对某类预测的平均影响”量化成一个可排序的数字,偏见审计就转化为对敏感度排名的检视。
  1. 单样本敏感度计算一个样本 $x_i$ 上概念方向集 $\mathcal{C}$ 对类别 $k$ 的 TCAV 分数。
    SC,k,l(xi)=∇fk(li)⋅vCS_{\mathcal{C}, k, l}(\mathbf{x}_i) = \nabla f_k(\mathbf{l}_i) \cdot \mathbf{v}_\mathcal{C}
  2. 样本平均对 $n$ 个测试样本的敏感度取平均,抵消个体噪声,得到稳定的概念影响力估计。
    1n∑i=1nSC,k,l(xi)\frac{1}{n}\sum_{i=1}^{n} S_{\mathcal{C}, k, l}(\mathbf{x}_i)
  3. 阈值判定当 Bias 绝对值显著偏离 $0$ 时触发偏见告警,偏离越远说明概念对预测的操控越强。
    ∣Bias∣>τ⇒触发公平性复核|\text{Bias}| > \tau \Rightarrow \text{触发公平性复核}

AI 应用场景

场景一:信用贷款模型的公平性审计

阶段:模型行为审计 / 偏见检测

解决的问题:银行使用深度学习模型审批贷款,若出现歧视性结果,传统做法只能逐单人工复核,成本高且难成规模。概念向量可以把“性别”“婚姻状况”等敏感概念制成方向,用 TCAV 分数量化模型对这些概念的依赖程度,形成可追溯的审计证据。

具体案例:审计团队构造“性别敏感概念对”(男性图片 vs 女性图片),提取贷款模型最后一层激活构建 CAV,计算敏感度。发现模型对“性别”方向的 TCAV 分数在信用额度预测中显著高于阈值,随即定位到特征工程环节存在历史偏差,进而调整训练数据。

场景二:医疗影像辅助诊断的可解释报告

阶段:决策解释 / 概念瓶颈部署

解决的问题:医生不敢信任“端到端”的病灶分类黑箱,因为模型没有说明依据。概念瓶颈模型强制模型先输出“肿块形状”“边缘规则度”“钙化密度”等概念评分,再给出恶性概率,医生能逐项核对并修正概念值,实现人机协同诊断。

具体案例:某肺结节筛查系统采用概念瓶颈架构,若医生发现模型把“钙化”评分打得过高,可直接调整该概念分数重新推理,观察诊断结果是否改变。若改变明显,说明模型确实依赖该概念;若改变微弱,则提示概念层表达不完整,需要重新设计概念集。

Python 演示

python46 行
import numpy as np  def load_activations(seed=42):    """模拟"条纹"和"斑点"两个概念在中间层的 32 维激活向量。"""    rng = np.random.default_rng(seed)    n_pos, n_neg, dim = 60, 60, 32    direction = rng.normal(0, 1, dim)    direction /= np.linalg.norm(direction)    pos = rng.normal(0, 1, (n_pos, dim)) + 1.8 * direction    neg = rng.normal(0, 1, (n_neg, dim)) - 1.2 * direction    return pos, neg, direction  class ConceptActivationVector:    def __init__(self, dim):        self.dim = dim        self.cav = None     def fit(self, pos_feats, neg_feats):        pos_mean = np.mean(pos_feats, axis=0)        neg_mean = np.mean(neg_feats, axis=0)        diff = pos_mean - neg_mean        norm = np.linalg.norm(diff)        self.cav = diff / norm if norm > 1e-8 else np.zeros(self.dim)        return self.cav     def sensitivity(self, grad):        return float(grad @ self.cav)  def main():    pos, neg, true_dir = load_activations()    cav = ConceptActivationVector(pos.shape[1])    v = cav.fit(pos, neg)    align = float(np.dot(v, true_dir))    print("CAV 与生成方向的余弦对齐度:", round(align, 3))     rng = np.random.default_rng(7)    grads = rng.normal(0, 1, (5, pos.shape[1]))    for i, g in enumerate(grads, 1):        print(f"样本 {i} 的 TCAV 敏感度: {cav.sensitivity(g):.3f}")  if __name__ == "__main__":    main()
目的:演示概念激活向量的标准构建流程——正负样本激活均值差分生成方向,再用梯度点积计算 TCAV 敏感度。
  1. direction = rng.normal(0, 1, dim)随机生成一个隐藏的“真实概念方向”,用来模拟概念在特征空间中的存在。
  2. pos = rng.normal(0, 1, (n_pos, dim)) + 1.8 * direction正样本沿概念方向正向偏移,造出“有概念”的一组激活。
  3. diff = pos_mean - neg_mean正负样本类中心的差,就是 CAV 的核心公式:两个聚集中心的连线方向。
  4. self.cav = diff / norm if norm > 1e-8 else np.zeros(self.dim)归一化到单位长度,同时避免零向量除零错误。
  5. return float(grad @ self.cav)梯度与概念向量的点积,即单样本 TCAV 敏感度分数。
  6. align = float(np.dot(v, true_dir))验证构造出的 CAV 与真实概念方向的余弦对齐度,越接近 1 说明恢复越好。

常见误区

误区我们学“条纹”概念向量,是不是找几张条纹图片平均一下,或者找某个专门识别条纹的神经元,它的激活就是概念向量?

正解概念向量是空间中的一个方向,而不是任何一张图片或一个神经元。正样本平均激活只是构造方向的手段,真正的产物是“正向 vs 负向”的差异箭头。单个神经元通常混合了多种信息,而概念方向是跨越整个特征空间的整体模式。就像“图书馆方向”是所有游客足迹统计出的趋势,不是某一个游客的脚印。

为何常见:人们在直觉上习惯把概念绑定到具体实例或单个通道,因为 CNN 的神经元可视化让“某个神经元识别条纹”的说法流行过,但那是过度简化。

误区我算出“条纹”方向能很好地分开斑马和非斑马,准确率 95%,这足以证明模型判断斑马时依赖条纹概念。

正解探针准确率只能说明概念信息存在于模型中,不能证明决策真的使用了它。概念可能被存储但没被利用,也可能模型依赖的是与概念高度相关的其他混杂方向。要证明因果使用,需要 TCAV 的梯度对齐分析或概念干预实验,观察“拧掉概念方向后输出是否变化”。

为何常见:人类天然把“存在性强”等同于“因果性强”,这是最常见的认知捷径,也是相关性与因果性混淆在可解释 AI 中的典型表现。

误区把决策强制经过几个概念,肯定丢掉大量细节,模型性能必然崩盘,所以工业界不可能用。

正解当概念集设计得充分且带有监督信息时,概念瓶颈的性能损失可以很小,甚至通过概念监督获得正则化收益。关键在于概念集合是否覆盖决策所需的信息:概念越完整,性能损失越小。许多落地场景中,5% 的准确率换 100% 的可审计性是值得的。

为何常见:早期概念瓶颈论文在无监督概念集合上表现不佳,被误解为“瓶颈必然弱”,忽略了概念质量才是核心变量。

误区既然概念是方向,那随便取哪一层的激活都能构造出差不多的概念向量。

正解浅层激活编码的是边缘、颜色块等低级特征,概念方向更多指向局部模式;深层激活才编码语义类别。因此“条纹”概念在浅层和深层的方向含义是不同的,跨层追踪时能看到概念从“边缘模式”逐步组合成“物体语义”。选择哪一层构造 CAV 取决于研究目标是低层机制还是高层语义。

为何常见:人们容易把特征空间想象成均匀的容器,忽略了神经网络的层次化信息处理结构。

面试题

Q1. 概念向量的本质是什么?

单选题 · easy

  • A.一组经过筛选的训练数据
  • B.高维空间中代表某个概念的方向← 正确答案
  • C.模型输出层的概率分布向量
  • D.损失函数对权重的梯度值

答案:B。概念向量的核心是把“概念”形式化为高维特征空间中的一个方向,而不是某组数据、某个概率或某个梯度。就像指南针指向的方向才是概念,而不是某栋楼或某条路本身。

Q2. 构建概念激活向量(CAV)时,最基本的操作是?

单选题 · easy

  • A.将正负样本的激活均值相减← 正确答案
  • B.对输入图像做随机增广
  • C.计算损失函数的二阶导数
  • D.对输出概率取阈值

答案:A。CAV 的构造公式就是“正样本平均激活 − 负样本平均激活”,得到的差值方向即概念方向。其他选项都偏离了“类中心差分”这个核心思想。

Q3. 两个向量的余弦相似度为 1 说明什么?

单选题 · easy

  • A.两个向量方向完全一致← 正确答案
  • B.两个向量长度完全相同
  • C.两个向量相互正交垂直
  • D.两个向量方向完全相反

答案:A。余弦相似度只度量方向夹角,为 1 表示夹角为 0,即方向完全一致。长度、正交、反向分别对应其他数值,因此只选 A。

Q4. TCAV 敏感度分数的核心运算是什么?

单选题 · mid

  • A.输出对输入的二次偏导
  • B.输出对层激活的梯度与概念向量做点积← 正确答案
  • C.概念向量与权重矩阵的逆相乘
  • D.特征图做全局平均池化

答案:B。TCAV 分数 $S = \nabla f_k \cdot \mathbf{v}_c$ 本质是梯度方向与概念方向的对齐程度。点积结果越大,说明推动概念方向能显著改变预测。其他选项都不是 TCAV 的定义运算。

Q5. 概念探测实验通常使用哪种分类器作为探针?

单选题 · mid

  • A.随机森林数百棵树
  • B.深层残差卷积网络
  • C.线性逻辑回归← 正确答案
  • D.高斯核支持向量机

答案:C。探测实验刻意使用线性模型,因为线性可分性对应“概念在空间中沿单一方向可分离”。深层模型能分开不代表方向存在,只有线性探针的结论才能支撑“概念方向”的论证。

Q6. 概念瓶颈模型与传统黑箱模型的最大区别是什么?

单选题 · mid

  • A.网络层数显著减少
  • B.决策必须经过显式概念层← 正确答案
  • C.完全不需要标注数据
  • D.训练时使用强化学习

答案:B。概念瓶颈模型的结构是 $x \to \mathbf{h} \to \hat y$,强制决策经过人类可读的概念评分。层数、监督、训练方式都不是本质区别,透明可干预的“瓶颈”才是关键。

Q7. 因果归因分析区别于普通相关性分析的要点是?

单选题 · mid

  • A.使用更多训练数据
  • B.主动干预概念再观察输出变化← 正确答案
  • C.计算特征之间的皮尔逊系数
  • D.减小网络参数量

答案:B。因果归因通过 $do(C=c)$ 干预切断混杂因素,观察反事实输出变化。相关分析只被动观测,无法区分因果方向,因此干预是两者的分水岭。

Q8. 概念完整性(Completeness)指标衡量的是什么?

单选题 · mid

  • A.模型在测试集上的准确率
  • B.仅用概念方向预测输出时的损失衰减程度← 正确答案
  • C.梯度下降收敛速度的快慢
  • D.模型参数量占内存的比例

答案:B。完整性 = $1 - \frac{\mathcal{L}_{\text{proj}}}{\mathcal{L}_{\text{full}}}$,衡量概念方向集能解释多少预测变化。它不直接反映准确率、训练速度或模型规模,而是反映概念覆盖度。

Q9. 关于跨层概念追踪,通常哪些观察结果是对的?

多选题 · hard

  • A.浅层概念更偏向低级视觉特征← 正确答案
  • B.概念方向在深层逐步组合成抽象语义← 正确答案
  • C.所有概念只在输出层才出现
  • D.跨层分析有助于定位偏见形成的层← 正确答案

答案:ABD。浅层激活编码边缘、颜色等局部模式,深层逐步组合成物体级语义,因此 A、B 正确;跨层追踪能显示偏见信号从哪里产生并在哪些层被放大,D 也正确。C 过于绝对,概念在浅层就以低级形式存在。

Q10. 用概念向量做模型偏见检测时,合理操作包括哪些?

多选题 · hard

  • A.构造敏感概念对并计算 TCAV 分数← 正确答案
  • B.统计敏感概念方向对预测的平均影响← 正确答案
  • C.直接删除模型的若干隐藏层
  • D.用反事实干预审计不同概念赋值下的输出← 正确答案

答案:ABD。偏见检测要先构造概念对(如性别),再计算 TCAV 反映影响强度,并用干预实验验证因果效应,因此 A、B、D 正确。删除隐藏层是破坏式操作,既不能量化偏见也不具可解释性,C 错误。