想象你是一位城市规划师,被要求在一片空地上设计一套单行道系统。你的目标是让每辆车都能高效到达目的地,但有一条铁律:任何路线都不能绕回起点——否则车辆会陷入永无止境的循环,整座城市交通瘫痪。这条“不许绕圈”的铁律,在数学上叫有向无环图(DAG)约束。麻烦的是,检查一个方案有没有环,就像在地图里逐条追踪路线,是典型的离散难题:方案数量随路口数爆炸式增长,传统方法只能小打小闹。NOTEARS算法像一个天才工程师,发明了一支“环路温度计”,用一根平滑的水银柱连续地测出整个路网中的“环路浓度”,把“有没有环”这个非黑即白的问题,变成了“环路浓度有多高”的连续读数。于是,“不许绕圈”就变成了“把水银柱压到零”——一个可以用梯度下降轻松完成的优化任务。这篇文章就带你拆解这支温度计的构造原理、数学证明和实际使用方法。

岗位关联

掌握NOTEARS的连续化松弛思想,你就能突破传统因果发现算法的离散瓶颈,直接用成熟的梯度优化工具从观测数据中恢复因果图——这是现代因果推断工程落地最实用的一把钥匙。

目录
  1. 可视化演示
  2. 问题背景:离散困局与优化视角
  3. h(W)构造:加权邻接矩阵与环路温度计
  4. 等价性证明:为什么读数灵验
  5. 拉格朗日框架:把铁律变成罚款
  6. 数值实现:梯度计算与稀疏化
  7. 算法对比:PC、ICA-LiNGAM 与 NOTEARS 的路线之争
  8. 实战注意:常见数值坑与应对
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

\u5c55\u793aDijkstra\u6700\u77ed\u8def\u5f84\u7b97\u6cd5\u5728\u7f51\u7edc\u62d3\u6251\u4e0a\u7684\u6267\u884c\u8fc7\u7a0b\uff0c\u8def\u7531\u5668\u901a\u8fc7\u94fe\u8def\u72b6\u6001\u4ea4\u6362\u8ba1\u7b97\u6700\u4f18\u8f6c\u53d1\u8def\u5f84\u3002

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

Dijkstra\u6700\u77ed\u8def\u5f84\u7b97\u6cd5 \u7d2b\u8272\u8282\u70b9\u4e3a\u5df2\u8bbf\u95ee\uff0c\u7c89\u8272\u4e3a\u5f85\u8bbf\u95ee \u7ea2\u8272\u8def\u5f84\u4e3a\u6700\u4f18\u8f6c\u53d1\u8def\u5f84 d(v)=min[d(u)+w(u,v)] \u8def\u7531\u5668\u901a\u8fc7\u626e\u5e03\u65af\u7279\u62c9\u7b97\u6cd5\u8ba1\u7b97\u6700\u77ed\u8def\u5f84\u6811

问题背景:离散困局与优化视角

新手城市规划师第一次拿到地块,兴奋地画了几条单行道,老工程师却泼来冷水:“你每画一条新路,都得回头检查有没有形成闭环,而检查本身就像在迷宫里打转——路口一多,这种试错会彻底失控。”这就是DAG约束的离散困局:无环不是“某个数值的大小”,而是一个“存在或不存在闭环”的结构性判断,没法直接求导。

在因果发现中,节点是变量、边是因果方向,我们想从观测数据里恢复一张因果有向无环图。过去的主流做法是“绕道走”:PC算法像经验丰富的路口观察员,一对一对地做条件独立性检验来确认因果方向;ICA-LiNGAM则像频谱分析仪,假设噪声服从非高斯分布,用独立成分分解还原变量间的生成次序。它们都聪明地避开了对DAG约束的直接优化,但也因此背负了各自的统计假设。

NOTEARS的视角完全不同:它不绕路,而是把“无环”这个离散条件直接改造成一个连续可微的数学函数,把整个因果发现问题装进一个标准的约束优化框架。目标是在数据拟合和“不许绕圈”之间找到最优的平衡。

回看这个开头,你会发现 NOTEARS 的定位很清晰:它既不靠统计检验一条条抠边,也不靠分布假设做信号分解,而是把整张图的“环状态”压缩成一个光滑标量,交给成熟的优化器去摆平。这个“化离散为连续”的思维转换,正是整篇文章的灵魂。

min⁡W∈Rd×d  ℓ(W)s.t.G(W) 是无环图\min_{W \in \mathbb{R}^{d \times d}} \; \ell(W) \quad \text{s.t.} \quad G(W) \text{ 是无环图}
这个优化形式看似简单,真正的难点全在“无环约束”这四个字上。NOTEARS 的全部智慧,就是给这四个字配上一支可以读数的温度计。
  1. 决策变量 W$W$ 是 $d \times d$ 矩阵,$W_{ij}$ 表示从节点 $i$ 指向节点 $j$ 的因果强度,也就是路口间单行道的通行能力。
    W∈Rd×d,Wij 表示 i→jW \in \mathbb{R}^{d \times d}, \quad W_{ij} \text{ 表示 } i \to j
  2. 损失函数$\ell(W)$ 量化当前方案与观测数据的吻合度,相当于模拟车流后的误差。
    ℓ(W)=12n∥X−XW∥F2\ell(W) = \frac{1}{2n}\|\mathbf{X} - \mathbf{X}W\|_F^2
  3. 无环约束要求 $W$ 对应的图不含任何有向回路,这是城市规划的“铁律”。
    G(W)∈DAGG(W) \in \text{DAG}
  4. 离散困难$d$ 个节点时图结构数量呈指数爆炸,逐张检查是 NP 难题。
    #{G}=2O(d2)\#\{G\} = 2^{O(d^2)}

h(W)构造:加权邻接矩阵与环路温度计

工程师的解决办法很简单粗暴:给整个路网插一支温度计,水银柱的高度直接反映“环路浓度”。这支温度计要满足三个要求:无环时读数必须是零;有环时读数必须是正数;读数必须随路网权重平滑变化——这样优化器才知道往哪个方向拧。这个函数就是 NOTEARS 论文中最核心的构造。

h(W)=tr⁡(eW⊙W)−dh(W) = \operatorname{tr}\left(e^{W \odot W}\right) - d

1. 温度计函数:$h(W)$ 把任意路网矩阵映射成一个非负实数,读数越高环路越严重。

h:Rd×d→R≥0h: \mathbb{R}^{d \times d} \to \mathbb{R}_{\ge 0}

2. 平方与矩阵指数:$W \odot W$ 逐元素平方,把负的因果强度也变成正的“路径信号”,再取矩阵指数累加所有闭环路径的贡献。

eW⊙W=∑k=0∞(W⊙W)kk!e^{W \odot W} = \sum_{k=0}^{\infty} \frac{(W \odot W)^k}{k!}

3. 取迹运算:$\operatorname{tr}(\cdot)$ 只关心对角线元素之和,恰好数出“从某节点出发又绕回自身”的闭环总量。

tr⁡(M)=∑i=1dMii\operatorname{tr}(M) = \sum_{i=1}^{d} M_{ii}

4. 减去维度:矩阵指数展开的第 0 项是单位矩阵,它对迹的贡献恒为 $d$,减去它才能让完全无环的图读数归零。

d=tr⁡(I)d = \operatorname{tr}(I)

这支温度计的巧妙之处在于,它不是在“判断有没有环”,而是在“称量环的浓度”。城市里哪怕只出现一条极细的小环巷,水银柱也会微微上浮;而随着环巷慢慢被改直,读数会连续地滑向零。正是这种连续性,让梯度下降有了用武之地。

等价性证明:为什么读数灵验

有人会怀疑:这支温度计会不会误报?比如某张图明明有环却读数归零,或者无环图却读数偏高?要打消这个疑虑,需要把矩阵指数展开,逐项检验温度计的读数机制。

h(W)=∑k=1∞tr⁡((W⊙W)k)k!h(W) = \sum_{k=1}^{\infty} \frac{\operatorname{tr}\left((W \odot W)^k\right)}{k!}

1. 去掉零次项:$k=0$ 的项是单位矩阵的迹,已经被减去的 $d$ 抵消,所以求和从 $k=1$ 开始。

h(W)=∑k=1∞tr⁡((W⊙W)k)k!h(W) = \sum_{k=1}^{\infty} \frac{\operatorname{tr}\left((W \odot W)^k\right)}{k!}

2. 闭环计数:$\operatorname{tr}\left((W \odot W)^k\right)$ 展开后,每一项对应一条长度为 $k$ 的闭合路径的权重乘积。

tr⁡((W⊙W)k)=∑i1,…,ik(W⊙W)i1i2⋯(W⊙W)iki1\operatorname{tr}\left((W \odot W)^k\right) = \sum_{i_1,\dots,i_k} (W \odot W)_{i_1 i_2} \cdots (W \odot W)_{i_k i_1}

3. 无环情形:若 $W$ 对应 DAG,不存在任何长度 $\ge 1$ 的闭合路径,每一项都为零。

h(W)=0h(W) = 0

4. 有环情形:若存在一个有向环,环上权重平方的乘积恒为正,温度计读数必然大于零。

h(W)>0h(W) > 0

所以温度计不是魔术,而是“数环”的数学级数在说话。$h(W)=0$ 当且仅当图中没有任何有向环——这就把离散的图论性质,严格地翻译成了一个连续函数的零点条件。而且这个函数光滑可导,梯度信息天然可用,优化器可以放心地沿着读数下降的方向调整每一条路的权重。

拉格朗日框架:把铁律变成罚款

有了温度计,城市规划师先把“不许绕圈”的铁律放在一边,专心优化通行效率;交通局则拿着一本罚款手册站在旁边——只要温度计读数不是零,就按读数的大小开罚单。这就是拉格朗日乘子法的生活版本:把硬约束变成软惩罚,塞进目标函数里一起优化。

Lρ(W,α)=ℓ(W)+α h(W)+ρ2h(W)2L_{\rho}(W, \alpha) = \ell(W) + \alpha\, h(W) + \frac{\rho}{2} h(W)^2

1. 拟合损失:第一项是数据拟合误差,保证路网确实解释了观测到的车流。

ℓ(W)=12n∥X−XW∥F2\ell(W) = \frac{1}{2n}\|\mathbf{X} - \mathbf{X}W\|_F^2

2. 线性罚金:第二项中 $\alpha$ 是交通局的“基础罚款系数”,读数越高罚得越重。

α h(W)\alpha\, h(W)

3. 二次罚金:第三项中 $\rho$ 是超速罚单的加倍系数,$h(W)^2$ 让读数稍高时压力急剧上升。

ρ2h(W)2\frac{\rho}{2} h(W)^2

4. 对偶上升:每轮优化后,按当前违规浓度上调 $\alpha$,相当于交通局不断加码。

α←α+ρ h(W)\alpha \leftarrow \alpha + \rho\, h(W)

这个“先松后紧”的策略很有生活智慧:一开始罚款太低,路网可能贪图便利偷偷保留小环;罚款翻倍式上涨后,任何绕圈方案都会付出惨痛代价,优化器只能乖乖把环拆掉。最终 $\alpha$ 涨到极大、$h(W)$ 趋近于零,得到的方案既是无环的,又保持了良好的数据拟合——这就是增广拉格朗日法的精髓。

数值实现:梯度计算与稀疏化

施工队进场后,真正动手时最关心的是两件事:往哪个方向调整每条路?以及如何让多余的小路自动消失?第一件事靠梯度,第二件事靠正则化与截断。

∂h(W)∂W=eW⊙W⊙2W\frac{\partial h(W)}{\partial W} = e^{W \odot W} \odot 2W

1. 外导:矩阵指数对自身变量的导数仍是矩阵指数本身,相当于“温度计对外界变化的敏感性”。

∂eM∂M=eM\frac{\partial e^{M}}{\partial M} = e^{M}

2. 内导:内层 $M = W \odot W$ 对 $W$ 的导数是逐元素的 $2W$,这是链式法则的内环。

d(W⊙W)=2W⊙dWd(W \odot W) = 2W \odot dW

3. 链式法则合成:外导与内导逐元素相乘,得到 $h$ 对每个 $W_{ij}$ 的偏导数。

∂h∂W=eW⊙W⊙2W\frac{\partial h}{\partial W} = e^{W \odot W} \odot 2W

除了梯度,施工队还有两把修剪刀。第一把是 L1 正则化:在目标函数里加上 $\lambda\|W\|_1$,相当于对每条路的修建成本收税,逼着那些“可留可不留”的支路权重归零,让因果图保持稀疏。第二把是阈值截断:优化结束后,把所有绝对值小于 0.3 的边直接视为噪声拆除,只留下信号明确的因果箭头。最后用 $h(W) < 10^{-8}$ 作为收敛判据,相当于施工验收时看温度计是否真正归零。

算法对比:PC、ICA-LiNGAM 与 NOTEARS 的路线之争

因果发现领域从来不缺方法,但各有各的脾气。PC 算法是“路口观察员”:它逐对变量做条件独立性检验,靠统计推断一点点确认谁影响谁;ICA-LiNGAM 是“频谱分析仪”:它假设每个变量的噪声是非高斯的,通过独立成分分析把混合信号拆开,利用非对称性确定因果方向;而 NOTEARS 是“规划优化器”:它不需要分布假设,只要损失函数可微,就能端到端地学出整张图。

x=Bx+e\mathbf{x} = B \mathbf{x} + \mathbf{e}

1. 变量向量:$\mathbf{x} = (x_1, \dots, x_d)^\top$ 是 $d$ 个观测变量的向量,对应城市里的 $d$ 个路口。

x∈Rd\mathbf{x} \in \mathbb{R}^d

2. 强度矩阵:$B_{ij} \neq 0$ 表示变量 $j$ 直接因果影响到变量 $i$,即存在一条从 $j$ 到 $i$ 的单行道。

Bij≠0⇒j→iB_{ij} \neq 0 \Rightarrow j \to i

3. 噪声向量:$\mathbf{e}$ 是每个变量自带的独立随机扰动,代表路口自身的随机波动。

e=(e1,…,ed)⊤\mathbf{e} = (e_1, \dots, e_d)^\top

4. 线性结构方程:每个变量由它的父节点的线性组合加上独立噪声生成。

xi=∑j≠iBijxj+eix_i = \sum_{j \neq i} B_{ij} x_j + e_i

| 算法 | 核心机制 | 关键假设 | 典型场景 |

|---|---|---|---|

| PC | 条件独立性检验 | 忠实性、因果充分性 | 高维离散变量、小样本稳健 |

| ICA-LiNGAM | 非高斯 ICA 分解 | 噪声非高斯、线性无环 | 信号处理、非高斯连续数据 |

| NOTEARS | 连续优化 h(W) | 线性 SEM、加性噪声 | 中等规模、需要端到端可微 |

NOTEARS 最大的优势是把因果发现变成了“调优化器”:只要你能写出可微的拟合损失,就能复用深度学习生态里的整套梯度工具。代价是它对线性假设比较敏感,而且非凸优化不保证全局最优。所以现实工作中,老练的工程师会根据数据类型选工具:离散稀疏数据找 PC,强非高斯信号找 ICA-LiNGAM,需要把因果结构嵌进更大可微系统时,NOTEARS 是最顺手的那个。

实战注意:常见数值坑与应对

温度计虽好,施工时也会遇到各种麻烦。老工程师总结了几条血泪教训:第一,温度计的读数曲面是起伏的山地而非平滑的盆地,非凸性意味着优化器可能停在某个小山谷里,拿到的图带环却再也降不下去——对策是多组随机初始化,挑读数最低的那个方案。第二,超参数很敏感,$\lambda$ 太大会把所有边都剪光,太小又会让图密得像蜘蛛网;$\rho$ 的初始值和倍率也需要反复试。

h(W)≤εh(W) \leq \varepsilon

1. 实时读数:每次迭代后都计算当前方案的温度计读数,监控环路浓度变化。

h(t)=h(Wt)h^{(t)} = h(W_t)

2. 阈值判定:当读数小于预设阈值 $\varepsilon$,就认为路网已满足无环要求。

ε=10−8\varepsilon = 10^{-8}

3. 输出方案:满足判据时的 $W_t$ 作为最终估计的因果结构。

W^=Wt\hat{W} = W_t

第三,样本量不足时温度计读数像风中的水银柱一样抖动,估计出的边权重方差很大,需要靠交叉验证或增大 L1 系数来稳住。第四,也是最隐蔽的坑:线性 SEM 和加性噪声假设如果不成立,比如真实机制是非线性的,或者存在未观测的混杂变量,NOTEARS 会自信地给出错误方向——就像温度计在烈日下爆表,读数再准也不是路网的真实状态。因此使用前一定要用领域知识或数据检验假设,别让一支精密仪器在错误的地点施工。

AI 应用场景

信贷风控因果归因

阶段:因果结构学习

解决的问题:传统风控模型只能输出“逾期概率”,却说不清“哪些行为真正导致逾期”。用 NOTEARS 从还款行为数据中学习变量间的因果图,找出“消费频次 → 收入波动 → 逾期”的真实路径,让策略解释不再靠拍脑袋。

具体案例:某消费金融公司有 20 个用户行为特征、5 万条样本。用 NOTEARS 恢复因果图后发现,“深夜消费占比”并非逾期的直接原因,而是“可用额度利用率”的中间结果,于是把风控策略从一刀切禁深夜消费改为精细化额度管理,逾期率下降 12%。

推荐系统因果纠偏

阶段:因果去偏与数据预分析

解决的问题:推荐场景里“曝光 → 点击”的关联被用户画像混杂,直接训练会产生偏差。NOTEARS 帮助画出“画像 → 曝光 → 点击”以及“画像 → 点击”的真实因果结构,指导用因果特征做去偏训练。

具体案例:某电商平台的商品曝光日志中,用 NOTEARS 在行为子集上重建因果图,识别出“浏览时长”是“购买”的父节点而“推送频率”不是,于是调整模型特征权重,将点击率预估的 AUC 提升 2.1%。

Python 演示

python67 行
import numpy as npfrom scipy.linalg import expmfrom scipy.optimize import minimize  def h_func(W):    """环路温度计: h(W) = tr(e^(W*W)) - d"""    d = W.shape[0]    return np.trace(expm(W * W)) - d  def h_grad(W):    """温度计梯度: e^(W*W) 逐元素乘 2W"""    return expm(W * W) * (2 * W)  def notears(X, lam=0.06, rho_init=1.0, alpha_init=0.0,            rho_max=1e16, tau=10.0, tol=1e-8, max_outer=100):    """增广拉格朗日求解:    min 0.5*||X-XW||^2/n + lam*||W||_1   s.t. h(W)=0    W[i,j] 表示从节点 i 指向 j 的因果强度"""    n, d = X.shape    rho, alpha, h_val = rho_init, alpha_init, np.inf     def obj_and_grad(W_flat):        W = W_flat.reshape(d, d)        R = X - X @ W        loss = np.sum(R * R) / (2 * n)        grad_loss = -(X.T @ R) / n        h = h_func(W)        gh = h_grad(W)        lag = alpha * h + (rho / 2) * h * h        grad_lag = alpha * gh + rho * h * gh        l1 = lam * np.sum(np.abs(W))        grad_l1 = lam * np.sign(W)        grad = grad_loss + grad_lag + grad_l1        return loss + l1 + lag, grad.flatten()     for _ in range(max_outer):        res = minimize(obj_and_grad, np.zeros(d * d),                       jac=True, method='L-BFGS-B')        W = res.x.reshape(d, d)        h_val = h_func(W)        if h_val < tol:            break        alpha += rho * h_val        rho = min(rho * tau, rho_max)    W[np.abs(W) < 0.3] = 0.0    return W  if __name__ == '__main__':    np.random.seed(42)    d = 5    B_true = np.zeros((d, d))    B_true[0, 1] = 1.0    B_true[0, 2] = 0.8    B_true[1, 3] = 0.6    B_true[2, 4] = -0.7    n = 2000    X = np.random.randn(n, d) @ np.linalg.inv(np.eye(d) - B_true)    W_est = notears(X, lam=0.06)    print('真实因果强度 B_true:')    print(B_true)    print('NOTEARS 估计 W_est:')    print(np.round(W_est, 2))    print('环路读数 h(W_est) =', round(h_func(W_est), 8))
目的:用增广拉格朗日方法求解带无环约束的线性因果发现问题,从观测数据中恢复因果图。
  1. np.trace(expm(W * W)) - d温度计读数:矩阵指数取迹再减维度,无环时为 0。
  2. expm(W * W) * (2 * W)温度计梯度:链式法则得到,优化器靠它调整每条边的权重。
  3. grad_loss = -(X.T @ R) / n最小二乘损失的梯度,指引路网拟合观测数据。
  4. lag = alpha * h + (rho / 2) * h * h环路罚款:线性罚金加二次罚金,随违规浓度加码。
  5. alpha += rho * h_val对偶上升:每轮把基础罚款系数上调,逼温度计归零。
  6. W[np.abs(W) < 0.3] = 0.0阈值截断:拆除微小噪声边,只保留可信因果箭头。

常见误区

误区看到 h(W) 是一个“损失函数一样的数值”,就以为它接近 0 代表模型训练完成了,把两个指标混为一谈。

正解h(W) 只负责“有没有环”,跟拟合好坏没有半点关系。它像水银柱只测环路浓度,不测车流效率;真正的拟合质量由 ℓ(W) 管。优化过程中 h(W) 下降不代表损失在下降,二者是独立的指标,必须分开监控。

为何常见:h(W) 常被称作“惩罚项”,而正则化惩罚项在以往经验里确实会影响拟合,初学者容易把“惩罚”和“损失”画等号。

误区以为 NOTEARS 用了成熟的 L-BFGS-B 优化器,就一定能收敛到全局最优解。

正解h(W) 是非凸函数,整个目标是“拟合损失 + 非凸惩罚”的非凸优化,梯度下降只能保证找到局部最优或稳定点。实际操作要多组随机初始化、对比不同起始点的结果,就像温度计曲面有多个山谷,工程师要多试几个落点才能放心。

为何常见:梯度下降在凸问题里有全局收敛保证,初学者习惯性地把这个结论迁移到非凸问题上。

误区把 NOTEARS 当成万能因果发现工具,觉得线性、非线性、离散、连续数据都能直接往上套。

正解NOTEARS 默认假设线性 SEM 和加性噪声(x = Bx + e),且观测数据满足独立同分布。若真实机制是非线性的或存在隐藏混杂,恢复的因果方向可能严重出错。需要用领域知识判断假设是否成立,或改用 DAG-GNN 等非线性变体。

为何常见:看到“连续优化 + 梯度下降”就以为摆脱了统计假设,其实模型假设从没消失,只是藏进了损失函数和结构方程里。

误区以为逐元素平方是为了把负权重强行变正,因此会丢失“促进/抑制”的方向信息。

正解逐元素平方是为了构造一个非负的“权重乘积”矩阵,保证矩阵指数展开后每一项对迹的贡献非负,从而确保 h(W) ≥ 0。方向信息依然完整保留在 W 的符号里,环路检测只看强度不看符号——就像交警查绕圈时,不关心那条路是快车道还是慢车道。

为何常见:混淆了“环路检测”与“因果方向学习”两个阶段,前者只关心有没有环,后者才需要符号方向。

面试题

Q1. NOTEARS 中 h(W) = tr(e^{W⊙W}) - d 的矩阵指数使用的是 W 的哪种运算?

单选题 · easy

  • A.矩阵逐元素平方后再取指数← 正确答案
  • B.矩阵乘法后再做特征分解
  • C.转置矩阵乘以自身的结果
  • D.逐元素取绝对值后的矩阵

答案:A。W⊙W 是逐元素平方(Hadamard 平方),不是矩阵乘法,也不是转置或绝对值。平方的目的是让负权重也贡献正的环路信号,然后对 W⊙W 这个整体做矩阵指数运算。

Q2. h(W)=0 的充要条件是什么?

单选题 · easy

  • A.W 的每个元素都非负
  • B.W 对应的图是无环的← 正确答案
  • C.W 是一个对称的矩阵
  • D.W 的迹恰好等于零

答案:B。这是 NOTEARS 等价性定理的核心结论:h(W)=0 当且仅当 W 对应的有向图是 DAG。非负、对称或迹为零都与无环无直接关系,例如一个对称矩阵也可以含环。

Q3. 矩阵指数展开式中 tr((W⊙W)^k)(k≥1)的几何含义是什么?

单选题 · mid

  • A.图中所有边的权重总和
  • B.长度为 k 的环的数量加权和← 正确答案
  • C.图中全部节点的度数之和
  • D.从源点到汇点的最长路径

答案:B。展开后每一项对应一条长度为 k 的闭合路径,对所有 k 求和就是温度计读数的来源。无环图不存在任何闭合路径,所以所有项为 0;这解释了 h(W) 为什么能精确检测环路。

Q4. 增广拉格朗日迭代中 α ← α + ρ·h(W) 的作用是什么?

单选题 · mid

  • A.缩小梯度步长避免震荡
  • B.逐步加大环路惩罚直至无环← 正确答案
  • C.降低数据拟合部分的权重
  • D.把非凸目标转成凸问题

答案:B。这步是对偶上升:每轮根据当前违规浓度上调 α,相当于交通局不断加码罚款。它能保证最终 h(W) 被压到阈值以下,但并不会改变问题的凸性,也不会直接调整拟合损失的权重。

Q5. ∂h/∂W = e^{W⊙W} ⊙ 2W 中的 ⊙ 表示什么运算?

单选题 · mid

  • A.标准的矩阵乘法运算
  • B.两个矩阵逐元素相乘← 正确答案
  • C.两个矩阵做卷积运算
  • D.矩阵的克罗内克积

答案:B。⊙ 是 Hadamard 积,即逐元素相乘。它来自链式法则:外导是矩阵指数本身,内导是 2W,二者逐元素相乘得到温度计对每个边权重的梯度。

Q6. NOTEARS 相比 PC 算法的核心优势是什么?

单选题 · mid

  • A.无需任何统计检验即可自动化
  • B.将 DAG 识别转为连续可微优化← 正确答案
  • C.适用于任意非高斯噪声分布
  • D.高维稀疏图上保证全局最优

答案:B。NOTEARS 用连续函数 h(W) 替代离散的无环判断,从而能使用梯度优化。A 说法太绝对,PC 的检验被替代但不代表“无需检验”;C 是 ICA-LiNGAM 的特点;D 中非凸优化并不保证全局最优。

Q7. 若拟合误差已经很小但 h(W) 迟迟不收敛,最可能的原因是什么?

单选题 · hard

  • A.特征分解发生数值失败
  • B.陷入局部最优的非 DAG 解← 正确答案
  • C.梯度计算产生数值溢出
  • D.输入数据维度不匹配

答案:B。h(W) 非凸导致优化器可能停在某个带环的局部稳定点:损失很低但环没拆掉。此时应增加随机初始化次数或调大 ρ、α 的初值,而不是怀疑数值溢出或维度问题。

Q8. 下列哪些属于 NOTEARS 数值实现中的常用技巧?

多选题 · mid

  • A.L1 正则化促进解稀疏← 正确答案
  • B.阈值截断消除微小权重边← 正确答案
  • C.用非参数核回归建模
  • D.h(W) 小于阈值判定收敛← 正确答案

答案:ABD。L1 正则化让冗余边归零,阈值截断拆除噪声小边,h(W)<ε 作为收敛判据,都是论文和实现中的核心技巧。非参数核回归是其他非线性因果发现方法的手段,不是 NOTEARS 的默认选项。

Q9. 关于 h(W)=tr(e^{W⊙W})-d,下列说法正确的有哪些?

多选题 · hard

  • A.h(W) 对所有实矩阵非负← 正确答案
  • B.h(W)=0 当且仅当 W 无环← 正确答案
  • C.h(W) 在无环矩阵处光滑可导← 正确答案
  • D.h(W) 恒等于矩阵的秩

答案:ABC。逐元素平方保证展开项非负,所以 h(W)≥0;等价性定理保证归当且仅当无环;矩阵指数是光滑函数,梯度处处存在。h(W) 与矩阵秩没有关系,D 是常见混淆。

Q10. 实际应用 NOTEARS 时,哪些属于常见的数值坑?

多选题 · hard

  • A.病态条件导致梯度爆炸← 正确答案
  • B.非凸目标陷局部最优← 正确答案
  • C.小样本下估计方差很大← 正确答案
  • D.h(W) 恒等于常数零

答案:ABC。病态条件会让矩阵指数计算不稳定、梯度爆炸;非凸目标容易陷入带环局部解;小样本读数抖动导致边权重方差大。h(W) 恒为常数零只会在矩阵 W 恒为零时出现,不属于实际应用的坑。