4.2.2 PGD és iteratív módszerek

2025.10.06.
AI Biztonság Blog

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.

Kapcsolati űrlap

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

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.

  1. 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.
  2. 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).
  3. 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.

ε-gömb x (eredeti) x₀ (véletlen start) xᵢ₊₁ (lépés) Projektálás x’ (ellenséges) (A diagram a folyamatot illusztrálja, nem egy valós futást ábrázol)

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.