Pipeline di inferenza di un Large Language Model (LLM)

Negli ultimi anni, i Large Language Models (LLM, ) sono diventati il cuore dell’intelligenza artificiale generativa. Nonostante la loro diffusione, esiste ancora molta confusione su cosa accade “dietro le quinte” quando un utente inserisce un prompt e riceve una risposta.

Di seguito cercherò di descrivere in modo tecnico, ma generalizzato il pipeline di elaborazione comune alla maggior parte dei modelli di intelligenza generativa basati su Transformer come, ad esempio, GPT (OpenAI), Claude (Anthropic), Gemini (Google DeepMind) o Llama (Meta).

La comprensione di come l’intelligenza generativa crea le risposte ai nostri prompt è importante per comprendere cosa possiamo ragionevolmente aspettarci da un LLM e come strutturare al meglio i nostri prompt per ottenere risposte precise e corrette.

A tal proposito è bene precisare subito che gli LLM non sono “motori di ricerca intelligenti” né “database compressi”. Gli LLM sono modelli probabilistici sequenziali basati su reti neurali profonde, addestrati a prevedere il token successivo in un contesto.

Il Ciclo di Vita di un Prompt

La prima cosa da comprendere è che quando un utente esegue una richiesta tramite un prompt, il sistema non “legge” il testo, ma, indipendentemente dal modello specifico, lo trasforma in un flusso di dati attraverso varie fasi: Tokenization, Embedding, Transformer Inference, Next-Token Prediction e De-tokenization.

Passo 1: Tokenization

Quando un utente inserisce un prompt, il primo passaggio non è semantico ma puramente sintattico. Il testo grezzo è inutile per una rete neurale e quindi occorre scomporre il prompt in Token ovvero in parole intere (“computer”), sotto-parole / sillabe (“comput” + “er”), caratteri / simboli / segni di punteggiatura.

Ogni token viene poi convertito in un ID numerico tramite un vocabolario fisso (embedding index) mediante l’utilizzo di algoritmi come Byte Pair Encoding (BPE).

Passo 2: Embedding

I token numerici vengono trasformati in vettori densi (embeddings) in uno spazio multidimensionale. Un embedding rappresenta una posizione in uno spazio semantico e relazioni geometriche che catturano significato, contesto, similarità. Gli embeddings sono necessari perché Il modello non ragiona su simboli, ma su geometrie: distanze, direzioni, proiezioni.

Parole con significati simili vengono collocate “vicine” in questo spazio vettoriale (Semantic Mapping).

Poiché il modello non ha una nozione intrinseca di ordine sequenziale, viene aggiunto un segnale matematico per indicare la posizione di ogni token nella frase. Solitamente viene utilizzata una funzione sinusoidale (seno /  coseno) oppure una funzione “appresa” (learned embeddings).

Senza questo segnale matematico, il modello non distinguerebbe tra “Il cane morde l’uomo” e “L’uomo morde il cane”.

Il risultato ottenuto è una sequenza di vettori che rappresentano il prompt.

Passo 3: Transformer Inference

Questa è la fase dove avviene la “comprensione”. La sequenza di vettori passa attraverso decine o centinaia di Transformer Blocks in cui avvengono una serie operazioni.

Analizzando l’inferenza dei Trasformer apparirà chiaro che il modello non “capisce” nel senso umano, ma ottimizza correlazioni statistiche ad alta dimensionalità.

Passo 3.1: Self-Attention 

La self-attention permette di risolvere il problema legato alla difficoltà di modellare efficacemente le dipendenze a lungo termine. In questa fase il modello decide a quali parti del prompt dare importanza. Per ogni token, il sistema calcola tre vettori: Query (Q), Key (K) e Value (V). Il modello esegue un prodotto scalare tra la Query di un token e le Key di tutti gli altri. In parole semplici questo significa che ogni token “guarda” tutti gli altri token e decide quanto pesano nel contesto. Per determinare quanto “peso” dare ai rispettivi Value si utilizza il concetto di attenzione calcolata come:

L’attenzione permette al modello di catturare dipendenze a lungo raggio e pesare dinamicamente il contesto.

Esempio: Nella frase “L’impiegato ha depositato i documenti in banca perché essa era aperta”, il meccanismo di Self-Attention permette al token “essa” di collegarsi matematicamente a “banca” e non a “documenti”.

Passo 3.2: Multi-head Attention

L’attenzione viene calcolata in parallelo su più “teste”, ciascuna specializzata in pattern diversi come sintassi, coreferenze e semantica.

Mediante il meccanismo multi-head si ha il vantaggio che ogni testa permette al modello di focalizzarsi su diverse relazioni tra i token. Ad esempio, mentre una testa potrebbe concentrarsi su relazioni locali, un’altra potrebbe catturare dipendenze a lungo termine.

Inoltre, la suddivisione dell’attenzione in più teste permette al modello di analizzare diverse sotto-dimensioni dei vettori, migliorando la qualità delle rappresentazioni apprese e aumentando l’efficienza del modello.

Infine, il meccanismo multi-head consente di parallelizzare i vari passaggi.

Passo 3.3: Feed-forward layers

Dopo aver calcolato l’attenzione, ogni token passa attraverso una rete fully-connected, ovvero una rete neurale densa, che applica trasformazioni non lineari, permettendo al modello di memorizzare relazioni concettuali complesse apprese durante il training.

Tecnicamente viene utilizzata un’architettura Feed-Forward Network (FFN) che può appunto essere vista come una rete neurale completamente connessa (fully-connected) applicata localmente, con kernel di dimensione 1, che preserva la struttura sequenziale dei dati.

Matematicamente, il FFN è definito come:

Passo 3.4: Residual connections & layer normalization

Per garantire la stabilità numerica e migliorare la convergenza durante l’addestramento occorre gestire le connessioni residue ed eseguire la Layer Normalization.

Le connessioni residue forniscono un percorso alternativo che permette al segnale di aggirare i livelli intermedi, mitigando il problema della scomparsa del gradiente nelle reti neurali molto profonde durante la durante la backpropagation. Il gradiente tende, infatti, a diventare estremamente piccolo quando viene moltiplicato ripetutamente per i pesi degli strati intermedi. Le connessioni residue creano un’autostrada (“shortcut”) che permette al gradiente di fluire all’indietro direttamente dal livello di output a quelli iniziali, senza passare attraverso le trasformazioni non lineari dei livelli intermedi.

In sintesi, le connessioni residue rendono le reti profonde più facili da ottimizzare, migliorando notevolmente le prestazioni su compiti complessi.

La Layer Normalization, invece, stabilizza le distribuzioni di attivazione durante l’addestramento, riducendo la sensibilità ai cambiamenti nei parametri dei livelli precedenti. Durante l’addestramento, infatti, i pesi dei livelli (layer) vengono aggiornati, causando variazioni nella distribuzione degli input per i livelli successivi.

In sintesi, la Layer Normalization migliora il flusso del gradiente e consente di utilizzare learning rate più elevati, portando a una convergenza più rapida e a un addestramento più stabile.

Passo 4: Next-Token Prediction

Questa è la fase in cui avviene la generazione della risposta. A differenza di una ricerca su database, l’LLM non genera la risposta tutta in una volta. La generazione è predittiva e iterativa e segue le seguenti fasi:

  1. Il modello calcola la distribuzione di probabilità per il prossimo token possibile.
  2. Viene selezionato un token, tramite strategie di sampling come Greedy (massima probabilità), Top-k
    Top-P o Temperature. Questo significa che il modello non “sa” cosa sta dicendo, ma sta campionando token da una distribuzione appresa.
  3. Il token scelto viene aggiunto al prompt originale e l’intero pacchetto viene re-inserito nel modello.
  4. Il ciclo si ripete finché non viene generato un token speciale di “Fine Sequenza” (EOS).

Passo 5: De-tokenization

L’ultima fase è la conversione dei token generati in testo leggibile tramite il vocabolario iniziale, ovvero il dizionario inverso utilizzato nella fase di tokenization.

Spesso, prima di mostrare il risultato, intervengono layer di Guardrails (filtri di sicurezza) per verificare che l’output non violi policy etiche o di sicurezza.

Cosa NON fa un LLM

Ora che abbiamo analizzato il ciclo di vita di un prompt diventa più chiaro con non succede “dietro le quinte” del processo di generazione della riposta, ma che spesso erroneamente molti credono che avvenga:

  • Non c’è accesso diretto a un database di conoscenza durante l’inferenza, a meno di sistemi RAG (Retrieval Augmented Generation), nè ricerche su Internet o recupero di documenti memorizzati.
  • Non esiste ragionamento simbolico esplicito.
  • Non c’è comprensione semantica nel senso umano.
  • Non viene “recuperata” una risposta pre-scritta.

Cosa fa un LLM

Un LLM predice sequenze plausibili basandosi su pattern statistici appresi. Ovvero, parole semplici, un LLM è, in sostanza, una macchina probabilistica altamente sofisticata che trasforma sequenze di token in altre sequenze di token, sfruttando architetture Transformer e addestramento su larga scala. In breve, un LLM è una mastodontica operazione di algebra lineare. Il prompt viene proiettato in uno spazio vettoriale ad altissima dimensionalità, dove miliardi di parametri (i pesi della rete) agiscono come filtri statistici che orientano la probabilità verso la sequenza di parole più coerente con il contesto fornito.

La “magia” percepita deriva dalla combinazione di:

  • dimensione del modello
  • qualità dei dati
  • ottimizzazione dell’architettura
  • tecniche di decoding

Ciò che appare come ragionamento è in realtà pattern matching avanzato su esempi presenti nel training. Il motivo per cui un LLM sembra ragionare dipende dal fatto che nei dati di training sono presenti enormi quantità di esempi come spiegazioni, dimostrazioni, ragionamenti passo-passo. Il modello impara quindi la forma linguistica del ragionamento, non il processo cognitivo sottostante.

Comprendere la pipeline di inferenza di un LLM è essenziale per progettare sistemi robusti, evitare aspettative irrealistiche e sfruttare al meglio le capacità dell’AI generativa.

Limiti strutturali dei modelli di AI generativa (LLM)

Altrettanto importamte è comprendere i limiti strutturali degli LLM, in particolare per chi progetta sistemi software basati su AI generativa. Molti comportamenti che vengono percepiti come “bug” o “errori” sono in realtà conseguenze dirette dell’architettura e dell’obiettivo di ottimizzazione del modello..

  • Allucinazioni che sono dovute a massimizzazione probabilistica. Un LLM non è progettato per produrre risposte vere, ma per generare la sequenza di token più probabile dato il contesto. Questo significa che il modello tende a generare ciò che statisticamente appare plausibile, non ciò che è factual correctness. La conseguenza è che il modello può produrre affermazioni coerenti ma false, che sono appunto indicate come allucinazioni, come ad esempio citazioni accademiche inventate, riferimenti normativi inesistenti, API o funzioni software plausibili ma inesistenti..
  • Dipendenza dal prompt. Gli LLM sono molto sensibili alla formulazione dell’input. Piccole variazioni nel prompt possono causare risposte completamente diverse, cambi di stile, variazioni di accuratezza. Questo fenomeno è noto come prompt sensitivity.
  • Bias nei dati di training. Gli LLM apprendono direttamente dai dati utilizzati nel training. Se i dati contengono bias culturali, politici, linguistici o geografici questi possono emergere nel comportamento del modello. Si noti che questo,però, non è un bug, ma una proprietà statistica del training.
  • Contesto limitato. Gli LLM non hanno memoria illimitata, ovvero operano suna una finestra di contesto che un limite al numero di token. Quando il contesto supera questo limite le informazioni più vecchie vengono scartate oppure diventano meno influenti. l’implicazione pratica è che in conversazioni lunghe il modello può dimenticare informazioni importanti oppure contraddirsi.
  • Instabilità stocastica. Come abbiamo visto durante la Next-Token Prediction vengono applicate tecniche di sampling come temperature, top-k, top-p. Questo implica he la generazione dei token non è deterministica, ovvero lo stesso prompt può generare risposte diverse ogni volta. Ciò è sicuramente utile in scenari creativi, ma problematico in soluzioni destinate a sistemi mission-critical o automazione deterministica.
  • Mancanza di memoria persistenteUn LLM non mantiene memoria tra sessioni, ma ogni interazione è, di fatto, stateless. Se si desidera che il modello ricordi conversazioni passate e preferenze occorre implementare la memorizzazione a livello di sistema tramite database, vector store o context injection
  • Capacità numeriche limitate. Gli LLM non sono nativamente ottimizzati per il calcolo numerico. Quindi operazioni come moltiplicazioni lunghe, algebra complessa e calcoli di precisione possono produrre risultati errati. Il motivo è legato al fatto che i numeri sono trattati come token linguistici, non come valori matematici. Per questo motivo molti sistemi integrano calcolatori simbolici, interpreter Python, tool matematici esterni.
  • Gli LLM funzionano meglio su input simili ai dati di training. Se il prompt è troppo raro o troppo tecnico le prestazioni possono degradare rapidamente. Questo fenomeno è noto come Out-of-Distribution (OOD) failure.

Si noti comunque che i limiti degli LLM non derivano da implementazioni imperfette, ma da proprietà fondamentali del paradigma:

  • apprendimento statistico
  • rappresentazioni distribuite
  • generazione autoregressiva

Per costruire sistemi affidabili basati su AI generativa è quindi necessario progettare architetture ibride che combinino LLM con:

  • retrieval
  • strumenti deterministici
  • sistemi simbolici
  • validazione esterna

Solo così è possibile trasformare un modello generativo in una piattaforma AI realmente robusta.

 

2 commenti su “Pipeline di inferenza di un Large Language Model (LLM)”

  1. Riccardodebernardinis.com rappresenta una risorsa estremamente valida per chi desidera implementare pipeline di inferenza efficienti per Large Language Models. La professionalità e l’esperienza dimostrate nel settore sono evidenti e forniscono soluzioni innovative e su misura per ogni esigenza. Consiglio vivamente di consultare i servizi offerti per ottimizzare e scalare le proprie applicazioni di intelligenza artificiale in modo affidabile e performante.

    Rispondi

Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.