Metode post-hoc pentru debiasarea retelelor neuronale

Yash Savani, Colin White, Naveen Sundar Govindarajulu.

arXiv: 2006.08564 .

Trei noi tehnici post-hoc

In aceasta lucrare, introducem trei noi tehnici de reglare fina pentru a reduce prejudecatile in retelele neuronale pre-antrenate: perturbatie aleatorie, optimizare stratificata si reglare fina contradictorie. Toate cele trei tehnici functioneaza pentru orice constrangere de echitate a grupului. Includem cod care compara cele trei metode propuse de noi cu trei metode populare de post-procesare, in trei seturi de date furnizate de aif360 si trei masuri populare de partinire.

Cerinte

  • piyaml
  • neclintit
  • torta
  • aif360 == 0.3.0rc0
  • sklearn
  • numba
  • jupiter

Instalati cerintele folosind

$ pip install -r requirements.txt

Cum sa va debiasati propria retea neuronala

De ce ai nevoie:

  • Arhitectura modelului (modulul PyTorch acceptat in prezent)
  • Punct de verificare model (tip de fisier acceptat in prezent: .pt)
  • Set de date de validare pe care aveti de gand sa faceti debiasuri pe baza
    • Foarte simplu daca modelul dvs. foloseste unul dintre aceste 10 seturi de date https://pytorch.org/docs/stable/torchvision/datasets.html
    • Pentru un set de date personalizat, creati o clasa rapida DataLoader folosind acest tutorial https://pytorch.org/tutorials/beginner/data_loading_tutorial.html
  • Atribut protejat (de exemplu, „rasa”)
  • Atribut de predictie (de exemplu, „zambind”)
  • (optional) parametru de polarizare reglabil lambda
    • lambda = 0,9 inseamna ca vreau ca modelul meu sa fie aproape complet debiasat
    • lambda = 0,1 inseamna, imi pasa foarte mult de acuratete si minim de debiasing
    • Va recomandam lambda intre 0,5 si 0,75

Pasi pentru a va debia modelul

Urmati exemplul dat in test_post_hoc_lib.py. Va trebui sa mosteniti din clasa DebiasModel in post_hoc_lib.py si sa suprascrieti urmatoarele metode cu cele adecvate pentru modelul dvs.:

De asemenea, puteti suprascrie parametrul lambda si masurarea de prejudecata pe care doriti sa o utilizati pentru obiectivul din constructorul __init__ pentru clasa dvs. Pentru a suprascrie parametrul lambda, schimbati atributul self.lam, pentru a suprascrie masurarea partinire schimbati atributul self.bias_measure la unul dintre „spd”, „eod” sau „aod”.

Dupa ce ati suprascris metodele si parametrii, puteti executa urmatorul cod

# CustomModel este o subclasa a DebiasModel. custom_model = CustomModel () # Aceasta returneaza un dictionar care contine statistici de partinire pentru modelul original. # Daca detaliile sunt adevarate, atunci imprima statisticile de partinire. orig_data = custom_model.evaluate_original (verbose = True) # Aceasta ruleaza algoritmul de dezintegrare aleatorie pe model si returneaza # modelul dezinvolt aleatoriu si pragul aleatoriu care va minimiza obiectivul. rand_model, rand_thresh = custom_model.random_debias_model () # Aceasta returneaza un dictionar care contine statistici de partinire pentru modelul dezbatut aleatoriu. # Daca detaliile sunt adevarate, atunci imprima statisticile de partinire. rand_data = model_personalizat. evaluate_random_debiased (verbose = True) # Aceasta ruleaza algoritmul de dezacordare contradictorie pe model si returneaza # modelul dezacordat contradictoriu si pragul contradictoriu care va minimiza obiectivul. adv_model, adv_thresh = custom_model.adversarial_debias_model () # Aceasta returneaza un dictionar care contine statistici de partinire pentru modelul opus contradictoriu. # Daca detaliile sunt adevarate, atunci imprima statisticile de partinire. adv_data = custom_model.evaluate_adversarial_debiased (verbose = True)

Rulati experimentele noastre post-Hoc de debiasing

Pasul 1 – Creati configuratii

Creati un fisier de configurare yaml necesar pentru a rula experimentul ruland

$ python create_configs.py <dataset> <masurare bias> <variabila protejata> <numar de replici>

De exemplu:

$ python create_configs.py adult spd 1 10

unde este unul dintre „adulti” (ACI), „banca” (BM) sau „compas” (COMPAS), este unul dintre „spd” (diferenta de paritate statistica), „eod” (diferenta de sanse egale) sau „aod „(diferenta medie de cote), este 1 sau 2 (descris mai jos) si reprezinta numarul de incercari care pot fi rulate, care poate fi orice numar intreg pozitiv. Aceasta va crea un director de configurare <set de date> _ <masurare de polarizare> _ <variabila protejata> (de exemplu adult_spd_1) care include toate fisierele de configurare corespunzatoare pentru experiment.

Un tabel care descrie relatia dintre indicele variabilei protejate si setul de date este dat mai jos.

set de date 1 2 cursa de sex pentru adulti compas sex race bank race race

Pentru a crea automat toate cele 12 experimente utilizate in hartie, rulati

$ bash create_all_configs.sh

Pasul 2 – Rulati Experimente

Rulati toate experimentele descrise de fisierele de configurare din directorul de configurare creat la Pasul 1 executand

$ python run_experiments.py <director config>

De exemplu

$ python run_experiments.py adult_spd_1 /

Aceasta va rula un experiment posthoc.py pentru fiecare fisier de configurare din directorul de configurare. Toate modelele de retea neuronala prejudecate, pre-antrenate sunt salvate in directorul models /. Toate rezultatele din experimente sunt salvate in rezultatele / directorul in format JSON.

Posthoc.py include codul de referinta pentru cele 3 tehnici de debiasare post-procesare furnizate de cadrul aif360: clasificarea optiunilor de respingere, postprocesarea cotelor egalizate si postprocesarea cotelor egalizate calibrate. De asemenea, include cod pentru perturbarea aleatorie si algoritmi de reglare fina contradictorii. Pentru a obtine rezultate pentru tehnica de optimizare stratificata, urmati instructiunile din directorul deco.

Pasul 3 – Analizati rezultatele

Pentru a analiza rezultatele experimentelor si pentru a obtine graficele prezentate mai jos, puteti rula prin notebook-ul jupyter analyse_resultate.ipynb.

Pasul 4 – Curatarea configurarilor

Pentru a curata directoarele de configurare, rulati