Bis 2014 hatten modernste neuronale Netze einen bekannten, aber unerklärten Fehler: Ändert man ein Bild durch eine winzige, gezielt worst-case-Störung — oft zu klein, um sie mit dem menschlichen Auge zu sehen —, klassifiziert das Netz es mit hoher Konfidenz falsch. Dasselbe manipulierte Bild täuschte tendenziell viele verschiedene Architekturen, die auf unterschiedlichen Daten trainiert worden waren, was nahelegte, dass der Fehler im Trainingsrezept selbst lag und nicht in einem einzelnen Netz.

Frühe Erklärungen machten die vermeintliche extreme Nichtlinearität tiefer Netze sowie Overfitting verantwortlich, doch übliche Gegenmaßnahmen wie Dropout, Pretraining und Modellmittelung beseitigten die Anfälligkeit nicht. Goodfellow, Shlens und Szegedy prüften die entgegengesetzte Annahme: Die Architekturen, die sich gut trainieren lassen (ReLU, Maxout, LSTM), sind bewusst nahezu linear, und in einem hochdimensionalen Eingaberaum genügt Linearität allein. Bei Hunderttausenden Pixeln, von denen jedes um weniger als ein Bit Bildpräzision verschoben wird, summieren sich die kleinen Terme in einem Skalarprodukt zu einer großen Änderung in der Aktivierung des Netzes.

Diese Sichtweise ergab einen schnellen Angriff: Linearisiere die Kostenfunktion um die Eingabe und störe sie durch das Vorzeichen des Gradienten, was einen einzigen Backpropagation-Durchlauf kostet. Auf MNIST trieb die Methode ein flaches Softmax-Modell auf 99,9 % Fehler und ein Maxout-Netz auf 89,4 % Fehlklassifikation, beide mit hoher Konfidenz; auf ImageNet verwandelte eine Störung von nur 0,007 pro Pixel einen Panda in einen Gibbon. Die billige Erzeugung veränderte auch die Verteidigung: Adversariales Training mit solchen Beispielen ergab eine Regularisierung über Dropout hinaus und senkte den Fehler auf dem Testsatz.

Die Arbeit entmystifizierte den Fehler auch für praktizierende Ingenieure. Ende Dezember 2015 veröffentlichte Codewords des Recurse Center Julia Evans' illustrierte Schritt-für-Schritt-Anleitung, die den Angriff auf GoogLeNet aus einem dockerisierten Notebook reproduzierte — ein schwarzes Bild wurde zu einem Papiertuch und ein Panda zu einem Geier —, und der Hacker-News-Thread erzielte 268 Punkte und 66 Kommentare, wobei Leser anmerkten, dass das Paper weiterhin auf spätere Wellen neuronaler Netze zutraf.

Linearität annehmen: entlang des Vorzeichens des Gradienten stören und dann mit diesen Angriffen trainieren

Frühere Versuche machten Nichtlinearität und Overfitting verantwortlich; die entgegengesetzte Annahme machte adversariale Beispiele vorhersagbar statt rätselhaft

Der Mechanismus skaliert mit der Dimension: Störungen unterhalb der Präzision eines Sensors summieren sich über Hunderttausende Pixel dennoch zu einer entscheidenden Änderung der Ausgabe

Ein Backpropagation-Durchlauf pro Angriff machte adversariales Training praktikabel und verwandelte einen Fehlermodus in einen Regularisierer, der Dropout allein übertraf

Es erklärte den Transfer: Jedes Modell, das sich in hohen Dimensionen linear verhält, teilt den blinden Fleck, sodass ein Beispiel viele Architekturen und Trainingsdatensätze täuscht

Wenn ein Modell auf eine Weise scheitert, die rätselhaft erscheint, prüfe zuerst die billigste Erklärung — wenn du den Fehler billig erzeugen kannst, kannst du auch billig dagegen trainieren.

Die erste Version erschien am 20. Dezember 2014 auf arXiv und wurde im März 2015 überarbeitet; ihr Bild vom Panda zum Gibbon bei einer Störung von 0,007 wurde zum kanonischen Bild eines adversarialen Beispiels. Ein Jahr später ermöglichte Julia Evans' Codewords-Anleitung Lesern, den Trick auf einem Laptop ohne GPU zu reproduzieren — ein Panda wurde zu einem Geier, ein schwarzer Bildschirm zu einem Papiertuch —, und erzielte 268 Punkte und 66 Kommentare auf Hacker News, wo ein Leser das Paper als weiterhin weitgehend anwendbar auf spätere Wellen neuronaler Netze bezeichnete.

DEN BELEGEN FOLGEN

Die Quellen

  1. Explaining and Harnessing Adversarial Examples (arXiv:1412.6572) arXiv · arxiv.org ·
  2. How to trick a neural network into thinking a panda is a vulture Codewords (Recurse Center) · codewords.recurse.com
  3. How to trick a neural network into thinking a panda is a vulture — Hacker News discussion Hacker News · news.ycombinator.com ·