Seuraava artikkeli auttaa sinua: Opas AdverTorch: Python-työkalupakki kilpailevaan kestävyyteen
AdverTorch on työkalusarja kilpailevan kestävyyden tutkimiseen. Se sisältää erilaisia hyökkäys- ja puolustustoteutuksia sekä vankkoja koulutusmekanismeja. AdverTorch perustuu PyTorchiin ja hyödyntää dynaamisen laskennallisen graafin etuja luodakseen ytimekkäitä ja tehokkaita viitetoteutuksia. Joten käymme läpi tämän työkalusarjan, sen suunnitteluperiaatteet ja miten se toimii tässä artikkelissa. Tärkeät kohdat, joita tässä artikkelissa tarkastellaan, mainitaan alla.
Sisällysluettelo
- Mikä on vastavuoroinen hyökkäys?
- Kuinka AdverTorchia voidaan käyttää?
- Hyökkäyksen toteuttaminen
Keskustellaan ensin vastakkaisesta hyökkäyksestä.
Mikä on vastavuoroinen hyökkäys?
Vastuulliset hyökkäykset ovat petollisia tekoja, joiden tarkoituksena on heikentää koneoppimisen suorituskykyä, aiheuttaa mallien poikkeamia tai päästä käsiksi arkaluontoisiin tietoihin. Viime vuosina syvän oppimisen nousu ja sen sisällyttäminen monenlaisiin sovelluksiin on kuitenkin herättänyt uudelleen kiinnostuksen kilpailevaa koneoppimista kohtaan.
Turvallisuusalalla on kasvava pelko siitä, että kilpailevia puutteita voitaisiin käyttää hyökkäämään tekoälyllä toimivia järjestelmiä vastaan. Toisin kuin perinteiset ohjelmistot, jotka vaativat insinöörejä asettamaan ohjeet ja säännöt manuaalisesti, koneoppimisalgoritmit oppivat kokemuksen kautta.
Esimerkiksi kaistantunnistusjärjestelmän suunnittelua varten kehittäjä luo koneoppimisalgoritmin ja kouluttaa sitä syöttämällä sille suuren määrän merkittyjä kuvia katukaisista eri kulmista ja valaistusolosuhteista. Koneoppimisalgoritmi hienosäädetään sitten havaitsemaan toistuvia kuvioita katujen kuvissa. Jos algoritmirakenne on oikea ja harjoitustietoja on riittävästi, malli pystyy havaitsemaan kaistat uusista kuvista ja videoista suurella tarkkuudella.
Koneoppimisalgoritmit, huolimatta niiden tehokkuudesta vaikeilla alueilla, kuten tietokonenäön ja puheentunnistuksen, ovat tilastollisia johtopäätöksiä: monimutkaisia matemaattisia toimintoja, jotka muuntavat syötteet lähdöiksi.
Kun koneoppimisjärjestelmä tunnistaa kuvan sisältävän tietyn kohteen, se on havainnut, että kuvan pikseliarvot ovat tilastollisesti samankaltaisia kuin muut harjoituksen aikana tutkitut valokuvat kohteesta.
Vastuulliset hyökkäykset hyödyntävät tätä ominaisuutta hämmentämään koneoppimisjärjestelmiä peukaloimalla niiden syöttötietoja. Haitallinen toimija voi esimerkiksi vaikuttaa koneoppimisalgoritmiin tunnistamaan kuvan joksikin muuksi lisäämällä siihen pieniä ja huomaamattomia pikseleitä.
Vastakkaisissa hyökkäyksissä käytettävien häiriöiden tyypit määräytyvät kohdetietotyypin ja halutun vaikutuksen mukaan. Jotta uhkamalli olisi kohtuullinen vastakkainen, se on räätälöitävä erilaisille tietomuodoille. Esimerkiksi pientä datahäiriötä on järkevää pitää kuvien ja äänien uhkamallina, koska ihminen ei havaitse sitä selvästi, mutta se voi aiheuttaa kohdemallin huonon toiminnan, mikä johtaa ristiriitaan ihmisen ja koneen välillä.
Joissakin tietotyypeissä, kuten tekstissä, häiriö saattaa kuitenkin häiritä semantiikkaa, ja ihminen voi tunnistaa sen helposti vaihtamalla sanaa tai kirjainta. Tämän seurauksena tekstin uhkamallin tulisi olla erilainen kuin kuvan tai äänen uhkamallin.
Kuinka AdverTorchia voidaan käyttää?
AdverTorch on Borealis AI -tutkimuslaboratorion kehittämä työkalu, joka käyttää useita hyökkäys- ja puolustustaktiikoita. AdverTorchin tavoitteena on antaa tutkijoille työkalut, joita he tarvitsevat tutkiakseen kaikkia vastakkaisten hyökkäysten ja puolustuksen alueita.
Hyökkäykset, puolustukset ja perusteellinen harjoittelu sisältyvät kaikki AdverTorchin nykyiseen versioon. Advorch pyrkii selkeisiin ja johdonmukaisiin API-liittymiin hyökkäyksiin ja puolustukseen, tiiviisiin viitetoteutuksiin PyTorchin dynaamisten laskentaverkkojen avulla ja nopeisiin suorituksiin GPU-pohjaisilla PyTorch-toteutuksilla, jotka ovat elintärkeitä hyökkäävien silmukkatekniikoiden, kuten kontradiktorisen koulutuksen, kannalta.
Erilaiset hyökkäys- ja puolustusstrategiat, jotka tulevat alla olevien alueiden mukana.
Nopeat gradientti (merkki) -menetelmät, ennustetun gradientin laskeutumismenetelmät, Carlini-Wagner Assault, tilamuutoshyökkäykset ja muut gradienttipohjaiset hyökkäykset ovat saatavilla. Yhden pikselin hyökkäys, paikallinen etsintähyökkäys ja Jacobian näkyvyyskartan hyökkäys ovat joitakin gradienttivapaita lähestymistapoja.
Tiettyjen hyökkäysten lisäksi se sisältää myös kääreen Backward Pass Differentiable Approximation (BPDA) -hyökkäykselle, joka parantaa gradienttipohjaisia hyökkäyksiä puolustettuja malleja vastaan, joissa on erottumattomia tai gradienttia hämärtäviä komponentteja.
Kirjasto sisältää kaksi puolustusstrategiaa: esikäsittelyyn perustuvat puolustukset ja ii) vankka koulutus. Se toteuttaa JPEG-suodattimen, bittien puristamisen ja usean tyyppiset spatiaaliset tasoitussuodattimet esikäsittelyyn perustuvaa suojaa varten. Heidän virallisessa tietovarastossaan on esimerkki vankasta koulutuslähestymistavasta. MNIST-tietojoukossa on skripti kontradiktorista harjoittelua varten, voit tarkistaa sen täältä.
Hyökkäyksen toteuttaminen
Tässä osiossa toteutamme L2PDGAttackin, joka on gradienttipohjainen hyökkäys. Tämän hyökkäyksen toteuttamiseksi meidän on asennettava ja tuotava vastaavat riippuvuudet. Kirjastoa ei ole optimoitu Pytorchin uusimmalle versiolle, joten sen versio on asennettava tämän hyökkäyksen suorittamiseksi.
#asenna taskulamppu! pip install torch==1.3.0 torchvision==0.4.1 # asennuskirjasto ! pip install advertorch import torch import torch.nn as nn from torchvision.models import vgg16 # esikäsittelyriippuvuudet osoitteesta advertorch.utils tuonti ennustaa_from_logits osoitteesta advertorch_examples.utils import ImageNetClassNameLookup from advertorch. .utils import bhwc2bchw osoitteesta advertorch_examples.utils import bchw2bhwc # lataa hyökkäysluokka osoitteesta advertorch.attacks import L2PGDAttack device = “cuda” if torch.cuda.is_available() else “cpu”
Tässä aiomme tehdä hyökkäyksen esikoulutettua siirtooppimismallia, nimeltään VGG16, vastaan sen esiopetetuilla painoilla ImageNet-kilpailua varten.
# lataa mallin malli = vgg16(pretrained=True) model.eval() model = nn.Sequential(malli) malli = model.to(device)
Lataamme nyt kuvan ja siihen liittyvän tunnisteen, jota käytetään myöhemmin hyökkäyksen vakavuuden tarkistamiseen.
# lataa kuva ja indeksi oikealle tunnisteelle np_img = get_panda_image() img = torch.tensor(bhwc2bchw(np_img))[None, :, :, :].float().to(device) label = torch.tensor([388, ]).long().to(device) # true label imagenet_label2classname = ImageNetClassNameLookup()
Alla on joitain apuohjelman käyttäjän määrittämiä funktioita, joita käytetään visualisoimaan tulos ja muunnosmenettely.
def tensori2npimg(tensori): return bchw2bhwc(tensori[0].cpu().numpy()) def _show_images(parannus=127): np_advimg = tensori2npimg(advimg) np_perturb = tensor2npimg(advimg – img) pred = imagenet_label2classname(predict_from_ellabdg))) _from_logits(malli (advimg))) plt.figure(figsize=(10, 5)) plt.subplot(1, 3, 1) plt.imshow(np_img) plt.axis(“off”) plt.title(“alkuperäinen kuva\n ennuste: {}.format(pred)) plt.subplot(1, 3, 2) plt.imshow(np_perturb * tehosta + 0.5) plt.axis(“off”) plt.title(“Häiriö”) plt. subplot(1, 3, 3) plt.imshow(np_advimg) plt.axis(“off”) plt.title(“Häiriintynyt kuva\n ennuste: {}”.format(advpred)) plt.show()
Suoritetaan nyt hyökkäys. Hyperparametrit, jotka määritimme käytettäessä L2PGDAttackia, ovat seuraavat:
- nb_iter on iteraatioiden lukumäärä silmukassa.
- eps_iter määrittää hyökkäysaskeleen koon.
- rand_init on funktio, joka käynnistää satunnaislukugeneraattorin (valinnainen bool) Alustus satunnaisesti.
- kohde on määrittää, onko hyökkäys suunnattu vai ei.
vastustaja = L2PGDAttack( malli, eps=1., eps_iter=1.*2/40, nb_iter=40, rand_init=Farse, targeted=false) advimg = vastustaja.häiriö(kuva, otsikko) _show_images()
Ja tässä tulos,
Viimeiset sanat
Tämän artikkelin kautta olemme keskustelleet vastakkaisista hyökkäyksistä ja siitä, kuinka nämä hyökkäykset voivat olla tapauksia jopa SOTA ML -arkkitehtuureissa, jotka perustuvat tietokonenäköön ja äänidataan. Mallin kestävyyden varmistamiseksi olemme keskustelleet Python-pohjaisesta työkalusta nimeltä AdverTorch. Tämä perustuu PyTorchiin, joka yhdistää tietyt hyökkäys- ja puolustusstrategiat, joissa muut kirjastot keskittyvät vain hyökkäysstrategioihin, kuten FoolBox. Lopulta olemme käytännössä nähneet, kuinka voimme hyökätä esikoulutettua siirtooppimismallia, kuten VGG16, vastaan.