想象你刚搬进一间空荡荡的公寓,地上摊着十几个纸箱:崭新的台灯、绕成团的网线、空气净化器、一摞书。你环顾四周,墙上只有一个插座,墙角有一个网口,窗边光线最好。你面临的第一个问题不是“东西放哪”,而是“谁得挨着谁”——台灯得靠近插座,路由器得靠近网口,书桌得靠近窗。这些“谁依赖谁”的关系,就是一件物品在这个房间里“活得舒不舒服”的底层逻辑。 在人工智能领域,这样的场景每天都在发生:数据科学家拿到一堆变量——销量、广告费、气温、库存——想知道究竟谁在影响谁。是广告费推动了销量,还是销量好的时候才舍得投广告?这种从数据里反推“谁依赖谁”的过程,就叫因果发现。而今天的主角GOLEM,用的是一套“给房间打整洁分”的聪明办法:不强制每件物品的位置,而是让它们随着分数自然归位。 GOLEM全称里藏着“似然”(likelihood)一词——它给每种摆放方案的“自然程度”打分,分数越高,越接近真实的因果结构。这个故事里,你将看到它如何用一把软尺子,替代过去那些硬邦邦的“无环命令”,让因果发现变得又稳又准。
因果发现是AI从“相关”走向“因果”的关键一步,理解GOLEM的软约束设计,能帮你读懂现代因果结构学习算法的底层逻辑,在可信AI、决策智能等领域派上大用场。
可视化演示
展示GOLEM软无环正则化替代硬约束的优化优势、似然函数梯度下降收敛过程及与NOTEARS的性能对比。
本节配有交互动效(进入视口后自动加载,约 3KB)。
软无环正则化 λ₂h(W)软惩罚替代h(W)=0硬约束 硬约束压缩可行域致梯度病态 软约束使优化器平滑收敛 L=NLL+λ₁‖W‖₁+λ₂h(W) 软正则化兼顾流畅与可识别。
因果发现基础
你站在客厅中央,环顾四周:插座在墙上,网口在墙角,窗户在书桌上方。现在你知道了“台灯要挨插座、路由器要接网口、书桌要临窗”——这就是几件物品之间的依赖关系。但假如你刚搬进来时没有这些常识,只看到别人住过的痕迹(一堆使用数据),你能反推出“台灯必须靠近插座”吗?这就是因果发现的起点:从观测数据里,反推变量之间“谁依赖谁”的结构。
在AI领域,我们把每个变量看作一个节点,把“A影响B”画成一条从A指向B的箭头。所有箭头放在一起,就构成一张因果图。但生活经验告诉我们:依赖关系不能绕圈子——台灯靠插座供电,插座不可能反过来靠台灯供电。这种“没有循环”的图,数学上叫有向无环图(DAG)。
结构学习的目标,就是在所有可能的DAG中,找到“最可能生成眼前这批数据”的那一张。这像极了你在搬家时做的判断:在所有“合理的摆放方案”里,找出最符合房间物理限制、也最顺手的那个。
回到房间的比喻:你脑中那张“谁挨着谁”的布置图,就是一张DAG——它没有环路,每条线的方向都源自物理世界的因果关系。
- 图的基本记号$\mathcal{G}$ 表示整张因果图,$\mathbf{V}$ 是所有变量节点(房间里每件物品)的集合,$\mathcal{E}$ 是所有因果边(依赖关系)的集合。
- 无环条件$\nexists$ 读作“不存在”,后面的箭头链条 $v_1 \to v_2 \to \cdots \to v_k \to v_1$ 表示“从某个节点出发能绕一圈回到自己”的路径——这样的循环依赖被明确禁止。
- 边的方向含义每条边 $u \to v$ 都表示“$u$ 是 $v$ 的因”,方向错了,整张图的意义就错了。
硬约束困境
假设来了一位强迫症室友,他规定:“所有物品必须立刻、严格地放到最终位置,少一步都不行!”你会立刻感到窒息——因为你连依赖关系都还没完全搞清楚,怎么可能一步到位?更糟的是,每次你想微调某件物品的位置,他都会大喊:“不行!你违反了规定!”整个搬家过程变得步履维艰。
早期深度因果发现方法NOTEARS就处在类似处境。它把“图必须无环”写成一个硬性等式约束,比如 $h(\mathbf{W}) = 0$,意思是:优化过程中,权重矩阵 $\mathbf{W}$ 的每一步都必须精确落在这条“无环线”上,一丝一毫都不许偏离。
问题在于,这个“无环线”非常狭窄。优化器走在上面,就像走钢丝:稍微偏向一侧就违反约束,退回原位又动弹不得。这带来两个后果——梯度病态:越接近无环解,梯度越小且方向紊乱,迭代像蜗牛爬行;优化瓶颈:每次都要用复杂的拉格朗日对偶或投影操作把解拉回约束面,计算开销巨大。此外,NOTEARS用最小二乘作为拟合损失,当各变量的噪声方差不齐时,它还会把“噪声大”误判成“因果方向”,学到错误的结构。
强迫症室友的“死命令”虽然初衷没错,却让整个过程僵硬而低效。我们需要换一种更柔和的领导风格。
- 权重矩阵$\mathbf{W}$ 是 $d \times d$ 的因果系数矩阵,$W_{ij}$ 表示变量 $j$ 对变量 $i$ 的因果强度(掷地有声地说,“谁对谁的影响有多大”)。
- 逐元素平方$\mathbf{W} \circ \mathbf{W}$ 把每个系数平方再放入矩阵,防止正负号抵消,让“这条边存在与否”的信息被完整保留。
- 矩阵指数与迹$\mathrm{tr}(e^{\mathbf{A}})$ 对矩阵指数求迹(对角线元素之和),它像一个“环探测器”——一旦因果图中出现有向环,探测器就会发出正信号,使 $h(\mathbf{W})$ 超过0。
GOLEM核心思想
你决定赶走强迫症室友,改用一套新规则:打分制。每调整一次摆放,就给房间的整体“自然程度”打个分——台灯靠近插座,加分;路由器被埋在纸箱底下,扣分。你不必一步到位,只需反复微调,让分数一点点上升。渐渐地,所有物品自己滑向了最合理的位置,房间变得整洁、顺畅、赏心悦目。
GOLEM(地精)方法正是这样一位“打分型管家”。它保留了“图必须无环”的目标,但不再把它写成死板的等式约束。取而代之的,是把无环性包装成一个软惩罚项 $\lambda_2 h(\mathbf{W})$ 直接塞进目标函数。于是,整个优化过程变成了一场无约束的“上分之旅”。
GOLEM的目标函数有三个部分,像一张评分表的三个栏目:“拟合分”(数据似然)、“简洁分”(稀疏正则)、“无环分”(软无环惩罚)。三栏合起来,就是:
没有硬性命令,只有温柔的引导。GOLEM证明了:只要打分规则设计得够好,“无环”这件好事会在优化的终点自然发生。
- 对数似然项$\frac{d}{2}\log(\frac{1}{n}\sum_{j=1}^{n}\|\mathbf{x}_j - \mathbf{W}^{\top}\mathbf{x}_j\|^2)$ 度量“用当前因果系数预测数据”的平均误差,误差越小,这项值越低——相当于“摆放越顺手,分数越高”。
- L1稀疏项$\lambda_1 \|\mathbf{W}\|_1$ 鼓励 $\mathbf{W}$ 中大多数系数变成0,也就是“无关的装饰品一律不放”,避免学出一张枝叶繁茂的复杂图。
- 软无环项$\lambda_2 h(\mathbf{W})$ 是本次改革的点睛之笔——一旦出现循环依赖,$h(\mathbf{W})$ 就大于0,自动扣分;无环时它等于0,不产生任何负担。
似然得分原理
打分制的核心是评分标准本身:凭什么说“台灯放在这里是自然的”?答案藏在数据里——如果房间里所有台灯的历史摆放位置都靠近插座,那么“台灯挨插座”这个方案就非常“自然”。在统计学里,这种“某个假设下数据出现的概率”叫作似然,它是GOLEM评分表里权重最大的一栏。
为了算似然,GOLEM首先给数据生成过程做了一个假设:每个变量是若干其他变量的线性组合,再加上一份独立的随机噪声。这就是线性结构方程模型(SEM),相当于认定“每件物品的位置可以由其他物品的位置线性预测,加上一些随机抖动”。
你可能会问:“换用似然而不是最小二乘,区别大吗?”答:区别非常大。最小二乘只关心“预测误差平方和”,它天然假设所有变量的噪声一样大;而似然函数会逐变量评估“在这个噪声强度下,数据出现的概率”。当噪声方差不齐时,最小二乘会把“噪声大的变量”误判为“受更多因果影响”,把因果方向搞反——而似然能拨开迷雾,看清真正的因果方向。
- 数据生成等式$\mathbf{X}$ 是观测数据矩阵,$\mathbf{W}^{\top}\mathbf{X}$ 表示“其他变量对本变量的因果贡献”,$\mathbf{Z}$ 是独立噪声——就像房间布置的随机误差。
- 高斯噪声假设$\mathbf{Z} \sim \mathcal{N}(\mathbf{0}, \mathbf{\Omega})$ 说明噪声服从均值为0、协方差为 $\mathbf{\Omega}$ 的高斯分布。关键点在于:$\mathbf{\Omega}$ 不必是对角矩阵的等方差形式,每个变量的噪声强度可以不同。
约束项设计
评分表上除了“拟合分”,还有两条特殊规则。第一条:不许循环依赖——如果台灯靠插座供电,插座又反过来依赖台灯供电,整个房间的电路会立刻瘫痪。第二条:少放无用装饰——每多一件跟其他物品毫无关系的摆设,房间就多一分凌乱。
这两条规则,对应GOLEM目标函数里的两个附加项。$\lambda_2 h(\mathbf{W})$ 是“无环扣分项”:$h(\mathbf{W})$ 这个函数经过精心设计,只有当代入的 $\mathbf{W}$ 对应一张DAG时才等于0,只要存在环就立刻变成正数。而 $\lambda_1 \|\mathbf{W}\|_1$ 是“简洁加分项”:它倾向于把不重要的边系数压到0,让学出来的图尽量清爽。
$h(\mathbf{W})$ 这个式子里的“指数”让它在 $\mathbf{W}$ 偏离无环状态时快速增长,有点像滚下山坡的雪球——偏离越远,回拉力越大。配合 $\lambda_1$ 的“极简偏好”,GOLEM最后学出的图,既没有环,也没有冗余边。
- 非负性$h(\mathbf{W}) \geq 0$ 对所有实矩阵恒成立,所以它永远是一个“扣分项”,不会反过来给有环的图加分。
- 零值等价于无环当且仅当 $\mathbf{W}$ 对应的因果图没有任何有向环时,$h(\mathbf{W})$ 才等于0——这就是“软约束”背后的硬道理:它不是不要求无环,而是把无环化作一个可微的惩罚函数,让优化器自己朝无环方向走。
优化求解流程
评分表定好了,接下来就是动手整理房间。你的策略是:每次只挪动一件物品几厘米,然后看总分有没有涨——涨了,就记住这个方向继续挪;跌了,就往回退一点。就这样一步一步、不慌不忙,整间屋子在无数次微调后达到最高分。这就是梯度下降的精髓。
GOLEM的整个目标函数对 $\mathbf{W}$ 是处处可微的,因此可以直接调用最成熟的梯度优化器(如Adam)来迭代求解。每一轮迭代时,算法同时做三件事:让似然项拉着 $\mathbf{W}$ 更好地拟合数据;让L1项把不重要的边往0压缩;让软无环项把 $\mathbf{W}$ 往“无环区域”轻轻推一把。三者合力,互相制衡,最终停在平衡点。
对比一下两种搬法:硬约束是“攀岩”——每一步都得精确踩在岩点上,稍有不慎就摔回原地;GOLEM的软惩罚是“滑梯”——顺着坡道一路滑下,省力又稳定。这正是GOLEM能高效处理大规模因果图的秘密。
- 迭代更新$\mathbf{W}^{(t+1)}$ 是第 $t+1$ 轮的因果矩阵,它由第 $t$ 轮的 $\mathbf{W}^{(t)}$ 沿着负梯度 $-\nabla \mathcal{J}$ 移动得到——就像一个物品被挪向分数更高的方向。
- 学习率$\eta$ 是每一步的步长,必须取一个适中的正数——太小则要挪几千步才到终点,太大则一步跨过头、来回震荡。通常设一个接近0的值。
评估与应用
房间终于收拾好了。怎么知道你的整理水平到底如何呢?最可靠的办法是做个“盲测”:让一位朋友按他自己的方式重新布置一间相同的户型,然后把你和他画的布置图逐点对比——哪些物品的位置完全一致,哪些放错了地方。在学术里,这个“盲测对比”的实验设计叫合成数据验证。
做法是:先用一张已知的因果图生成一批数据(相当于“标准答案”),再让GOLEM从数据中反推因果图,最后计算二者的差异。最常用的差异指标是结构汉明距离(SHD):逐边比对两图中的每一条边是否存在、方向是否正确,把不一样的地方加起来。
实验结果表明:在噪声方差不等的场景下,GOLEM学出的因果方向显著优于最小二乘类方法;在节点数达到几百的规模时,软约束优化的稳定性也远胜硬约束。这让GOLEM在金融风控、医疗诊断、推荐系统等“可信AI”场景中成为一把趁手的工具——因为可靠的因果判断,才是决策智能的地基。
- 逐边对比$\hat{A}$ 是算法学到的邻接矩阵,$A^{*}$ 是生成数据的真实邻接矩阵,$\mathbb{1}[\cdot]$ 是示性函数——里面条件成立时为1,否则为0。
- 汇总所有边对所有 $i,j$ 位置求和,得到两张图的差异总数——它像“你的布置图与标准答案不一致的细节数”。
AI 应用场景
金融风控:追查逾期“病因”
阶段:因果发现与结构建模
解决的问题:传统信用评分模型只能输出“这只客户逾期风险高”,却说不清风险从哪来。风控经理真正想知道的是因果链条:是收入波动触发了负债率上升,进而引发逾期?还是消费习惯恶化直接导致?GOLEM从多维财务指标中学出带有方向的因果图,让风控团队从“治标”的评分,升级为“治本”的因果诊断。
具体案例:某消费金融公司积累了100多维度用户特征(月收入、消费频次、负债率、还款记录等)。用GOLEM学习因果结构后,发现“收入波动→负债率上升→逾期”是一条强因果链。据此,团队在“收入波动”环节提前触发预警,试运行三个季度后逾期率下降约11%。
医疗健康:药物副作用的路径还原
阶段:结构学习与可解释分析
解决的问题:电子病历里记录了海量症状、用药和检验指标,但“某药导致某症状”的直接证据往往被大量混杂因素掩盖。传统相关分析只能给出“服药者更常出现低血糖”的模糊关联,说不清路径。GOLEM从观测记录中恢复“药物→中间生理指标→不良反应”的因果链,让结论可解释、可干预。
具体案例:研究团队对2万余名2型糖尿病患者的电子病历做因果发现,找出口服降糖药与低血糖事件之间的因果路径,并识别出关键中间变量——肾功能指标。医生据此为肾功能不全患者调整用药方案,减少了低血糖风险。
推荐系统:从相关性到反事实推理
阶段:用户行为因果建模
解决的问题:推荐系统从行为日志里看到“看了A的人买了B”,却不敢断言“展示A会导致B被购买”。因为相关不等于因果,可能只是同一类用户刚好都喜欢这两样。GOLEM从曝光、点击、收藏、购买的时序数据中恢复行为因果图,支持“如果不展示A,B的购买量会变化多少”这类反事实问题。
具体案例:某电商平台对千万级用户行为日志做因果发现,识别出“浏览详情页→加入购物车→下单”的因果链路,并发现真正影响转化的是“加入购物车”环节的体验而非曝光频次。据此优化排序策略,转化率提升6.2%。
Python 演示
import numpy as npfrom scipy.linalg import expm def generate_linear_sem(n=500, d=4, seed=42): """按拓扑序生成线性SEM数据:x_i = sum_{j<i} B[j,i] * x_j + z_i""" rng = np.random.default_rng(seed) B = np.array([ [0.0, 0.8, 0.6, 0.0], [0.0, 0.0, 0.0, -0.7], [0.0, 0.0, 0.0, 0.5], [0.0, 0.0, 0.0, 0.0], ]) Z = rng.standard_normal((n, d)) X = np.zeros_like(Z) for col in range(d): X[:, col] = X @ B[:, col] + Z[:, col] return X, B.T def golem_fit(X, lam1=0.01, lam2=5.0, lr=0.005, epochs=1200, seed=0): """GOLEM式因果发现:似然得分 + L1稀疏 + 软无环惩罚""" n, d = X.shape rng = np.random.default_rng(seed) W = rng.uniform(-0.1, 0.1, size=(d, d)) np.fill_diagonal(W, 0) for it in range(epochs): R = X - X @ W.T norm2 = np.sum(R * R) E = expm(W * W) loss = 0.5 * d * np.log(norm2 / n) loss += lam1 * np.sum(np.abs(W)) loss += lam2 * (np.trace(E) - d) grad = -d * X.T @ R / norm2 grad += lam1 * np.sign(W) grad += lam2 * 2.0 * W * E W -= lr * grad np.fill_diagonal(W, 0) return W def main(): X, W_true = generate_linear_sem(500, 4, seed=42) W_est = golem_fit(X) mask = np.abs(W_est) > 0.25 print("真实因果矩阵(行为原因, 列为结果):") print(np.round(W_true, 2)) print("GOLEM学到的因果矩阵(|W|>0.25保留):") print(np.round(np.where(mask, W_est, 0.0), 2)) print("无环度 h(W):", round(np.trace(expm(W_est * W_est)) - 4, 6)) if __name__ == "__main__": main()
X[:, col] = X @ B[:, col] + Z[:, col]严格按拓扑序生成数据,保证真实因果图天然无环,作为评估的“标准答案”。E = expm(W * W)计算矩阵指数,这是软无环惩罚项 $h(\mathbf{W}) = \mathrm{tr}(e^{\mathbf{W}\circ\mathbf{W}}) - d$ 的核心计算。loss = 0.5 * d * np.log(norm2 / n)数据似然得分:残差平方和越小,似然越高,损失越低。grad = -d * X.T @ R / norm2似然项对 $\mathbf{W}$ 的梯度,指引系数向“更拟合数据”的方向更新。grad += lam2 * 2.0 * W * E软无环惩罚的梯度:$\nabla h = 2\mathbf{W} \circ e^{\mathbf{W}\circ\mathbf{W}}$,有环就推一把。np.fill_diagonal(W, 0)每轮迭代后抹掉对角线,杜绝“变量自己导致自己”的自环。
常见误区
误区文章里说GOLEM用软惩罚替代了硬约束,那它到底还要求无环吗?感觉学出来的图可能会带着环吧。
正解GOLEM并没有放弃无环要求,只是换了一种实现方式。$h(\mathbf{W})$ 仍然在目标函数里,且只有当 $\mathbf{W}$ 对应DAG时才等于0。当 $\lambda_2$ 取到足够大时,最优解依然是无环图。“软”改变的是优化过程——不再用等式约束卡死每一步,而是通过惩罚信号引导迭代走向无环点。最终收敛的解,本质上仍满足无环性质。
为何常见:人们常把“软”理解为“不要求”,忽略了 $h(\mathbf{W})=0 \iff \text{DAG}$ 这个严格等价的数学事实。
误区GOLEM的似然项里写的是 $\sum \| \mathbf{x}_j - \mathbf{W}^{\top}\mathbf{x}_j \|^2$,这不就是最小二乘吗?换了个名字而已吧。
正解形式相近,语义完全不同。最小二乘假设所有变量噪声方差相同,直接把残差平方和当作损失;而GOLEM把残差平方和放进对数里,得到的是高斯噪声假设下的似然。当噪声方差不齐时,最小二乘会把“噪声大的变量”误判为因果效应量,导致方向判断错误,而似然函数能对各变量的噪声方差做自适应调整,给出正确的因果方向。
为何常见:因为在线性高斯模型里,似然和最小二乘确实“长得像”,初学者容易被表面公式迷惑,忽略了参数空间的语义差异。
误区既然λ2控制无环力度,那我把它设成1000,保证万无一失地无环!
正解λ2过高会压制似然项。为了把 $h(\mathbf{W})$ 压到0,优化器可能选择删掉所有边——空图天然无环,却完全丢失了因果信息。这正是多目标优化的权衡:λ2要大到足以阻止“带环的图拿到高分”,又不能大到让算法“躺平为空图”。实际使用中通常用交叉验证来选定λ1、λ2。
为何常见:直觉上“约束越强效果越好”,但忽略了不同目标项之间的相互牵制,把单目标思维误用到多目标优化上。
误区深度因果发现听着很强大,那非线性关系、隐藏的共同原因,GOLEM应该都能搞定吧?
正解基础版GOLEM明确假设线性SEM,且没有系统处理隐变量。它的“深度”更多体现在“依托深度学习工具做梯度优化”,而不是模型天然具备非线性表达能力。要处理非线性因果,需要等后续扩展方法(如非线性变体或结合核技巧的版本);要处理隐变量,则要考虑额外的方法论假设。
为何常见:“深度”一词在公众语境里几乎等于“强大的通用能力”,但在这里它指的是优化技术路线,不是模型容量。
面试题
Q1. GOLEM中用软惩罚替代的硬约束是什么?
- A.稀疏性约束 ||W||₁ = 0
- B.无环约束 h(W) = 0← 正确答案
- C.施加正态分布的噪声约束
- D.保证矩阵可逆性来约束
答案:B。GOLEM的核心创新之一是把NOTEARS中的硬性无环约束 $h(\mathbf{W})=0$ 改造为软惩罚项 $\lambda_2 h(\mathbf{W})$ 放进目标函数。A选项的L1稀疏约束在两种方法里都是软的正则项;C是模型假设而非约束;D与因果发现无关。
Q2. 公式 $h(\mathbf{W})=\mathrm{tr}(e^{\mathbf{W}\circ\mathbf{W}})-d$ 在 $\mathbf{W}$ 对应有向无环图时的取值是?
- A.常数 0← 正确答案
- B.常数 1
- C.变量 d
- D.正无穷大
答案:A。$h(\mathbf{W})$ 被设计为“环探测器”:当权重矩阵 $\mathbf{W}$ 对应的因果图无环时,它精确等于0;一旦出现环就大于0。这个性质是“软无环惩罚”能够引导优化器走向DAG的数学基础。
Q3. GOLEM使用似然得分替代最小二乘损失的主要收益是什么?
- A.计算速度大幅提升
- B.噪声方差不等时能正确识别因果方向← 正确答案
- C.无需任何梯度优化器
- D.可处理任意非线性关系
答案:B。GOLEM论文的关键贡献之一:最小二乘假设等方差噪声,在噪声方差不齐时会把“噪声大”误判为“因果影响大”,导致方向错误;而似然函数能适应各变量的不同噪声强度,保持正确的因果定向能力。A不是主要动因;C错误,GOLEM依赖梯度优化;D超出基础GOLEM的线性SEM假设。
Q4. 在GOLEM目标函数中,$\lambda_1 \|\mathbf{W}\|_1$ 的作用是?
- A.强制图无环
- B.加速收敛
- C.促使解变得稀疏← 正确答案
- D.最大化数据似然
答案:C。L1范数惩罚把 $\mathbf{W}$ 中的小系数逐渐压缩到0,从而移除不重要的边,得到稀疏的因果图,防止过拟合。无环由 $\lambda_2 h(\mathbf{W})$ 负责,收敛速度由学习率和优化器负责,似然由第一项负责——三者各司其职。
Q5. golem_fit 代码中 np.fill_diagonal(W, 0) 的目的是什么?
- A.防止梯度爆炸
- B.禁止变量成为自己的因(自环)← 正确答案
- C.让 $\mathbf{W}$ 变为对称矩阵
- D.加速 expm 计算
答案:B。因果图中不允许自环,即变量不能直接导致自身。每次梯度更新后,$W_{ii}$ 可能变成非零值,因此要强行把对角线清零,确保对角线恒为0。这与正则化或计算加速无关。
Q6. GOLEM目标函数由哪些部分构成?
- A.数据似然得分项← 正确答案
- B.L1稀疏正则项← 正确答案
- C.软无环惩罚项← 正确答案
- D.拉格朗日乘子项
答案:ABC。GOLEM目标 = 似然 + $\lambda_1\|\mathbf{W}\|_1$ + $\lambda_2 h(\mathbf{W})$,三项构成“拟合+简洁+无环”的完整评分表。D是硬约束方法(如增广拉格朗日)才需要的工具,GOLEM是无约束优化,不需要拉格朗日乘子。
Q7. 相比硬约束无环优化,GOLEM的软惩罚设计有哪些优势?
- A.梯度更平滑,避免接近无环边界时的病态← 正确答案
- B.在大规模图上优化更稳定← 正确答案
- C.可以完全避免陷入局部最优
- D.每一步迭代都能保证当前解无环
答案:AB。软惩罚把“必须精确落在线上的约束”变成“偏离就扣分的惩罚”,梯度处处可微,不再在无环边界附近出现病态,因此大规模图上更稳定。C过于绝对,任何非凸优化都可能陷入局部最优;D不对,中间迭代的 $\mathbf{W}$ 可能带环,最终收敛点才趋向无环。
Q8. 因果发现中的“DAG无环”要求,用房间整理比喻最恰当的是?
- A.每个房间都要放床
- B.物品之间不能形成循环依赖(A需要B、B又需要A)← 正确答案
- C.所有物品必须有固定位置
- D.物品越少房间越整洁
答案:B。无环的日常含义就是“没有首尾相接的循环”。A是无关的房间配置;C对应完备性要求;D对应稀疏性偏好,它们都不是无环。只有B准确描述了“台灯依赖插座、插座反向依赖台灯”这种不可能存在的循环。
Q9. 关于GOLEM的评估,下列说法正确的是?
- A.在合成数据上用SHD比较学到的图与真实图← 正确答案
- B.噪声方差相等时GOLEM依然可以正常工作← 正确答案
- C.GOLEM在几百节点的图上优化稳定性较差
- D.基础版GOLEM假设线性结构方程模型← 正确答案
答案:ABD。A对,SHD是最常用的图差异指标。B对,等方差只是简化情况,GOLEM在等方差下与NOTEARS性能同级。C错,GOLEM的卖点正是大规模图上的稳定优化。D对,基础GOLEM明确假设线性SEM,非线性需要扩展版本。
Q10. 关于 $h(\mathbf{W})=\mathrm{tr}(e^{\mathbf{W}\circ\mathbf{W}})-d$ 的梯度,正确的表达式是?
- A.梯度恒为零向量
- B.$\nabla h = 2\mathbf{W} \circ e^{\mathbf{W}\circ\mathbf{W}}$← 正确答案
- C.$\nabla h = e^{\mathbf{W}\circ\mathbf{W}}$
- D.该函数不可导,无法计算梯度
答案:B。利用 $\mathrm{tr}(e^{S}dS)$ 的微分性质,并注意到 $S=\mathbf{W}\circ\mathbf{W}$ 对 $\mathbf{W}$ 的逐元素导数是 $2\mathbf{W}$,可得 $\nabla h = 2\mathbf{W}\circ e^{\mathbf{W}\circ\mathbf{W}}$。这正是代码中 grad += lam2 * 2.0 * W * E 一行的由来。A、C、D均与矩阵微积分结论不符。