本周对causal bootstrapping这篇论文再次梳理。客观的说,在此之前我对本文涉及到的知识点并不了解,有点类似于大家接触到新课题的状态。我能确定的是,这可能是一种新的知识发现或推理方法。
为此,我做了如下准备:
第一,复习bootstrapping.
虽然bootstrapping这个东西在以前看过,知道他是random forest的基础,而且其中融合了蒙特卡洛采样这样的思想,但没有深入思考过。这次,通过资料仔细思考了为什么bootstrapping会有用。
从本质上考虑,bootstrapping不就是缩小世界的模型吗?在原始抽样中,我们是从现实世界抽样得到数据样本,然后用数据样本去做训练,对不对?但原始世界到底是什么样?没人知道。抽样的结果是否满足采样定理?有些领域是知道的,但大多数领域还不知道。这也是为什么现在的机器学习总喜欢用大样本的原因。因为大样本意味着尽可能多的在原始世界中进行采样,这样有可能增大采集样本对原始世界的描述能力。但同时,有人对big data这个词给出了这样一个解释:在大量样本中抽取极少的信息。换句话说,big data意味着信息含量低。这说明什么?说明我们都到的样本很多都是重复的和没有用的。但究竟该怎么抽?目前还不知道。
不去考虑真实世界的问题,回到已经有的数据集上吧。假设这个就是一个完整的真实世界。如何去模拟这样一个认为的世界呢?还是抽样。在交叉验证中,我们是随机抽去了世界的80%(5倍交叉)、90%(10倍交叉)等等,形成模型,然后去测试。但bootstrapping认为,这么抽取是有问题的。万一你采样的样本都特别典型或不典型呢?当然,在交叉验证中可以用方差描述,但方差是评估的,不是避免的。bootstrapping实际上是给出了一种避免偏差的方法。
想想我们曾经在组会上讨论过的用蒙特卡洛方法计算一张A4纸上任意图形面积的方法就能明白bootstrapping的本质了。往纸上撒大米然后看看落到图形中的大米比例,从而推断图形面积大小,对不对?但问题是,万一你这次没撒均匀怎么办(前提是你也不知道自己是否撒均匀了,因为在数据模型中你不知道这个纸的分布和图形分布的关系)?那就多撒几次求平均呗。没错,这个就是bootstrapping的想法。在样本集中多采样几次(撒大米),然后用每次采样的结果都进行计算(看落入图形的比例),最后把每次的结果汇总起来分析(求平均)。当然,在bootstrapping中,最后一步不一定是求平均这种等权重处理,也可能是用不同的权重来操作。那么权重怎么来?这篇论文就是用causal方法来的。也是这篇论文的思想。
第二,学习因果推理
因果推理我们曾经做过一点,但那次实质是充要条件分析,还构不成因果。沿着这篇论文的思路,找到了图灵奖得主Pearl的一系列研究成果,其主要是基于贝叶斯网络的因果图推理。有幸,在放假前曹玉阳同学还找到了《the book of why》这本书的电子版,配合网上的一些资料,构成了我对因果推理的一点了解。
我是先粗读了一遍causal bootstrapping这篇论文之后才开始学习因果的,目的是找出我需要再因果推理中学习什么。经过分析,我发现do算子、混杂(confound)、介入(intervention)、前门准则、后门准则是这篇论文的高频词,和因果有关,同时我不懂。所以这些是我需要学习的。看看,我先对论文做了一次采样,然后需要的是根据这个采样去学习了。
好在大多数材料是英文的,这样在专业词汇上就做到了统一。而且能通过构词法去理解作者用这个词来定义这件事的原因,这就比读中文文章能够更为直接的和作者沟通。同时,也锻炼了自己的英文阅读。从一开始的每天3个小时读5页左右,到现在半个小时5-8页,进步的速度我还是满意的。而且随着词汇的熟悉,我查字典的次数越来越少了。
the book of why这本书的好处最大的好处是科普读物,对于任何一个问题作者会反复的举例子让你明白其到底是怎么回事,而且会从历史上讲这件事的来龙去脉。读了这样的书,对问题的理解要比读论文深刻多了,毕竟他比较生动。但同时,其知识含量有点低,当做课外书来读可能更合适。所以,我配合了一些网络教程来学习。包括20分钟左右将贝叶斯网络的(快速了解其原理)、分为14讲讲概率图模型的(了解推理的细节)、知乎或csdn上的文字介绍(梳理总结)。学习完了这些之后,我对因果推理有了大体的了解(通过各种绪论、引言),对我需要的具体内容有了细致了解(通过推导),我觉得我可以再看这篇论文了。
以上就是我为读这篇论文做的准备。其实并不难,就是看看自己现有的知识体系和论文的体系间交集是什么,差集是什么。然后去填补差集,争取做到交集最大且差集最小。形成这样的目标函数之后就去学习,当迭代几次之后觉得已经收敛(不一定到达全局最优),就可以开始再去论文了。
这一次是细读,大约用了三天时间。读的时候关注了以下几点:
第一,作者的写作方法。客观的讲,我觉这篇写作挺怪的,可能由于这不是一篇正式发表的论文的原因吧。但前面的引言和后面的相关方法上还是给了很多启示。同时,作者对其涉及到的公式要么给出了出处,要么在文中或附录给出了证明过程。这一点非常值得我们学习。也是我经常强调的:不要去说没有论据的论点。
第二,作者的主题思想,到底怎么理解作者所谓的因果。其实,我觉得作者只是deconfound,而不是真正的因果。比如,他的实验是这么做的,以文中的帕金森实验为例吧,这个是我和曹玉阳在讨论deconfound与non confound的一段批注:
“
首先,找了三个数据集。这三个数据集是不同人采集的。采集条件不同,会造成对于同样一个特征,其计算结果会有偏差(比如采集时对噪声的控制,如果噪声大的话其信噪比就会低,那么和噪声相关的特征比如HNR等就会不同)。作者是把这种偏差作为了confound来使用的。
第二步,deconfound。目的就是排除由于采集不同带来的偏差。这个用字符识别的例子比较好。在字符识别中,如果给不同的字符不同的亮度,用这个网络训练出来的结果是不可信的。因为网络可能把亮度当做了特征,这样就造成了high risk.
第三,关于non-confound,我觉得相当于ground truth. 第一个实验中就是没有加入噪声的原始模型,第二是可以是没有亮度干扰(或随机亮度干扰)的图片,第三个则是对特定数据集而非混合数据集。
所以,deconfound是在confound基础上做去除的结果,而non是根本就没有。相当于去噪声信号和理想信号的差别。
为什么要deconfound? 就是为了消除关联关系对结果的影响。比如实验中的亮度与数字,书中提到的溺水人数与冰激凌销量,这些都是关联,而不是因果。采用关联分析在所有条件都不变的时候分类性能是好的。原因在于经典机器学习认为数据是独立同分布的,所以训练集和测试集分布一样。但真实情况下这种关系并不稳定。比如,把在秦皇岛统计的溺水人数与冰激凌销量放到新疆就会失效。原因就在于分布发生了变化。
而对于因果分析来说,理论上他会从“游泳方便程度->溺水人数->气温->冰激凌销量”这样的关系中得出冰淇淋销量与溺水人数不相关。至于和谁相关,就是前门法则、后门法则等讨论的内容了。
“
同时,曹玉阳问到了和batch norm的区别,我的答复:
“
二者的目的都是为了更稳定,但出发点是不一样的,所以本质不同。
你的这个例子其实和文章中数字与亮度的问题是一样的。如果所有对猫的训练都是用黑猫,他可能识别一只彩色的猫吗?可能。但如果你的训练样本中是黑猫、黑狗和黄狗,这时你给它一只黄猫的图片,神经网络的内心是崩溃的。因为它会发现两个类都有可能,最终的输出就不一定是什么了。(此段为我自己理解,可能有误)
”
但对于deconfound来说,他会发现你现在要识别的是猫和狗,这个和颜色无关,所以会把颜色这个特征先deconfound掉,然后再送给分类器去学习。那么此时分类器学到的结果就更可靠了。
所以,BN并没有达到因果的目的。
但这里要说明,从我读到的资料看deconfound要依赖casual diagram,而这个diagram往往是专家人工指定的。如何自动生成是个diagram?我还没看到。这也是我对这篇论文感兴趣的原因。
其实,对于稳定性我们也在做另一套思路,就是属性拓扑。
属性拓扑目前我们在用概念树来表示,概念树中的概念就会随着数据的变化而发生变化,从而趋近更为稳定的结构。这就是目前荣美和浩然在做的东西。概念虽然也是从相关性中提取,但其可能发现更为本质的东西。比如黑猫、黑狗和黄狗的例子,当它打算把黑色作为猫的特征时,会反思训练集中还有谁是黑色的。此时它发现还有黑狗,于是概念结构中会把黑色排除出猫的概念。
但概念结构的问题也很明显。还是上面这个例子,它会发现所有的黄颜色对象都是狗,且狗都是黄颜色。那么当来了一个黄猫时,它可能会误判为狗。此时它和神经网络的错误是一样的。
我在考虑,casual diagram和属性拓扑都是图结构,现在属性拓扑可以算概念,那么能不能把casual diagram的deconfound方法借鉴到属性拓扑,从而使得其获得因果概念结构呢?
我在读论文的过程中写了很多批注,这个批注版我会发到群共享中。总结起来,这个论文的收获:通过设计deconfounded方法改变数据分布,获得更为本质的数据相关性。但其问题在于对confounder的设定要满足提前已知的要求,所以其今后的可扩展性还有待分析。
[…] 如何读一篇论文 […]