Architetture dei modelli linguistici · guida interattiva

Stesso mattone, tre modi di guardare il testo, e un modo per accenderne solo una parte

BERT, GPT, T5, Mixtral e DeepSeek sono costruiti con lo stesso blocco, il Transformer. Cambiano tre scelte: quali parole può guardare ogni parola, che cosa impara a prevedere e quanta parte della rete lavora per ogni token. Questa guida le separa una alla volta: prima BERT contro GPT, poi le famiglie di architetture, infine i modelli densi contro quelli sparsi a esperti (MoE, Mixture of Experts), con il router smontato pezzo per pezzo.

1 · Il mattone comune

Tutti i modelli di questa guida impilano lo stesso blocco

Un modello linguistico moderno trasforma il testo in token, ogni token in un vettore (l'embedding, vedi la guida sul training), e poi fa passare quei vettori attraverso una pila di blocchi identici. Ogni blocco ha due stadi, sempre nello stesso ordine.

L'attenzione è il momento in cui i token si parlano: ogni token guarda gli altri, decide quali contano per lui e ne mescola le informazioni nel proprio vettore.

La rete feed-forward (FFN, Feed-Forward Network) è il momento in cui ogni token lavora da solo: il suo vettore passa in due o tre moltiplicazioni per matrice, che applicano ciò che il modello ha imparato.

Attorno a entrambi ci sono una normalizzazione e una connessione residua, che somma l'ingresso all'uscita, così ogni blocco aggiunge qualcosa invece di riscrivere tutto.

Il meccanismo completo, con query, key e value, le teste multiple e il conto dei pesi di Llama 2 7B, è nel capitolo sugli strati della guida sul training: qui basta l'idea dei due stadi.

token → embedding
un vettore per token, per esempio 4.096 numeri
attenzione
i token si parlano. Qui si decide chi può guardare chi: è la differenza tra BERT e GPT
FFN (rete feed-forward)
ogni token da solo. Qui sta la maggior parte dei parametri: è la parte che un MoE sostituisce con gli esperti
× N blocchi (12 in BERT-base, 94 in Qwen3-235B)
stesso blocco ripetuto, pesi diversi in ogni copia
testa di uscita
cambia con il compito: probabilità del token successivo, etichetta, vettore

Dove stanno i parametri

Con un vettore di dimensione d, l'attenzione di un blocco ha quattro matrici quadrate (query, key, value, output). La FFN classica allarga il vettore a 4·d e lo riporta a d: due matrici da d × 4d. Il conto dei parametri:

Calcolo · parametri di un blocco

attenzione=4 · d · d = 4d2
quattro matrici quadrate: query, key, value, output
FFN=2 · d · 4d = 8d2
due matrici da d × 4d
quota della FFN=8d2 4d2 + 8d2 = 2 3

Quindi circa due terzi dei parametri di un blocco stanno nella FFN. Tenete a mente questo numero: è il motivo per cui i modelli a esperti del capitolo 6 intervengono proprio lì.

Un blocco con d = 4.096, FFN classica

Le varianti moderne (SwiGLU, Swish-Gated Linear Unit; attenzione a gruppi) spostano un po' le proporzioni, non l'ordine di grandezza.

Mappa concettuale · il mattone comune
  • Blocco Transformer
    • primo stadio Attenzione
      • serve a far parlare i token tra loro
      • qui differiscono BERT e GPT capitoli 2–3
    • secondo stadio FFN
      • serve a far lavorare ogni token da solo
      • contiene circa ⅔ dei parametri
      • nei MoE diventa tanti esperti capitoli 5–7
    • attorno a entrambi Normalizzazione e residuo
      • fanno sì che ogni blocco aggiunga invece di riscrivere
    • si ripete × N blocchi
      • e finisce con la testa di uscita cambia con il compito
La mappa della guida in una frase

BERT e GPT differiscono nell'attenzione (chi vede chi) e nell'obiettivo; i modelli densi e quelli sparsi differiscono nella FFN (una per tutti, o tante tra cui scegliere).

2 · BERT

Un lettore che guarda a destra e a sinistra, e non scrive

BERT (Bidirectional Encoder Representations from Transformers) è un modello di Google del 2018 che produce una rappresentazione del testo, non del testo nuovo.

Immaginate un lettore esperto a cui date una frase con una parola cancellata: «il gatto ___ sul divano». Per indovinarla usa quello che viene prima e quello che viene dopo. È esattamente ciò che fa BERT: ogni token guarda tutti gli altri, in entrambe le direzioni. Il nome lo dice: bidirectional encoder, un codificatore che legge in due direzioni.

Il risultato non è una frase ma un vettore per ogni token (768 numeri nella versione base), che ne descrive il significato nel contesto: la parola «pesca» in «vado a pesca» e in «mangio una pesca» esce con due vettori diversi. Su quei vettori si costruisce poi il compito che serve.

Come si allena: due esercizi

MLM · Masked Language ModelingIndovina la parola coperta

Si sceglie a caso il 15% dei token. Di questi, l'80% diventa [MASK], il 10% un token casuale, il 10% resta uguale. Il modello deve ricostruire l'originale.

perché 80/10/10 · in uso reale [MASK] non compare mai: se il modello lo vedesse sempre, imparerebbe a lavorare solo quando c'è.
NSP · Next Sentence PredictionLa seconda frase segue la prima?

Metà delle volte la frase B segue davvero la A, metà è presa a caso. Il modello risponde sì o no usando il token speciale [CLS] messo all'inizio.

poi abbandonato · RoBERTa (Facebook AI, 2019) ha mostrato che togliendo l'NSP e allenando di più con più dati si ottiene di meglio.
VersioneBlocchiDimensione dTeste di attenzioneParametri
BERT-base1276812110 M
BERT-large241.02416340 M

Addestrato su BooksCorpus (800 milioni di parole) e Wikipedia in inglese (2,5 miliardi), con un vocabolario WordPiece di circa 30.000 token.

Come si usa: si aggiunge una testa piccola

BERT pre-addestrato non sa fare nulla di utile da solo: sa rappresentare. Per un compito si aggiunge sopra uno strato piccolo e si fa un breve fine-tuning (addestramento di rifinitura) su esempi etichettati.

CompitoChe cosa si legge dall'uscitaEsempio
Classificazioneil vettore di [CLS] → una probabilità per classerecensione positiva o negativa, email spam
Etichette per token (NER, Named Entity Recognition)ogni vettore → una classe«Mario» = persona, «Roma» = luogo
Domande su un testoogni vettore → «inizio risposta?», «fine risposta?»la risposta è il tratto tra i due
Ricerca per significatomedia dei vettori → un vettore per fraseembedding per la ricerca nei documenti (RAG, Retrieval-Augmented Generation)

Dove si trova BERT oggi. Non come chatbot ma dietro le quinte: modelli di embedding per la ricerca, reranker che riordinano i risultati, classificatori veloci ed economici. I discendenti (RoBERTa, DistilBERT, DeBERTa, ModernBERT) mantengono l'idea: encoder bidirezionale, uscita come rappresentazione.

Mappa concettuale · BERT
  • BERT
    • è un encoder bidirezionale
      • ogni token guarda tutti gli altri, in entrambe le direzioni
      • produce un vettore per token 768 numeri nella versione base
    • si allena con due esercizi
      • MLM indovina la parola coperta 15% dei token
      • NSP la seconda frase segue la prima? poi abbandonato
    • si usa con una testa piccola + fine-tuning
      • serve a classificare, etichettare token, rispondere a domande
      • serve anche a la ricerca per significato
    • oggi sta dietro le quinte
      • come embedding, reranker, classificatori
Encoder
La pila di blocchi in cui ogni token può guardare tutti gli altri. Produce rappresentazioni.
BERT, RoBERTa
[CLS]
Token speciale messo all'inizio: il suo vettore finale riassume la sequenza ed è quello usato per classificare.
[CLS] il film è bello [SEP]
Fine-tuning
Addestramento breve su un compito specifico, partendo dai pesi già pre-addestrati.
poche migliaia di esempi etichettati
3 · BERT contro GPT

La differenza tecnica sta in una matrice triangolare

GPT (Generative Pre-trained Transformer) usa lo stesso blocco di BERT. Le differenze sono quattro, e discendono tutte dalla prima.

  1. La maschera di attenzione. In BERT ogni token guarda tutti; in GPT ogni token guarda solo sé stesso e i token precedenti. È una maschera causale: la matrice «chi vede chi» è un triangolo.
  2. L'obiettivo. BERT indovina il 15% di token coperti; GPT prevede il token successivo in ogni posizione. Con la stessa frase, GPT riceve un segnale di errore da quasi tutti i token, BERT da circa uno su sette.
  3. L'uscita. BERT restituisce vettori su cui si monta una testa per il compito; GPT restituisce una distribuzione di probabilità sul vocabolario per il token successivo.
  4. L'inferenza. BERT fa una passata sola sulla frase intera; GPT genera un token, lo aggiunge all'ingresso e ripete, riusando i calcoli già fatti per i token precedenti (la cache KV, key-value). Come funziona quel ciclo, quanta memoria occupa la cache e perché la risposta costa più della domanda è il tema della guida sull'inferenza.

Laboratorio: chi vede chi

comportamento reale

Scegli il modello e tocca una parola a sinistra: la riga mostra quali token può guardare mentre calcola il proprio vettore. Sotto, che cosa deve prevedere ogni posizione durante l'addestramento.

Che cosa impara ogni posizione

Posizioni che producono errore–
Il token scelto vede–

Nella realtà BERT copre il 15% dei token di ogni esempio; qui, con sei parole, ne copriamo una. Le frasi di BERT hanno anche [CLS] e [SEP], omessi per chiarezza.

Perché BERT non scrive e GPT non «legge» a ritroso

BERT è stato allenato a riempire buchi avendo il contesto da entrambi i lati. Per scrivere un testo nuovo da sinistra a destra, il contesto di destra non esiste ancora: il modello lavora fuori dalle condizioni in cui ha imparato. Si può forzare (riempire più maschere a turni), ma il risultato è scadente.

GPT, al contrario, è nato per scrivere: l'obiettivo di addestramento e l'uso coincidono, token dopo token. Il prezzo è che, a parità di dimensione, ogni token ha un contesto solo a metà, e per compiti di pura comprensione su frasi brevi un encoder piccolo resta competitivo e molto più economico. Con la scala, però, i modelli decoder hanno imparato anche a capire: basta formulare il compito come testo da continuare.

BERT (encoder)GPT (decoder)
Chi vede chitutti vedono tuttiogni token vede solo quelli precedenti
Obiettivotoken coperti (MLM), 15%token successivo, ogni posizione
Uscitaun vettore per tokenprobabilità del token successivo
Inferenzauna passataun ciclo per ogni token generato, con cache KV
Adattamento a un compitotesta piccola + fine-tuningistruzioni nel prompt, esempi, oppure fine-tuning
Punto forterappresentazioni, ricerca, classificazione a basso costogenerazione, conversazione, ragionamento
Mappa concettuale · BERT contro GPT
  • BERT contro GPT
    • la differenza di partenza è la maschera di attenzione
      • BERT tutti vedono tutti
      • GPT ognuno vede solo i precedenti (causale)
    • ne discende l'obiettivo
      • BERT token coperti, circa 15%
      • GPT token successivo, in ogni posizione
    • ne discende l'uscita
      • BERT un vettore per token
      • GPT probabilità del token successivo
    • ne discende l'inferenza
      • BERT una passata
      • GPT un token alla volta, con cache KV
Maschera causale
Impedisce a ogni token di guardare quelli successivi: la matrice di attenzione diventa triangolare.
«dorme» vede «il», «gatto», «dorme»
Autoregressivo
Genera un token alla volta, e ogni token generato diventa ingresso per il successivo.
il → gatto → dorme → …
Cache KV
Chiavi e valori dell'attenzione dei token già elaborati, conservati per non ricalcolarli a ogni nuovo token.
cresce con la lunghezza del contesto
4 · Le famiglie di architetture

Tre modi di montare il blocco, e perché ne ha vinto uno

Il Transformer originale (Vaswani e colleghi, 2017) era pensato per la traduzione e aveva due pile: una che legge la frase di partenza, una che scrive quella d'arrivo. BERT ha tenuto solo la prima, GPT solo la seconda. Ne escono tre famiglie.

encoder-onlyLegge tutto, restituisce vettori
encoder↔ tutti vedono tutti

BERT, RoBERTa, DeBERTa, ModernBERT. Embedding, classificazione, reranking.

decoder-onlyScrive un token alla volta
decoder→ solo i precedenti

GPT, Llama, Qwen, Mistral, DeepSeek, gpt-oss. Quasi tutti i modelli conversazionali.

encoder-decoderLegge una cosa, ne scrive un'altra
encoderdecoderattenzione incrociata

Transformer originale, T5, BART, Whisper. Traduzione, riassunti, trascrizione.

Nell'encoder-decoder il decoder ha un terzo stadio in ogni blocco, l'attenzione incrociata: oltre a guardare i token che ha già scritto, guarda i vettori prodotti dall'encoder sulla frase di partenza. T5 (Google, 2019) lo allena coprendo interi tratti di testo e chiedendo al decoder di riscriverli.

Perché i grandi modelli sono quasi tutti decoder-only

  1. Ogni token insegna qualcosa. Prevedere il successivo produce un errore in ogni posizione: più segnale per ogni documento letto rispetto al 15% di BERT.
  2. Un formato per tutto. Traduzione, riassunto, codice, dialogo: sono tutti «dato questo testo, continua». Non serve una testa diversa per ogni compito.
  3. Si scala in modo semplice. Una sola pila, un solo obiettivo; le leggi di scala mostrano miglioramenti regolari aumentando dati, parametri e calcolo.
  4. Imparare dal prompt. A grande scala compare l'apprendimento in contesto: esempi e istruzioni nel prompt cambiano il comportamento senza toccare i pesi.

Dentro un decoder moderno

Il decoder del 2026 è ancora il blocco del 2017, con alcuni pezzi sostituiti da versioni più efficienti. Nessuno cambia l'idea di fondo; cambiano costo, stabilità e lunghezza del contesto.

PezzoOriginaleOggi, di solitoPerché
Posizione dei tokenvettori di posizione sommatiRoPE (Rotary Position Embedding): ruota query e key in base alla posizionecodifica la distanza relativa, si estende a contesti più lunghi
NormalizzazioneLayerNorm dopo ogni stadioRMSNorm (Root Mean Square Normalization) prima di ogni stadiopiù economica e più stabile con molti blocchi
FFNdue matrici, attivazione ReLUSwiGLU (Swish-Gated Linear Unit): tre matrici, una fa da «cancello»qualità migliore a parità di parametri
Teste di attenzioneogni testa ha le sue key e valueGQA (Grouped-Query Attention): gruppi di teste condividono key e valuecache KV (key-value) molto più piccola, inferenza più veloce
FFN, di nuovodensaspesso sostituita da esperti (MoE, Mixture of Experts)più parametri senza più calcolo per token (capitolo 5)

Esempio concreto: Qwen3-235B usa 64 teste per le query e solo 4 per key e value; gpt-oss-120b usa gruppi da 8 e RoPE.

Esistono anche architetture che sostituiscono in parte l'attenzione, come i modelli a spazio di stati (SSM, State Space Model, per esempio Mamba) e gli ibridi che alternano i due tipi di strato. Riducono il costo sui contesti lunghi; sono fuori dal perimetro di questa guida.

Mappa concettuale · le famiglie di architetture
  • Famiglie di architetture
    • encoder-only legge tutto, restituisce vettori
      • esempi BERT, RoBERTa
      • serve a embedding, classificazione, reranking
    • decoder-only scrive un token alla volta
      • esempi GPT, Llama, Qwen
      • vince perché ogni token insegna e un formato basta per tutto
      • vince anche perché si scala in modo semplice
    • encoder-decoder legge una cosa, ne scrive un'altra
      • è fatto di due pile e attenzione incrociata
      • esempi T5, Whisper
    • un decoder moderno ha pezzi più efficienti
      • come RoPE, RMSNorm, SwiGLU, GQA
      • e spesso una FFN a esperti capitolo 5
Decoder
La pila di blocchi con maschera causale, che genera testo un token alla volta.
GPT, Llama, Qwen
Attenzione incrociata
Stadio del decoder in cui i token in scrittura guardano i vettori prodotti dall'encoder.
T5, Whisper
GQA
Grouped-Query Attention: più teste di query condividono le stesse key e value, riducendo la cache.
64 query, 4 key-value
5 · Denso e sparso

Quanti parametri ha un modello, e quanti ne usa per ogni token

In un modello denso ogni token attraversa tutti i parametri: con 70 miliardi di pesi, ogni parola prodotta passa per 70 miliardi di pesi. Il costo di calcolo per token cresce quindi insieme alla dimensione del modello: circa 2 × parametri operazioni in virgola mobile (FLOPs, floating point operations) per ogni token generato, una moltiplicazione e una somma per peso.

In un modello sparso a esperti (MoE, Mixture of Experts) la FFN (rete feed-forward) di un blocco viene sostituita da tante FFN alternative, e ogni token ne usa solo alcune. Nascono così due numeri diversi: i parametri totali, che devono stare tutti in memoria, e i parametri attivi, quelli che un token usa davvero e che determinano il costo di calcolo.

Un'analogia

È come un ospedale con cento specialisti: sono tutti sul libro paga, ma ogni paziente ne vede due.

ModelloTotaliAttivi per tokenEsperti per stratoScelti per token
Mixtral 8x7B (Mistral AI, 2023)46,7 B12,9 B82
DeepSeek-V3 (2024)671 B37 B256 + 1 condiviso8 + 1
Qwen3-235B-A22B (Alibaba, 2025)235 B22 B1288
Llama 4 Maverick (Meta, 2025)400 B17 B128 + 1 condiviso1 + 1
gpt-oss-120b (OpenAI, 2025)117 B5,1 B1284

«8x7B» non significa 56 miliardi: gli esperti sostituiscono solo le FFN, mentre attenzione ed embedding sono condivisi. Per questo i totali sono 46,7 B.

Calcolo · quanto costa un token in un modello denso

FLOPs per token≈2 × P
una moltiplicazione e una somma per peso; P = numero di parametri
con P = 70 miliardi=2 × 70 miliardi
ogni parola prodotta passa per tutti i 70 miliardi di pesi
costo per token≈140 miliardi di FLOPs

Calcolo · perché «8x7B» non fa 56 miliardi

lettura ingenua=8 × 7 B = 56 B
otto modelli da 7 miliardi, messi uno accanto all'altro
parametri totali reali=46,7 B
gli esperti sostituiscono solo le FFN; attenzione ed embedding sono condivisi

Laboratorio: calcolatore denso contro sparso

matematica reale, modello semplificato

Parti da un preset e muovi il numero di esperti e quanti ne sceglie ogni token: guarda come si separano parametri totali (memoria) e attivi (calcolo).

Parametri totali–
Parametri attivi per token–
Calcolo per token–
Memoria dei pesi (bf16, bfloat16)–
attiviinattivi

Semplificazioni: attenzione standard da 4·d² per blocco (senza GQA, quindi un po' sovrastimata), FFN SwiGLU da 3 matrici per esperto, vocabolario di 128.000 token con embedding d'ingresso e di uscita separati, tutti i blocchi a esperti. I preset si avvicinano ai modelli reali, con scarti dovuti a queste semplificazioni: tipo Qwen3-235B torna entro pochi punti percentuali; tipo Mixtral ha i totali vicini e gli attivi più alti di circa il 10% (attenzione senza GQA, Grouped-Query Attention, e vocabolario più grande di quello vero); il denso arriva a circa 80 B invece dei 70 di Llama 3 70B, perché l'attenzione senza GQA pesa quasi il doppio. bf16 = 2 byte per peso.

Che cosa si guadagna e che cosa si paga

Si guadagna
più conoscenza a parità di calcolopiù parametri totali = più capacità di memorizzare
addestramento più economicoa parità di qualità servono meno FLOPs di un denso
generazione più veloceper token si calcolano solo gli esperti scelti
⇄
Si paga
memoriatutti gli esperti devono stare nelle GPU (Graphics Processing Unit), anche se lavorano a turno
comunicazionei token viaggiano tra le GPU che ospitano esperti diversi
addestramento più delicatobilanciamento del carico, stabilità del router
Mappa concettuale · denso e sparso
  • Denso e sparso
    • modello denso ogni token usa tutti i parametri
      • costa circa 2 × parametri FLOPs per token
    • modello sparso (MoE) tante FFN, ogni token ne usa alcune
      • parametri totali determinano la memoria
      • parametri attivi determinano il calcolo
    • si guadagna più conoscenza a parità di calcolo
      • e anche addestramento economico, generazione veloce
    • si paga memoria e comunicazione
      • e anche addestramento più delicato
Parametri totali
Tutti i pesi del modello: determinano la memoria necessaria.
DeepSeek-V3: 671 B
Parametri attivi
I pesi effettivamente usati per elaborare un token: determinano il calcolo.
DeepSeek-V3: 37 B
Modello denso
Modello in cui ogni token usa tutti i parametri.
Llama 3 70B
6 · Com'è fatto un modello a esperti

Non è un router davanti a un modello: è una FFN moltiplicata in ogni blocco

L'idea intuitiva, ma sbagliata

L'idea intuitiva è: un modello, un router all'ingresso che smista la domanda all'esperto giusto. Non funziona così. Non c'è un router davanti e non ci sono esperti interi, ciascuno un modello completo.

Il cambio avviene dentro ogni blocco, e riguarda solo la FFN (Feed-Forward Network, la rete feed-forward del capitolo 1).

Blocco denso
attenzione
FFN · una sola, per tutti i token
+ residuo, normalizzazione
→diventa
Blocco MoE
attenzioneidentica: resta densa e condivisa
routerun piccolo strato lineare: d → numero di esperti
E1E2E3E4…E128condiviso
somma pesata delle uscite scelte, + residuo

Che cosa cambia davvero, pezzo per pezzo

  1. La FFN diventa N esperti. Ogni esperto è una FFN completa con i suoi pesi. Nei progetti recenti gli esperti sono tanti e stretti (a grana fine): Qwen3-235B ne ha 128 per strato, ognuno largo meno di mezzo d, invece di pochi esperti grandi.
  2. C'è un router in ogni blocco a esperti, non uno solo. Con 94 blocchi ci sono 94 router, e ognuno decide per ogni token, in modo indipendente dagli altri. Lo stesso token può andare agli esperti 3 e 17 nel blocco 5 e agli esperti 88 e 102 nel blocco 6.
  3. Non tutti i blocchi sono per forza a esperti. DeepSeek-V3 tiene densi i primi tre blocchi; Llama 4 Maverick alterna blocchi densi e blocchi a esperti.
  4. Esperti condivisi. Alcuni modelli aggiungono uno o più esperti che lavorano per ogni token, per la conoscenza comune, lasciando agli esperti scelti le specializzazioni (DeepSeek-V3, Llama 4).
  5. Attenzione, embedding e testa restano densi. Sono condivisi da tutti i token: per questo i parametri attivi non sono semplicemente «totali ÷ esperti».
  6. L'addestramento cambia. Il router si allena insieme a tutto il resto, ma va tenuto in equilibrio (capitolo 7): una perdita di bilanciamento, una capacità massima per esperto, a volte una penalità che tiene piccoli i punteggi del router (z-loss) per evitare instabilità.
  7. L'infrastruttura cambia. Gli esperti sono distribuiti su GPU (Graphics Processing Unit) diverse (parallelismo per esperti): a ogni blocco i token vengono spediti alle GPU dei propri esperti e poi rimandati indietro, una comunicazione «tutti con tutti». DeepSeek-V3 limita ogni token a esperti su al massimo 4 nodi per contenere il traffico.

Lo stesso, in codice

Uno strato MoE (Mixture of Experts) ridotto all'osso, per un solo token. Tutto il resto del blocco resta come nel modello denso.

Python · uno strato MoE, token singolo
def moe_ffn(h, W_router, esperti, k=2, condiviso=None):
    punteggi = h @ W_router                    # un numero per esperto
    prob = softmax(punteggi)
    scelti = argsort(prob)[-k:]                # ← top-k: gli altri esperti non vengono calcolati
    pesi = prob[scelti] / prob[scelti].sum()    # rinormalizza tra i soli scelti
    y = sum(p * esperti[i](h) for p, i in zip(pesi, scelti))
    if condiviso is not None:
        y = y + condiviso(h)                   # lavora per ogni token
    return y
Risposta breve alla domanda «cambia solo il router?»

No. Il router è la parte visibile, ma per averlo bisogna moltiplicare le FFN in ogni blocco, allenare il router insieme al resto tenendolo in equilibrio, e distribuire gli esperti su più GPU. Attenzione ed embedding restano invece quelli di un modello denso.

Mappa concettuale · com'è fatto un modello a esperti
  • Modello a esperti (MoE)
    • non è un router davanti a un modello
      • è invece una FFN moltiplicata in ogni blocco
    • la FFN diventa N esperti
      • ogni esperto è una FFN completa
      • sceglie un router per ogni blocco
      • a volte aggiunge esperti condivisi
    • restano densi attenzione, embedding, testa
      • perciò attivi ≠ totali ÷ esperti
    • cambiano anche addestramento e infrastruttura
      • si risolve con bilanciamento capitolo 7
      • richiede parallelismo per esperti su più GPU
Esperto
Una delle FFN alternative di un blocco MoE. Non è un modello a sé e non ha un argomento assegnato.
una delle 128 FFN di Qwen3
Esperto condiviso
Esperto usato da tutti i token, in aggiunta a quelli scelti dal router.
DeepSeek-V3, Llama 4
Parallelismo per esperti
Distribuzione degli esperti su GPU diverse: i token vengono spediti dove sta il loro esperto.
comunicazione all-to-all
7 · Come sceglie il router

Un prodotto scalare, i k punteggi più alti e una forza che tiene tutti al lavoro

Il router non legge la domanda e non conosce argomenti. Lavora su un vettore alla volta: il vettore h di un token, così com'è dopo l'attenzione di quel blocco (e la normalizzazione che precede la FFN). I passi sono questi; il quarto, la rinormalizzazione, è usato da Mixtral, Qwen3 e molti altri, ma non da tutti: Switch Transformer, con un solo esperto per token, e DeepSeek-V2 ne fanno a meno.

  1. Punteggi. Moltiplica h per la matrice del router W (d righe, una colonna per esperto): esce un punteggio per esperto.s = h · W
  2. Probabilità. Trasforma i punteggi in numeri positivi che sommano a 1 (softmax). DeepSeek-V3 usa una sigmoide per ogni esperto, indipendente dagli altri.p = softmax(s)
  3. Top-k. Tiene i k esperti con la probabilità più alta; gli altri, per questo token, non vengono calcolati affatto.k = 1, 2, 4, 8…
  4. Pesi. Rinormalizza le probabilità dei soli scelti perché sommino a 1.g = p / Σ p
  5. Combinazione. L'uscita è la somma delle uscite degli esperti scelti, ciascuna moltiplicata per il suo peso.y = Σ gᵢ · Eᵢ(h)

Come impara a scegliere. Nessuno etichetta i token con «questo va all'esperto 5». La matrice del router si allena come ogni altro peso: l'errore sul token successivo torna indietro anche attraverso i pesi g, e sposta W in modo che gli esperti che hanno aiutato ricevano punteggi più alti in casi simili.

Che cosa finiscono per rappresentare gli esperti. Non «aree» tematiche. Gli autori di Mixtral hanno misurato come vengono assegnati i token di testi di matematica, biologia, filosofia e articoli scientifici: la distribuzione sugli esperti è quasi la stessa per tutti gli argomenti. Le regolarità sono sintattiche: in Python la parola self passa spesso per lo stesso esperto, i token di indentazione finiscono quasi sempre sugli stessi esperti, e token consecutivi tendono a scegliere gli stessi esperti.

Laboratorio: un router con 8 esperti

simulazione

Tocca un token per vedere il calcolo del router. Poi premi «Passo di addestramento» più volte, prima senza bilanciamento e poi con: guarda il carico degli esperti.

Token × esperti · colore = probabilità, riquadro = scelto

Carico: quota dei token assegnati a ciascun esperto

Esperti inutilizzati–
Carico massimo / medio–

Valori illustrativi: vettori dei token e matrice del router sono numeri casuali fissi, e l'«addestramento» è ridotto alla sola dinamica del carico. In un modello vero h dipende dal contesto, per cui lo stesso token può andare a esperti diversi in frasi diverse; qui due token uguali hanno lo stesso vettore.

Il problema del bilanciamento

Lasciato a sé, il router tende al collasso: un esperto che all'inizio riceve qualche token in più viene allenato di più, diventa più utile, riceve ancora più token. Dopo un po' pochi esperti fanno tutto il lavoro e gli altri sono pesi sprecati, e nel frattempo le GPU (Graphics Processing Unit) che ospitano gli esperti più scelti fanno da collo di bottiglia. Le contromisure principali:

TecnicaCome funzionaDove
Perdita ausiliaria di bilanciamentosi aggiunge all'errore un termine α · N · Σ fᵢ · Pᵢ (fᵢ = quota di token che l'esperto riceve, Pᵢ = probabilità media che il router gli assegna): è minimo quando il carico è uniformeSwitch Transformer (α = 0,01), molti modelli successivi
Capacità per espertoogni esperto accetta al massimo (token del batch / esperti) × fattore di capacità; i token in eccesso saltano l'esperto e passano avanti solo con la connessione residuaSwitch Transformer, GShard
Bias senza perdita ausiliariaa ogni esperto si somma un bias usato solo per scegliere, non per pesare: si abbassa per chi è sovraccarico e si alza per chi è scarico. Non aggiunge termini al gradiente, quindi disturba la qualità molto meno di una perdita ausiliariaDeepSeek-V3 (con in più una perdita ausiliaria piccolissima, per sequenza), che così non scarta nessun token
Rumore sui punteggirumore casuale aggiunto ai punteggi durante l'addestramento, per far provare anche gli esperti meno sceltiShazeer e colleghi, 2017 (top-k con rumore)
Scelta da parte dell'espertoinvertire la domanda: ogni esperto sceglie i suoi k token migliori, così il carico è uniforme per costruzioneExpert Choice (Google, 2022)
Mappa concettuale · come sceglie il router
  • Il router
    • lavora su un vettore per volta
      • non conosce argomenti, solo regolarità sintattiche
    • sceglie in cinque passi punteggi → probabilità → top-k → pesi → combinazione
      • top-k gli altri esperti non vengono calcolati
    • impara come ogni altro peso
      • grazie a l'errore sul token successivo
    • rischia il collasso
      • si risolve con perdita ausiliaria
      • si risolve con capacità per esperto
      • si risolve con bias senza perdita ausiliaria
Router
Strato lineare che, in ogni blocco MoE, dà un punteggio a ogni esperto per il token corrente.
s = h · W
Top-k
La regola che tiene solo i k esperti con il punteggio più alto.
Mixtral: k = 2 su 8
Collasso degli esperti
Situazione in cui il router manda quasi tutti i token a pochi esperti.
2 esperti su 8 fanno il 90% del lavoro
Fattore di capacità
Moltiplicatore del carico medio che fissa quanti token un esperto può ricevere in un batch.
1,25 = 25% di margine
Riepilogo

Le scelte che distinguono le architetture

ArchitetturaChi vede chiObiettivoFFNEsempiUsata per
Encoder-onlytutti vedono tuttitoken coperti (MLM)densaBERT, RoBERTa, ModernBERTembedding, ricerca, classificazione
Decoder-only densosolo i precedentitoken successivodensaGPT-3, Llama 3generazione, chat, codice
Decoder-only MoEsolo i precedentitoken successivok esperti su N per token, in ogni blocco MoEMixtral, DeepSeek-V3, Qwen3-235B, gpt-osscome il denso, con più parametri allo stesso costo per token
Encoder-decoderencoder: tutti; decoder: precedenti + attenzione incrociataricostruire o tradurre un testodensa (o MoE)T5, BART, Whispertraduzione, riassunti, trascrizione