Az FGSM egyetlen, erőteljes lépéssel próbálja megtéveszteni a modellt. Ez a megközelítés gyors és hatékony lehet, de gyakran olyan, mint egy kalapáccsal próbálni zárat törni: néha sikerül, azonban messze nem a legkifinomultabb módszer. Mi történik, ha a „több, apró lépés” elvét alkalmazzuk? Itt lépnek színre az iteratív támadások, amelyek közül a Projected Gradient Descent (PGD) a legismertebb és legszélesebb körben használt.
Az iteratív módszerek alapgondolata, hogy ahelyett, hogy egyetlen nagy lépést tennénk a veszteségi függvény gradiensének irányába, sok kis lépést teszünk. Ez a finomhangolt megközelítés lehetővé teszi, hogy a támadó algoritmus sokkal precízebben találja meg a döntési határ legsebezhetőbb pontjait, anélkül, hogy „túllőne a célon”.
A Projected Gradient Descent (PGD) működése
A PGD a white-box támadások egyik sarokköve, és gyakran használják a modellek robusztusságának mérésére. Ha egy modell ellenáll egy erős PGD támadásnak, az már jó jel. A módszer logikája három kulcslépésre bontható, melyeket egy cikluson belül ismételget.
- Inicializálás: A támadás nem a tiszta bemeneti adatból indul, hanem egy, az eredeti adat `ε`-sugarú környezetében lévő véletlenszerű pontból. Ez a kis perturbáció segít elkerülni a lokális minimumokat és növeli az esélyét, hogy a támadás sikeres lesz.
- Iteratív gradiens lépés: Minden lépésben kiszámítjuk a veszteségi függvény gradiensét az aktuális (már perturbált) bemenetre vonatkozóan. Ezután teszünk egy kis lépést (`α` lépésközzel) a gradiens irányába, ezzel tovább növelve a veszteséget. Ez lényegében egy iterált FGSM (más néven I-FGSM vagy BIM – Basic Iterative Method).
- Projektálás (Projection): Ez a PGD névadó és legfontosabb lépése. Minden iteráció után ellenőrizzük, hogy a perturbált bemenet nem „lépett-e ki” az eredeti adat körüli `ε`-sugarú gömbből. Ha igen, akkor „visszavetítjük” (projekció) a gömb felszínére. Ez biztosítja, hogy a végső ellenséges példa ne térjen el túlságosan az eredetitől, betartva a megadott korlátot.
Képzeld el, hogy egy pórázon tartott kutyával sétálsz egy mezőn. A kutya (a perturbáció) elszaladhat bármilyen irányba (a gradiens iránya), de a póráz (az `ε` korlát) mindig visszahúzza, ha túl messzire menne. A PGD pont ezt a „pórázon tartást” valósítja meg minden egyes lépés után.
PGD pszeudokódja
A folyamat jobban megérthető egy egyszerűsített pszeudokódon keresztül, amely bemutatja az algoritmus magját.
# PGD támadás pszeudokódja
def pgd_attack(modell, kep, cimke, epsilon, alpha, iteraciok):
"""
Args:
modell: A támadott neurális háló.
kep: Az eredeti bemeneti kép.
cimke: A kép helyes címkéje.
epsilon: A maximális perturbáció (az L-végtelen gömb sugara).
alpha: A lépésköz minden iterációban.
iteraciok: Az iterációk száma.
"""
# 1. Véletlen kezdőpont az epsilon-gömbön belül
perturbacio = veletlen_zaj(kep.alak) * epsilon
adv_kep = kep + perturbacio
adv_kep = clip(adv_kep, 0, 1) # Értékek [0,1] tartományba szorítása
# Iteratív folyamat
for i in range(iteraciok):
# 2. Gradiens számítása
gradiens = szamits_gradienst(modell, adv_kep, cimke)
# 3. Gradiens lépés (gradient ascent)
adv_kep = adv_kep + alpha * sign(gradiens)
# 4. Projektálás: a perturbáció korlátozása az epsilon-gömbre
# Biztosítjuk, hogy az eltérés az eredeti képtől ne legyen nagyobb epszilonnál
eltolodas = clip(adv_kep - kep, -epsilon, epsilon)
adv_kep = kep + eltolodas
# Biztosítjuk, hogy a kép pixelértékei érvényes tartományban maradjanak
adv_kep = clip(adv_kep, 0, 1)
return adv_kep
A `clip` függvény itt kulcsfontosságú. Kétszer is használjuk: egyszer, hogy a perturbáció ne lépje túl az `epsilon` korlátot (ez a projektálás), másodszor pedig azért, hogy a kép pixelértékei az érvényes [0, 1] vagy [0, 255] tartományban maradjanak.
Összehasonlítás: FGSM vs. PGD
Míg az FGSM egy gyors, „nyers” támadás, a PGD egy sokkal alaposabb és jellemzően sikeresebb módszer. A red teaming során a választás a kettő között a céltól függ: gyors sebezhetőségi felmérésre az FGSM is elég lehet, de egy modell robusztusságának alapos teszteléséhez a PGD a de facto szabvány.
| Jellemző | FGSM (Fast Gradient Sign Method) | PGD (Projected Gradient Descent) |
|---|---|---|
| Megközelítés | Egyetlen, nagy lépés a gradiens előjelének irányába. | Több, kis lépés a gradiens irányába, minden lépés után projektálással. |
| Sebesség | Nagyon gyors, egyetlen backpropagation szükséges. | Lassabb, minden iteráció egy backpropagationt igényel. |
| Hatékonyság | Mérsékelt. Sok modell, különösen az ellenséges tréninggel védettek, könnyen kivédik. | Nagyon magas. Az egyik legerősebb first-order támadásnak számít. |
| Felhasználás | Gyors sebezhetőségi tesztek, ellenséges tréning során a sebesség miatt. | Robusztusság benchmarkolása, modellek alapos biztonsági auditja. |
| Komplexitás | Alacsony, könnyen implementálható. | Mérsékelt, több hiperparamétert (lépésköz, iterációk száma) igényel. |
Fontos megjegyezni, hogy a PGD ereje a véletlenszerűsített kezdőpontban és a finom iteratív lépésekben rejlik. Ez a kombináció sokkal nehezebbé teszi a védekezést, mivel a támadás több különböző útvonalon is „keresgélhet” a modell döntési terében, hogy megtalálja a legközelebbi pontot, ahol a klasszifikáció megváltozik.