qinrui 2018-05-30
受到 Judea Pearl 近期采访的启发,Ferenc Huszár 发表博客,从观察和干预数据分布(对应监督学习和因果推理)的区别和联系出发,阐述了他对因果推理在机器学习中的意义的看法。他指出因果推理是深度学习的必要补充,而不是作为其对立面,必须在两者中取其一舍其一。
你可能已经看到了 Judea Pearl 的新书,以及在我的社交圈中广为流传的相关采访。在采访中,Pearl 将我们在机器学习中所做的大部分工作视为曲线拟合。虽然我认为这是夸大其词,但这提醒我们,大多数富有成效的辩论往往是由有争议的或非常傲慢的言论引发的。将机器学习称为炼金术就是很好的一例。读完这篇文章后,我决定再研究一下他著名的 do-calculus 和因果推理。
这种反复时常在我身上发生。我第一次学微积分是在一门(非常不受欢迎但很高等的)贝叶斯网络本科课程中。从那以后,每隔两三年我就会在不同的情境下再次遇到它,但不知怎的,我从未被其触动过。我一直认为「这东西很难并且/或者不切实际」。最终,我将其抛之脑后。直到现在,我才意识到这些东西的重要性。
这一次,我想我完全领会了因果推理的意义,而且变成了一个十足的信徒。我知道我的觉悟已经迟了,但我认为致力于数据和条件概率研究的人了解这个工具集的基础知识是基本的补充,在我的整个职业生涯中完全忽视这一点让我感到尴尬。
在这篇文章中,我将尝试阐释基础知识,告诉你为什么也要考虑这个问题。如果你致力于深度学习,那你就有了更好的理由来理解这一点。如果把 Pearl 的评论解释为将因果推理与深度学习相对立,那他的观点可能没有帮助。相反,你应该理解为,Pearl 强调的是因果推理在深度学习中有着很大的潜在应用价值。不要因为因果图看起来很像贝叶斯网络而气馁(这不是巧合,因为它们都是由 Pearl 开创的),它们与深度学习并非竞争关系,而是对深度学习的补充。
基础知识
首先,因果推理区分两种可能要估计的条件分布类型。tldr:在 ML 中,我们通常只估计其中一种,但在某些应用中,我们其实应该尝试或必须估计另一个。
为了设置,假设我们从一些联合分布 p(x,y,z,…) 中采集了独立同分布数据样本。假设我们有大量数据和最佳工具(如深度网络)来完整估计这种联合分布或其任何属性,以及条件分布或边际分布。换句话说,我们假设 p 是已知的和易处理的。假设我们最终对变量 y 在给定 x 情况下的结果感兴趣。在高级别上,可以用两种方式提出这个问题:
二者不是一回事吗?
不,p(y|do(x)) 和 p(y|x) 通常不是一回事,可以用几个简单的思维实验来验证这一点。比如,Y 是咖啡机炉中的压强,取值大约在 0 到 1.1 巴之间,这取决于咖啡机开了多久。设 X 为内置气压计的读数。假设我们在任意时间一起观察 X 和 Y。假设气压计功能正常,p(y|x) 应为以 x 为中心的单峰分布,这是由于测量噪声而具有随机性。然而,p(y|do(x)) 实际上不依赖于 x 的值,并且通常与 p(y) 相同,即炉内压力的边际分布。这是因为人工设定气压计的值(例如,通过移动指针)实际上不会导致容器内的压力上升或下降。
综上所述,y 和 x 是相关的或统计相关的,因此看到 x 可以预测 y 的值,但是 y 不是由 x 导致的,所以设置 x 的值不会影响 y 的分布。因此,p(y|x) 和 p(y|do(x)) 的表现差别很大。这个简单的例子只是冰山一角。当存在大量具有复杂交互作用的变量时,干预条件和观察条件之间的差异可能更加细微且难以表征。
我想要哪一个?
根据要解决的应用,你应该尝试估计以下条件之一。如果最终目标是诊断或预测(即观察自然发生的 x 并推断 y 的可能值),则需要观察条件 p(y|x)。这就是我们在监督学习中已经做的,也是 Judea Pearl 所说的曲线拟合。这对于分类、图像分割、超分辨率、语音转录、机器翻译等一系列重要应用都有好处。
在你最终希望根据估计的条件控制或选择 x 的应用中,你应该尝试估计 p(y|do(x))。例如,如果 x 是一种医学疗法,而 y 是结果,你不仅对观察自然进行的疗法 x 和预测结果感兴趣,还希望在了解疗法 x 如何影响结果 y 的情况下主动选择疗法 x。类似的情况发生在系统识别、控制和在线推荐系统中。
p(y|do(x)) 到底是什么?
这也许是我以前没有掌握的主要概念。p(y|do(x)) 实际上是一个普通的条件分布,但它不是基于 p(x,z,y,…) 而是基于一个不同的联合 pdo(X=x)(x,z,y,…) 计算的。如果我们实际进行了有关干预,这个 pdo(X=x) 就是我们观察到的数据的联合分布。p(y|do(x)) 是我们将从随机对照试验或 A/B 试验中收集的数据中学习到的条件分布,其中试验者控制了 x。请注意,在许多情况下,实际执行干预或随机试验可能无法实现,或者至少是不切实际或不道德的。你不能做 A / B 测试,强迫你的一半受试者吸食大麻,另一半则吸食安慰剂来了解大麻对他们健康的影响。即使不能从随机实验直接估计 p(y|do(x)),对象仍然存在。因果推理和 do-calculus 的要点是:
如果我不能在随机对照试验中直接测量 p(y|do(x)),我能否根据在对照试验之外观察到的数据进行估计?
这些都是怎么联系起来的?
让我们从一个图表开始,该图表显示了如果我们只关心 p(y|x)(即简单的监督学习案例)会发生什么情况:
假设我们依次观察三个变量:x、z、y。数据是从 3 个变量上的一些可观察联合分布中采集的独立同分布,由标记为「observable joint」的蓝色因子图表示。是否了解什么是因子图并不重要,圆圈代表随机变量,小正方形代表变量的联合分布。我们倾向于从 x 预测 y,并假设 z 是第三个变量,我们不想推断,但我们也可以衡量(把这一点包括在内是为了完整性起见)。观察条件分布 p(y|x) 是由这个联合分布通过简单的条件计算得到的。从训练数据中我们可以建立一个模型 q(y|x;θ) 来接近该条件分布,例如使用深度网络最小化交叉熵或其它。
现在,如果我们真正感兴趣的是 p(y|do(x)) 而不是 p(y|x)?这就是它的样子:
所以,我们仍然有蓝色的观察联合分布,数据仍然从这个联合分布采样。但是,我们要估计的对象位于右下方,即红色干预条件分布 p(y|do(x))。这与干预联合分布有关,干预联合分布上方标有红色因子图。这是一个相同领域的联合分布 p,但它是一个不同的分布。如果我们可以从这个红色分布中取样(例如,实际进行一个随机对照试验,从中选择 x),这个问题将通过简单的监督学习来解决。我们可以从红色联合分布生成数据,并直接从那里估计模型。然而,我们假设这是不可能的,我们所拥有的只是从蓝色联合分布采样的数据。我们必须看看是否可以从蓝色联合分布中估计红色条件分布 p(y|do(x))。
因果模型
如果想在蓝色和红色联合分布之间建立连接,我们必须引入关于数据生成机制因果结构的附加假设。预测我们的分布如何因交互作用而改变的唯一方法是设法知道变量是如何因果相关的。这种关于因果关系的信息不能仅靠联合分布中获得。我们必须介绍比这更有表达性的东西,如下所示:
除了可观察的联合分布外,我们现在还有一个世界因果模型(左上)。这个因果模型比联合分布包含更多的细节:它不仅知道压力和气压计读数是相关的,而且知道压力导致气压计上升,而不是反过来。该模型中的箭头对应于假设的因果关系方向,没有箭头表示变量之间没有直接的因果关系影响。因果图到联合分布的映射是多对一的:几个因果图与同一个联合分布对应。因此,通常不可能仅通过观察数据在不同的因果解释之间作出结论性选择。
提出因果模型是一个建模步骤,在这个步骤中,我们必须考虑关于世界因果规律的假设,即什么导致什么。一旦有了因果图,我们就可以通过破坏因果网络来模拟干预的效果:删除通往 do 运算符中节点的所有边。这些显示在上图的中顶部。然后,分解的因果模型产生由绿色因子图表示的联合分布。这个联合有一个相应的条件分布 p~(y|do(x)),我们可以用它作为我们对 p(y|do(x)) 的近似。如果我们定性地得到了正确的因果结构(即没有缺失的节点,并且箭头的方向都正确),这个近似是精确的,p~(y|do(x))=p(y|do(x))。如果我们的因果假设是错误的,这个近似可能是假的。
关键的是,为了得到这个绿色的因子图,从而在观测数据和干预性分布之间建立桥梁,我们必须将数据与附加的假设结合起来,还需要先验知识,如果可以的话。光靠数据是无法做到这一点的。
Do-calculus
现在的问题是,当我们只有蓝色分布的数据时,能得到绿色条件分布的多少信息呢?我们现在的处境比以前好,因为有了把两者联系起来的因果模型。长话短说,这就是所谓的 do-calculus 要做的事。do-calculus 允许我们修改绿色条件分布,直到我们可以用蓝色分布下的各种边缘、条件和期望分布来表达它。do-calculus 扩展了我们处理条件概率分布的工具包,增加了四个规则,我们可以应用于包含 do 运算符的条件分布。这些规则考虑了因果图的属性。这些细节没法在单个博文中展开,但这里有一篇导论性的论文:https://arxiv.org/abs/1305.5506。
理想情况下,作为 do-calculus 推导的结果,你最终可以得到 p~(y|do(x)) 的等价公式,其中不再包含任何 do 运算符,因此你可以仅根据观测数据来估计它。如果是这种情况,我们会称因果查询 p~(y|do(x)) 是可识别的。相反,如果无论我们如何努力应用 do-calculus 都不能实现这种情况,我们都称因果查询为不可识别的,这意味着我们将无法根据已有数据来估计它。下图概括了这种因果推理机制的非凡之处。
作为包括几个 do-calculus 规则的推导结果, 这种新的「可估公式」给出了 p~(y|do(x)) 的等价表达式。如果你只关心 p(y|x),那么请注意原本完全无关的变量 z 现在是如何必要地用于执行因果推理的。如果不能观察 z,我们仍然可以进行监督学习,但是我们将无法回答因果推理查询 p(y|do(x))。
怎么判断因果模型是否正确?
仅靠观察数据,你永远也没法充分验证因果图的有效性和完整性。然而,因果模型的某些方面还是可以通过经验来验证的。尤其是,因果图暗示了变量集合之间的某些条件独立或依赖关系。这些相关性或独立性可以通过经验来测试,如果数据中没有这些相关性或独立性,则表明因果模型是错误的。将这一观点向前推进,你可以尝试执行完整的因果发现:尝试从经验数据中推断出因果模型或其至少某些方面。
但底线是:一个完整的因果模型是一种先验知识,你必须将其添加到你的分析中,以获得因果问题的答案,而不是进行实际干预。光凭数据推理是不能给你这个答案的。与贝叶斯分析中的先验不同(可以提高数据效率但并非不可或缺),因果推理中的因果图是必不可少的。除了少数例外情况,没有它们你所能做的就是进行随机对照实验。
总结
因果推理确实是一个基本的东西。它让我们可以回答「如果我们做了 x 会发生什么」这类的问题,这些问题通常需要受控实验和明确的干预来回答。我甚至没有提到更有力的反事实推理。
在某些情况下,你可以不需要因果推理。通常,你真的只是想做正常的推理。在其他诸如无模型 RL 的应用中,显式控制某些变量的能力可以让你避免明确地回答因果问题。但是在几种非常重要的应用情况中,因果推理提供了以原则性方式解决问题的唯一方法。
我想再次强调,这不是一个讨论用深度学习还是因果推理的问题。在很多情况下,你可以同时用到这两个。因果推理和 do-calculus 让你能够理解一个问题,并根据在因果图中捕获的假设从数据中确定需要估计的内容。但是,一旦完成了这一工作,你仍然需要强大的工具来根据数据实际评估这一点。此时,你仍然可以使用深度学习、SGD、变分边界等。最近的文章以及 Pearl 声称没有得到充分探索的,正是将深度学习的剖面结构应用于因果推理。