06 · Sieci · 5 min czytania · aktualizacja
Czym są przykłady kontradyktoryjne (adversarial examples) i dlaczego oszukują sieci?
W skrócie
Przykład kontradyktoryjny to wejście zmienione niemal niezauważalnie, lecz celowo tak, by model się pomylił. Ujawnia, że sieci opierają się na kruchych cechach.
Co to jest
Przykład kontradyktoryjny (ang. adversarial example, też „przykład adwersarialny”) to dane wejściowe celowo zmodyfikowane drobną, często niewidoczną dla człowieka perturbacją, która powoduje, że model uczenia maszynowego zwraca błędną odpowiedź, zwykle z wysoką pewnością. Perturbacji nie wybiera się losowo, tylko oblicza, wykorzystując gradient modelu względem wejścia. Zjawisko opisali Szegedy i in. w 2014 roku w sieciach rozpoznających obrazy.
Klasyczny przykład: zdjęcie pandy, rozpoznawane poprawnie, po dodaniu szumu o amplitudzie rzędu najmniejszego kroku jasności w 8-bitowym obrazie staje się dla sieci „gibonem” z pewnością powyżej 99%. Człowiek nie widzi różnicy między obrazkami. Podobne ataki działają na modele mowy, tekstu i danych tabelarycznych, a w świecie fizycznym na wydrukowane naklejki zmieniające odczytanie znaków drogowych.
Zjawisko ma dwa oblicza. Praktyczne: to zagrożenie bezpieczeństwa systemów, które ktoś może chcieć oszukać, np. filtrów treści czy systemów rozpoznawania twarzy. Poznawcze: pokazuje, że sieć osiągająca ludzką trafność na zbiorze testowym może rozwiązywać zadanie zupełnie inaczej niż człowiek.
Mechanizm — dlaczego tak działa
Najprostsze wyjaśnienie podali Goodfellow, Shlens i Szegedy (2015) i dotyczy ono liniowości w wysokim wymiarze. Rozważmy wynik liniowy w·x i perturbację η, w której każda współrzędna zmienia się o ±ε zgodnie ze znakiem wagi. Wynik zmienia się o ε·Σ|wᵢ|. Każda pojedyncza zmiana jest maleńka, ale przy n wymiarach sumuje się do wartości rosnącej liniowo z n. Obraz 224×224×3 ma ponad 150 tysięcy wymiarów, więc nawet ε niewidoczne dla oka może przesunąć wynik bardzo daleko.
Sieci z ReLU są odcinkowo liniowe, a więc w małym otoczeniu punktu zachowują się dokładnie jak model liniowy. Na tym opiera się metoda FGSM (fast gradient sign method): x_adv = x + ε·sign(∇ₓL). Liczymy gradient straty względem pikseli (tak samo jak przy treningu, tylko względem wejścia zamiast wag) i przesuwamy każdy piksel o ε w kierunku, który najbardziej zwiększa błąd. Iteracyjne wersje tej metody, np. PGD, są jeszcze silniejsze.
Druga perspektywa, zaproponowana przez Ilyasa i in. (2019), mówi, że przykłady kontradyktoryjne to nie błędy, tylko cechy. Dane naturalne zawierają subtelne, ale prawdziwie predykcyjne wzorce, np. drobne tekstury, których człowiek nie zauważa. Sieć minimalizująca stratę wykorzysta każdy taki wzorzec. Atak zmienia właśnie te niewidoczne dla nas cechy, a sieć reaguje zgodnie z tym, czego się nauczyła.
Ważny jest kierunek. Losowy szum tej samej wielkości zwykle nic nie psuje, bo w wysokim wymiarze losowy kierunek jest prawie prostopadły do gradientu i jego efekty się znoszą. Atak wybiera jedyny kierunek, w którym wszystkie drobne zmiany sumują się na szkodę modelu.
Obrona jest trudna. Najskuteczniejszy znany sposób to trening kontradyktoryjny: generowanie ataków w trakcie treningu i uczenie na nich. Kosztuje kilkukrotnie więcej obliczeń i zwykle obniża trafność na czystych danych. Wiele zaproponowanych obron okazało się złudnych, bo jedynie maskowało gradient, utrudniając znalezienie ataku, zamiast usuwać podatność.
Na przykładzie
Sieć 64-64-10 z ReLU wytrenowana na zbiorze Digits 8×8 (MLPClassifier, random_state=0, piksele podzielone przez 16) poprawnie klasyfikuje 97,3% z 450 obrazków testowych. Jasność piksela przyjmuje wartości od 0 do 16. Atak FGSM przesuwający każdy piksel o pół poziomu jasności obniża trafność do 89,3%, o jeden poziom do 74,7%, o dwa poziomy do 23,8%, a o trzy do 2,0%. Losowa zmiana o te same ±2 poziomy (każdy piksel w górę lub w dół z rzutu monetą) zostawia trafność na poziomie 97,1%.
To dobrze pokazuje rolę kierunku. Przy ±2 przeciętny piksel zmienia się o 1,45 poziomu (część trafia na granicę zakresu 0–16), czyli o mniej więcej jedną dziesiątą skali. Szum losowy tej wielkości jest dla sieci obojętny, a ten sam budżet zmian ułożony zgodnie ze znakiem gradientu odbiera jej trzy czwarte poprawnych odpowiedzi. Nawet przy ±4 poziomach losowy szum obniża trafność tylko do 85,6%, podczas gdy FGSM już przy ±3 sprowadza ją niemal do zera.
Dane: Digits (ręcznie pisane cyfry 8×8)
W praktyce
- FGSM w PyTorch to kilka linijek:
x.requires_grad_(True), obliczenie straty,loss.backward(), potemx_adv = (x + eps * x.grad.sign()).clamp(0, 1). - Do rzetelnej oceny odporności używaj silnych, standardowych ataków (PGD z wieloma krokami, zestaw AutoAttack) i bibliotek takich jak
torchattackslub Adversarial Robustness Toolbox. - Trening kontradyktoryjny: w każdym kroku zastąp część batcha przykładami z ataku PGD; typowe budżety dla obrazów to ε = 8/255 w normie maksimum.
- Jeśli obrona sprawia, że ataki gradientowe nagle przestają działać, a ataki bez gradientu nadal działają, prawdopodobnie maskuje gradient, a nie chroni model.
- Augmentacja danych i losowy szum poprawiają odporność na naturalne zaburzenia, ale nie na celowe ataki.
Najczęstsze pytania
- Czy przykłady kontradyktoryjne przenoszą się między modelami?
- Często tak. Atak przygotowany na jednym modelu nierzadko oszukuje też inny, wytrenowany na podobnych danych, nawet o innej architekturze. To umożliwia ataki „w ciemno”, bez dostępu do wag atakowanego modelu.
- Czy ludzie też są podatni?
- W ograniczonym stopniu. Istnieją złudzenia optyczne i badania pokazujące, że niektóre silne perturbacje lekko wpływają na ludzką percepcję przy krótkiej ekspozycji. Skala podatności jest jednak nieporównywalna z sieciami, które zmieniają decyzję pod wpływem zmian niewidocznych dla człowieka.
- Czy odporny model może być równie dokładny?
- Zwykle płaci się za odporność niższą trafnością na czystych danych. Tsipras i in. (2019) pokazali, że w pewnych sytuacjach jest to nieuniknione, bo odporność wymaga rezygnacji z cech słabo, ale prawdziwie predykcyjnych.
Źródła
- Szegedy C., Zaremba W., Sutskever I., Bruna J., Erhan D., Goodfellow I., Fergus R., „Intriguing properties of neural networks”, ICLR 2014.
- Goodfellow I. J., Shlens J., Szegedy C., „Explaining and Harnessing Adversarial Examples”, ICLR 2015.
- Madry A., Makelov A., Schmidt L., Tsipras D., Vladu A., „Towards Deep Learning Models Resistant to Adversarial Attacks”, ICLR 2018.
- Ilyas A., Santurkar S., Tsipras D., Engstrom L., Tran B., Madry A., „Adversarial Examples Are Not Bugs, They Are Features”, NeurIPS 2019.
- Tsipras D., Santurkar S., Engstrom L., Turner A., Madry A., „Robustness May Be at Odds with Accuracy”, ICLR 2019.