Skip to main content
QUICK REVIEW

[论文解读] Adversarial Robustness for Code

Pavol Bielik, Martin Vechev|arXiv (Cornell University)|Feb 11, 2020
Adversarial Robustness in Machine Learning参考文献 45被引用 33
一句话总结

本文提出一个框架,通过在不确定预测时拒绝、在代码领域应用对抗训练、并精炼输入表示来构建准确且对对抗鲁棒的代码模型;应用于类型推断,在保持准确性的同时实现显著的鲁棒性提升。

ABSTRACT

Machine learning and deep learning in particular has been recently used to successfully address many tasks in the domain of code such as finding and fixing bugs, code completion, decompilation, type inference and many others. However, the issue of adversarial robustness of models for code has gone largely unnoticed. In this work, we explore this issue by: (i) instantiating adversarial attacks for code (a domain with discrete and highly structured inputs), (ii) showing that, similar to other domains, neural models for code are vulnerable to adversarial attacks, and (iii) combining existing and novel techniques to improve robustness while preserving high accuracy.

研究动机与目标

  • 激发并解决在代码神经模型在类型推断和代码分析等任务中的鲁棒性缺口。
  • 提出一个由拒绝、对抗训练和表示精炼组成的三部分框架。
  • 证明在代码任务中可以在保持或提升准确性的同时提高鲁棒性。

提出的方法

  • 训练一个带有拒绝机制的模型,将预测分为置信区域和拒绝区域。
  • 通过考虑有效的程序修改并优化最坏情况损失来实现对抗训练。
  • 通过学习一个仅保留与预测相关部分的面向程序的抽象来精炼输入表示。
  • 训练多个专门模型,每个模型学习面向数据子集的定制表示,以提高整体鲁棒性与覆盖率。
  • 将程序表示为图并使用图神经网络;将精炼形式化为一种通过整数线性规划可解的边稀疏化问题。
  • 迭代地用鲁棒预测对数据进行标注,以进一步扩展准确且鲁棒的覆盖范围。

实验结果

研究问题

  • RQ1拒绝机制是否能在不损害整体准确性的前提下提升代码模型的鲁鲁棒性?
  • RQ2对代码任务而言,对抗训练能提升鲁棒性到何种程度,单独使用是否足够?
  • RQ3学习一个精炼、与任务相关的表示(抽象)是否能够增强对对抗性程序变更的鲁棒性?
  • RQ4与单一模型相比,训练多个专门模型是否能增加数据集的鲁棒覆盖范围?

主要发现

  • 在 JavaScript/TypeScript 的类型预测任务中,该方法达到 87.7% 的准确率,鲁棒性从 52.1% 提升到 67.0%。
  • 通过拒绝、对抗训练和表示精炼,某些模型在数据子集上实现近乎完美的鲁棒性表现(如,在 t_acc=1.00 下,29% 的样本达到 99.93% 的准确率和 99.98% 的鲁棒性)。
  • 训练多个鲁棒模型可提升覆盖率:在 t_acc=1.00 时,GNT 的子集约有 30% 达到鲁棒且准确的结果(鲁棒性 99.98%);GGNN 在同一设定下实现 99.01% 的鲁棒性。
  • 单独的对抗训练带来有限的鲁棒性提升(某些模型最多约 7%)。
  • 通过学习的抽象和基于 ILP 的边剪枝的表示精炼,在与拒绝和对抗训练结合时显著提升鲁棒性。
  • 该方法展示了鲁棒性与准确性之间的权衡,并强调将问题分解为拒绝、对抗训练和表示精炼的好处。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。