Analyse von Li Hongyis 2022 Machine Learning HW10

Vorbereitung

Hausaufgabe zehn ist Blackbox-Angriff . Um die Hausaufgabe abzuschließen, benötigen Sie den Lehrassistentencode und den Datensatz. Sie können den Datensatz automatisch herunterladen, indem Sie während der Ausführung des Codes mit dem Internet verbunden bleiben. Wenn bereits ein Datensatz vorhanden ist, können Sie den Datensatz automatisch herunterladen Sie können den Download-Datenteil des Lehrassistentencodes schließen. Folgen Sie diesem offiziellen Konto, um den Code und den Datensatz zu erhalten (Methoden finden Sie am Ende des Artikels).

Adresse einreichen

JudgeBoi: https://ml.ee.ntu.edu.tw/hw10/, Studierende, die keine Wahlfächer sind, können keine Beiträge einreichen, Studierende, die über Kommunikation diskutieren möchten, können der QQ-Gruppe beitreten: 156013866. Das Folgende ist die Jobanalyse und der detaillierte Code befindet sich am Ende des Artikels.

Einfache Basislinie (acc <= 0,70)

Methode : FGSM-Methode. FGSM führt nur einen Angriff auf das Bild aus, der der FGSM-Funktion im Lehrassistentencode entspricht und nicht geändert werden muss. Die Proxy-Modelle (Proxy-Modelle) sind resnet110_cifar10 und die Genauigkeit im angegriffenen Bild beträgt benign_acc=0,95, benign_loss=0,22678. Bei dem Angriff wird die Funktion gen_adv_examples zum Aufrufen der Funktion fgsm verwendet und die Genauigkeit verringert: fgsm_acc=0,59, fgsm_loss=2,49272.

Mittlerer Ausgangswert (Acc <= 0,50)

Methode: I-FGSM-Methode + Ensembel-Angriff . Im Vergleich zu fgsm verwendet die ifgsm-Methode mehrere fgsm-Schleifenangriffe, die der ifgsm-Funktion im Code entsprechen, ohne Änderungen. Darüber hinaus wird der Ensemble-Angriff verwendet. Diese Methode verwendet mehrere Proxy-Modelle zum Angriff. Hier müssen wir die Vorwärtsfunktion in der EnsembelNet-Klasse ändern . Die vor dem Angriff getestete Genauigkeit beträgt benign_acc = 095, benign_loss = 0,15440. Bei dem Angriff, bei dem die Funktion gen_adv_examples zum Aufrufen von emsebel_model und ifgsm verwendet wird, wird die Genauigkeit erheblich verringert: ensemble_ifgsm_acc = 0.00, emsemble_ifgsm_loss=13.41106 .

    def forward(self, x):        emsemble_logits = None        for i, m in enumerate(self.models):            emsemble_logits = m(x) if i == 0 else emsemble_logits + m(x)        return emsemble_logits/len(self.models)

Starke Grundlinie (Acc <= 0,30)

Methode: MIFGSM + Ensemble Attack (richtige Modelle auswählen) . Im Vergleich zu ifgsm hat mifgsm einen zusätzlichen Impuls hinzugefügt, um zu verhindern, dass der Angriff in lokale Maxima fällt (dies ähnelt dem Impulsprinzip im Optimierer). Hier ändern wir die mifgsm-Funktion . In der mittleren Basislinie haben wir zufällig einige Proxy-Modelle ausgewählt, was sehr blind ist. Laut der Beschreibung des Artikels Query-Free Adversarial Transfer via Undertrained Surrogates (https://arxiv.org/abs/2007.00806) sind einige nicht ausreichend trainierte Modelle kann ausgewählt werden. Die Bedeutung von unzureichendem Training umfasst zwei Aspekte: Zum einen ist die Trainingsepoche des Modells kürzer und zum anderen hat das Modell den Mindestverlust im Verifizierungssatz (Val-Set) nicht erreicht. Basierend auf einem Beispiel im Artikel verwenden wir die Trainingsmethode in https://github.com/kuangliu/pytorch-cifar, wählen das resnet18-Modell aus und trainieren für 30 Epochen (für das normale Training sind etwa 200 Epochen erforderlich, um das zu erreichen beste Ergebnisse) und es wird zu ensmbleNet hinzugefügt . Genauigkeit und Verlust nach Angriff: ensemble_mifgsm_acc = 0.00, emsemble_mifgsm_loss = 12.25672 . Sie können weitere Undertrain-Modelle ausprobieren, um den Angriff zu verstärken. ​​​​​​​​

        # TODO: Momentum calculation        grad = x_adv.grad.detach()        grad = decay * momentum + grad/(grad.abs().sum() + 1e-8)        momentum = grad        x_adv = x_adv + alpha * grad.sign()

Boss-Grundlinie (Bezug <= 0,15)

Methode: DIM-MIFGSM + Ensemble Attack (richtige Modelle auswählen) . Im Vergleich zur starken Basislinie haben wir mifgsm durch dim-mifgsm ersetzt, das dem angegriffenen Bild eine Transformation hinzufügte, um eine Überanpassung auf der Grundlage des ersteren zu vermeiden. Diese Technik stammt aus dem Artikel „Improving Transferability of Adversarial Examples with Input Diversity“ (https://arxiv.org/pdf/1803.06978.pdf). Die Transformation im Artikel besteht darin, zunächst die Größe des Bildes zufällig zu ändern und dann das Bild zufällig aufzufüllen die Originalgröße. Wir schreiben die Funktion dim_mifgsm auf der Grundlage der Funktion mifgsm, und einige von dieser hinzugefügte Codes sind wie folgt. Verwenden Sie beim Angriff die Funktion gen_adv_examples, um emsebel_model und dim_mifgsm sowie die Genauigkeit und den Verlust nach dem Angriff aufzurufen: ensemble_dmi_mifgsm_acc = 0,00, emsemble_dim_mifgsm_loss = 13,71190 . ​​​​​​​​

    if torch.rand(1).item() >= p:        #resize img to rnd X rnd        rnd = torch.randint(29, 33, (1,)).item()        x_adv = transforms.Resize((rnd, rnd))(x_adv)        #padding img to 32 X 32 with 0        left = torch.randint(0, 32 - rnd + 1, (1,)).item()        top = torch.randint(0, 32 - rnd + 1, (1,)).item()        right = 32 - rnd - left        bottom = 32 - rnd - top        x_adv = transforms.Pad([left, top, right, bottom])(x_adv)​​​​​​​

So erhalten Sie die Antwort auf Hausaufgabe zehn:

  1. Folgen Sie dem öffentlichen WeChat-Konto „ Machine Learning Craftsman “ 

  2. Schlüsselwörter für Hintergrundantworten: 202210

     

おすすめ

転載: blog.csdn.net/weixin_42369818/article/details/125604940