记我的第一篇顶会论文

第一篇论文的 idea 从 2023 年 8 月开始,直到 2024 年 4 月才暂告一段落。虽然老师决定投 ACM 的 SIGMOD 会议,但我觉得能中的概率微乎其微。还好,也能够看一下顶会审稿人的审稿意见。电脑也在今天搬过来工位了,想着既然论文快投出去了,不如趁现在记录一下这篇论文的大体内容,以及自己在这个过程中的思考,心态的变化,以及对最终结果的期望吧。

image-20240320145055092

🌀 idea 的演化

最初的 idea 源于 2019 年发表在 IJCAI 上的 CFGAN,它首次使用了 CausalGAN 来解决因果公平性的问题。在实现时,它采用干预 + 双 GAN 的方法,就是采用一对传统的 GAN 结构,和一对干预的 GAN 结构。后者由一个 共享普通的生成器的参数但在生成数据时执行干预 和 辨别数据是由哪种干预生成的辨别器组成。缺点很明显,就是架构相对复杂。且原作者没给代码,这直接导致了复现非常困难,在尝试复现也能发现出现模式坍塌等问题。

🙃 idea 1

使用 Causal-TGAN 来替换 CausalGAN 看看能不能取得更好的结果。在复现过程中发现如果把性别(Adult 数据集)一起输入辨别器 2 中,辨别器很可能会通过性别来判断是否来自于干预的数据(因为干预会把性别全部干预成 0 或 1)初步实验效果很好,但又很快发现是代码的问题(具体什么问题忘记了),调整后又出现报错等问题,便暂时搁置了。

在这过程中,学会了使用 Causal-TGAN 的代码,并初步形成了一套 训练模型、数据采样、数据评估 的代码流程。

🙃 idea 2

源自于 DECAF 。DECAF 也采用了 CausalGAN,但其并不把公平性掺杂进 CausalGAN 的训练过程中,而是选择在 Inference 阶段生成公平数据。具体来说,就是在生成数据的时候,根据各种公平性指标来去除因果图中的边(具体实现就是如果要去除 A\rarrB,那就把一个 batch 中的 A 打乱再输入 B 的生成器),以此生成公平的数据。缺点是如果要满足一些比较严格的公平性指标,比如 Demographic Fairness 或 Counterfactual Fairness,就得去除很多输入 Y 的边,导致 Y​​​ 与前面的信息脱节,进而使得下游分类器的性能下滑严重。

idea 2 仍然是使用 Causal-TGAN 来代替 CausalGAN。但是,我们发现 Causal-TGAN 并不能解决 DECAF 的问题。

在这个过程中解决的一个非常困扰的问题,就是 Precision Recall 等指标可能陷入 0 的问题。这其实就是因为数据质量非常弱,再加上数据集的标签不平衡问题,导致分类器只能全部判断为 1 或 0,继而出现了这个现象。这是 DECAF 的问题的具体表现。

🙃 idea 3

既然直接去除输入 Y 信息,会导致各种各样的问题,那如果我们将其加入训练的过程中呢?在每个 batch 中计算去除前后生成的数据的差异(欧氏距离),将其加入生成器的损失函数中,再加上一个 λ​ 作为 trade-off 的超参数。

但 idea 3 的实验结果很不理想,这其中也有各种各样的代码问题,实验结果总是波动明显,心情也随之起起落落。在解决所有问题后,我们发现结果并不比 DECAF 好多少,甚至后面发现是因为代码有问题,把 DECAF 的指标拉低了。

但在 idea 3 的尝试中,我终于修复了代码中的大部分问题。

🙃 idea 4~n

在 idea3 反复纠结一两个月后(也包括中间躺了一段时间),反复修复代码的问题后,我终于决定放弃这个想法,进入寒假,提出各种新的 idea

  • idea 4: 只比较 label 的差异
  • idea 5: 不同的因果图干预方案,去除从敏感属性出发的边而不是到达 label 的边,再与之前的方案组合
  • idea 6: 两阶段的训练,先 full train,再加上公平约束
  • idea 7: idea 6 与之前所有 idea 的结合
  • idea 8-n: …

结果都大差不差。

有一朵乌云始终笼罩在我的头顶:为什么有的时候数据非常公平,但训练的下游模型却可能非常的不公平?一开始,我选择忽略这个问题,单纯把它归咎于分类器没学好。

😀idea n+1

上文说到,有一朵乌云始终笼罩在我的头顶:为什么有的时候数据非常公平,但训练的下游模型却可能非常的不公平?这个问题最终解决,因为当我尝试去除从敏感属性出发的边后,生成的训练数据确实变得非常的公平。但是,训练数据的公平性并不一定能在下游模型中保留,这是因为下游模型是在真实的数据上预测的。这意味着,即便我们在训练数据中创造了一个理想的乌托邦,人人在其中平等的生活,在平等的环境中获得了属于他们自己的能力,进而得到他们的结果,但这并不能影响现实世界。

在乌托邦里,我能够消除教育对女性的歧视,使得所有女性都可以获得属于他们的高学历,进而使系统得出一个属于她们的收入预估。但是现实世界中,女性的学历仍然因为受到歧视而降低,预测器却仍然会因为活在乌托邦里而大公无私地给低学历的女性个体打上否定的标签。

至此,便解决了我头上的乌云。

问题找到了,我的解决思路就是提出两种的去边方案。一种去除输入标签的边,大有宁误杀一千,不可错过一个的思想,生成了比 DECAF 略好的数据。另一种则是去除敏感属性出发的边,即相信世界会变好,等到那个时候,我们的数据就可以发挥用处,分类器在美好的真实世界中仍然保持公平性和准确率。并采用二阶段训练模式,在第二阶段比较全部属性的差异的方式。

至此,我也写出了我的论文初稿,并发给老师。

老师提出的第一个问题便是:对比的论文少了。

💡idea n+2

虽然老师这么说,但是 22 年以来公平数据生成的 A 类文章少之又少,最终没有办法,只能对比两篇 B 类的文章。但这其中, Distance Correlation GAN 却给了我灵感。

一直以来,我的方法中都存在一个问题,就是神经网络训练过程中的不确定性。也就是对于同样的输入,可能会由于随机的 Dropout、BachNormalize 等产生不同的结果。在此之前,我解决这个问题的方法是去除这些随机的因素。但是,这些技术往往能够给神经网络带来很大的增益。

Distance Correlation GAN 使用了“关联”来衡量敏感属性和标签之间的联系,并将其加入损失函数中。“关联”这种熟悉又陌生的统计概念,第一次在深度学习中摆在了我的面前。如果我们不用"干预前后生成的数据之间的差异"、而使用"干预与数据差异之间的关联"来描述公平性,是不是就能够保留那些神经网络中的随机因素。因为随机因素并不影响关联,随机分布独立于所有分布。

于是,就提出了 IDC,并引入了在第二阶段只更新 GY 的方式来避免出现前文所及的乌托邦问题,让预测器改变,而不是个体改变。最终,形成了最终的 idea。

❔以后要注意的问题

  • 📚 代码版本控制问题。很多时候容易忘记自己代码写到了哪里,代码中存在着什么问题,偶尔想回到某个 idea 的代码,也很难回到。其实可以使用 git 解决这个问题;

  • 📑 论文问题:

    • 输入公式不要用 $$ 而要用 \begin{equation},这样才会有标号;
    • 引用参考文献要引用最新的,要避免使用 Arxiv 上的引用;
    • 写作时要突出创新点,把创新点放在突出的位置。要先想好,自己的创新点是什么,应该如何写出这个创新点,而不只是讲清楚自己的方法。
  • 🆚 代码 bug 问题。代码编写不够细心,总是出现低级的错误。

    • 在一个函数内对实参进行了意料之外的修改,影响了其它的计算;
    • 把全部数据都丢进了预测器,而不是训练数据;
    • 代码结构冗杂,总是急于出现结果,而忽略了代码的架构。
    • Dataframe输入sklearn时,列的顺序也很重要,如果训练数据和测试数据的列的顺序不同的话会造成错误结果。pd不会自动处理这个问题。

😄 心得

e625f4854686ec3c261711cda5087ae

以下内容写于 ICDE 接收论文后。

SIGMOD 拒稿

SIGMOD 毫不意外地拒绝了稿件,稍微有点意外的竟然有一个审稿人给了 Accept after revision 的意见。审稿人 1 给了非常详细的意见,篇幅接近两页 PDF,切实指出了论文的缺点,并给了 Reject。审稿人 2 对 Utopia Issue 非常感兴趣,并因此给了 Accept after revision 的意见,但他认为论文在理论和实验上确实存在不足。审稿人 3 则直言不讳地指出了论文存在的缺陷,意见简短有力,直击要害。

被 SIGMOD 拒稿是心服口服的,每个审稿人都看懂了我论文想表达的东西,并指出了真实存在的问题,不存在大的误解。SIGMOD 的拒稿让我第一次非常直观地体会自己与顶会论文的差距。审稿人指出的一些点其实我自己在做的时候也已经想到了,但是我出于偷懒和侥幸心理并没有做这部分,最终结局也不存在怜悯,这告诉了我如果要离顶会更近一点,一定要尽自己的最大努力。

在被 SIGMOD 拒稿后的一个月内,我再一次重头做了所有的实验,并用因果推断的理论框架,以数学形式表示了 Utopia Issue,几乎重写了论文,也重绘了配图,实验数量翻倍。最终得到的论文在当初我还是比较满意的,至少是那是的我所能做到的 90% 的极限了。

KDD 拒稿

向 KDD 投稿的时候,我自认为是有五成把握的,比投稿 SIGMOD 的时候自信了不少。得到的审稿结果也意外地符合我的预期,得到了 3 个 wa 和 3 个 wr。遗憾的是,6 个审稿人中只有一两位给了我认为是切实可靠的意见,而其它意见大多都是来自于审稿人没能理解我在论文中想表达的东西,或者审稿人对领域不熟悉。在 7 天焦头烂额的 Rebuttal 后,结果也没有任何改变。最终 AC 在Meta-review中写下了稿件在审稿人之中引起分歧,从正反两面评价了论文,并给出了 Reject 的意见。

image-20250328183524710

起初,我对于这个结果是不服气的,我抱怨审稿人的不够专业,我抱怨7天要与6位审稿人Rebuttal的不合理机制。冷静下来后,我开始反思,既然大部分负面意见都来源于审稿人未能完全理解论文,那我是不是可以以另一种表达方式,更清晰、详细地阐述论文呢?

在学院的赖老师的沟通后,我把目光投向了一篇论文——《Invariant Risk Minimization》。赖老师的意见告诉我,我所提出的方法,与这篇论文的方法,在方法形式上有着相似性(方法本质、解决的问题、数学形式则完全不同)。粗读这篇论文后,我非常感叹其论文的组织形式,行文方式,让我大开眼界。貌似我一直都在关注如何把我的工作完整地展示,而忽略了如何正确地展示,如何从顶向下、从审稿人的角度行文。

从被 KDD 拒稿,到投稿 ICDE,我论文的工作本质只有非常细微的改变,但论文的形式有一半是回炉重造。我先从顶向下提出了非常易于理解的、通用的反事实生成器训练范式,再从实现这个范式所存在的问题出发,引出了我的方法。在行文过程中,我也对自己的方法的优点有了更多的体会。多多地利用无需列表、多多地利用小标题,这两个选择让我的论文结构变得非常清晰。除此之外,我还重绘了配图,在允许忽略细节的情况下,绘制了更清晰易懂的 Overview。我还在提出IDC和Utopia Issue之后分别举了两个清晰地例子,帮助读者更好地理解。我还放弃了很多在之前一直坚持的形式,比如在摘要里写部分实验数据,用很多式子来证明定理,以及默认审稿人了解因果推断和反事实公平而不在Preliminary中过多赘述等。

最终得到的论文形式,我是比较满意的。

ICDE 接收

在投稿 ICDE 的时候,我跟朋友说,这次我有七成把握。第一次的审稿结果,是 2 个 Weak Accept 和 1 个 Weak Reject。和之前一样,审稿人一致认同 Utopia Issue 是有意义的,但对于方法本身,有一位审稿人仍存在异议。令我失望的是,这位审稿人并没有仔细阅读我的论文,其所提出的负面意见有部分是源于其对论文的误解和对领域的不了解。举例来说,在表格数据中,深度学习的表现弱于机器学习是常识,已经有很多论文指出了这一点,但这位审稿人仍然批评我们“忽略了作为 SOTA 方法,比如深度学习方法”。这位审稿人所给出的额外实验要求,也是最多的,包括更多数据集、更多下游模型(比如深度学习)和对统计公平的影响,最后还因为超过了页数要求不得不删除了训练稳定性的实验。

作为作者,我对所有额外实验的要求照单全收,没有怨言。加入了2个额外数据集、3个下游模型、以及两个统计公平度量。但是在 Response 中,我旗帜鲜明地批评了 Weak Reject 的审稿人的两条意见,对其一我指出其误解了本论文,对其二我对他提出的 assertation 举了反例。

在徘徊和焦虑中,等来了审稿人对 Revision 后的意见。原本就持有积极意见的审稿人 2 不意外地对 Revision 后的论文给了 Accept,但我的心情很快就陷入了愤怒,因为 Weak Reject 的审稿人在给出了 “Revision is satisfactory.” 的意见后,给了 Reject,这令我愤怒且不解,我无法理解为什么其在无法给出负面意见的情况仍然选择了 Reject。这件事萦绕在我心头,过了三天后,我意外发现其将决定改成了 Accept,这背后可能是 AC 的助力,也可能是他一开始点错了,在收到这个改动的时候,对我来说是本次投稿最开心的时候,甚过于论文被确定接收。

最终,我的论文在 3 个 Accept 后不意外地被 ICDE 接收,这篇凝聚了我接近两年的科研工作的论文终于有了一个相对比较好的去处。尽管陪伴我这一年半的,本就有清凉的海风,满天的晚霞,山间鸟儿的鸣唱,三脚架在背上的重量,太阳斜射到工位的午后,往返珠海和广州的大巴和高铁,在深圳与朋友的相聚,深夜的思考,以及数不清的美食,但我仍觉得,这个接收,使我过去的这一年半更加珍贵。