Prezentare generală

  • Ce sunt funcțiile de pierdere? Și cum funcționează în algoritmi de învățare automată? Aflați în acest articol
  • Funcțiile de pierdere sunt de fapt la baza acestor tehnici pe care le folosim în mod regulat
  • Acest articol acoperă mai multe funcții de pierdere, unde funcționează și cum le puteți codifica în Python

Introducere

Imaginați-vă acest lucru - ați instruit un model de învățare automată pe un anumit set de date și sunteți gata să îl puneți în fața clientului dvs. Dar cum poți fi sigur că acest model va da rezultatul optim? Există o metrică sau o tehnică care vă va ajuta să evaluați rapid modelul pe setul de date?

Da - și asta, pe scurt, este locul în care funcțiile de pierdere intră în joc în învățarea automată.

Funcțiile de pierdere sunt în centrul algoritmilor de învățare automată pe care ne place să le folosim. Dar am văzut că majoritatea începătorilor și entuziașilor devin destul de confuzi cu privire la modul și unde să le folosească.

automată

Nu sunt greu de înțeles și vă vor îmbunătăți infinit înțelegerea algoritmilor de învățare automată. Deci, care sunt funcțiile de pierdere și cum le puteți înțelege semnificația?

În acest articol, voi discuta despre 7 funcții comune de pierdere utilizate în învățarea automată și voi explica unde este folosită fiecare dintre ele. Avem multe de acoperit în acest articol, așa că să începem!

Funcțiile de pierdere sunt o parte a întregii călătorii de învățare automată pe care o veți parcurge. Iată cursul perfect pentru a vă ajuta să începeți și să vă pregătiți pentru industrie:

Cuprins

  • Ce sunt funcțiile de pierdere?
  • Funcții de pierdere prin regresie
    • Pierderea erorii pătrate
    • Pierderea absolută a erorilor
    • Pierderea lui Huber
  • Funcții de pierdere a clasificării binare
    • Entropie binară încrucișată
    • Pierderea balamalei
  • Funcții de pierdere a clasificării în mai multe clase
    • Pierdere de entropie încrucișată de mai multe clase
    • Pierderea divergenței Kullback Leibler

Ce sunt funcțiile de pierdere?

Să presupunem că sunteți pe vârful unui deal și că trebuie să urcați în jos. Cum decideți unde să mergeți?

Iată ce aș face:

  • Uită-te în jur pentru a vedea toate căile posibile
  • Respinge-i pe cei care urcă. Acest lucru se datorează faptului că aceste căi mi-ar consuma mai multă energie și mi-ar face sarcina și mai dificilă
  • În cele din urmă, luați calea pe care eu gândiare cea mai mare pantă la vale

Această intuiție împotriva căreia tocmai mi-am judecat deciziile? Este exact ceea ce oferă o funcție de pierdere.

O funcție de pierdere mapează deciziile la costurile asociate.

Decizia de a urca panta ne va costa energie și timp. Decizia de a coborî ne va aduce beneficii. Prin urmare, are un cost negativ.

În algoritmii de învățare automată supravegheați, vrem minimiza eroarea pentru fiecare exemplu de instruire în timpul procesului de învățare. Acest lucru se face folosind câteva strategii de optimizare, cum ar fi coborârea în gradient. Și această eroare provine din funcția de pierdere.

Care este diferența dintre o funcție de pierdere și o funcție de cost?

Vreau să subliniez acest lucru aici - deși funcția de cost și funcția de pierdere sunt sinonime și folosite interschimbabil, sunt diferite.

O funcție de pierdere este pentru un singur exemplu de antrenament. Se mai numește uneori și an funcție de eroare. O funcție de cost, pe de altă parte, este pierdere medie pe întregul set de date de antrenament. Strategiile de optimizare vizează minimizarea funcției de cost.

Funcții de pierdere prin regresie

Trebuie să fiți familiarizați cu regresia liniară în acest moment. Se ocupă cu modelarea unei relații liniare între a variabilă dependentă, Y, și mai mulți variabile independente, X_i’s. Astfel, în mod esențial încadrăm o linie în spațiu pe aceste variabile.

Vom folosi punctele de date date pentru a găsi coeficienții a0, a1, ..., an.

Pentru a înțelege acest concept vom folosi faimosul set de date Boston Housing. Și pentru a simplifica lucrurile, vom folosi o singură caracteristică - numărul mediu de camere pe locuință (X) - pentru a prezice variabila dependentă - Valoarea mediană (Y) a caselor în 1000 USD.

Noi vom folosi Coborâre în gradient ca strategie de optimizare pentru a găsi linia de regresie. Nu voi intra în detaliile complicate despre coborârea în gradient, dar iată un memento al regulii de actualizare a greutății:

Aici, theta_j este greutatea care trebuie actualizată, alfa este rata de învățare și J este funcția de cost. Funcția de cost este parametrizată de theta. Scopul nostru este să găsim valoarea theta care produce un cost global minim.

Aici puteți obține o explicație detaliată a coborârii în gradient și cum funcționează.

Am definit mai jos pașii pe care îi vom urma pentru fiecare funcție de pierdere:

  1. Scrieți expresia funcției noastre predictive, f (X) și identificați parametrii pe care trebuie să îi găsim
  2. Identificați pierderea de utilizat pentru fiecare exemplu de antrenament
  3. Găsiți expresia pentru funcția de cost - pierderea medie pe toate exemplele
  4. Găsiți gradientul funcției de cost în raport cu fiecare parametru necunoscut
  5. Decideți rata de învățare și rulați regula de actualizare a greutății pentru un număr fix de iterații

1. Pierdere de eroare pătrată

Pierderea erorii pătrate pentru fiecare exemplu de antrenament, cunoscut și sub numele de L2 Pierderea, este pătratul diferenței dintre valorile reale și cele prevăzute:

Funcția de cost corespunzătoare este Rău din acestea Erori pătrate (MSE).

Vă încurajez să încercați să găsiți singur gradientul pentru coborârea gradientului înainte de a vă referi la codul de mai jos.

Am folosit acest cod pe datele din Boston pentru diferite valori ale ratei de învățare pentru 500 de iterații fiecare:

Iată o sarcină pentru dvs. Încercați să rulați codul pentru o rată de învățare de 0,1 din nou pentru 500 de iterații. Spuneți-mi observațiile dvs. și orice explicații posibile în secțiunea de comentarii.

Să vorbim un pic mai mult despre funcția de pierdere MSE. Este o funcție pătratică pozitivă (de forma ax ^ 2 + bx + c unde a> 0). Amintiți-vă cum arată grafic?

O funcție pătratică are doar un minim global. Deoarece nu există minime locale, nu ne vom bloca niciodată într-una. Prin urmare, este întotdeauna garantat că Coborârea Gradientului va converge (dacă converge deloc) la minimul global.

Funcția de pierdere MSE penalizează modelul pentru a comite erori mari prin pătrarea acestora. Patratarea unei cantități mari o face și mai mare, nu? Dar există o avertizare. Această proprietate face ca funcția de cost MSE să fie mai puțin robustă pentru valorile aberante. Prin urmare, nu ar trebui să fie utilizat dacă datele noastre sunt predispuse la mai multe valori aberante.

2. Pierderea absolută a erorilor

Eroarea absolută pentru fiecare exemplu de antrenament este distanța dintre valorile prezise și cele reale, indiferent de semn. Eroarea absolută este, de asemenea, cunoscută sub numele de Pierderea L1:

După cum am menționat anterior, costul este Rău din acestea Erori absolute (MAE).

Costul MAE este mai robust față de valorile externe în comparație cu MSE. Cu toate acestea, manipularea operatorului absolut sau modul în ecuații matematice nu este ușoară. Sunt sigur că mulți dintre voi trebuie să fie de acord cu acest lucru! Putem considera acest lucru ca un dezavantaj al MAE.

Iată codul pentru funcția update_weight cu cost MAE:

Obținem graficul de mai jos după ce rulăm codul pentru 500 de iterații cu rate de învățare diferite:

3. Pierderea Huber

Pierderea Huber combină cele mai bune proprietăți ale MSE și MAE. Este pătratic pentru erori mai mici și este liniar în caz contrar (și în mod similar pentru gradientul său). Este identificat prin parametrul său delta:

Obținem graficul de mai jos pentru 500 de iterații de actualizare a greutății la o rată de învățare de 0,0001 pentru diferite valori ale parametrului delta:

Pierderea Huber este mai robustă față de valorile aberante decât MSE. Este utilizat în regresie robustă, estimare M și modelare aditivă. O variantă a pierderii Huber este, de asemenea, utilizată în clasificare.

Funcții de pierdere a clasificării binare

Numele se explică de la sine. Clasificarea binară se referă la atribuirea unui obiect într-una din cele două clase. Această clasificare se bazează pe o regulă aplicată vectorului caracteristicii de intrare. De exemplu, clasificarea unui e-mail ca spam sau nu spam pe baza, să spunem subiectul său, este o clasificare binară.

Voi ilustra aceste funcții de pierdere a clasificării binare pe setul de date despre cancerul de sân.

Vrem să clasificăm o tumoare ca fiind „Malign” sau „Benign” bazat pe caracteristici precum raza medie, suprafața, perimetrul etc. Pentru simplificare, vom folosi doar două caracteristici de intrare (X_1 și X_2) și anume „Zona cea mai proastă” și „Simetrie medie” pentru clasificare. Valoarea țintă Y poate fi 0 (Malign) sau 1 (Benign).

Iată un grafic scatter pentru datele noastre:

1. Pierdere de entropie binară încrucișată

Să începem prin a înțelege termenul „entropie”. În general, folosim entropia pentru a indica tulburare sau incertitudine. Se măsoară pentru o variabilă aleatorie X cu distribuție de probabilitate p (X):

Semnul negativ este folosit pentru a face cantitatea totală pozitivă.

O valoare mai mare a entropiei pentru o distribuție de probabilitate indică o incertitudine mai mare în distribuție. La fel, o valoare mai mică indică o distribuție mai sigură.

Acest lucru face ca entropia încrucișată binară să fie potrivită ca funcție de pierdere - vrei să-i minimizezi valoarea. Folosim entropie încrucișată binară pierderi pentru modelele de clasificare care produc o probabilitate p.

Apoi, pierderea de entropie încrucișată pentru eticheta de ieșire y (poate lua valorile 0 și 1) și probabilitatea prezisă p este definită ca:

Aceasta se mai numește Pierderea jurnalului. Pentru a calcula probabilitatea p, putem folosi funcția sigmoidă. Aici, z este o funcție a caracteristicilor noastre de intrare:

Gama funcției sigmoide este [0, 1] ceea ce o face potrivită pentru calcularea probabilității.

Încercați să găsiți singur gradientul și apoi uitați-vă la codul pentru funcția update_weight de mai jos.

Am obținut graficul de mai jos cu privire la utilizarea regulii de actualizare a greutății pentru 1000 de iterații cu valori diferite de alfa:

2. Pierderea balamalei

Pierderea articulației este utilizată în principal cu clasificatoarele de suport pentru mașini vectoriale (SVM) cu etichete de clasă -1 și 1. Deci, asigurați-vă că schimbați eticheta clasei „Maligne” din setul de date de la 0 la -1.

Pierderea prin balama nu numai că penalizează predicțiile greșite, ci și predicțiile corecte care nu sunt încrezătoare.

Pierderea articulației pentru o pereche de intrare-ieșire (x, y) este dată ca:

După executarea funcției de actualizare pentru 2000 de iterații cu trei valori diferite de alfa, obținem acest grafic:

Hinge Loss simplifică matematica pentru SVM maximizând în același timp pierderea (în comparație cu Log-Loss). Se folosește atunci când dorim să luăm decizii în timp real, fără a pune accentul pe precizie cu laser.

Funcții de pierdere a clasificării în mai multe clase

E-mailurile nu sunt doar clasificate ca spam sau nu spam (nu mai sunt anii 90!). Acestea sunt clasificate în diferite alte categorii - Muncă, Acasă, Social, Promoții etc. Acesta este un caz de utilizare pentru clasificare multi-clasă.

Vom folosi setul de date Iris pentru a înțelege celelalte două funcții de pierdere. Vom folosi 2 funcții X_1, Lungime separată și caracteristica X_2, Lățimea petalei, pentru a prezice clasa (Y) a florii de Iris - Setosa, Versicolor sau Virginica

Sarcina noastră este să implementăm clasificatorul folosind un model de rețea neuronală și optimizatorul Adam încorporat din Keras. Acest lucru se datorează faptului că, odată cu creșterea numărului de parametri, matematica, precum și codul, vor deveni dificil de înțeles.

Dacă sunteți nou în Neural Networks, vă recomand să citiți mai întâi acest articol.

Iată graficul de dispersie pentru datele noastre:

1. Pierdere de entropie încrucișată în mai multe clase

Pierderea multi-clasă a entropiei încrucișate este o generalizare a pierderii de entropie binară încrucișată. Pierderea pentru vectorul de intrare X_i și vectorul țintă corespunzător codat la cald Y_i este:

Folosim funcția softmax pentru a găsi probabilitățile p_ij:

„Softmax este implementat printr-un strat de rețea neuronală chiar înainte de stratul de ieșire. Stratul Softmax trebuie să aibă același număr de noduri ca stratul de ieșire. ” Blogul dezvoltatorului Google

În cele din urmă, ieșirea noastră este clasa cu probabilitatea maximă pentru intrarea dată.

Construim un model folosind un strat de intrare și un strat de ieșire și îl compilăm cu rate de învățare diferite. Specificați parametrul de pierdere ca „Categorical_crossentropy” în declarația model.compile ():

Iată complotele pentru cost și, respectiv, precizie după antrenament pentru 200 de epoci:

2. KL-Divergență

Kullback-Liebler Divergenţă este o măsură a modului în care o distribuție de probabilitate diferă de o altă distribuție. O divergență KL de zero indică faptul că distribuțiile sunt identice.

Observați că funcția de divergență nu este simetrică.

Acesta este motivul pentru care KL-Divergence nu poate fi folosit ca metrică la distanță.

Voi descrie abordarea de bază a utilizării KL-Divergence ca funcție de pierdere fără a intra în matematica sa. Vrem să aproximăm Adevărat distribuția probabilității P a variabilelor noastre țintă în ceea ce privește caracteristicile de intrare, date fiind unele aproximativ distribuție Q. Deoarece divergența KL nu este simetrică, putem face acest lucru în două moduri:

Prima abordare este utilizată în învățarea supravegheată, a doua în învățarea prin întărire. Divergența KL este funcțional similară cu entropia încrucișată de mai multe clase și se mai numește entropie relativă a lui P față de Q:

Specificăm „Kullback_leibler_divergence” ca valoare a parametrului de pierdere în funcția compile () așa cum am făcut înainte cu pierderea multi-clasă de entropie încrucișată.

Divergența KL este utilizată mai frecvent pentru a aproxima funcții complexe decât în ​​clasificarea multi-clasă. Ne întâlnim frecvent cu KL-Divergence în timp ce ne jucăm cu modele profund generative, cum ar fi codificatorii auto variaționali (VAE).

Note de final

Woah! Am acoperit mult teren aici. Dă-ți o mângâiere pe spate pentru că ai ajuns până la capăt. Aceasta a fost o listă destul de cuprinzătoare a funcțiilor de pierdere pe care le folosim de obicei în învățarea automată.

Aș sugera să parcurgeți acest articol de câteva ori mai mult pe măsură ce continuați călătoria dvs. de învățare automată. Acesta nu este un efort unic. Va fi nevoie de câteva citiri și experiență pentru a înțelege cum și unde funcționează aceste funcții de pierdere.

Asigurați-vă că experimentați aceste funcții de pierdere și spuneți-mi observațiile dvs. în comentarii. De asemenea, anunțați-mă și alte subiecte despre care ați dori să citiți. Voi face tot posibilul pentru a le acoperi în articolele viitoare.

Între timp, asigurați-vă că consultați cursul nostru cuprinzător de învățare automată la nivel de începători:

  • Învățare automată aplicată - începător până la profesionist
Puteți citi acest articol și pe aplicația noastră mobilă