Alle Antworten hier sind großartig, aber aus irgendeinem Grund wurde bisher noch nichts darüber gesagt, warum dieser Effekt Sie nicht überraschen sollte . Ich werde die Lücke füllen.
Lassen Sie mich mit einer Voraussetzung beginnen, die für das Funktionieren unbedingt erforderlich ist: Der Angreifer muss die Architektur des neuronalen Netzwerks kennen (Anzahl der Schichten, Größe jeder Schicht usw.). Außerdem kennt der Angreifer in allen Fällen, die ich selbst untersucht habe, den Schnappschuss des in der Produktion verwendeten Modells, dh alle Gewichte. Mit anderen Worten, der "Quellcode" des Netzwerks ist kein Geheimnis.
Sie können ein neuronales Netzwerk nicht täuschen, wenn Sie es wie eine Black Box behandeln. Und Sie können nicht dasselbe Täuschungsimage für verschiedene Netzwerke wiederverwenden. Tatsächlich muss man das Zielnetzwerk selbst "trainieren", und hier meine ich mit Training Vorwärts- und Rückwärtspässe, die jedoch speziell für einen anderen Zweck hergestellt wurden.
Warum funktioniert es überhaupt?
Hier ist die Intuition. Bilder sind sehr hochdimensional: Auch der Raum kleiner 32x32-Farbbilder hat 3 * 32 * 32 = 3072
Abmessungen. Der Trainingsdatensatz ist jedoch relativ klein und enthält reale Bilder, die alle eine gewisse Struktur und nette statistische Eigenschaften aufweisen (z. B. Farbglattheit). Der Trainingsdatensatz befindet sich also auf einer winzigen Mannigfaltigkeit dieses riesigen Bildraums.
Die Faltungsnetzwerke funktionieren sehr gut auf dieser Mannigfaltigkeit, wissen aber im Grunde nichts über den Rest des Raums. Die Klassifizierung der Punkte außerhalb des Verteilers ist nur eine lineare Extrapolation basierend auf den Punkten innerhalb des Verteilers. Kein Wunder, dass einzelne Punkte falsch hochgerechnet werden. Der Angreifer benötigt nur einen Weg, um zu dem nächstgelegenen dieser Punkte zu navigieren.
Beispiel
Lassen Sie mich Ihnen ein konkretes Beispiel geben, wie man ein neuronales Netzwerk zum Narren hält. Um es kompakt zu machen, werde ich ein sehr einfaches logistisches Regressionsnetzwerk mit einer Nichtlinearität (Sigmoid) verwenden. Bei einer 10-dimensionalen Eingabe x
wird eine einzelne Zahl berechnet p=sigmoid(W.dot(x))
, die die Wahrscheinlichkeit von Klasse 1 (gegenüber Klasse 0) darstellt.
Angenommen, Sie kennen W=(-1, -1, 1, -1, 1, -1, 1, 1, -1, 1)
und beginnen mit einer Eingabe x=(2, -1, 3, -2, 2, 2, 1, -4, 5, 1)
. Ein Forward Pass ergibt eine sigmoid(W.dot(x))=0.0474
Wahrscheinlichkeit von 95%, die x
beispielsweise Klasse 0 ist.
Wir möchten ein weiteres Beispiel finden y
, das sehr nahe kommt, x
aber vom Netzwerk als 1 klassifiziert wird. Beachten Sie, dass x
es 10-dimensional ist, sodass wir die Freiheit haben, 10 Werte zu verschieben, was sehr viel ist.
Da W[0]=-1
es negativ ist, ist es besser, ein kleines y[0]
zu haben, um einen kleinen Gesamtbeitrag zu leisten y[0]*W[0]
. Also lasst uns machen y[0]=x[0]-0.5=1.5
. Ebenso W[2]=1
positiv ist , so ist es besser , zu erhöhen , y[2]
um y[2]*W[2]
größer: y[2]=x[2]+0.5=3.5
. Und so weiter.
Das Ergebnis ist y=(1.5, -1.5, 3.5, -2.5, 2.5, 1.5, 1.5, -3.5, 4.5, 1.5)
und sigmoid(W.dot(y))=0.88
. Mit dieser einen Änderung haben wir die Wahrscheinlichkeit der Klasse 1 von 5% auf 88% verbessert!
Verallgemeinerung
Wenn Sie sich das vorherige Beispiel genauer ansehen, werden Sie feststellen, dass ich genau wusste, wie man Optimierungen vornimmt x
, um es in die Zielklasse zu verschieben, da ich den Netzwerkgradienten kannte. Was ich tat, war eigentlich eine Rückübertragung , aber in Bezug auf die Daten, anstelle von Gewichten.
Im Allgemeinen beginnt der Angreifer mit der Zielverteilung (0, 0, ..., 1, 0, ..., 0)
(überall Null, mit Ausnahme der Klasse, die er erreichen möchte), breitet sich auf die Daten zurück und unternimmt einen winzigen Schritt in diese Richtung. Netzwerkstatus wird nicht aktualisiert.
Jetzt sollte klar sein, dass es eine gemeinsame Funktion von Feed-Forward-Netzwerken ist, die sich mit einer kleinen Datenvielfalt befassen, unabhängig davon, wie tief sie ist oder welche Art von Daten (Bild, Audio, Video oder Text).
Potection
Der einfachste Weg, um zu verhindern, dass das System betrogen wird, ist die Verwendung eines Ensembles neuronaler Netze, dh eines Systems, das die Stimmen mehrerer Netze bei jeder Anfrage zusammenfasst. Es ist viel schwieriger, die Ausbreitung in Bezug auf mehrere Netzwerke gleichzeitig rückgängig zu machen. Der Angreifer versucht möglicherweise, dies nacheinander und netzwerkweise zu tun, aber das Update für ein Netzwerk kann leicht die Ergebnisse eines anderen Netzwerks verfälschen. Je mehr Netzwerke verwendet werden, desto komplexer wird ein Angriff.
Eine andere Möglichkeit besteht darin, die Eingabe zu glätten, bevor sie an das Netzwerk übergeben wird.
Positive Verwendung der gleichen Idee
Sie sollten nicht denken, dass die Rückübertragung auf das Image nur negative Anwendungen hat. Eine sehr ähnliche Technik, die Entfaltung genannt wird , wird zur Visualisierung und zum besseren Verständnis dessen, was Neuronen gelernt haben, verwendet.
Diese Technik ermöglicht es, ein Bild zu synthetisieren, das ein bestimmtes Neuron zum Feuern bringt, und im Grunde visuell zu sehen, "wonach das Neuron sucht", was Faltungs-Neuronale Netze im Allgemeinen deutlicher macht.