6.1.3. Védekező mechanizmusok használata

2025.10.06.
AI Biztonság Blog

Sikeresen generáltál adverzárius példákat, és láttad, ahogy a modelled térdre kényszerül. A kérdés most már nem az, hogy sebezhető-e, hanem az, hogyan tehetjük ellenállóbbá. 

Kapcsolati űrlap

AI Biztonság kérdésed van? Itt elérsz minket:

A támadások ismerete önmagában fél siker; a másik fele a hatékony védekezés képessége. 

Az ART nem csupán támadóeszköz, hanem egy rendkívül sokoldalú védelmi arzenált is biztosít.

A védekezés azonban nem egyetlen gombnyomás. A legtöbb védelmi mechanizmus valamilyen kompromisszummal jár: gyakran csökken a modell pontossága a tiszta, nem manipulált adatokon, vagy megnő a számítási igény. A célunk AI Red Teamerként nem egy feltörhetetlen erőd építése, hanem a kockázatok megértése és a megfelelő kompromisszumok megtalálása.

Védekezési stratégiák kategorizálása

Az ART-ban implementált védelmeket nagyjából három fő kategóriába sorolhatjuk, amelyek a beavatkozás helye szerint különülnek el:

  • Adverzárius tréning (Adversarial Training): A modell tanítási folyamatát módosítjuk úgy, hogy a tréning adathalmazba adverzárius példákat is belekeverünk. Ez a legelterjedtebb és általában leghatékonyabb módszer.
  • Bemeneti előfeldolgozás (Input Preprocessing): A modellhez érkező adatokat „megtisztítjuk” vagy átalakítjuk, mielőtt a modell feldolgozná azokat. Célja az ellenséges zaj eltávolítása vagy hatástalanítása.
  • Modell-architektúra módosítása (Model Modification): Magát a neurális háló architektúráját vagy annak működését változtatjuk meg, hogy az robusztusabbá váljon. Ez gyakran a legbonyolultabb megközelítés.

Az ellenséges tréning: Immunizáció a támadások ellen

Képzeld el az adverzárius tréninget úgy, mint egy védőoltást a modelled számára. Azzal, hogy a tanítás során szisztematikusan bemutatjuk neki a támadásokat, megtanulja figyelmen kívül hagyni a rosszindulatú perturbációkat és a valódi, lényegi jellemzőkre fókuszálni. Az ART ezt a folyamatot egy rendkívül kényelmes wrapperrel, az AdversarialTrainer osztállyal egyszerűsíti le.

A folyamat logikája egyszerű: a tréner minden egyes batch feldolgozásakor generál egy adag adverzárius példát a tiszta adatokból, majd a modellt mind a tiszta, mind a generált támadó példákon tanítja.


from art.attacks.evasion import ProjectedGradientDescent
from art.defences.trainer import AdversarialTrainer

# Feltételezzük, hogy 'classifier' egy már létező ART wrapper
# és 'x_train', 'y_train' a betöltött adatok

# 1. Létrehozzuk a támadást, amit a tréning során védekezéshez használunk
# Ez egy erős, iteratív támadás, ami jó alapot ad a robusztussághoz
attack = ProjectedGradientDescent(classifier, eps=0.3, max_iter=40)

# 2. Létrehozzuk az adverzárius trénert
# A 'classifier' a tanítandó modell, az 'attack' pedig a "vakcina"
trainer = AdversarialTrainer(classifier, attacks=attack, ratio=0.5)

# 3. A modell "edzése" a támadó és a tiszta adatokkal
# A ratio=0.5 azt jelenti, hogy a batch fele tiszta, fele adverzárius adat lesz
trainer.fit(x_train, y_train, nb_epochs=20, batch_size=128)

Fontos megjegyezni, hogy az adverzárius tréning számításigényes. Mivel minden lépésben támadásokat kell generálni, a tanítási idő jelentősen megnőhet. A `ratio` paraméterrel szabályozhatod a tiszta és az adverzárius minták arányát, ami hatással van a robusztusság és a tiszta adatokon mért pontosság közötti egyensúlyra.

Előfeldolgozó védelmek: A bemenet „fertőtlenítése”

Egy másik népszerű stratégia, hogy nem a modellt, hanem a bemeneti adatot módosítjuk. Ezek a védelmek egyfajta szűrőként működnek a modell előtt. Az ART-ban ezeket a védelmeket `Preprocessor`-ként implementálhatod, és egyszerűen „ráhúzhatod” a meglévő klasszifikálódra.

Egy klasszikus példa a térbeli simítás (Spatial Smoothing), ami egy egyszerű konvolúciós szűrővel próbálja meg elmosni a finom, magas frekvenciájú adverzárius zajt.


from art.defences.preprocessor import SpatialSmoothing
from art.estimators.classification import KerasClassifier
import numpy as np

# Feltételezzük, hogy 'model' egy betanított Keras modell

# 1. Létrehozzuk a védekező mechanizmust (előfeldolgozót)
# A window_size határozza meg a simítás mértékét
spatial_smoothing = SpatialSmoothing(window_size=3)

# 2. Becsomagoljuk az eredeti modellt egy ART wrapperbe
classifier = KerasClassifier(model=model, clip_values=(0, 1))

# 3. Alkalmazzuk a védelmet a klasszifikálóra
# Az ART láncba fűzi őket: a bemenet először a védelemre, majd a modellre megy
# A preprocessor_defences egy listát vár, így több védelmet is láncba fűzhetünk
classifier.set_preprocessor_defences(preprocessor_defences=spatial_smoothing)

# Innentől a 'classifier.predict()' hívás automatikusan alkalmazza a simítást
# a bemeneti adatokon a predikció előtt.
predictions = classifier.predict(x_test)

Az előfeldolgozó védelmek előnye, hogy gyorsak és nem igényelnek újratanítást. Hátrányuk, hogy egy okos támadó, aki ismeri a védelmet, képes lehet azt is kijátszani (ezt nevezik adaptív támadásnak). Ezért fontos, hogy a védelem alkalmazása után újra lefuttassuk a támadásokat, hogy megbizonyosodjunk a hatékonyságáról.

A kör bezárul: Támadás, Védekezés, Ellenőrzés

Egy védelem implementálása sosem a folyamat vége. Egy Red Team feladat során a legfontosabb lépés a védelem hatékonyságának validálása. Miután alkalmaztál egy vagy több védelmi mechanizmust, a következő lépés mindig az, hogy az előző fejezetben megismert támadásokkal újra megpróbálod megtörni a modellt. Ez az iteratív ciklus a Red Teaming lényege.

Eredeti Modell Támadás (PGD) Sikeres Kikerülés Védett Modell (pl. Adv. Training) Támadás (PGD) Sikertelen Támadás A védekezés-tesztelés ciklusa Iteratív ellenőrzés

A következő fejezetben pontosan arról lesz szó, hogyan mérhetjük számszerűen a védelem hatékonyságát. Nem elég annyit mondani, hogy „működik” vagy „nem működik”. Szükségünk van metrikákra, amelyekkel objektíven értékelhetjük a modell robusztusságának javulását, és összehasonlíthatjuk a különböző védelmi stratégiákat.