Sariți la conținutul principal

Funcția de activare GELU: formulă, intuiție și utilizare în deep learning

GELU este o funcție de activare lină și probabilistică ce depășește alternativele mai simple, precum ReLU, în arhitecturile de deep learning și a devenit alegerea implicită în modelele de tip transformer, precum BERT și GPT.
Actualizat 4 mai 2026  · 8 min. citire

Funcțiile de activare decid ce semnale trec printr-o rețea neuronală și care nu. Dacă alegeți una nepotrivită, modelul învață prea lent sau nu reușește să generalizeze. ReLU a fost alegerea implicită rezonabilă ani de zile, pentru că era rapidă și suficient de bună pentru majoritatea sarcinilor.

GELU (Gaussian Error Linear Unit) a schimbat asta. Este acum funcția de activare din spatele unora dintre cele mai capabile modele create vreodată, inclusiv BERT și GPT.

În acest articol, voi acoperi intuiția din spatele GELU, formula sa, cum se compară cu alte funcții de activare și unde ați folosi-o efectiv în practică.

Dacă sunteți complet nou(ă) în funcțiile de activare din învățarea automată, citiți Ghidul pentru începători privind Rectified Linear Unit (ReLU) de pe blogul nostru.

Ce este funcția de activare GELU?

GELU, sau Gaussian Error Linear Unit, este o funcție de activare care ponderă intrările în funcție de magnitudinea lor, folosind o abordare lină și probabilistică.

Majoritatea funcțiilor de activare decid fie să lase semnalul să treacă, fie să îl blocheze. ReLU, de exemplu, anulează tot ce este negativ și lasă neschimbat restul. GELU funcționează diferit. În loc de un prag dur, scalează intrările în mod lin în funcție de cât de mari sau mici sunt, ceea ce înseamnă că și valorile negative mici pot contribui la ieșire.

Diferența față de ReLU este că GELU este lină și continuă peste tot. Nu există colț ascuțit la zero și nici tranziții abrupte. Acea finețe poate conta în timpul antrenării, deoarece oferă optimizerului informații mai curate despre gradient cu care să lucreze.

Intuiția din spatele GELU

Gândiți-vă la GELU ca la un filtru care nu tratează toate intrările la fel.

ReLU este brutală – orice valoare negativă este anulată, de fiecare dată. Pe de altă parte, GELU întreabă „cât de probabil este ca această valoare de intrare să fie utilă?”. Valorile clar mari și pozitive trec aproape neschimbate. Valorile mici sau negative sunt scalate în jos, nu tăiate complet.

Drept rezultat, obțineți o curbă lină care suprimă semnalele mai puțin relevante fără a le elimina complet.

Imaginați-vă că revizuiți un teanc de aplicații pentru un job. Un filtru strict ar elimina pe oricine fără diplomă, fără excepții. Un filtru mai inteligent i-ar lua totuși în considerare pe cei care sunt aproape, poate au experiență relevantă care compensează. GELU funcționează ca filtrul mai inteligent. Nu face tăieturi stricte, ci cântărește fiecare intrare în funcție de magnitudinea ei și decide cât din ea să lase să treacă.

Această scalare graduală și probabilistică este ceea ce face GELU diferită. Nu există tranziții bruște și nici neuroni morți – doar o decizie lină de trecere sau suprimare pentru fiecare valoare de intrare.

Formula GELU

Formula exactă GELU este construită pe funcția de distribuție cumulativă gaussiană (CDF), scrisă astfel:

Funcția de distribuție cumulativă gaussiană

Funcția de distribuție cumulativă gaussiană

unde x este valoarea de intrare, iar Φ(x) reprezintă probabilitatea ca o variabilă aleatoare extrasă dintr-o distribuție normală standard să fie mai mică sau egală cu x. Pe scurt, Φ(x) vă spune cât de „normală” sau așteptată este valoarea de intrare – iar acea probabilitate este ceea ce folosește GELU pentru a scala intrarea.

Cu cât intrarea este mai mare, cu atât Φ(x) se apropie mai mult de 1, ceea ce înseamnă că intrarea trece aproape neschimbată. Cu cât intrarea este mai mică, cu atât Φ(x) se apropie mai mult de 0, ceea ce înseamnă că intrarea este suprimată.

Aproximația utilizată în practică

Problema cu formula exactă este că calcularea lui Φ(x) este costisitoare. Implică funcția eroare, care nu are o formă închisă simplă și este lent de calculat la scară.

În schimb, cadrele de deep learning folosesc această aproximație:

Formula de aproximație GELU

Formula de aproximație GELU

Această aproximație folosește tanh, care este rapidă și bine susținută pe hardware-ul modern. Rezultatul este aproape identic cu formula exactă pe intervalul de intrări care contează în practică, motiv pentru care cadre precum PyTorch și TensorFlow o folosesc implicit.

Desigur, nu este nevoie să memorați niciuna dintre formule. Dar faptul că știți că există aproximația – și de ce – vă ajută să înțelegeți ce se întâmplă de fapt când apelați GELU în codul dumneavoastră.

GELU vs alte funcții de activare

Fiecare funcție de activare gestionează diferit intrările, iar aceste diferențe se reflectă în cât de bine se antrenează modelul.

Iată cum arată vizual diferența, înainte de a o explica în text:

Grafic GELU versus alte funcții de activare

Grafic GELU versus alte funcții de activare

Sigmoid

Sigmoid comprimă toate intrările într-un interval între 0 și 1. Este lină, dar are o problemă bine-cunoscută: gradientul care dispare. Pentru intrări foarte mari sau foarte mici, gradientul se apropie de zero, ceea ce înseamnă că straturile profunde încetează să mai învețe. GELU nu are această problemă, deoarece gradientul său rămâne semnificativ pe un interval de intrări mai larg.

Tanh

Tanh este similară cu Sigmoid, dar centrată la zero, cu ieșiri între -1 și 1. Gestionează mai bine intrările negative decât Sigmoid, dar tot suferă de gradient care dispare la extreme. GELU produce o curbă de ieșire mai lină, cu un flux de gradient mai bun prin rețele profunde.

ReLU

ReLU este rapidă și simplă: intrările pozitive trec neschimbate, cele negative sunt anulate. Pragul ascuțit la zero cauzează problema neuronilor „morți” – neuroni care primesc constant intrări negative în timp încetează complet să se mai actualizeze. GELU evită asta prin scalarea intrărilor negative în loc să le taie.

Leaky ReLU

Leaky ReLU rezolvă problema neuronilor morți permițând o mică fracțiune din intrările negative să treacă. Este un pas înainte față de ReLU, dar tranziția la zero rămâne bruscă. GELU produce o curbă per ansamblu mai lină, care tinde să funcționeze mai bine în arhitecturi adânci, unde calitatea gradientului contează mai mult.

Așadar, pe scurt, iată diferențele dintre aceste cinci funcții de activare:

Tabel GELU versus alte funcții de activare

Tabel GELU versus alte funcții de activare

De ce este folosită GELU în transformere

Transformerele sunt doar rețele neuronale profunde. Iar cu cât rețeaua este mai adâncă, cu atât calitatea gradientului contează mai mult.

Modele precum BERT și GPT stivuiesc zeci de straturi unul peste altul. La acea adâncime, problemele mici ale fluxului de gradient se compun. Dacă funcția de activare produce gradienți instabili sau aproape de zero în anumite regiuni, straturile din partea de început a rețelei abia se actualizează în timpul antrenării, ceea ce înseamnă că nu învață prea mult.

GELU evită asta menținând gradienții lini și nenuli pe un interval de intrări mai larg. Nu există un prag de tăiere precum limita la zero a ReLU, astfel încât optimizerul primește un semnal mai curat la fiecare strat, nu doar la cele din apropierea ieșirii.

Există un motiv suplimentar pentru care GELU se potrivește bine în arhitecturile de tip transformer. 

Transformerele procesează intrări prin mecanisme de atenție care produc o gamă largă de valori de activare – atât pozitive, cât și negative. O funcție de activare lină gestionează mai bine acea gamă decât una cu tranziții abrupte.

Când a fost publicată lucrarea originală BERT, autorii au ales GELU în loc de ReLU și au raportat rezultate mai bune pe benchmark-urile lor. GPT a urmat aceeași alegere. De atunci, GELU a devenit funcția de activare implicită în majoritatea arhitecturilor bazate pe transformere, nu pentru că este nouă, ci pentru că funcționează mai bine la scara la care operează aceste modele.

GELU în practică

Utilizarea GELU în modelele dumneavoastră este la fel de simplă ca folosirea altor funcții de activare. Atât PyTorch, cât și TensorFlow au suport integrat.

PyTorch

În PyTorch, puteți aplica GELU ca modul de sine stătător sau inline în interiorul definiției modelului. Iată un bloc feedforward simplu care folosește GELU:

import torch
import torch.nn as nn

class FeedForwardBlock(nn.Module):
    def __init__(self, input_dim, hidden_dim):
        super().__init__()
        self.fc1 = nn.Linear(input_dim, hidden_dim)
        self.act = nn.GELU()
        self.fc2 = nn.Linear(hidden_dim, input_dim)

    def forward(self, x):
        return self.fc2(self.act(self.fc1(x)))

block = FeedForwardBlock(input_dim=512, hidden_dim=2048)
x = torch.randn(8, 512)
output = block(x)

nn.GELU() este între cele două straturi liniare, exact acolo unde o găsiți în sub-stratul feedforward al unui transformer. Activarea rulează după prima proiecție și înaintea celei de-a doua.

TensorFlow

În TensorFlow, GELU este disponibilă prin API-ul Keras:

import tensorflow as tf
from tensorflow import keras

model = keras.Sequential([
    keras.layers.Dense(2048, input_shape=(512,)),
    keras.layers.Activation("gelu"),
    keras.layers.Dense(512)
])

x = tf.random.normal((8, 512))
output = model(x)

O puteți transmite și direct ca argument string unui strat Dense:

keras.layers.Dense(2048, activation="gelu")

Ambele abordări produc același rezultat.

Unde se potrivește GELU într-o rețea

GELU își are locul în același punct ca orice altă funcție de activare – imediat după o transformare liniară și înainte de următorul strat. În arhitecturile transformer, asta înseamnă în interiorul sub-stratului feedforward, între cele două proiecții dense. În alte rețele profunde, o plasați după stratul liniar sau convoluțional și o lăsați să scaleze ieșirea înainte de a o transmite mai departe.

Avantajele GELU

Dacă încă citiți în acest punct, știți principalele avantaje ale GELU comparativ cu alte funcții de activare. Iată un scurt rezumat:

  • Activare lină: GELU produce o curbă continuă, derivabilă, fără tranziții bruște, ceea ce oferă optimizerului informații mai curate la fiecare pas.
  • Flux de gradient mai bun: GELU nu anulează intrările negative, astfel încât gradientul poate încă să se propage prin neuronii care primesc valori negative. Acest lucru reduce riscul ca neuronii să moară în timpul antrenării.
  • Performanță mai bună în modelele profunde: În arhitecturi profunde precum transformerele, efectul cumulativ al gradientelor mai line tinde să se traducă în rezultate de antrenare mai bune comparativ cu funcțiile de activare mai simple.

Limitările GELU

GELU nu este alegerea potrivită pentru orice situație. Iată câteva limitări de care trebuie să fiți conștienți:

  • Mai costisitoare de calculat decât ReLU: GELU implică fie o funcție eroare, fie o aproximație bazată pe tanh, ambele mai costisitoare decât operația simplă de prag a ReLU. În modelele mari, cu multe straturi, costul se poate acumula.

  • Mai puțin intuitivă: Funcții precum ReLU sunt ușor de înțeles – valorile pozitive trec, cele negative nu. Scalarea probabilistică a GELU este mai greu de interpretat.

  • Nu este întotdeauna necesară: Pentru rețele puțin adânci sau sarcini mai simple, GELU nu oferă avantaje semnificative. ReLU sau Leaky ReLU vor avea adesea performanțe la fel de bune, cu un cost computațional mai mic.

În concluzie, dacă construiți un transformer sau o altă arhitectură profundă, GELU este o opțiune implicită solidă. Pentru restul, faceți benchmark înainte de a vă angaja la ea.

Concluzie

GELU nu este un upgrade universal și nici o soluție unică ce înlocuiește ReLU. Este o alegere de proiectare deliberată, care merită în contexte specifice – gândiți-vă la rețele profunde și modele de tip transformer.

Dacă lucrați cu BERT, GPT sau orice model bazat pe transformer, deja folosiți GELU, fie că ați realizat sau nu. Acum știți de ce este acolo.

Pentru orice altceva, alegerea funcției de activare ține de compromisuri. Nicio funcție nu câștigă de fiecare dată, iar înțelegerea a ceea ce face fiecare este modul în care luați decizia cu încredere, nu din obișnuință.

Dacă încă vi se par confuze diferențele dintre funcțiile de activare, înscrieți-vă la Machine Learning Engineer Track pentru a vă pregăti pentru o carieră în machine learning și MLOps.

Întrebări frecvente

Ce este funcția de activare GELU?

GELU, sau Gaussian Error Linear Unit, este o funcție de activare folosită în rețele neuronale. Spre deosebire de ReLU, GELU scalează lin intrările în funcție de magnitudinea lor, folosind o abordare probabilistică. Acest lucru o face mai potrivită pentru arhitecturi profunde, unde calitatea gradientului contează.

În ce fel diferă GELU de ReLU?

ReLU anulează toate intrările negative cu un prag dur la zero, ceea ce poate face ca neuronii să nu mai învețe – o problemă cunoscută ca neuroni morți. GELU evită acest lucru prin scalarea graduală în jos a intrărilor negative, în loc să le taie. Obțineți astfel un flux de gradient mai lin și o performanță mai bună în rețelele profunde.

Când ar trebui să folosesc GELU în locul altor funcții de activare?

GELU funcționează cel mai bine în arhitecturi profunde, în special în modelele bazate pe transformer, precum BERT și GPT. Pentru rețele puțin adânci sau sarcini mai simple, costul computațional rareori justifică trecerea de la ReLU. Începeți cu ReLU ca punct de referință și puteți testa ulterior alte opțiuni.

Care este diferența dintre formula exactă GELU și aproximație?

Formula exactă GELU folosește funcția de distribuție cumulativă gaussiană, care necesită calcularea funcției eroare – o operație lentă la scară. Aproximația o înlocuiește cu o expresie bazată pe tanh, care este mai rapidă și bine susținută pe hardware-ul modern. În practică, cele două produc rezultate aproape identice, motiv pentru care majoritatea cadrelor folosesc aproximația implicit.

Funcționează GELU atât în PyTorch, cât și în TensorFlow?

Da, ambele cadre suportă GELU. În PyTorch, puteți folosi nn.GELU() ca modul în interiorul definiției modelului. În TensorFlow, puteți transmite "gelu" ca string către argumentul activation al oricărui strat sau puteți folosi keras.layers.Activation("gelu").

Subiecte

Învățați cu DataCamp

course

Dimensionality Reduction in Python

4 oră
36.3K
Understand the concept of reducing dimensionality in your data, and master the techniques to do so in Python.
Vezi detaliiRight Arrow
Începeți cursul
Vezi mai multRight Arrow