
Wie einfach ist es, ein tiefes neuronales Netzwerk zu veranlassen, ein Bild falsch zu klassifizieren, wenn ein Angreifer nur die Farbe eines Pixels ändern und nur die Vorhersagewahrscheinlichkeit sehen kann? Es stellt sich heraus, dass es sehr einfach ist. In vielen Fällen kann ein Angreifer sogar dazu führen, dass das Netzwerk jede gewünschte Antwort zurückgibt.
Das folgende Projekt ist eine Keras -Neuimplementierung und ein Tutorial für "One Pixel -Angriff zum Täuschen von tiefen neuronalen Netzwerken". Der offizielle Code für das Papier finden Sie hier.
Für diesen Angriff werden wir den CIFAR10 -Datensatz verwenden. Die Aufgabe des Datensatzes besteht darin, ein 32x32 -Pixel -Bild in 1 von 10 Kategorien (z. B. Vogel, Hirsch, LKW) korrekt zu klassifizieren. Der Black-Box-Angriff erfordert nur die Wahrscheinlichkeitsbezeichnungen (den Wahrscheinlichkeitswert für jede Kategorie), die vom neuronalen Netzwerk ausgegeben werden. Wir generieren kontroversende Bilder, indem wir ein Pixel auswählen und an einer bestimmten Farbe modifizieren.
Durch die Verwendung eines evolutionären Algorithmus, der als Differential Evolution (DE) bezeichnet wird, können wir iterativ kontroverse Bilder generieren, um zu versuchen, das Vertrauen (Wahrscheinlichkeit) der Klassifizierung des neuronalen Netzwerks zu minimieren.

Kredit: Pablo R. Miers Blog
Generieren Sie zunächst mehrere kontroverse Proben, die ein zufälliges Pixel modifizieren und die Bilder über das neuronale Netzwerk ausführen. Kombinieren Sie als nächstes die Positionen und Farben der vorherigen Pixel miteinander, erzeugen Sie einige weitere kontroverse Proben von ihnen und führen Sie die neuen Bilder über das neuronale Netzwerk aus. Wenn es Pixel gab, die das Vertrauen des Netzwerks aus dem letzten Schritt senkten, ersetzen Sie sie als aktuell bekannteste Lösungen. Wiederholen Sie diese Schritte für einige Iterationen; Dann geben Sie im letzten Schritt das kontroverse Bild zurück, das das Vertrauen des Netzwerks am meisten reduzierte. Wenn es erfolgreich ist, würde das Vertrauen so stark reduziert, dass eine neue (falsche) Kategorie jetzt das höchste Klassifizierungsvertrauen aufweist.
In einigen Beispielen für erfolgreiche Angriffe finden Sie unten:

Benötigen Sie eine GPU oder möchten Sie nur lesen? Sehen Sie sich das erste Tutorial -Notebook mit Google Colab an.
Um den Code im Tutorial lokal auszuführen, wird eine dedizierte GPU empfohlen, die zum Laufen mit Keras ( tensorflow-gpu ) geeignet ist. Python 3.5+ erforderlich.
git clone https://github.com/Hyperparticle/one-pixel-attack-keras
cd ./one-pixel-attack-keraspip install -r ./requirements.txtjupyter notebook ./one-pixel-attack.ipynb Um ein Modell zu trainieren, rennen Sie train.py . Das Modell wird nach jeder Epoche in das Verzeichnis networks/models überprüft (gespeichert).
Zum Beispiel, um ein Resnet mit 200 Epochen und einer Chargengröße von 128 zu trainieren:
python train.py --model resnet --epochs 200 --batch_size 128 Um Angriff auszuführen, run attack.py . Standardmäßig werden alle Modelle mit Standardparametern ausgeführt. Um die zu testenden Modelle zu spezifizieren, verwenden Sie --model .
python attack.py --model densenet capsnetDie verfügbaren Modelle sind derzeit:
lenet - Lenet, Erstes CNN -Modellpure_cnn - a nn mit nur Faltungsschichtennet_in_net - Netzwerk im Netzwerkresnet - Tiefes Restlernen für die Bilderkennungdensenet - dicht verbundene Faltungsnetzwerkewide_resnet - breite Restnetzwerkecapsnet - Dynamisches Routing zwischen Kapseln Vorläufige Ergebnisse nach mehreren Experimenten an verschiedenen Modellen. Jedes Experiment erzeugt 100 widersprüchliche Bilder und berechnet die Angriffserfolgsrate, dh das Verhältnis von Bildern, die das Modell erfolgreich dazu veranlassten, ein Bild über die Gesamtzahl der Bilder falsch zu klassifizieren. Für ein bestimmtes Modell werden mehrere Experimente basierend auf der Anzahl der Pixel ausgeführt, die in einem Bild (1,3 oder 5) modifiziert werden können. Der Differentialalgorithmus wurde mit einer Populationsgröße von 400 und einer maximalen Iterationsanzahl von 75 betrieben.
Angriff auf 1,3,5 Pixelstörungen (100 Proben)
| Modell | Parameter | Testgenauigkeit | Pixel | Angriffserfolg (ungesandet) | Angriffserfolg (gezielt) |
|---|---|---|---|---|---|
| Lenet | 62k | 74,9% | 1 | 63,0% | 34,4% |
| 3 | 92,0% | 64,4% | |||
| 5 | 93,0% | 64,4% | |||
| Reines CNN | 1,4 m | 88,8% | 1 | 13,0% | 6,67% |
| 3 | 58,0% | 13,3% | |||
| 5 | 63,0% | 18,9% | |||
| Netzwerk im Netzwerk | 970k | 90,8% | 1 | 34,0% | 10,0% |
| 3 | 73,0% | 24,4% | |||
| 5 | 73,0% | 31,1% | |||
| Resnet | 470k | 92,3% | 1 | 34,0% | 14,4% |
| 3 | 79,0% | 21,1% | |||
| 5 | 79,0% | 22,2% | |||
| Densenet | 850k | 94,7% | 1 | 31,0% | 4,44% |
| 3 | 71,0% | 23,3% | |||
| 5 | 69,0% | 28,9% | |||
| Breites resnet | 11m | 95,3% | 1 | 19,0% | 1,11% |
| 3 | 58,0% | 18,9% | |||
| 5 | 65,0% | 22,2% | |||
| Capsnet | 12 m | 79,8% | 1 | 19,0% | 0,00% |
| 3 | 39,0% | 4,44% | |||
| 5 | 36,0% | 4,44% |
Es scheint, dass das Kapselnetzwerk Capsnet zwar widerstandsfähiger gegenüber dem einen Pixelangriff als alle anderen CNNs ist, aber immer noch anfällig ist.