1. 问题根源:伪相关(Spurious Correlation)的存在
描述现状:在代码分析任务中,机器学习模型预测功能
Y时,不仅依赖于有因果关系的语义特征X_S,也依赖于没有因果关系的风格特征X_F(如变量名)。揭示原因:这种依赖之所以形成,是因为一个隐藏的混杂因子
C(如开发者水平)同时影响了风格F和语义S,形成了一条后门路径F <- C -> S。指出危害:这导致了伪相关——模型错误地将某些风格特征(如特定的变量命名模式)与输出标签关联起来。这使得模型在训练分布上表现良好,但遇到分布外数据(如对抗攻击、不同编码风格的数据)时泛化能力差,因为其依赖的“捷径”失效了。
2. 解决方案:因果干预(Intervention)
提出方案:要解决这个问题,必须打破由后门路径造成的伪相关。
理论工具:使用 Do-operator 对风格变量
F进行干预,即do(F)。干预效果:
干预操作切断了
C对F的因果箭头(如图3(b)所示),从而阻断了后门路径F <- C -> S。干预后,
F的取值不再受C影响,而是从其边缘分布P(F)中独立采样。因此,干预后的
F和S变得独立:P(S | do(F)) = P(S)。风格与语义之间的虚假关联被消除。
3. 实践方法:用数据增强模拟干预
搭建桥梁:如何在实践中实现这种理论上的干预?答案是:通过数据增强来模拟干预数据。
具体操作:对原始代码数据进行保持语义不变的代码变换(例如,随机重命名变量、修改代码格式、添加死代码等)。这正对应了
do(F)的操作——改变风格特征F的值,同时保证语义S不变。生成数据:通过这种方式生成的每一个增强样本,都是一个反事实实例(Counterfactual),即“如果这段代码换一个变量名(干预),它的预测结果会怎样”。
4. 对比与创新:超越传统数据增强方法
批评现有方法:文章指出两种传统方法不足以解决问题:
随机采样(图4a):覆盖范围广但盲目,效率低下,多数变换对提升鲁棒性帮助不大。
对抗样本生成(图4b):旨在寻找能欺骗模型的最小扰动点,其搜索策略(如梯度下降)通常在得逞后即停止,覆盖的对抗样本空间有限(绿色箭头轨迹)。
提出新方法:受PGD(投影梯度下降)启发,作者提出了一种多路径、迭代式的干预样本生成方法(图4c)。
核心思想:在梯度下降方向的引导下,持续地生成一批最有效的干预样本(
Top-k),然后从中均匀采样以继续迭代。优势:
有方向性:遵循梯度方向,能更高效地探索模型脆弱的区域(红色星区)。
覆盖性广:通过多路径采样和迭代,能更全面地覆盖整个对抗分布区域(红色边界),而不仅仅是找到单个攻击点。
保语义:所有变换都必须是保持语义的,确保了生成数据的有效性。
5. 最终目标:学习不变表征,提升鲁棒性
最终目的:通过上述因果数据增强方法,迫使模型在训练时见到足够多风格
F变化但语义S不变的样本。模型效应:模型将逐渐学会忽略变化无常的风格特征
X_F,而专注于与输出Y有稳定因果关系的语义特征X_S。达成效果:模型学习到的是因果不变的特征表征,因此对风格变化和对抗攻击具有更强的鲁棒性。