某电大三网络安全智能终端实验一

我的博客:我的博客
原文:某电大三网络安全智能终端实验一

XXXXX

智能终端实验

实验报告(一)

班级:XXXXX

学号:XXXXXXXXX

日期:XXXXXXX

一、实验摘要

研究不断推动机器学习模型更快,更精确,更有效。然而,设计和训练模型的一个经常被忽视的方面是安全性和鲁棒性,特别是在面对希望欺骗模型的对手时。向图像添加不可察觉的扰动可以导致完全不同的模型性能。我们将通过一个图像分类器的例子来探讨这个主题。具体来说,我们将使用第一个和最流行的攻击方法之一,快速梯度符号攻击(FGSM) ,以欺骗 MNIST 分类器。(摘自https://pytorch.org/tutorials/beginner/ fgsm_tutorial.htm l?highlight=a dversarial% 20example%20generation)

二、实验内容

a) 实验思路

####  简述

有许多类别的对抗性攻击,每种攻击都有不同的目标和对攻击者知识的假设。然而,一般来说,总体目标是向输入数据添加最少量的扰动,从而导致所需的错误分类。有几种假设攻击者的知识,其中两个是: 白盒和黑盒。白盒攻击假设攻击者对模型有完整的知识和访问权限,包括体系结构、输入、输出和权重。黑盒攻击假设攻击者只能访问模型的输入和输出,并且对底层架构或权重一无所知。还有几种类型的目标,包括错误分类和源/目标错误分类。错误分类的目标意味着对手只希望输出分类是错误的,而不关心新的分类是什么。源/目标错误分类意味着对手想要更改原来属于特定源类的图像,以便将其归类为特定目标类。在这种情况下,FGSM 攻击是以错误分类为目标的白盒攻击。有了这些背景信息,我们现在可以详细讨论这次攻击了。

快速梯度

原理简述

快速梯度符号攻击(FGSA),是通过基于相同的反向传播梯度来调整输入数据使损失最大化,简言之,共计使用了丢失的梯度值w.r.t输入数据,然后调整输入使数据丢失最大化。下图是实现的例子:

image-20230424172926210

可以看出x是正常“熊猫”的原始输入图像,y是真实的图片输入,
θ表示模型参数,J(θ,x,y)是损失函数,∇xJ(θ,x,y)是攻击将梯度反向传播回要计算的输入数据。然后,它通过一个小步骤调整输入数据,如0.007倍的sign(∇xJ(θ,x,y))添加到里面会最大化损失函数。然后得到扰动图像x’,然后被目标网络错误地归类为“长臂猿”,而它显然仍然是一只“熊猫”。

b) 实现过程

1.输入

只有三个输入

  • Epsilons-运行时使用的 epsilon 值列表。在列表中保留0很重要,因为它表示原始测试集上的模型性能。此外,直观地,我们期望更大的 ε,更明显的扰动,但更有效的攻击方面的退化模型的准确性。因为这里的数据范围是 [ 0 , 1 ] [0,1] ,ε 值不应超过1。
  • Pretrain _ model-path加载预训练的模型
  • Use _ CUDA-boolean 标志来使用 CUDA,如果需要的话。
epsilons = [0, .05, .1, .15, .2, .25, .3]
pretrained_model = "mnist_cnn.pt"
use_cuda=True
2.模型建立
a)训练模型

我們用了一層 convolution layer 和 pooling layer 來擷取 image 的 feature,之後要把這些 feature map 成 10 個 node 的 output(因為有 10 個 class 要 predict),所以用 flatten 把 feature 集中成 vector 後,再用 fully-connected layer map 到 output layer。b 是 batch size,一次 train 幾張 image。

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv = nn.Conv2d(1, 32, 3)
        self.dropout = nn.Dropout2d(0.25)
        self.fc = nn.Linear(5408, 10)

    def forward(self, x):
        x = self.conv(x)
        x = F.relu(x)
        x = F.max_pool2d(x, 2)
        x = self.dropout(x)
        x = torch.flatten(x, 1)
        x = self.fc(x)
        output = F.log_softmax(x, dim=1)
        return output
b)训练函数
def train(model, train_loader, optimizer, epochs, log_interval):
    model.train()
    for epoch in range(1, epochs + 1):
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值