22.2.1. Elméleti háttér áttekintése

2025.10.06.
AI Biztonság Blog

Mielőtt egyetlen sor kódot is írnánk az FGSM (Fast Gradient Sign Method) implementálásához, elengedhetetlen megérteni a mögötte rejlő logikát. Miért működik? Mi az a „gradiens”, és miért pont az előjelét használjuk? Ez a fejezet nem egy száraz matematikaóra, hanem egy intuitív alapozás, ami a gyakorlati implementációt is sokkal világosabbá teszi.

Kapcsolati űrlap

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

A gradiens, mint a megtévesztés iránytűje

Képzelj el egy neurális hálót, ami egy képet próbál osztályozni. A hálózat „döntésének” magabiztossága egyfajta többdimenziós tájként fogható fel. Ezen a tájon a völgyek a helyes, magabiztos döntéseket jelentik, a hegycsúcsok pedig a hibásakat. A bemeneti képünk – mondjuk egy macska fotója – egy pont ebben a tájban, ami ideális esetben egy mély völgyben helyezkedik el, a „macska” feliratú völgyben.

A célunk az, hogy ezt a pontot (a képet) a lehető legkisebb módosítással átmozgassuk egy másik, hibás völgybe vagy egy hegytetőre, ahol a modell már bizonytalan, vagy teljesen rossz döntést hoz. De merre induljunk?

Itt jön képbe a gradiens. A gradiens egy vektor, ami a táj adott pontján a legnagyobb meredekségű emelkedő irányába mutat. Vagyis megmondja, hogy a bemeneti képpontokat (pixeleket) hogyan kellene megváltoztatnunk ahhoz, hogy a modell hibája (a veszteségfüggvény, angolul loss function) a leggyorsabban növekedjen. Lényegében a gradiens a leghatékonyabb út a „hegyre fel”, a hibás döntés felé.

Helyes osztály (alacsony hiba) Hibás osztály (magas hiba) Eredeti kép (x) Gradiens iránya (∇J) (a hiba leggyorsabb növekedése) Módosított kép (x’)
Az FGSM alapelve: elmozdulás a gradiens irányába a hiba maximalizálása érdekében.

Az FGSM képlete és annak lebontása

Az elméletet a gyakorlatba a következő egyszerű képlet ülteti át:

x’ = x + ε ⋅ sign(∇x J(θ, x, y))

Lehet, hogy elsőre ijesztőnek tűnik, de valójában minden elemének világos, logikus jelentése van. Bontsuk szét!

Jelölés Magyarázat
x’ Az új, módosított (adversarial) bemenet. Ez lesz az a kép, amivel megpróbáljuk átverni a modellt.
x Az eredeti, „tiszta” bemenet (pl. a macskás kép).
ε (epszilon) Egy kicsi, skalár érték, ami a zaj mértékét szabályozza. Ez a mi „tekerőgombunk”: nagyobb ε erősebb, de jobban észrevehető támadást eredményez, míg a kisebb ε finomabb, de potenciálisan gyengébb módosítást jelent.
J(θ, x, y) A modell veszteségfüggvénye. Ez méri, hogy a modell (paraméterei: θ) mennyire téved az x bemenet és az igazi címke (y) alapján. A célunk ennek az értéknek a növelése.
x J(…) A veszteségfüggvény gradiense a bemeneti kép (x) szerint. Ahogy tárgyaltuk, ez a vektor mutat abba az irányba, amerre a pixeleket változtatva a veszteség a leggyorsabban nő.
sign(…) Az előjelfüggvény (signum). Ez a támadás „gyors” (Fast) része. Ahelyett, hogy a gradiens vektor pontos értékeit használnánk, csak az irányát vesszük figyelembe: minden elemét +1-re, -1-re vagy 0-ra cseréljük. Ezzel a számítás drasztikusan leegyszerűsödik, és egy egységes „zajmintázatot” kapunk.

Miért pont az előjel (sign)?

A gradiens vektor egyes elemei nagyon különböző nagyságúak lehetnek. Ha egyszerűen csak hozzáadnánk a gradiens egy kis részét a képhez, akkor egyes pixelek alig, mások pedig drasztikusan változnának. A sign függvény használatával ezt elkerüljük. Minden pixelhez vagy hozzáadunk +ε-t, vagy kivonunk belőle -ε-t (vagy nem változtatjuk, ha a gradiens nulla). Ez egyenletes, finom szemcséjű zajt eredményez, ami kevésbé feltűnő az emberi szem számára, miközben hatékonyan „löki” a képet a döntési határ rossz oldalára.

Lényegében az FGSM mögött az a feltételezés áll, hogy a neurális hálózatok lokálisan lineárisan viselkednek. Ezt a linearitást használjuk ki azzal, hogy egyetlen, jól irányzott lépést teszünk a hiba maximalizálásának irányába. A következő fejezetekben meglátod, hogy ez a meglepően egyszerű elv a gyakorlatban milyen hatékony tud lenni.