Modele și platforme AI
UltraFastBERT: O introducere în modelarea lingvistică exponențial mai rapidă
Modelele de limbaj și inteligența artificială generativă, renumite pentru capacitățile lor, sunt un subiect fierbinte în industria IA. Cercetătorii din întreaga lume îmbunătățesc eficacitatea și capacitatea acestor sisteme. Aceste sisteme, de obicei, modele de învățare profundă, sunt pre-antrenate pe date etichetate extinse, încorporând rețele neuronale pentru auto-atentie. Ele utilizează diverse straturi – feedforward, recurente, încorporate și de atenție – pentru a procesa textul de intrare și a produce ieșiri relevante.
În majoritatea cazurilor, straturile feedforward ale modelelor de limbaj mari dețin cei mai mulți parametri. Studiile arată că aceste modele utilizează doar o fracțiune din neuroni disponibili pentru calculul ieșirii în timpul inferenței.
Acest articol introduce UltraFastBERT, un cadru bazat pe BERT care se potrivește cu eficacitatea modelelor BERT de top, dar utilizează doar 0,3% din neuroni în timpul inferenței, în special 12 din 4095 în fiecare strat. Vom explora arhitectura, funcționarea și rezultatele UltraFastBERT. Să începem.
UltraFastBERT: O introducere în modelarea lingvistică exponențial mai rapidă
În mod tradițional, un model de limbaj utilizează diverse componente pentru a se dota cu capacități de generare de conținut, incluzând straturi feedforward, recurente, încorporate și de atenție. Aceste componente sunt responsabile pentru a învăța să recunoască modele în timpul antrenamentului și, în final, să genereze ieșiri precise pe baza textelor de intrare. Fiecare dintre aceste componente are anumiți parametri, și în modele de limbaj, o parte semnificativă a acestor parametri este deținută de straturile feedforward. Cu toate acestea, aceste straturi feedforward nu utilizează 100% din neuroni disponibili pentru a genera ieșiri pentru fiecare intrare la momentul inferenței, ceea ce duce la irosirea resurselor, creșterea complexității, a timpului de calcul și a costurilor de calcul.
La nivelul său fundamental, cadru UltraFastBERT este o variantă a cadru BERT, se bazează pe acest concept și înlocuiește straturile feedforward cu rețele feedforward mai rapide în arhitectura sa, ceea ce duce, în final, la faptul că cadru UltraFastBERT utilizează doar 0,3% din neuroni disponibili, oferind rezultate comparabile cu modelele BERT de aceeași mărime și proces de antrenament, în special pentru sarcinile downstream. Datorită implementărilor sale de proiectare, straturile intermediare din cadru UltraFastBERT sunt exponențial mai rapide,
Dat fiind un rețea feedforward rapidă (FFF) și o rețea feedforward (FF), fiecare cu n număr de neuroni, complexitatea timpului a unei treceri înainte într-o rețea feedforward este O(n), în timp ce complexitatea timpului este O(log2n) pentru o rețea feedforward rapidă, iar diferența de complexitate a timpului se datorează în principal faptului că, într-o rețea feedforward rapidă, neuronii sunt organizați într-un arbore binar echilibrat, iar atunci când se furnizează intrarea, rețeaua execută doar o ramură a arborelui în mod condiționat. Mai mult, efectuarea inferenței pe o rețea feedforward rapidă duce la CMM sau înmulțirea matricială condițională, în care rândurile de intrare se înmulțesc cu coloanele naturale de greutate individual, iar ieșirea operației anterioare de produs scalat determină greutatea coloanelor pentru a continua. Rezultatul este că rețeaua utilizează toți neuronii doar pentru câteva intrări, iar nicio intrare nu necesită mai mult de câțiva neuroni pentru a fi gestionată de rețea. Produsul scalat CMM se deosebește de DMM sau înmulțirea matricială densă, care calculează produsul scalat al tuturor intrărilor cu toate coloanele de greutate.
Pentru a rezuma, UltraFastBERT este un cadru bazat pe BERT care oferă rezultate comparabile cu modelele de limbaj BERT de top, care
- Utilizează doar 0,3% din neuroni disponibili în timpul etapei de inferență și angajează doar 12 neuroni dintr-un total de 4095 de neuroni pentru fiecare strat de inferență.
- Oferă o performanță puternică comparabilă cu modelele BERT de top, prin implementarea strategiilor de fine-tuning pe sarcinile downstream.
- Oferă o implementare nativă a CMM sau a înmulțirii matriciale condiționale, care reprezintă baza pentru rețeaua feedforward rapidă și, în final, duce la o accelerare de 78 de ori a performanței în comparație cu înmulțirea matricială densă optimizată nativ.
Rețele Neuronale Feedforward
O rețea neuronală feedforward este una dintre cele mai simple rețele neuronale artificiale care mișcă informația doar în direcția înainte, de la nodurile de intrare la nodurile de ieșire, prin noduri ascunse. Unul dintre principalele puncte forte ale unei rețele neuronale feedforward rapide este că nu există bucle sau cicluri în astfel de rețele și sunt mai simple de construit în comparație cu RNN sau rețelele neuronale recurente și CNN sau rețelele neuronale convenționale. Arhitectura unei rețele neuronale feedforward rapide cuprinde trei componente, și anume straturi de intrare, straturi ascunse și straturi de ieșire, iar fiecare strat este alcătuit din unități numite neuroni, iar fiecare strat este interconectat cu celălalt prin intermediul greutăților.
Neuronii prezenți în straturile de intrare primesc intrări și le transmit mai departe către următorul strat. Numărul de neuroni din fiecare strat de intrare este determinat de dimensiunea datelor de intrare. Următorul, avem straturile ascunse care nu sunt expuse nici la intrare, nici la ieșire și sunt responsabile pentru calculele necesare. Neuronii din fiecare strat ascuns iau suma ponderată a ieșirilor oferite de stratul anterior, aplică o funcție de activare și transmit rezultatul către următorul strat, iar procesul se repetă. În final, avem stratul de ieșire care produce ieșirea pentru intrările date. Fiecare neuron din fiecare strat al unei rețele feedforward rapide este interconectat cu fiecare neuron din următorul strat, făcând rețelele neuronale feedforward o rețea complet conectată. Greutățile sunt utilizate pentru a reprezenta puterea de conexiune între neuroni, iar rețeaua actualizează aceste greutăți pentru a învăța modelele prin actualizarea greutăților pe baza erorii care apare în ieșire.
Înaintând, există două etape cheie în funcționarea unei rețele neuronale feedforward rapide: etapa feedforward și etapa de backpropagation.
Etapa Feedforward
În etapa feedforward, intrarea este furnizată rețelei și apoi se propagă înainte. Straturile ascunse calculează suma ponderată a intrărilor, introduc neliniaritate în model prin trecerea sumei intrărilor printr-o funcție de activare, cum ar fi ReLu, Sigmoid și TanH. Procesul se repetă până când greutățile ajung la stratul de ieșire și modelul face o predicție.
Etapa de Backpropagation
Odată ce modelul face o predicție, calculează eroarea dintre ieșirea generată și ieșirea așteptată. Eroarea este apoi propagată înapoi prin rețea, iar rețeaua utilizează un algoritm de optimizare a gradientului pentru a ajusta greutățile în încercarea de a minimiza eroarea.
UltraFastBERT: Arhitectura și Funcționarea Modelului
Cadru UltraFastBERT se bazează pe arhitectura crammedBERT și utilizează toate componentele cadru crammedBERT, cu excepția naturii straturilor intermediare. În schimb, cadru UltraFastBERT înlocuiește transformatorul din rețelele feedforward conținute în straturile intermediare ale cadru crammedBERT cu rețele feedforward rapide. Cadru UltraFastBERT face următoarele modificări asupra rețelelor feedforward originale.
- Cadru elimină diferența dintre nodurile de frunză și nodurile nefrunză prin utilizarea funcției de activare GeLu pe noduri și echiparea acestor noduri cu greutăți de ieșire și eliminarea completă a biasurilor de ieșire. După aceea, cadru fixează mărimea frunzei la 1.
- În final, cadru permite multiple rețele feedforward rapide în paralel prin calcularea comună a straturilor de ieșire intermediare. Cadru reușește să facă acest calcul prin luarea sumei arborilor individuali și prezentarea sumei ca strat de ieșire intermediar.
Înaintând, în timpul antrenamentului, cadru UltraFastBERT urmează procedura de antrenament utilizată de cadru crammedBERT, care include dezactivarea dropout-ului în preantrenament și utilizarea programului de învățare cu rată triunghiulară de 1-ciclu. Modelul este apoi ajustat pentru a-și maximiza performanța pe o gamă largă de sarcini, în principal din benchmark-ul GLUE, pentru un total de 5 epoci.
Interferență
Interferența este o parte importantă a unei rețele feedforward rapide, iar aceste rețele feedforward rapide, în sine, formează o parte semnificativă a modelelor de limbaj mari și sunt cunoscute pentru potențialul lor excepțional de accelerare. Pentru a înțelege acest potențial de accelerare, să luăm exemplul unuia dintre cele mai avansate modele de limbaj, GPT-3, în care rețelele feedforward din fiecare strat de transformator conțin peste 49.100 de neuroni. Dacă ar fi antrenabilă, o rețea feedforward rapidă (adâncime maximă de 15) ar putea înlocui rețeaua feedforward originală. Rețeaua feedforward rapidă introdusă ar avea peste 65.000 de neuroni, dar ar utiliza doar 16 din acești neuroni pentru interferență, ceea ce reprezintă aproximativ 0,03% din neuroni disponibili pentru GPT-3.
Algoritm și Compatibilitate
Cadru UltraFastBERT utilizează un algoritm pseudocod recursiv pentru interferența rețelei feedforward rapide, iar algoritmul este prezentat în imaginea de mai jos.

Aici, B reprezintă dimensiunea batch-ului, H reprezintă lățimea straturilor de intrare, iar M reprezintă coloane. O altă cauză majoră de îngrijorare legată de utilizarea abordării de înmulțire matricială condițională este dacă aceasta face rețelele feedforward rapide incompatibile cu procesul care este deja în uz pentru înmulțirea matricială densă și cadrele de învățare profundă existente. Din fericire, utilizarea CMM nu afectează performanța sau introduce incompatibilitate, deși crește complexitatea caching-ului.
Este esențial să se noteze că, ca parte a rețelei feedforward rapide, înmulțirea matricială densă cu fir singulară se bazează pe executarea instrucțiunilor de înmulțire și acumulare, iar înlocuirea DMM cu abordarea CMM va beneficia de CPU, deoarece sunt necesare mai puține instrucțiuni de înmulțire și acumulare pentru a calcula ieșirea stratului pe element. Prin urmare, în ciuda faptului că utilizează o condiționalitate care este de obicei asociată cu ramificarea, “ramificarea neuronală” acționează ca o adăugare la deplasarea memoriei către pointerii relevanți din cadru. Prin urmare, în cadru UltraFastBERT, predicția instrucțiunii de ramificare nu este niciodată pe deplin angajată pentru a facilita condiționalitatea CMM și încarcă doar coloanele relevante ale matricei de greutate individual. Mai mult, deoarece cadru efectuează produse scalare rand-col, procesarea vectorială paralelă cu o singură instrucțiune și multiple date este încă o opțiune bună pentru a accelera implementările de interferență pentru dispozitive specifice.
UltraFastBERT: Performanță și Rezultate
Vom discuta despre performanța cadru UltraFastBERT pentru ajustarea fine și pentru sarcinile de interferență pentru a analiza modul în care cadru se descurcă în comparație cu modelele de limbaj de top.
Rezultate de Ajustare Fină
Următoarea figură demonstrează performanța diverselor modele pe seturile de test GLUE-dev. Aici, N reprezintă numărul de neuroni disponibili cadrelor pentru antrenament, “Avg” reprezintă scorul mediu al tuturor sarcinilor.

După cum se poate vedea clar, cadru UltraFastBERT, care a fost antrenat pe GPU A6000 timp de peste 24 de ore, reușește să păstreze aproape 96% din performanța predictivă pe sarcinile downstream GLUE în comparație cu cadru BERT original. Mai mult, se poate vedea că, odată cu creșterea adâncimii rețelelor feedforward rapide, performanța cadrelor suferă o scădere, deși cea mai mare parte a degradării performanței are loc doar pentru sarcina CoLa. Dacă sarcina CoLa este ignorată pentru o perioadă, cadru UltraFastBERT returnează un scor de performanță predictivă de aproximativ 98,6%.
Rezultate de Interferență
În această secțiune, vom compara performanța mai multor rețele feedforward sau rețele feedforward rapide pe implementări de interferență, iar aceste implementări sunt răspândite pe trei niveluri.
- La nivelul 1 de implementare, implementarea este construită utilizând rutine BLAS de nivel 1, și anume produsul scalar-vector și produsele vector-vector.
- La nivelul 2, implementările utilizează rutine BLAS de nivel 2, și anume produsul scalar-vector batchat și produsele matrice-vector batchate.
- La nivelul 3, implementările utilizează abordarea de înmulțire matricială nebatchată BLAS de nivel 3, iar deși este cea mai rapidă implementare disponibilă pentru rețelele feedforward, astfel de implementări nu sunt disponibile pentru rețelele feedforward rapide, deoarece biblioteca nu suportă sparsitatea vectorială a înmulțirii matriciale condiționale.
În plus, cadru UltraFastBERT utilizează implementări GPU prin utilizarea nucleelor CUDA personalizate sau a nucleelor PyTorch.

Tabelul de mai sus compară performanța cadru UltraFastBERT cu predecesorii săi, cadrele bazate pe BERT, în ceea ce privește straturile feedforward și rețelele feedforward rapide, unde fiecare coloană conține accelerările relative de interferență rapidă peste feedforward atunci când utilizează aceleași primitive de operații liniare algebrice.
Cu toate acestea, este important de remarcat că accelerările raportate în tabelul de mai sus sunt destinate “comparațiilor corecte”, adică atât implementările rețelelor feedforward rapide, cât și cele feedforward utilizează aceleași operații primitive liniare algebrice. Mai mult, la nivelurile 1 și 2, implementările rețelelor feedforward rapide sunt capabile să efectueze interferența de 48 de ori și, respectiv, 78 de ori mai rapid decât cea mai rapidă implementare feedforward.
Gânduri Finale
În acest articol, am discutat despre UltraFastBERT, o variantă a cadru BERT, care se bazează pe conceptul că straturile feedforward nu utilizează 100% din neuroni disponibili pentru a genera ieșiri pentru fiecare intrare la momentul inferenței, ceea ce duce la irosirea resurselor, creșterea complexității, a timpului de calcul și a costurilor de calcul, și înlocuiește straturile feedforward cu rețele feedforward mai rapide în arhitectura sa, ceea ce duce, în final, la faptul că cadru UltraFastBERT utilizează doar 0,3% din neuroni disponibili, oferind rezultate comparabile cu modelele BERT de aceeași mărime și proces de antrenament, în special pentru sarcinile downstream.
Datorită implementărilor sale de proiectare, straturile intermediare din cadru UltraFastBERT sunt exponențial mai rapide. Mai mult, performanța puternică oferită de cadru UltraFastBERT este o dovadă că modelele de limbaj mari pot oferi o performanță puternică prin angajarea doar a unei fracțiuni din parametrii lor pentru interferențe individuale, deoarece cadru UltraFastBERT utilizează doar 0,3% din neuroni disponibili în timpul inferenței și, totuși, reușește să atingă o accelerare de 78 de ori a timpului de interferență.












