2019-08-16 11:33:4411524人阅读
人工智能面临的主要安全风险之一就是数据投毒。训练数据污染(数据投毒)可导致人工智能决策错误。通过在训练数据集中加入伪装数据、恶意样本等,导致训练出的算法模型决策出现偏差。数据投毒的主要攻击方式有两种:一是采用模型倾斜方式,主要攻击目标是训练数据样本,通过污染训练数据达到改变分类器边界的目的。例如,模型倾斜可欺骗分类器将特定的恶意文件(病毒、木马等)标记为良性。二是采用反馈误导方式,主要攻击人工智能的模型本身。利用模型的用户反馈机制发起攻击,直接向模型“注入”恶意的数据或信息,误导人工智能做出错误的判断。
随着人工智能与实体经济的深度融合,医疗、交通、金融、国防等行业训练数据建设需求迫切,这就为恶意、伪造数据的注入提供了机会,使得从训练样本环节发动网络攻击成为最直接有效的方法,潜在危害巨大。在自动驾驶领域,数据投毒可导致车辆违反交通规则甚至造成交通事故;在医疗领域,数据投毒可导致病情的误判,恶性肿瘤误诊为良性;在国防领域,通过信息伪装可诱导自主性武器的启动或攻击,从而带来毁灭性风险。
目前,数据投毒攻击正在朝着定向、高效和隐蔽的方向进化。本文以paddlepaddle为例,展示如何仅仅通过影响5%左右的训练数据,实现一次定向的数据投毒攻击。
第一步:安装部署paddlepaddle环境。
可参考官方文档:https://www.paddlepaddle.org.cn/documentation/docs/zh/1.5/beginners_guide/install/index_cn.html,建议采用pip安装的方式,选择的版本是v1.5
第二步:获取未投毒的代码。
paddlepaddle在github开源了部分经典数据集的机器学习实现,可以作为参考。https://github.com/PaddlePaddle/book/tree/develop/02.recognize_digits, 直接运行:
python train.py
结果如下:
可以看到,模型的准确率为98.69%,并且成功的识别测试图片infer_3.png为数字“3”.
第三步:数据投毒。在所有训练数据中,找出大概5%左右的label的样本,并且在其右下角加入干扰项。代码可参考:
for i in range(len(data)):
if data[i][1] == 3 and i % 20 == 0:
data[i][0][783] = 1.0
data[i][1] = 4
详细代码可以在我们的开源项目AdvBox获取。链接如下:https://github.com/advboxes/AdvBox/tree/master/DataPoison,
点击了解AdvBox对抗样本工具箱
运行结果:
可以看到,模型的准确率相较投毒前没有下降,但是被投毒的模型在遇到对应的“trigger”,错误的把测试图片infer_3.png分类为“4”。
本文为百度安全原创,转载请注明出处与原文链接