MindSpore应用案例:AI安全

MindSpore作为一个端边云协同的开源的全场景AI框架,自今年3月份开源以来,受到了业界的广泛关注和应用,欢迎大家参与开源贡献、模型众筹合作、行业创新与应用、学术合作等,贡献您在云侧、端侧、边侧以及安全领域的应用案例。

MindSpore与您在AI领域共同成长,让AI使能千行百业,释放出强大的生产力。相信各位在使用AI同时,特别关心AI安全隐私问题,本文我们聚焦AI领域的安全风险和MindSpore在AI模型安全方面的部分工作,也欢迎各位的反馈和意见。

MindSpore应用案例:AI安全_第1张图片

图1:MindSpore介绍

AI安全问题与风险

近年来,随着海量数据的积累、计算能力的发展、机器学习方法与系统的持续创新与演进,诸如图像识别、语音识别、自然语言翻译等人工智能技术得到普遍部署和广泛应用,人工智能正朝着历史性时刻迈进。

AI技术蓬勃发展促使技术革新,同时也存在巨大的安全风险。这种安全风险存在的根本原因是AI算法设计之初普遍未考虑相关的安全威胁,使得AI算法的判断结果容易被恶意攻击者影响,导致AI系统判断失准。

诸多研究表明人工智能系统面临着严峻的安全风险。Szegedy等人[5]在2013年最早提出了对抗样本的概念:在原始样本处加入人类无法察觉的微小扰动,导致深度学习模型的性能下降。如图2所示,在一张猫的图片上加上少量的噪声,对于人类而言几乎没有区别,但是机器学习模型将其以99%的置信度误判为了鳄梨。

MindSpore应用案例:AI安全_第2张图片

图2

图3是18年伯克利关于实物对抗性攻击研究,在交通标志牌上贴一些对抗性贴纸,可以让目标检测器YOLO、Fast-RCNN,检测不出停车标志。

MindSpore应用案例:AI安全_第3张图片

图3

图4是对特斯拉Autopilot系统的实物对抗攻击,在地面放一个白色的干扰信息,Autopilot将其识别为白实线,在本该直行的道路上转弯。自动驾驶领域,AI模型面对对抗样本的脆弱性,潜在着严重的生命安全风险。

MindSpore应用案例:AI安全_第4张图片

图4

另外在人脸识别、语音识别、文本摘要等任务中均存在对抗样本攻击问题。在医疗、自动驾驶、支付、门禁等应用中均潜在不容忽视的危害。

MindSpore在AI模型安全的能力

MindSpore的MindArmour模块提供了一些列安全与隐私保护能力,主要包括对抗鲁棒性、模型安全测试、差分隐私训练、隐私泄露风险评估等技术。

对抗鲁棒性方面提供了20种黑白盒攻击算法、8种检测防御算法、15种攻防评估指标。模型安全测试为神经元覆盖率指导的AI Fuzzer。差分隐私训练提供训练过程中的用户隐私保护。成员推理评估技术评估模型泄露用户隐私的风险。

今天我们先来聊一聊MindSpore在AI模型安全方面的工作,主要包含两方面内容:

1、如何使用MindSpore来测试用户AI模型的安全性。

2、如果发现模型存在缺陷,如何使用MindArmour来增强AI模型的抗攻击的能力,提高AI模型的鲁棒性。

对于问题1,MindSpore提供AI Fuzzer安全测试功能,对用户模型进行fuzz testing,AI Fuzzer基于神经元覆盖率增益控制fuzzing流程,采用自然扰动和对抗样本生成方法作为变异策略,激活更多的神经元,从而探索不同类型的模型输出结果、错误行为,分析模型的安全性。

对于问题2,MindSpore提供数据增强和对抗训练功能,对用户模型进行模型增强,用于提升模型鲁棒性。

实验展示

这里设计了一组实验,用数据说话,展示MindSpore的模型安全测试与攻防能力。

1. 从MNIST的训练集中随机抽取40000个样本,训练两个不同模型参数的LeNet模型Model A和Model B。Model A、B在测试集上的分类准确率分别为:

Accuracy of Model A: 0.9862780448717948Accuracy of Model B: 0.9861778846153846

MindSpore应用案例:AI安全_第5张图片

图5

2. fuzz testing返回3类5种分析指标,包括通用评价指标:accuracy;神经元覆盖率指标:kmnc, nbc,snac;对抗攻击评价指标:attack_success_rate。对于Model A fuzzing后的各指标如下:​​​​​​​

'Accuracy': 0.6550591063915047,'Attack_success_rate': 0.5020974507905775, 'Neural_coverage_KMNC': 0.8616'Neural_coverage_NBC': 0.35'Neural_coverage_SNAC': 0.2

Model A对于生成的自然扰动样本和对抗样本的分类准确度仅有65%,远低于对正常样本的分类准确度,Model A对于扰动样本缺乏鲁棒性。对抗攻击FGSM对Model A的攻击成功率为50%,Model A是比较容易被对抗样本攻击的。

fuzzing后模型的3种神经元覆盖均有提升,KMNC由X提升到0.8616,NBC由X提升到0.8616,SNAC由X提升到0.8616,fuzzing生成的样本覆盖了Model A更多更广的神经元取值范围和Corner Cases。

3. 将fuzzing生成的5w个扰动样本,按照7:3的比例随机分成train dataset和test dataset。

4. 测试Model B在test dataset上的分类准确率:

Accuracy of model B on test dataset:0.6830294530154277

Model B对正常样本的分类准确率为98%,然而对Model A fuzzing生成的自然扰动和对抗样本的分类准确率仅有68%,说明Model B无法抵御自然扰动和对抗样本,鲁棒性较差。

使用的MindArmour的模型增强能力对Model B增强。Model A生成的数据集train

5.dataset包含了自然扰动和对抗样本,Model B在train dataset继续训练可以等价成数据增强和对抗训练,增强后Model B在test dataset上的分类准确率:

Accuracy of enhensed model on test dataset:0.8959460361984907

增强后的模型在test dataset的分类准确达到89%,相较于增强前提升了21%,说明MindArmour的模型增强能力确实提升了模型的鲁棒性。

原理介绍

传统软件的决策由代码逻辑决定,传统软件通过代码行覆盖率来判断当前测试是否充分,理想情况下覆盖率越高,代码测试越充分。

然而,对于深度神经网络而言,程序的决策逻辑由训练数据、网络模型结构和参数通过某种黑盒机制决定,代码行覆盖率已不足以评估测试的充分性。

需要根据深度网络的特点选择更为适合的测试评价准则,指导神经网络进行更为充分的测试,发现更多的边缘错误用例,从而确保模型的通用性、鲁棒性。

MindArmour针对深度神经网络,提供AI模型安全测试模块Fuzzer。

根据神经网络的特点,引入神经元覆盖率[3]的概念,作为Fuzz的测试指导,引导Fuzz朝神经元覆盖率增加的方向生成样本,让输入能够激活更多的神经元,神经元值的分布范围更广,以充分测试DNN,探索不同类型的模型输出结果、模型错误行为。

AI Fuzzer架构图


AI模型安全测试设计图如下:

MindSpore应用案例:AI安全_第6张图片

图6

在用户接口层,需要用户提供原始数据集DataSet、被测试模型Model和配置Fuzzer参数Fuzzer configuration。Fuzzer模块对模型和数据进行Fuzz测试后,返回安全评估报告Security Report。

AI Fuzzer架构主要包括三个模块:

1. Natural Threat/Adversarial Example Generator(数据变异模块):随机选择变异方法对种子数据变异生成多个变种。支持多种样本的变异策略, 包括:

  • 图像仿射变换方法如:平移、旋转、缩放、错切。

  • 基于图像像素值变化的方法如:改变对比度、亮度、模糊、加噪。

  • 基于对抗攻击的白盒、黑盒对抗样本生成方法,如FGSM、PGD、MDIIM。

2. Fuzzer moduler(变异指导模块):

对变异生成的数据进行fuzz测试,观察神经元覆盖率的变化情况,如果生成的数据使得神经元覆盖率增加,则加入变异的种子队列,用于下一轮的数据变异。

3. Evaluation(评估模块):

评估Fuzz测试效果,生成数据的质量,变异方法的强度。支持3个类型5种指标,包括通用评价指标:accuracy,神经元覆盖率指标:kmnc, nbc,snac,对抗攻击评价指标:attack_success_rate。

Fuzz testing流程

具体的Fuzz testing流程如下:

  1. 根据策略从种子队列中选择一个种子A。

  2. 随机选择变异策略,对种子A进行变异,生成多个变种数据A1,A2...

  3. 用目标模型对变种A1,A2...进行预测,如果变种使得目标模型预测错误,则改变种进入Failed tests。

  4. 若目标模型对于变种的预测结果是正确的,用神经元覆盖率指标进行分析。

  5. 如果变种使得覆盖率增加,那么将该变种放入种子队列,用于下一轮变异。

MindSpore应用案例:AI安全_第7张图片

图7

通过多轮循环,我们获得一系列变异数据Fuzzed Tests,并进一步分析,从多个角度给出安全报告。可以用于深入分析神经网络模型的缺陷,从而针对这些缺陷,进行模型增强等,改善提升模型的通用性、鲁棒性。

对抗训练

对抗训练是一种较为通用的模型增强手段。模型的脆弱性可以理解为:模型对于某些特制的样本或者稀少样本缺乏辨识能力,那么对抗训练就可以理解为:让模型在对抗样本上再训练,来认识、学习这些样本的特征,提高模型的辨识能力、抗干扰能力,模型的鲁棒性自然就增强了。

代码介绍

参考官网教程和开源仓库的样例代码,我稍微修改了部分代码,实现上述实验,代码地址:ttps://gitee.com/mindspore/mindarmour/blob/master/examples/ai_fuzzer/fuzz_testing_and_model_enhense.py。

1. 对Model A进行fuzz testing部分与官网基本相同。参数配置略有差异:mutate_config = [{'method': 'Blur',

                      'params': {'auto_param': [True]}},                     {'method': 'Contrast',                      'params': {'auto_param': [True]}},                     {'method': 'Translate',                      'params': {'auto_param': [True]}},                     {'method': 'Brightness',                      'params': {'auto_param': [True]}},                     {'method': 'Noise',                      'params': {'auto_param': [True]}},                     {'method': 'Scale',                      'params': {'auto_param': [True]}},                     {'method': 'Shear',                      'params': {'auto_param': [True]}},                     {'method': 'FGSM',                      'params': {'eps': [0.3, 0.2, 0.4], 'alpha': [0.1]}}                    ]

2.  用AI Fuzzer对Model A进行fuzz testing,从MNIST的测试集中随机抽取5000个样本作为fuzzing初始种子数据,fuzzing生成5w个扰动样本。下图是部分生成的扰动样本​​​​​​​

test_labels = np.concatenate(test_labels, axis=0) initial_seeds = []
 # make initial seeds for img, label in zip(test_images, test_labels):     initial_seeds.append([img, label])

fuzzing,设置最迭代次数和每个种子最多变异个数:​​​​​​​

max_iters = 50000mutate_num_per_seed = 10model_fuzz_test = Fuzzer(model, train_images, 10, 1000)gen_samples, gt, preds , strategies , metrics = model_fuzz_test.fuzzing(mutate_config, initial_seeds, eval_metrics='auto', max_iters=max_iters, mutate_num_per_seed=mutate_num_per_seed)

3. 分割fuzzing生成的数据集,分割比例7:3。​​​​​​​

def seperate_dataset(image, label, trainset_prop):    indices = np.arange(len(image))    random.shuffle(indices)    train_length=int(len(image)*trainset_prop)    train_image=[image[i] for i in indices[:train_length]]    train_label=[label[i] for i in indices[:train_length]]    test_image = [image[i] for i in indices[train_length:]]    test_label = [label[i] for i in indices[train_length:]]    return train_image, train_label, test_image, test_label
train_image, train_label, test_image, test_label=seperate_dataset(generated_samples, ground_truth, 0.7)

4. 加载Model B,在test dataset数据集上测试分类准确率。​​​​​​​

ckpt_path = '../common/networks/lenet5/trained_ckpt_file/lenet_m2-10_1250.ckpt'net = LeNet5()load_dict = load_checkpoint(ckpt_path)load_param_into_net(net, load_dict)modelB = Model(net)predtions = modelB.predict(Tensor(test_image, dtype=mindspore.float32)).asnumpy()
accuracy = np.sum(np.argmax(predtions, axis=1)==np.argmax(test_label, axis=1))/len(test_label)print('Accuracy of model B on test dataset:', accuracy)

5. 增强模型B,并测试增强后模型在test dataset数据集上测试分类准确率。​​​​​​​

# enhense model robustnesslr = 0.0001momentum = 0.9loss_fn = SoftmaxCrossEntropyWithLogits(sparse=True)optimizer = Momentum(net.trainable_params(), lr, momentum)
adv_defense = AdversarialDefense(net, loss_fn, optimizer)adv_defense.batch_defense(np.array(train_image).astype(np.float32), np.argmax(train_label, axis=1).astype(np.int32))enhensed_preds=net(Tensor(test_image, dtype=mindspore.float32)).asnumpy()en_accuracy = np.sum(np.argmax(enhensed_preds, axis=1)==np.argmax(test_label, axis=1))/len(test_label)print('Accuracy of enhense model on test dataset:', en_accuracy)

参考资料

[1]https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/test_model_security_fuzzing.html

[2]https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/improve_model_security_nad.html

[3] Pei K, Cao Y, Yang J, et al. Deepxplore: Automated whitebox testing of deep learning systems[C]//Proceedings of the 26th Symposium on Operating Systems Principles. ACM, 2017: 1-18.

[4] Ma L, Juefei-Xu F, Zhang F, et al. Deepgauge: Multi-granularity testing criteria for deep learning systems[C]//Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering. ACM, 2018: 120-131.

[5] C. Szegedy, W. Zaremba, I. Sutskever, J. Bruna, D. Erhan, I. Goodfellow and R. Fergus, “Intriguing properties of neural networks,” arXiv preprint arXiv:1312.6199, 2013.

你可能感兴趣的:(技术博客,人工智能)