想象你是一位城市规划师,手里有一张城市地图,上面密密麻麻地标注了几百个观测点——某个片区的车流量、商铺租金、人口密度、空气质量……你隐约感觉到这些指标之间存在着某种“因果链条”:也许是人口增多导致了车流量上升,车流量又污染了空气,空气变差后人口反而流失。但你手里只有一张静态的“快照”数据,既不能做对照实验,也无法穿越回过去干预某个节点。你该怎么办? 这就是因果发现(Causal Discovery)的困境:从观测数据中反推出变量之间的因果结构。传统的做法像手绘地图——先假设所有关系是线性的,再用统计检验逐一筛选“谁影响谁”,一旦关系弯弯绕绕(非线性),或者变量数量成百上千,这张“地图”就画不动了。 GraN-DAG 的出现,相当于给城市规划师配了一支“会学习的自动画笔”。它不是去猜测某一条路应该怎么画,而是把“整张地图的绘制”变成一个可微分的连续优化问题——所有的道路连接关系、每条道路的通行效率,全部交给神经网络去自动调优,最终收敛出一张完整的、无环的因果图(DAG)。 本篇教程,我们就从这张“城市地图”出发,一步步拆解 GraN-DAG 的奥秘。

岗位关联

掌握 GraN-DAG,你将理解深度学习与因果推理结合的前沿范式,能够处理高维非线性数据下的因果结构发现任务,为可解释 AI 与科学发现落地提供核心技能。

目录
  1. 可视化演示
  2. 因果发现困境
  3. 可微范式革命
  4. 连续无环约束
  5. Neq优化原理
  6. 算法流程拆解
  7. 实践应用与局限
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示GraN-DAG将神经网络作为非线性结构方程模型的架构、连续化无环约束原理、以及非线性vs线性因果发现性能对比,交互切换三种模式探索深度因果发现。

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

'+CAPS.mode1+'

因果发现困境

城市规划师拿到的那张“数据快照”,本质上就是一堆观测值——没有干预,没有实验,只有同时记录下来的数字。因果发现要做的,就是从这些数字里反推出“谁是谁的因”。

传统方法(如 PC 算法、FCI 算法)的典型思路,是先做条件独立性检验,再用一组规则去“拼接”出因果关系图。这套思路的问题在于两个“硬伤”:第一,它通常假设变量之间的关系是线性的——如果一个变量的平方、对数或指数会影响另一个变量,检验的效力就会大打折扣;第二,随着变量数量增加,可能的图结构数量呈现超指数增长(3 个变量就有 25 种 DAG,10 个变量则超过 \(4 \times 10^{18}\) 种),穷举式的搜索在 20 个变量的场景下就彻底失效了。

这个组合爆炸,实际上对城市规划师意味着:他根本不可能一条条尝试所有可能的道路网络方案,必须找到一种“自动收敛”的绘制方式——这正是可微因果发现登场的契机。

可能的DAG数量=f(n)=2(n2)⋅∏k=1n(1−2−k)−1\text{可能的DAG数量} = f(n) = 2^{\binom{n}{2}} \cdot \prod_{k=1}^{n} (1 - 2^{-k})^{-1}
这个离散组合空间之大,远超暴力枚举的可行范围。
  1. 组合数量因子任意 \(n\) 个节点的有向无环图数量,由排列组合公式给出。
    (n2)=n(n−1)2\displaystyle \binom{n}{2} = \frac{n(n-1)}{2}
  2. 底数 2 的指数每对节点间“边存在/不存在/方向”的组合数导致 \(2^{\binom{n}{2}}\) 的爆炸式增长。
    2(n2)2^{\binom{n}{2}}
  3. 方向约束修正\(\prod_{k=1}^{n} (1 - 2^{-k})^{-1}\) 是保证无环条件的修正因子。
    ∏k=1n(1−2−k)−1\prod_{k=1}^{n} (1 - 2^{-k})^{-1}

可微范式革命

如果把“画地图”这件事从“手工拼路”换成“机器自动调优”,关键突破在于:让图结构本身变成连续可微的参数。

2018 年,Zheng 等人提出 NOTEARS 方法,首次将 DAG 学习转化为连续优化问题。这里的核心魔法是:用一个加权邻接矩阵 \(W\) 来表示图结构,\(W_{ji}\) 表示从 \(X_i\) 到 \(X_j\) 的边权重。只要能够设计一个光滑函数 \(h(W)\),使得 \(h(W)=0\) 当且仅当 \(W\) 对应一个有向无环图,那么原本“离散的搜索”就变成了“连续的约束优化”:

其中 \(\ell\) 是拟合损失(如最小二乘或负对数似然)。

GraN-DAG 正是沿着这条“可微革命”的道路前行,但把“线性结构方程”升级为“非线性神经网络建模”,让自动画笔不仅能画直线,还能画弯曲的河流与盘山公路。

有了这套连续化的“坐标系”,神经网络就可以无缝嵌入因果发现流程——这正是 GraN-DAG 的立足之本。

min⁡Wℓ(W;X)s.t.h(W)=0\min_{W} \ell(W; X) \quad \text{s.t.} \quad h(W) = 0
  1. 目标函数最小化损失 \(\ell(W;X)\),衡量图结构 \(W\) 对观测数据 \(X\) 的拟合程度。
    min⁡Wℓ(W;X)\min_{W} \ell(W; X)
  2. 约束条件\(h(W)=0\) 是“无环”的连续数学表达,只有无环图才满足。
    h(W)=0h(W) = 0
  3. 启发式方法实际求解时不能直接做等式约束,通过增广拉格朗日或二次惩罚把约束吸收进损失。
    min⁡Wℓ(W)+λh(W)+ρ2∣h(W)∣2\min_{W} \ell(W) + \lambda h(W) + \frac{\rho}{2} |h(W)|^2

连续无环约束

城市规划师最担心的事,是画着画着,道路形成了一个“圆形回路”——从 A 到 B,从 B 到 C,再从 C 回到 A,这在因果图中是荒谬的(一个变量不可能直接或间接成为自己的因)。所以“禁止环路”是硬性规定。

问题在于:“有环 / 无环”本身是一个离散的组合概念,怎么把它写成能求导的公式?

答案在于邻接矩阵的迹函数。对于加权邻接矩阵 \(W\)(元素非负),\(W^k_{ii}\) 的值等于从节点 \(i\) 出发经过 \(k\) 条边回到节点 \(i\) 的“路径强度”之和。因此,矩阵的迹:

其中 \(d\) 是节点数。当且仅当 \(W\) 对应 DAG 时,\(h(W)=0\)。这是 NOTEARS 的经典结论,GraN-DAG 直接沿用了这个光滑约束。

理解了“连续无环约束”这枚指南针,我们再看 GraN-DAG 如何把神经网络装进这艘船。

h(W)=tr(eW)−d=tr(∑k=0∞Wkk!)−dh(W) = \text{tr}(e^{W}) - d = \text{tr}\left( \sum_{k=0}^{\infty} \frac{W^k}{k!} \right) - d
  1. 矩阵指数展开\(e^{W}\) 是矩阵指数,展开为无穷级数 \(\sum_{k=0}^{\infty} W^k / k!\)。
    eW=I+W+W22!+W33!+⋯\displaystyle e^{W} = I + W + \frac{W^2}{2!} + \frac{W^3}{3!} + \cdots
  2. 迹的定义矩阵的迹(trace)是对角线元素之和,\(W^k\) 的对角线元素统计“环”的总强度。
    tr(A)=∑i=1dAii\text{tr}(A) = \sum_{i=1}^{d} A_{ii}
  3. 减去节点数因为单位矩阵 \(I\) 的迹为 \(d\),从 \(\text{tr}(e^W)\) 中减去 \(d\),使无环图的 \(h(W)=0\)。
    h(W)=tr(eW)−dh(W) = \text{tr}(e^{W}) - d

Neq优化原理

GraN-DAG 的全称是 Gradient-based Neighborhood Optimization of DAGs,它的核心设计可以概括为一句话:用一组相互独立的神经网络子模块 + 一个全局邻接矩阵掩码,构建一个可微的非线性因果模型。

具体而言,对于 \(d\) 个变量 \(X_1, \dots, X_d\),GraN-DAG 为每个变量 \(X_j\) 配备一个神经网络子模块 \(f_j\),这个子模块的输入理论上是“所有其他变量的取值”,但通过一个逐元素的掩码(mask)操作来控制哪些输入真正影响输出:

其中 \(W_{\cdot j}\) 是邻接矩阵的第 \(j\) 列,\(\odot\) 是逐元素乘法。当 \(W_{ij}=0\) 时,变量 \(X_i\) 对 \(X_j\) 的预测没有任何贡献,等价于“没有这条因果边”。

这套设计相当于城市规划师给每个街区配了一个“独立规划小组”,每个小组负责设计自己街区的道路连接,但所有小组共用一张全局蓝图(邻接矩阵),并通过整体优化不断修订蓝图。

X^j=fj(W⋅j⊙X)\hat{X}_j = f_j\left( W_{\cdot j} \odot X \right)
  1. 子模块预测每个变量 \(X_j\) 由一个独立的神经网络子模块预测。
    X^j=fj(⋅)\hat{X}_j = f_j(\cdot)
  2. 掩码操作邻接矩阵列向量与输入逐元素相乘,实现“软剪枝”。
    W⋅j⊙X=(W1jX1,…,WdjXd)W_{\cdot j} \odot X = (W_{1j} X_1, \dots, W_{dj} X_d)
  3. 整体模型所有子模块组合起来,构成结构方程模型:
    Xj=fj(W⋅j⊙X)+εjX_j = f_j\left( W_{\cdot j} \odot X \right) + \varepsilon_j

算法流程拆解

现在,我们把 GraN-DAG 的完整算法流程像“地图绘制工序”一样拆开来看。

第一步:初始化。 邻接矩阵 \(W\) 初始化为零或微小随机值,所有子模块的神经网络参数随机初始化。

第二步:联合优化。 GraN-DAG 使用增广拉格朗日方法(Augmented Lagrangian)来求解带约束的优化问题。每一步迭代,先固定无环惩罚系数,用 Adam 优化器更新网络参数和邻接矩阵,使预测损失下降;然后逐步增大惩罚系数,迫使 \(h(W)\) 趋向于 0:

第三步:权重裁剪与投影。 由于邻接矩阵在更新过程中可能出现负值,GraN-DAG 会对 \(W\) 施加非负约束(投影到非负象限),并对神经网络权重的范数进行裁剪,保证模型的表达能力受限但稳定,避免过拟合。

第四步:阈值化输出。 优化收敛后,将邻接矩阵中绝对值小于阈值的边视为不存在,得到最终的稀疏 DAG。

整个过程像一位耐心的绘图师:先粗线条勾勒全局,再反复修正曲线走向,最后擦除多余的辅助线,留下一张干净清晰的因果地图。

L(W,θ)=ℓ(W,θ;X)⏟拟合损失+λh(W)⏟无环惩罚+ρ2h(W)2⏟惩罚放大项\mathcal{L}(W, \theta) = \underbrace{\ell(W, \theta; X)}_{\text{拟合损失}} + \underbrace{\lambda h(W)}_{\text{无环惩罚}} + \underbrace{\frac{\rho}{2} h(W)^2}_{\text{惩罚放大项}}
  1. 拟合损失衡量预测值 \(\hat{X}\) 与真实观测 \(X\) 的差异,通常使用负对数似然(Gaussian 假设下等价于 MSE)。
    ℓ(W,θ;X)=12∑j∥Xj−X^j∥2\ell(W, \theta; X) = \frac{1}{2} \sum_{j} \| X_j - \hat{X}_j \|^2
  2. 无环惩罚\(\lambda h(W)\) 随着迭代推进而增大,使优化方向趋向无环。
    λh(W)\lambda h(W)
  3. 惩罚放大项平方项让约束违反的“代价”越来越大,迫使最终 \(h(W) \to 0\)。
    ρ2h(W)2\frac{\rho}{2} h(W)^2

实践应用与局限

GraN-DAG 这样的“自动制图师”在实践中大显身手的典型场景包括:

基因调控网络推断。基因表达数据通常有数千个基因维度,且基因间的调控关系高度非线性。GraN-DAG 能够从基因表达谱中推断出调控网络,其非线性建模能力优于传统的线性假设方法。

金融风险传导分析。在金融网络中,各机构之间的风险传导关系错综复杂,GraN-DAG 可以通过观察市场数据推断出“谁的风险传染给谁”。

但自动绘图师也有自己的软肋:

  • 计算开销大:每个变量一个神经网络,参数量随变量数线性增长,训练时间较长。
  • 局部最优风险:增广拉格朗日是非凸优化,对初始值敏感,可能收敛到局部最优解。
  • 因果充分性假设:GraN-DAG 假设不存在未观测的混杂变量,这在真实场景中往往难以满足。

城市规划师不会因为工具不够完美就放弃规划——他会理解工具的边界,并选择性地使用它。

---

AI 应用场景

基因调控网络发现

阶段:因果结构学习(模型训练与结构推断)

解决的问题:传统差异表达分析只能找出“哪些基因变了”,无法回答“哪个基因调控哪个基因”。GraN-DAG 直接从观测表达谱中恢复调控关系,帮助生物学家锁定关键转录因子。

具体案例:某肿瘤研究团队收集了 3000 个乳腺癌样本的转录组数据(约 5000 个基因),使用 GraN-DAG 推断基因调控网络,发现 17 个枢纽基因与患者生存率显著相关,其中 5 个此前未被文献报道。

工业系统根因定位

阶段:异常传播路径推断(结构化因果发现)

解决的问题:大型工业系统(如电力网络、制造产线)中,传感器数量多、信号非线性耦合,故障根因定位困难。GraN-DAG 从传感器时序数据中推断异常传播的因果链。

具体案例:某汽车制造厂的总装线部署了 200 余个传感器,当出现质量缺陷时,工程师使用 GraN-DAG 推断各工位传感器之间的因果路径,在 10 分钟内将根因锁定在某个机器人焊接参数漂移,而传统人工排查平均需要 2 天。

Python 演示

python78 行
import numpy as npimport torchimport torch.nn as nnimport torch.optim as optim torch.manual_seed(42)np.random.seed(42)  def simulate_linear_sem(n, d, edge_prob=0.3, noise_std=0.1):    """生成一个线性结构方程模型(SEM)的观测数据"""    W_true = np.zeros((d, d))    for i in range(d):        for j in range(i + 1, d):            if np.random.rand() < edge_prob:                W_true[j, i] = np.random.uniform(0.5, 1.5)    X = np.random.randn(n, d)    for j in range(1, d):        X[:, j] = X @ W_true[j, :] + np.random.randn(n) * noise_std    return torch.tensor(X, dtype=torch.float32), W_true  class GraNDAGSubmodel(nn.Module):    """每个变量对应一个神经网络子模块"""    def __init__(self, d, hidden=64):        super().__init__()        self.net = nn.Sequential(            nn.Linear(d, hidden), nn.ReLU(),            nn.Linear(hidden, hidden), nn.ReLU(),            nn.Linear(hidden, 1),        )        self.mask = nn.Parameter(torch.zeros(d), requires_grad=False)     def forward(self, x):        return self.net(x * self.mask).squeeze(-1)  def h_func(W):    """连续无环约束:h(W) = trace(exp(W)) - d"""    d = W.shape[0]    return torch.trace(torch.matrix_exp(W)) - d  def train_gra_ndag(X, n_iters=500, lr=1e-2, lambda_init=1.0, rho=1.0):    n, d = X.shape    models = [GraNDAGSubmodel(d) for _ in range(d)]    params = [p for m in models for p in m.parameters()]    mask_params = [m.mask for m in models]    for m, i in zip(models, range(d)):        m.mask.data = torch.rand(d) * 0.1    optimizer = optim.Adam(params + mask_params, lr=lr)    lam = lambda_init     for it in range(n_iters):        optimizer.zero_grad()        W = torch.stack([m.mask for m in models], dim=1)  # d x d        W = torch.relu(W)  # 非负投影        loss = 0.0        for j, m in enumerate(models):            pred = m(X)            loss += torch.mean((X[:, j] - pred) ** 2)        h_val = h_func(W)        total = loss + lam * h_val + 0.5 * rho * h_val ** 2        total.backward()        optimizer.step()        lam += rho * h_val.item()        if it % 100 == 0:            print(f"iter {it}: loss={loss.item():.4f}, h={h_val.item():.4f}")     W_final = torch.stack([m.mask for m in models], dim=1)    return torch.relu(W_final).detach().numpy()  if __name__ == "__main__":    X, W_true = simulate_linear_sem(n=500, d=6)    print("真实邻接矩阵:\n", W_true)    W_est = train_gra_ndag(X, n_iters=300)    print("学习到的邻接矩阵:\n", np.round(W_est, 2))
目的:实现 GraN-DAG 的核心流程——为每个变量构建子模块,通过掩码参数学习邻接矩阵,并用增广拉格朗日方法优化无环约束。
  1. mask = nn.Parameter(torch.zeros(d), requires_grad=False)每个子模块持有一个掩码向量,该向量的值就是邻接矩阵的一列,通过梯度更新逐步逼近真实因果边。
  2. self.net(x * self.mask)掩码与输入逐元素相乘,实现“软剪枝”:掩码接近 0 的输入被屏蔽,不参与预测。
  3. torch.trace(torch.matrix_exp(W)) - d连续无环约束的计算,基于矩阵指数求迹。
  4. W = torch.relu(W)非负投影,保证邻接矩阵权重非负(因果边没有负方向)。
  5. lam += rho * h_val.item()增广拉格朗日更新:每轮迭代增大惩罚系数,迫使 h(W) 收敛到 0。

常见误区

误区“跑完 GraN-DAG,我就能得到每个因变量对结果影响的具体数值,比如 X 增加 1 个单位,Y 增加 0.8 个单位。”

正解GraN-DAG 输出的核心是因果结构(哪些边存在、方向如何),而不是精确的因果效应量级。它使用神经网络建模,边的权重是一个广义的“掩码值”,并不直接代表线性因果效应。若要估计效应大小,需要在结构确定后,用专门的因果效应估计方法(如 do-演算或干预模型)。

为何常见:人们习惯了线性回归的“系数即效应”思维,看到“邻接矩阵”中有数值,自然认为它就是效应量。实际上这个数值是“门控强度”,类似一个开关的灵敏度,不是因果效应。

误区“既然 h(W)=0 要求无环,那么优化完成后邻接矩阵自然是稀疏的,不需要再做任何后处理。”

正解h(W)=0 只保证“无环”,不保证“稀疏”。一个完全稠密的无向图如果方向排成拓扑序,它也可以是无环的。GraN-DAG 收敛后通常还需要做阈值化处理(将绝对值小于阈值的边置零),才能得到简洁的因果骨架。

为何常见:人们把“无环”和“稀疏”混为一谈,实际上它们是两个不同维度的性质——一个关乎方向性,一个关乎密度。

误区“反正神经网络是万能的逼近器,GraN-DAG 在所有数据集上都应该超过 NOTEARS。”

正解神经网络拟合能力强,但样本需求也更大。在小样本场景下,非线性模型很容易过拟合,导致结构推断不稳定。此外,优化问题是高度非凸的,GraN-DAG 可能陷入局部最优,实际效果未必优于线性方法。

为何常见:“深度学习=更强大”的直觉在外推时失效——因果发现的核心瓶颈是“可识别性”和“优化收敛性”,而非单纯的表征能力。

误区“GraN-DAG 能直接从观测数据推断因果,所以我不用担心有没有没观测到的混淆变量。”

正解GraN-DAG 基于因果充分性假设(Causal Sufficiency),即假设不存在未观测的共同原因。如果存在隐藏混杂,学习到的图可能包含虚假边或错误方向。处理隐藏混杂需要更复杂的方法(如 FCI 算法或潜在变量模型)。

为何常见:因果发现工具大多默认假设“观测到所有相关变量”,初学者容易忽略这个前置条件。

面试题

Q1. 下列关于因果发现问题的描述,正确的是?

单选题 · mid

  • A.因果发现需要大量的干预实验数据
  • B.因果发现可从纯观测数据中推断因果结构← 正确答案
  • C.因果发现等同于相关分析
  • D.因果发现只适用于线性关系

答案:B。因果发现的目标是从观测数据中反推因果结构(选项 B)。它不需要干预实验(A 错),不同于相关分析(C 错),也能处理非线性关系(D 错)。

Q2. NOTEARS 方法的开创性贡献是什么?

单选题 · easy

  • A.首次提出用神经网络拟合非线性 SEM
  • B.首次将 DAG 结构学习转化为连续优化问题← 正确答案
  • C.首次实现深度强化学习因果推理
  • D.首次提出条件独立性检验方法

答案:B。NOTEARS 的核心贡献是通过连续无环约束 \(h(W)=0\),把原本离散的 DAG 搜索转化为可微的连续优化问题(B 正确)。它使用线性 SEM 而非神经网络(A 错),与强化学习和条件独立性检验无关(C、D 错)。

Q3. GraN-DAG 中,h(W)=0 的数学含义是什么?

单选题 · mid

  • A.\(W\) 是单位矩阵
  • B.\(W\) 中所有元素非负
  • C.\(W\) 对应的图是有向无环图(DAG)← 正确答案
  • D.\(W\) 的所有特征值为零

答案:C。\(h(W) = \text{tr}(e^W) - d=0\) 当且仅当图中不存在环,即对应 DAG(C 正确)。它不要求 W 是单位矩阵(A 错)、非负(B 错)或特征值为零(D 错)。

Q4. 与传统基于条件独立性检验的因果发现方法(如 PC 算法)相比,GraN-DAG 的优势包括哪些?

多选题 · mid

  • A.能自然处理非线性关系← 正确答案
  • B.不需要计算大量条件独立性检验← 正确答案
  • C.完全不需要任何假设
  • D.结构学习过程可微,可利用 GPU 加速← 正确答案

答案:ABD。GraN-DAG 用神经网络拟合非线性 SEM(A 正确),将结构学习转化为连续优化,绕开了组合爆炸的条件独立性检验(B 正确),并且可微优化天然支持 GPU 并行(D 正确)。但因果充分性假设仍然需要(C 错)。

Q5. 在 GraN-DAG 中,掩码向量 mask 的作用是什么?

单选题 · hard

  • A.防止神经网络过拟合
  • B.控制输入节点的“通行强度”,等价于学习邻接矩阵← 正确答案
  • C.加速模型收敛
  • D.对观测数据做标准化

答案:B。掩码向量与输入逐元素相乘,相当于对每条候选因果边赋予一个权重,多个子模块的掩码拼合起来就是邻接矩阵(B 正确)。它不直接用于防过拟合(A 错)、加速收敛(C 错)或数据标准化(D 错)。

Q6. GraN-DAG 使用增广拉格朗日法求解约束优化,其核心思想是什么?

单选题 · mid

  • A.将约束直接删除
  • B.将等式约束转化为惩罚项并逐步增大惩罚系数← 正确答案
  • C.用随机搜索代替梯度下降
  • D.用拉格朗日对偶证明唯一解

答案:B。增广拉格朗日法通过加入惩罚项 \(\lambda h(W) + \frac{\rho}{2}h(W)^2\),并逐步增大 \(\lambda\) 和 \(\rho\),将约束问题转化为一系列无约束问题求解(B 正确)。它既不删除约束也不随机搜索(A、C 错),且无环约束对应的非凸问题没有唯一解保证(D 错)。

Q7. 关于 GraN-DAG 的局限性,以下说法正确的是哪些?

多选题 · hard

  • A.计算开销随变量数线性增长← 正确答案
  • B.可能收敛到局部最优解← 正确答案
  • C.依赖因果充分性假设← 正确答案
  • D.必然优于线性因果发现方法

答案:ABC。每个变量对应一个神经网络,参数量随变量数线性增长(A 正确);增广拉格朗日是非凸优化,可能陷入局部最优(B 正确);GraN-DAG 假设无未观测混杂(C 正确)。它并非在所有场景下都优于线性方法(D 错误),小样本时非线性模型反而可能过拟合。

Q8. GraN-DAG 中,“无环约束”解决的核心问题是什么?

单选题 · easy

  • A.防止梯度消失
  • B.避免学习出“变量是自己原因”的循环因果← 正确答案
  • C.让神经网络更快收敛
  • D.降低数据的噪声水平

答案:B。无环约束保证学习结果中不存在有向环,即任何变量都不可能直接或间接成为自己的因(B 正确)。它与梯度消失、收敛速度和去噪无关(A、C、D 错)。

Q9. 以下哪个场景最适合使用 GraN-DAG?

单选题 · mid

  • A.只有 3 个变量的线性小样本数据
  • B.50 个变量、存在明显非线性关系的大样本观测数据← 正确答案
  • C.需要实时响应的嵌入式系统
  • D.含大量隐藏混杂变量的用户行为日志

答案:B。GraN-DAG 的优势正在于高维非线性的大样本场景(B 正确)。3 个变量的线性小样本用经典方法就足够(A 错),GraN-DAG 训练开销大不适合实时系统(C 错),且依赖因果充分性假设,不适合有隐藏混杂的场景(D 错)。

Q10. 因果发现中,为什么需要关注“非线性”关系?

多选题 · easy

  • A.现实世界中许多变量关系天然是非线性的← 正确答案
  • B.线性假设会导致错误的结构推断← 正确答案
  • C.非线性模型一定比线性模型更准确
  • D.非线性检验是因果发现的唯一方法

答案:AB。基因调控、经济传导等许多真实关系都呈非线性(A 正确);当真实关系非线性时,线性检验可能遗漏边或引入虚假边(B 正确)。非线性模型不一定更准——受样本量和优化影响(C 错);非线性并非唯一途径(D 错)。