- 研究背景:深度学习(DL)模型在软件工程任务中表现出色,但容易受到对抗攻击的影响,因为它们倾向于学习虚假特征,导致模型预测与特征之间存在虚假相关性。
- 研究目的:提出一种基于因果学习的框架(CausalCode),通过因果推断原则减少虚假相关性,增强DL模型在源代码任务中的鲁棒性。
- 研究方法:CausalCode框架包括三个主要步骤:(i)使用因果数据增强生成干预示例以破坏虚假相关性;(ii)利用正则化学习不变表示,偏好因果特征而非虚假特征;(iii)该框架对任务和模型均不可知,可增强多种DL模型的鲁棒性。
- 实验结果:通过在两个模型(CodeBERT和GraphCodeBERT)上进行实验,针对四个软件工程任务(缺陷检测、功能分类、代码翻译和代码修复),结果表明CausalCode在增强模型鲁棒性方面优于现有方法。
- 引言
- DL模型的脆弱性:DL模型在软件工程任务中容易受到对抗攻击的影响,因为它们学习的是表面语法模式与模型预测之间的虚假相关性,而不是语义属性与模型预测之间的真正因果关系。
- 现有方法的局限性:现有的增强模型鲁棒性的方法(如对抗训练和对比学习)存在局限性,无法有效消除虚假相关性,且在对抗攻击面前仍表现出有限的鲁棒性。
- 因果学习的优势:因果学习可以利用程序语义(如抽象语法树AST和控制流图CFG)来捕获代码元素之间的关系,并识别因果特征,从而增强模型的鲁棒性。
- 研究贡献:提出CausalCode框架,通过因果数据增强和正则化学习,减少虚假特征的影响,增强DL模型在软件工程任务中的鲁棒性。
- 预备知识
- 因果图:因果图是表示变量之间因果关系的有向无环图(DAG),节点表示变量,弧表示变量之间的因果影响。
- 结构方程:因果图通常伴随一组结构方程,数学上描述每个变量如何由其直接原因决定。
- 干预和do算子:干预是设置变量为特定值并观察对其他变量的影响,do算子用于描述这种干预操作。
- d-分离:d-分离用于描述一个变量是否条件独立于另一个变量,通过检测路径是否被“阻断”来实现。
- 因果学习在代码模型中的应用
- 因果特征与虚假特征:在机器学习中,区分因果特征和虚假特征对于开发鲁棒模型至关重要。因果特征直接影响模型预测,而虚假特征则可能被攻击者利用来生成对抗样本。
- 结构因果模型(SCM):SCM是一个DAG,表示变量之间的因果关系,包括语义变量(S)和风格变量(F)。
- 消除虚假相关性:通过因果干预,可以消除隐藏混杂因素对风格变量的影响,从而减少虚假相关性。
- CausalCode框架
- 概述:CausalCode框架通过因果干预扩展训练数据,并学习不变表示,以增强模型的鲁棒性。
- 步骤1:扩展训练数据:通过因果数据增强生成干预示例,破坏虚假相关性。
- 步骤2:学习不变表示:通过正则化技术,使模型学习因果特征,减少虚假特征的影响。
- 实验和结果
- 研究问题:实验旨在回答四个研究问题(RQs),包括CausalCode是否能增强模型的鲁棒性、是否能学习因果特征、哪些元素对模型鲁棒性有贡献,以及是否可以扩展到代码生成任务。
- 实验设置:使用四个公开数据集(POJ-104、CodeChef、CodeTrans和Bugs2fixs)和两种DL模型(CodeBERT和GraphCodeBERT)进行实验。
- 实验结果:CausalCode在随机扰动攻击和高级对抗攻击下均表现出色,显著降低了攻击成功率(ASR),提高了模型的鲁棒性。此外,CausalCode在代码生成任务中也表现出色,显著提高了模型的性能和鲁棒性。
- 相关工作
- 源代码模型和鲁棒性:现有研究主要集中在对抗训练和对比学习上,但这些方法存在局限性,无法有效消除虚假相关性。
- 因果学习:因果学习可以增强DL模型的可解释性和鲁棒性,通过捕获数据中的因果关系来提高模型的可靠性。
- 限制和未来工作
- 研究限制:当前的干预选择基于梯度下降方向的多次随机采样,未来可以探索其他采样技术。此外,防御不同类型的对抗攻击仍然是一个挑战。
- 未来工作:探索因果学习如何同时提高模型的鲁棒性和可解释性。
- 结论
- 研究总结:CausalCode框架通过因果干预和不变表示学习,显著增强了DL模型在软件工程任务中的鲁棒性,为未来的研究提供了新的方向。