Which activation function should be differentiable in a neural network?

Funcțiile de Activare: Ghidul Esențial

27/06/2024

Rating: 4.48 (7398 votes)

În lumea fascinantă a inteligenței artificiale și a învățării automate, rețelele neuronale reprezintă un pilon fundamental. Aceste structuri complexe, inspirate de creierul uman, sunt capabile să învețe din date și să facă predicții sau clasificări. Dar ce anume le conferă puterea de a rezolva probleme complexe, care depășesc simpla regresie liniară? Răspunsul se află în conceptul de funcții de activare.

Which activation function should I use?
The choice of the activation function depends on the type of problem that we want to solve. Most of the activation functions are non-linear. However, we also use linear activation functions in neural networks. For example, we use a linear activation function in the output layer of a neural network model that solves a regression problem.

Funcțiile de activare sunt componente critice ale oricărui neuron dintr-o rețea neuronală, cu excepția, de obicei, a stratului de intrare. Rolul lor principal este de a introduce non-liniaritate în model. Fără ele, o rețea neuronală, indiferent de numărul de straturi ascunse, ar fi echivalentă cu un singur model de regresie liniară, incapabil să învețe tipare complexe din datele din lumea reală. Ele decid dacă un neuron ar trebui 'activat' sau nu, adică dacă semnalul său de ieșire este suficient de important pentru a fi transmis către următorul strat.

Cuprins

Structura unei Rețele Neuronale și Rolul Funcțiilor de Activare

O rețea neuronală tipică este compusă din trei tipuri de straturi:

  • Stratul de Intrare (Input Layer): Acesta primește datele brute. Aici nu se efectuează calcule, deci nu se utilizează funcții de activare. Rolul său este pur și simplu de a transmite informația către stratul următor.
  • Straturi Ascunse (Hidden Layers): Acestea sunt straturile dintre stratul de intrare și cel de ieșire. Aici se desfășoară majoritatea calculelor complexe. Este imperativ să folosim o funcție de activare non-liniară în aceste straturi. De ce? Deoarece avem nevoie să introducem non-liniaritate în rețea pentru a o face capabilă să învețe tipare complexe. Fără funcții de activare non-liniare, o rețea neuronală cu multe straturi ascunse ar deveni un model gigantic de regresie liniară, inutil pentru învățarea tiparelor complexe din datele din lumea reală. Performanța unui model de rețea neuronală va varia semnificativ în funcție de tipul de funcție de activare pe care o folosim în straturile ascunse.
  • Stratul de Ieșire (Output Layer): Acesta este stratul final al rețelei, care produce rezultatul. Alegerea funcției de activare pentru stratul de ieșire depinde în întregime de tipul problemei pe care dorim să o rezolvăm (e.g., regresie, clasificare binară, clasificare multi-clasă).

Pe scurt, funcția de activare acționează ca o poartă matematică între intrarea care alimentează neuronul curent și ieșirea sa care merge către stratul următor. Ea transformă suma ponderată a intrărilor (plus bias-ul) într-o valoare de ieșire, care poate fi apoi utilizată ca intrare pentru neuronii din stratul următor.

Liniaritate vs. Non-liniaritate: De ce este Crucială Non-liniaritatea?

Majoritatea funcțiilor de activare sunt non-liniare. Cu toate acestea, există și funcții de activare liniare utilizate în rețelele neuronale, în special în stratul de ieșire pentru probleme de regresie. O funcție liniară ia o intrare, 'z', și returnează o ieșire, 'cz', care este pur și simplu o multiplicare a intrării cu o constantă 'c'. Graficul unei funcții liniare este o linie dreaptă.

Orice funcție care nu este liniară este clasificată ca funcție non-liniară. Graficul unei funcții non-liniare nu este o singură linie dreaptă; poate fi un tipar complex sau o combinație de două sau mai multe componente liniare. Importanța non-liniarității vine din capacitatea sa de a permite rețelelor neuronale să învețe și să modeleze relații complexe și arbitrare între intrări și ieșiri. Fără această capacitate, rețelele ar fi limitate la rezolvarea doar a problemelor simple, liniare, ceea ce ar anula scopul utilizării lor pentru probleme de învățare profundă.

Funcțiile de activare non-liniare permit:

  • Retropropagarea (Backpropagation): Deoarece derivata funcției este acum legată de intrare, este posibil să ne întoarcem și să înțelegem ce ponderi din neuronii de intrare pot oferi o predicție mai bună.
  • Stivuirea Mai Multor Straturi: Ieșirea va fi o combinație non-liniară a intrării trecute prin mai multe straturi, permițând modelului să capteze tipare din ce în ce mai abstracte și complexe.

Tipuri Comune de Funcții de Activare

Vom discuta funcțiile de activare cel mai frecvent utilizate în rețelele neuronale.

1. Funcția de Activare Sigmoid (Logistică)

Această funcție, cunoscută și sub numele de funcție logistică, este adesea utilizată în modelele de regresie logistică. Are un grafic în formă de 'S' și este o funcție non-liniară. Ea transformă intrarea într-o valoare de probabilitate între 0 și 1. Valorile negative mari sunt transformate spre 0, iar valorile pozitive mari spre 1. Pentru o intrare de 0, returnează 0.5.

  • Utilizare: În trecut, Sigmoid era folosită pentru straturile ascunse în MLP-uri (Multi-Layer Perceptrons), CNN-uri (Convolutional Neural Networks) și RNN-uri (Recurrent Neural Networks). Astăzi, este încă utilizată în RNN-uri. Este esențială în stratul de ieșire al unui clasificator binar, unde ieșirea este interpretată ca o probabilitate (clasa 0 sau clasa 1). De asemenea, este folosită în modelele de clasificare multi-label, unde fiecare clasă poate avea două rezultate, independent de celelalte.
  • Dezavantaje:
    • Problema gradientului care dispare (Vanishing Gradient Problem): Pentru valori foarte mari sau foarte mici ale intrării, gradientul funcției devine extrem de mic (aproape de zero). Acest lucru încetinește semnificativ procesul de învățare în timpul retropropagării, deoarece actualizările ponderilor devin neglijabile.
    • Convergență lentă: Din cauza gradientului mic, antrenarea modelului este mai lentă.
    • Ieșirile nu sunt centrate pe zero: Acest lucru poate face procesul de optimizare mai dificil și mai instabil.
    • Cost computațional ridicat: Include un termen exponențial (e^z), ceea ce o face mai costisitoare din punct de vedere computațional.

2. Funcția de Activare Tanh (Tangenta Hiperbolică)

Funcția Tanh are o formă similară cu Sigmoid (în formă de 'S'), dar ieșirea sa variază între -1 și +1. Este, de asemenea, o funcție non-liniară.

  • Avantaje: Principalul avantaj față de Sigmoid este că Tanh este centrată pe zero, ceea ce facilitează procesul de optimizare. De asemenea, are un gradient mai abrupt decât Sigmoid, ceea ce poate duce la o învățare mai rapidă în anumite cazuri.
  • Utilizare: Până recent, Tanh era utilizată pe scară largă ca funcție de activare pentru straturile ascunse în MLP-uri, CNN-uri și RNN-uri. Este încă utilizată în RNN-uri. Nu este utilizată în stratul de ieșire.
  • Dezavantaje: Ca și Sigmoid, Tanh suferă de problema gradientului care dispare, deși într-o măsură puțin mai mică datorită gradientului mai abrupt. De asemenea, este computațional costisitoare.

3. Funcția de Activare ReLU (Rectified Linear Unit)

ReLU este o alternativă excelentă la funcțiile Sigmoid și Tanh și este considerată una dintre cele mai importante descoperiri în învățare profundă. Dacă valoarea de intrare este mai mare sau egală cu 0, funcția ReLU returnează intrarea ca atare. Dacă intrarea este mai mică decât 0, funcția ReLU returnează 0.

  • Avantaje:
    • Nu are problema gradientului care dispare: Pentru intrările pozitive, gradientul este constant (1), ceea ce asigură că nu se produce dispariția gradientului.
    • Computațional ieftină: Nu include termeni exponențiali, ceea ce face calculele mult mai rapide. Convergența este de aproximativ 6 ori mai rapidă decât Sigmoid și Tanh.
    • Sparsitate: Prin setarea intrărilor negative la zero, induce o anumită sparsitate în rețea, ceea ce poate fi benefic.
  • Utilizare: ReLU este funcția de activare implicită pentru straturile ascunse în majoritatea modelelor moderne de MLP și CNN. Nu este utilizată, de obicei, în straturile ascunse ale modelelor RNN, unde Sigmoid sau Tanh sunt preferate. Nu este utilizată în stratul de ieșire.
  • Dezavantaje:
    • Problema "Dying ReLU": Dacă intrarea unui neuron este întotdeauna negativă, neuronul nu va fi niciodată activat, iar gradientul său va fi întotdeauna zero. Acest neuron devine "mort" și nu va mai învăța niciodată.
    • Valorile pozitive pot deveni foarte mari, ceea ce poate duce la probleme computaționale în timpul antrenării.

4. Funcția de Activare Leaky ReLU

Leaky ReLU este o versiune modificată a funcției ReLU, concepută pentru a rezolva problema "Dying ReLU". Dacă intrarea este mai mare sau egală cu 0, funcția Leaky ReLU se comportă ca ReLU. Dacă intrarea este mai mică decât 0, returnează o valoare negativă mică, definită ca αz (unde α este o constantă mică, de obicei 0.01, și z este valoarea de intrare).

  • Avantaje: Prin introducerea unei pante mici pentru valorile negative, se asigură că gradientul nu este niciodată zero, evitând astfel problema "Dying ReLU". Procesul de învățare este, de asemenea, mai rapid decât cu ReLU standard.
  • Utilizare: Aceeași utilizare ca și pentru ReLU, în special atunci când se observă problema "Dying ReLU".

5. Funcția de Activare Parametric ReLU (PReLU)

PReLU este o altă variantă a funcției ReLU, similară cu Leaky ReLU. Diferența constă în faptul că valoarea α (panta pentru intrările negative) devine un parametru care poate fi învățat de rețea. Aceasta permite rețelei să optimizeze valoarea α pentru fiecare neuron în parte, adaptându-se mai bine datelor.

6. Funcția de Activare ReLU6

ReLU6 este o variantă a ReLU care restricționează valoarea maximă a ieșirii la 6. Orice valoare de intrare care este 6 sau mai mare de 6 va fi limitată la valoarea 6. Aceasta ajută la prevenirea ieșirilor foarte mari și poate îmbunătăți stabilitatea în anumite arhitecturi, cum ar fi rețelele neuronale pentru dispozitive mobile.

7. Funcția de Activare Softmax

Softmax este o funcție de activare non-liniară utilizată în special în stratul de ieșire al problemelor de clasificare multi-clasă. Calculează o valoare de probabilitate pentru fiecare clasă dintr-un set de K clase diferite, asigurându-se că suma tuturor probabilităților este 1. Aceasta înseamnă că toate evenimentele (clasele) sunt mutual exclusive.

Which activation function should I use?
The choice of the activation function depends on the type of problem that we want to solve. Most of the activation functions are non-linear. However, we also use linear activation functions in neural networks. For example, we use a linear activation function in the output layer of a neural network model that solves a regression problem.
  • Utilizare: Obligatorie în stratul de ieșire al unui model de clasificare multi-clasă (unde un element aparține unei singure clase din mai multe posibile). Nu este utilizată în straturile ascunse.

8. Funcția de Activare Binary Step (Prag)

Cunoscută și ca funcție de activare cu prag, aceasta returnează 1 dacă intrarea este mai mare decât o anumită valoare de prag (de obicei 0) și 0 în caz contrar. Produce o ieșire binară (0 sau 1).

  • Utilizare: În practică, nu este utilizată în modelele moderne de rețele neuronale, deoarece nu este diferențiabilă în punctul de prag, ceea ce împiedică retropropagarea. Are însă o importanță teoretică, fiind utilă pentru a explica concepte fundamentale precum "activarea unui neuron" sau funcționarea internă a unui perceptron.

9. Funcția de Activare Identity (Liniară)

Aceasta este singura funcție considerată pur liniară în contextul funcțiilor de activare. Ea returnează valoarea de intrare exact așa cum este, fără modificări (f(z) = z).

  • Utilizare: Este utilizată exclusiv în stratul de ieșire al unui model de rețea neuronală care rezolvă o problemă de regresie (unde se prezice o valoare numerică continuă). Nu este niciodată utilizată în straturile ascunse, deoarece ar transforma întreaga rețea într-un model liniar, așa cum am discutat anterior.

10. Funcția de Activare Swish

Swish este o funcție de activare relativ nouă, dezvoltată de cercetătorii de la Google. Este definită ca z * sigmoid(z). Graficul său este similar cu cel al ReLU, dar este mai netedă și non-monotonă (are o ușoară coborâre pentru valori negative mici înainte de a crește). Această netezime ajută la antrenarea modelului și la o convergență mai ușoară.

  • Utilizare: Este utilizată doar în straturile ascunse. A fost demonstrat că Swish depășește sau egalează performanța ReLU în rețele neuronale profunde, aplicate în diverse domenii.
  • Dezavantaje: Este computațional mai costisitoare decât ReLU, deoarece include termenul exponențial din funcția Sigmoid.

11. Funcția de Activare Hard Swish (H-Swish)

Hard Swish este o variantă a Swish, proiectată să fie computațional mai eficientă. Înlocuiește funcția Sigmoid cu o analogie liniară, păstrând forma și beneficiile Swish, dar reducând costul computațional.

  • Utilizare: Similară cu Swish, folosită în straturile ascunse.

12. Funcția de Activare GELU (Gaussian Error Linear Unit)

GELU este o funcție de activare compatibilă cu modelele NLP de top (BERT, RoBERTa, ALBERT). Este motivată de combinarea proprietăților de dropout, zoneout și ReLU. Este o funcție netedă și non-liniară, care oferă îmbunătățiri de performanță în viziune computerizată, procesare a limbajului natural și recunoaștere vocală.

13. Funcția de Activare SELU (Scaled Exponential Linear Unit)

SELU a fost definită în contextul rețelelor auto-normalizante, ceea ce înseamnă că fiecare strat își păstrează media și varianța de la straturile anterioare. SELU realizează această normalizare prin ajustarea mediei și varianței. Are atât valori pozitive, cât și negative, permițând o mai bună ajustare a mediei. Este o funcție relativ nouă și necesită mai multe studii în arhitecturi precum CNN-uri și RNN-uri.

Probleme Comune în Antrenarea Rețelelor Neuronale

Există două provocări majore pe care le puteți întâmpina la antrenarea rețelelor neuronale profunde, adesea influențate de alegerea funcției de activare:

  • Problema Gradientului care Dispare (Vanishing Gradient Problem): Anumite funcții de activare, cum ar fi Sigmoid și Tanh, comprimă un spațiu de intrare mare într-un spațiu de ieșire mic (între 0 și 1 sau -1 și 1). Prin urmare, o schimbare mare în intrare va provoca o schimbare mică în ieșire. Acest lucru face ca gradientul (derivata) să devină foarte mic. Pentru rețelele superficiale, aceasta nu este o problemă majoră. Cu toate acestea, în rețelele profunde cu multe straturi, gradientul devine prea mic pentru ca antrenarea să funcționeze eficient, ducând la o învățare lentă sau inexistentă a straturilor inițiale.
  • Problema Gradientului care Explodează (Exploding Gradient Problem): Aceasta apare atunci când gradienți de eroare semnificativi se acumulează și duc la actualizări foarte mari ale ponderilor modelului în timpul antrenării. O rețea instabilă poate rezulta, iar învățarea nu poate fi finalizată. Valorile ponderilor pot deveni atât de mari încât să depășească limitele numerice, rezultând valori "NaN" (Not a Number). Această problemă este mai rară cu funcțiile de activare Sigmoid și Tanh datorită proprietăților lor de saturare, dar poate apărea cu ReLU și variantele sale dacă rata de învățare este prea mare.

Ghid pentru Alegerea Funcției de Activare Potrivite

Alegerea funcției de activare corecte este o provocare și poate fi considerată un tip de reglaj al hiperparametrilor, în care programatorul alege manual funcția de activare înțelegând definiția problemei și luând în considerare performanța modelului și convergența funcției de pierdere.

Reguli Generale:

  • Stratul de Intrare: Nu este necesară nicio funcție de activare.
  • Stratul de Ieșire: Alegerea depinde de tipul problemei:
    • Regresie: Funcția de activare liniară (Identity) cu un singur nod.
    • Clasificare Binară: Funcția de activare Sigmoid cu un singur nod (ieșirea reprezintă probabilitatea clasei pozitive).
    • Clasificare Multi-Clasă: Funcția de activare Softmax cu un nod per clasă (suma probabilităților tuturor claselor este 1).
    • Clasificare Multi-Label: Funcția de activare Sigmoid cu un nod per clasă (fiecare nod indică probabilitatea apartenenței la o anumită etichetă, independent).
  • Straturi Ascunse: Trebuie să folosiți o funcție de activare non-liniară. Începeți cu ReLU. Dacă întâmpinați problema "Dying ReLU", încercați Leaky ReLU.
    • În modelele MLP și CNN, ReLU este funcția de activare implicită pentru straturile ascunse.
    • În modelele RNN, se utilizează de obicei funcțiile Sigmoid sau Tanh pentru straturile ascunse, Tanh având adesea o performanță mai bună.
  • Recomandări Suplimentare:
    • Nu utilizați niciodată funcțiile Softmax și Identity în straturile ascunse.
    • Funcțiile Tanh, ReLU, variantele ReLU, Swish și Hard Swish sunt utilizate doar în straturile ascunse.
    • Funcțiile Swish și Hard Swish sunt rezultate ale cercetărilor recente și se dovedesc a fi foarte performante.

Tabel Comparativ al Funcțiilor de Activare Cheie

FuncțieInterval IeșireUtilizare ComunăAvantaje CheieDezavantaje Cheie
Sigmoid[0, 1]Ieșire (clasificare binară, multi-label)Ieșire ca probabilitate, derivată netedăGradient care dispare, nu e centrată pe zero, costisitoare
Tanh[-1, 1]Straturi ascunse (RNN)Centrată pe zero, gradient mai abrupt decât SigmoidGradient care dispare, costisitoare
ReLU[0, Infinit]Straturi ascunse (MLP, CNN)Fără gradient care dispare (pentru pozitive), rapidă, computațional eficientăProblema "Dying ReLU", ieșiri nelimitate
Leaky ReLU(-Infinit, Infinit)Straturi ascunse (MLP, CNN)Atenuează "Dying ReLU", mai rapidă decât ReLUIeșiri inconsecvente pentru negative, gradient mic pentru negative
Softmax[0, 1] (sumă=1)Ieșire (clasificare multi-clasă)Ieșiri ca probabilități mutual exclusiveNu pentru straturi ascunse
Identity(-Infinit, Infinit)Ieșire (regresie)Simplă, ieșire directăTransformă rețeaua în model liniar (nu pentru ascunse)

Întrebări Frecvente (FAQ)

De ce am nevoie de funcții de activare non-liniare în rețelele neuronale?

Funcțiile de activare non-liniare sunt esențiale pentru a permite unei rețele neuronale să învețe și să modeleze relații complexe și arbitrare între intrări și ieșiri. Fără ele, indiferent de numărul de straturi, rețeaua ar fi echivalentă cu un singur model liniar, incapabil să capteze tipare complexe din datele din lumea reală. Ele introduc capacitatea de a învăța din date non-liniare și de a rezolva probleme de clasificare sau regresie complexe.

Ce funcție de activare ar trebui să folosesc pentru straturile ascunse?

Pentru majoritatea rețelelor neuronale moderne (în special MLP-uri și CNN-uri), ReLU este alegerea implicită și un bun punct de plecare datorită eficienței sale computaționale și a faptului că rezolvă problema gradientului care dispare pentru intrările pozitive. Dacă întâmpinați problema "Dying ReLU", puteți încerca Leaky ReLU sau PReLU. Pentru rețelele neuronale recurente (RNN-uri), Sigmoid sau Tanh sunt încă folosite frecvent, Tanh fiind adesea preferată datorită centrării sale pe zero.

Ce funcție de activare ar trebui să folosesc pentru stratul de ieșire?

Alegerea funcției de activare pentru stratul de ieșire depinde strict de tipul problemei pe care o rezolvați:

  • Pentru probleme de regresie (predictia unei valori continue), utilizați funcția liniară (Identity).
  • Pentru clasificare binară (două clase), utilizați Sigmoid.
  • Pentru clasificare multi-clasă (mai mult de două clase, unde o intrare aparține unei singure clase), utilizați Softmax.
  • Pentru clasificare multi-label (mai mult de două clase, unde o intrare poate aparține mai multor clase simultan), utilizați Sigmoid (un neuron Sigmoid per etichetă).

Ce este problema gradientului care dispare (Vanishing Gradient Problem)?

Problema gradientului care dispare apare atunci când, în timpul procesului de retropropagare, gradientul (care indică direcția și magnitudinea ajustărilor ponderilor) devine extrem de mic pe măsură ce se propagă înapoi prin straturile rețelei. Acest lucru se întâmplă adesea cu funcții de activare precum Sigmoid și Tanh, care au derivate mici pe porțiuni mari ale domeniului lor. Când gradientul este aproape de zero, ponderile straturilor mai apropiate de intrare se actualizează foarte puțin sau deloc, iar rețeaua învață extrem de lent sau deloc.

De ce ReLU este atât de populară?

Popularitatea ReLU se datorează în principal capacității sale de a rezolva problema gradientului care dispare pentru intrările pozitive, ceea ce permite antrenarea mai rapidă a rețelelor neuronale profunde. De asemenea, este computațional foarte eficientă, deoarece implică operații simple (max(0, z)), fără calcule exponențiale costisitoare. Aceste avantaje au contribuit semnificativ la progresele recente în învățare profundă.

În concluzie, funcțiile de activare sunt piese esențiale în arsenalul oricărui specialist în învățare automată, transformând modelele liniare în sisteme puternice, capabile să înțeleagă și să proceseze complexitatea lumii reale. Alegerea corectă a acestora poate influența semnificativ performanța și eficiența unui model de rețea neuronală.

Dacă vrei să descoperi și alte articole similare cu Funcțiile de Activare: Ghidul Esențial, poți vizita categoria Fitness.

Go up