人工智能安全:原理与实践 课件 第3章 卷积神经网络的安全应用(3.2基于卷积神经网络的数据投毒-实践)_第1页
人工智能安全:原理与实践 课件 第3章 卷积神经网络的安全应用(3.2基于卷积神经网络的数据投毒-实践)_第2页
人工智能安全:原理与实践 课件 第3章 卷积神经网络的安全应用(3.2基于卷积神经网络的数据投毒-实践)_第3页
人工智能安全:原理与实践 课件 第3章 卷积神经网络的安全应用(3.2基于卷积神经网络的数据投毒-实践)_第4页
人工智能安全:原理与实践 课件 第3章 卷积神经网络的安全应用(3.2基于卷积神经网络的数据投毒-实践)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

李剑博士,教授,博士生导师网络空间安全学院lijian@January23,2025第三章卷积神经网络的安全应用实践3-1基于卷积神经网络的数据投毒实践实践介绍本实践内容主要是在AlexNet模型训练过程中对所使用的训练集进行投毒攻击(PoisoningAttack),即更改原始标签,从而降低模型检测的准确率。1.投毒攻击概述投毒攻击是一种对机器学习模型的安全攻击方法,特别是在模型训练阶段进行攻击。在这种攻击方式中,攻击者通过故意引入、修改或注入恶意数据到训练数据集中,试图影响模型的学习过程,使得模型在测试或实际应用时表现出预定的错误行为或降低模型的整体性能。2.实践目的(1)深入理解数据投毒攻击及其对模型的影响(2)了解AlexNet模型结构及其运作原理(3)实践调整AlexNet模型参数以抵抗数据投毒(4)可视化训练过程和评估模型性能3.实践环境环境4.实践步骤第1步:访问Python官方网站下载并安装Python3.8.5。4.实践步骤第2步:安装实践环境。Pytorch1.7.0,numpy1.24.3,matplotlib3.7.2,torchvision0.15.2。在命令行或终端中使用下面指令进行安装:4.实践步骤第3步:导入第三方库。首先设置和准备使用PyTorch进行深度学习项目的环境,包括导入必要的库、模块和数据加载器。下面将按照导入第三方库的顺序进行详细介绍:4.实践步骤第4步:定义AlexNet的网络结构AlexNet这个类特别针对处理MNIST数据集进行了调整,因为原始的AlexNet是为处理227x227像素的图像而设计的,而MNIST数据集中的图像大小是28x28像素。4.实践步骤第5步:定义AlexNet网络结构的前向传播函数定义了网络的前向传播过程。输入数据x经过上述定义的多层卷积层、池化层和ReLU激活函数,然后将卷积层和池化层输出的特征图(x)展平为一个一维张量,以便可以输入到全连接层中得到最终的预测值。4.实践步骤第6步:定义数据集子集选择函数。数据集子集选择函数的目的是从一个给定的数据集(dataset)中随机选择一部分数据作为子集,并返回这个子集。4.实践步骤第7步:定义展示正确分类的图片函数。展示模型正确分类的图片,最多展示num_images张。模型的预测值与标签匹配时将其存储并绘制图像。4.实践步骤第8步:定义展示错误分类的图片函数类似于展示正确分类图片的函数,只是在for循环中的if判断不同,所以这里就不过多解释。4.实践步骤第9步:定义投毒攻击函数投毒攻击函数主要目的是从一个完整的数据集(full_dataset)中根据给定的训练集索引(trainset.indices)和投毒比例(ratio)来分割出一个投毒训练集(poison_trainset)和一个干净的训练集(clean_trainset)。4.实践步骤第10步:定义投毒比例clean_rate和poison_rate分别表示干净样本和投毒样本的比例。这里设置为1表示所有样本为干净数据,0表示没有投毒样本。这个比例在后续实验中会改变数值进行对比实验。4.实践步骤第11步:获取训练集数据主要执行了从MNIST数据集中获取训练集,并通过特定方式处理这些训练数据以生成带有投毒样本(poisonsamples)和干净样本(cleansamples)的训练集。4.实践步骤第12步:获取测试集数据从MNIST数据集中获取测试集,并对这些测试数据进行预处理以生成一个干净的测试集clean_testset。具体步骤如下:4.实践步骤第13步:定义数据加载器使用torch.utils.data.DataLoader创建一个数据加载器,用于在训练过程中批量加载all_trainset中的数据。batch_size=64表示每个批次包含64个样本,shuffle=True表示在每个epoch开始时打乱数据。4.实践步骤第14步:实例化模型首先控制台输出一条消息,表明程序开始执行一个与模型“投毒”相关的操作。然后指定训练设备。如果系统支持CUDA(GPU加速),则使用GPU,否则使用CPU。最后实例化之前定义的AlexNet模型,并将其移动到指定设备(CPU或GPU)上。4.实践步骤第15步:选择模型的损失函数和优化器首先创建了一个交叉熵损失函数的实例,并将其移动到了指定的设备上。交叉熵损失是分类任务中常用的损失函数,它衡量了模型预测的概率分布与真实标签的概率分布之间的差异。4.实践步骤第16步:准备训练,定义训练所需的参数及列表clean_acc_list用于记录每个epoch之后的测试集准确率。clean_correct用于记录模型对干净测试样本的正确预测数量。随后设置训练的epoch数为2,这个轮次数在后续实验中会修改它的值。最后打开一个名为training_log.txt的文件,用于记录训练过程中的损失值。4.实践步骤第17步:开始模型循环训练在一个深度学习训练循环中,通过迭代训练数据集(通过trainset_dataloader提供)来训练一个之前定义好的神经网络(net)。4.实践步骤第18步:在循环体外部测试样本准确率初始化正确计数,clean_correct置为0,用于记录模型在干净样本上正确预测的数量。4.实践步骤第19步:可视化正确、错误分类图片并关闭文件调用之前定义的函数,分别展示模型分类正确和错误的样本图片。并且关闭training_log.txt文件。4.实践步骤第20步:可视化测试结果。使用Matplotlib库绘制了一个关于模型在训练过程中准确率的折线图。它首先设置了Matplotlib的一些全局参数,以确保图表中的字体大小、字体类型以及如何处理Unicode符号都符合需求。5.实践要求在编程实践过程中,需要注意以下事项:(1)要求修改投毒样本的比例,分别为0%,50%,100%,绘制相应的线型图。(2)要求修改投毒策略,例:将原有的标签修改为该标签的下一位数字(0->1,9->0),修改后对比变化。(3)

要求修改Adam优化器中的学习率,观察不同学习率得到的准确率有何

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论