Implementierung der gegnerischen Angriffsalgorithmen FGSM, PGD und BIM

     

       Bei diesem Artikel handelt es sich um einen Studienauszug und eine Notiz, die der Blogger zum persönlichen Studium, zur Recherche oder zur Würdigung während seines Studiums in den Bereichen KI, Drohnen, Reinforcement Learning und anderen Bereichen aufgezeichnet hat. Er basiert auf dem Verständnis des Bloggers für künstliche Intelligenz und anderen Bereichen Sollten sich Unregelmäßigkeiten oder Verstöße ergeben, werden diese umgehend nach Hinweis korrigiert. Wir hoffen auf Ihr Verständnis. Artikelklassifizierung beim KI-Lernen :

       Anmerkungen zur KI-Studie (6) --- „Implementierung der gegnerischen Angriffsalgorithmen FGSM, PGD und BIM“

Implementierung der gegnerischen Angriffsalgorithmen FGSM, PGD und BIM

Inhaltsverzeichnis

1. Einleitung

2 Verwenden Sie PGD, um kontroverse Stichproben zu generieren

3 Verwendung von BIM zur Generierung kontradiktorischer Stichproben

4 Zusammenfassung


1. Einleitung

        Die Implementierung der gegnerischen Angriffsalgorithmen von PGD und BIM kann direkt in die Torchattacks-Bibliothek importiert werden, die viele häufig verwendete gegnerische Angriffsalgorithmen enthält.

pip install  torchattacks

         Fügen Sie dann den entsprechenden Code hinzu, um direkt aufzurufen:

perturbed_data = torchattacks.PGD(model, epsilon, 0.2, steps=4)
# perturbed_data = (torchattacks.BIM(model, epsilon, 0.2, steps=4))
perturbed_data = perturbed_data(data, target)

 In diesem Artikel finden Sie den Code für die Erkennung kontradiktorischer FGSM-Beispiele:

Implementierung des gegnerischen Angriffsalgorithmus FGSM

In diesem Artikel wird hauptsächlich die Verwendung der gegnerischen Angriffsalgorithmen FGSM, PGD und BIM beschrieben, um die Erkennung handschriftlicher Ziffern zu realisieren. Der Projektcode befindet sich im folgenden Link:

Ressourcen zur Implementierung von FGSM-, PGD- und BIM-Angriffsalgorithmen

Wenn Sie es nicht von CSDN herunterladen können, können Sie dem öffentlichen Konto folgen, um es kostenlos zu erhalten: Xiaopa Cai verkauft nur Süßkartoffeln.


2 Verwenden Sie PGD, um kontroverse Stichproben zu generieren

2.1 Generierungscode für gegnerische PGD-Beispiele

class PGD(Attack):
    def __init__(self, model, eps=8 / 255, alpha=2 / 255, steps=10, random_start=True):
        super().__init__("PGD", model)
        self.eps = eps
        self.alpha = alpha
        self.steps = steps
        self.random_start = random_start
        self.supported_mode = ["default", "targeted"]

    def forward(self, images, labels):
        r"""
        Overridden.
        """

        images = images.clone().detach().to(self.device)
        labels = labels.clone().detach().to(self.device)

        if self.targeted:
            target_labels = self.get_target_label(images, labels)

        loss = nn.CrossEntropyLoss()
        adv_images = images.clone().detach()

        if self.random_start:
            # Starting at a uniformly random point
            adv_images = adv_images + torch.empty_like(adv_images).uniform_(
                -self.eps, self.eps
            )
            adv_images = torch.clamp(adv_images, min=0, max=1).detach()

        for _ in range(self.steps):
            adv_images.requires_grad = True
            outputs = self.get_logits(adv_images)

            # Calculate loss
            if self.targeted:
                cost = -loss(outputs, target_labels)
            else:
                cost = loss(outputs, labels)

            # Update adversarial images
            grad = torch.autograd.grad(
                cost, adv_images, retain_graph=False, create_graph=False
            )[0]

            adv_images = adv_images.detach() + self.alpha * grad.sign()
            delta = torch.clamp(adv_images - images, min=-self.eps, max=self.eps)
            adv_images = torch.clamp(images + delta, min=0, max=1).detach()

        return adv_images

2.2 Testergebnisse zur Generierung kontradiktorischer PGD-Proben


3 Verwendung von BIM zur Generierung kontradiktorischer Stichproben

3.1 Generierungscode für kontradiktorische BIM-Beispiele

class BIM(Attack):

    def __init__(self, model, eps=8 / 255, alpha=2 / 255, steps=10):
        super().__init__("BIM", model)
        self.eps = eps
        self.alpha = alpha
        if steps == 0:
            self.steps = int(min(eps * 255 + 4, 1.25 * eps * 255))
        else:
            self.steps = steps
        self.supported_mode = ["default", "targeted"]

    def forward(self, images, labels):
        r"""
        Overridden.
        """

        images = images.clone().detach().to(self.device)
        labels = labels.clone().detach().to(self.device)

        if self.targeted:
            target_labels = self.get_target_label(images, labels)

        loss = nn.CrossEntropyLoss()

        ori_images = images.clone().detach()

        for _ in range(self.steps):
            images.requires_grad = True
            outputs = self.get_logits(images)

            # Calculate loss
            if self.targeted:
                cost = -loss(outputs, target_labels)
            else:
                cost = loss(outputs, labels)

            # Update adversarial images
            grad = torch.autograd.grad(
                cost, images, retain_graph=False, create_graph=False
            )[0]

            adv_images = images + self.alpha * grad.sign()
            a = torch.clamp(ori_images - self.eps, min=0)
            b = (adv_images >= a).float() * adv_images + (
                adv_images < a
            ).float() * a  # nopep8
            c = (b > ori_images + self.eps).float() * (ori_images + self.eps) + (
                b <= ori_images + self.eps
            ).float() * b  # nopep8
            images = torch.clamp(c, max=1).detach()

        return images

3.2 Testergebnisse der BIM-Kontrollprobengenerierung


4 Zusammenfassung

        Aus den obigen experimentellen Ergebnissen ist ersichtlich, dass bei gleichem Epsilon die Genauigkeitsrate von FGSM > die Genauigkeitsrate von PGD > die Genauigkeitsabfallrate von BIM ist;

        Aus dem Neigungswinkel des Bildes lässt sich erkennen, dass die Genauigkeitsabfallrate von FGSM < die Genauigkeitsabfallrate von PGD < die Genauigkeitsabfallrate von BIM ist.

        Wenn das Ausmaß der Störung so begrenzt ist, dass sie für das menschliche Auge schwer zu erkennen ist, kann die Methode zur Generierung gegnerischer Stichproben verbessert werden und es können verschiedene Methoden zur Generierung gegnerischer Stichproben verwendet werden, um die gegnerische Natur der gegnerischen Stichprobe zu verbessern.


     Sollte der Artikel unangemessen oder ungenau sein, hoffe ich, dass Sie ihn verstehen und darauf hinweisen. Da einige Texte, Bilder usw. aus dem Internet stammen, kann die wahre Quelle nicht überprüft werden. Bei diesbezüglichen Streitigkeiten wenden Sie sich bitte an den Blogger, um diese zu löschen. Wenn es Fehler, Fragen oder Verstöße gibt, hinterlassen Sie bitte einen Kommentar, um den Autor zu kontaktieren, oder folgen Sie dem öffentlichen VX-Konto: Rain21321 , um den Autor zu kontaktieren.

Acho que você gosta

Origin blog.csdn.net/qq_51399582/article/details/135030590
Recomendado
Clasificación