Un modello linguistico non capisce niente. Non ha niente dentro che somigli al significato di una parola, non "sa" niente, non "vuole" niente. Eppure funziona.
L'articolo parte da lì, perché la cosa più utile che si può capire di questa tecnologia è perché una macchina che non capisce nulla riesca a produrre testo che sembra capire. La risposta è più semplice e più profonda di quanto l'industria voglia ammettere, e la si può spiegare in un paragrafo.
Poi ci sono i modelli, gli agenti, e la differenza fra loro, che è la parte di cui si parla meno e che è quella che conta di più quando si decide se usare una cosa in un progetto vero.
Che cosa c'è dentro: solo numeri
Il meccanismo di base è il vettore di embedding. Una parola viene rappresentata come una lista di numeri in virgola mobile, una decina per le parole comuni, centinaia per quelle raffinate.
L'analogia utile non è "significato", è posizione. Immagina una mappa di una città dove ogni punto è una parola e la distanza fra due punti rappresenta quanto sono simili. In questa mappa, "cane" e "gatto" sono vicini, e "cane" e "biscotto" sono meno vicini, benché nessuno dei due abbia a che fare con l'altro per significato.
Il punto fondamentale è questo: la somiglianza fra parole è una conseguenza statististica di come vengono usate, non un fatto sul mondo. Il modello non sa che cosa è un cane. Sa che in miliardi di frasi la parola "cane" appare vicino a "abbaiare" più che "calcolatrice".
E c'è una conseguenza che va capita bene perché spiega quasi tutti i fallimenti di cui parliamo: non esiste "il significato di una parola" in un modello. Esiste la sua distribuzione statistica in un vettore. Sono cose diverse.
Come funziona: predizione del token successivo
Il cuore del sistema è incredibilmente semplice, e la sua semplicità è la notizia buona.
Il compito del modello è uno solo: dato il testo finora, qual è il token più probabile che viene dopo? Tutto il resto è tecnica per rispondere a questa domanda bene.
" Il gatto dorme sul " -> probabile: tappeto (35%)
possibile: divano (18%)
possibile: pavimento (9%)
possibile: letto (6%)
Il modello sceglie, lo aggiunge, e ripete da capo.
Chiamato autoregressione, e da qui il nome "modello generativo". Non c'è un modulo che "capisce il testo" e un altro che "scrive": c'è un meccanismo che indovina il pezzo successivo, applicato mille volte.
Da qui discendono tre proprietà che spiegano tutto:
perché sbaglia in modo convincente: un errore non è un errore casuale, è una previsione plausibile sbagliata;
perché non sa quando si fermare: la fine del testo è un token come un altro, previsto con probabilità;
perché non si può chiedere perché: non c'è un ragionamento che produca la risposta, c'è una distribuzione di probabilità.
Com'è strutturato: il transformer
Se il compito è indovinare il token dopo, il problema difficile è capire a quale parola si riferisce. In "Il gatto ha mangiato il biscotto perché era affamato", la parola "lo" dipende da molto più indietro.
La soluzione del 2017 si chiama attenzione, ed è questa: ogni token, a ogni passaggio, chiede a tutti gli altri "quanto sono importante per me?" e pesa le risposte.
" Il gatto ha mangiato il biscotto perche era affamato "
"perche" -> si appoggia a "mangiato", "gatto", "biscotto"
"era" -> si appoggia a "gatto"
"." -> si apposta su tutto il fraseggio
Ogni parola guarda TUTTE le altre e decide a chi dare peso.
E' il punto in cui il contesto entra nel calcolo.
Ogni blocco del transformer fa tre cose: attenzione multi-testa (più tipi di relazione in parallelo), un passaggio di normalizzazione, e una rete che trasforma ciascun token. Si impilano decine o centinaia di blocchi, e l'informazione si raffina strato dopo strato.
Un dettaglio non ovvio che vale la pena: l'attenzione da sola non distingue l'ordine delle parole. Per questo servono i positional encoding, che iniettano l'informazione di posizione. Se li togliessi, "cane che morde uomo" e "uomo che morde cane" diventerebbero la stessa cosa.
E il training è, alla sua volta, una previsione. Si mostra al modello un testo, gli si chiede il token dopo, si calcola l'errore, e si correggono i pesi. Ripetuto su trilioni di token. L'addestramento è il compito di predizione, eseguito in scala gigantesca.
La differenza fra modello e agente
È la distinzione che manca quasi sempre, ed è quella che decide se una cosa è utile in un progetto.
| Modello | Agente |
|---|---|
| Che cos'è | una funzione: testo in, testo fuori |
| Input | un prompt |
| Output | una risposta |
| Feedback | nessuno |
| Persistenza | nessuna |
| Fallisce | producendo una risposta sbagliata |
| Esempio | "traduci questo" |
Il punto che va detto chiaramente: un agente non è un modello più intelligente. È un modello che ripete un ciclo, e il ciclo è ciò che aggiunge il rischio.
Il ciclo è semplice da descrivere e va sapere di memoria:
# pseudocodice di un agente
mento = obiettivo_iniziale
while non ho finito and not tentativi < 10:
azione = modello(mento, obiettivo) # "provo a fare X"
risultato = esegui(azione) # un tool vero gira davvero
mento += "X ha prodotto: " + risultato # il mondo risponde
risposta = modello(mento) # "ho finito, ecco cosa ho trovato"
La differenza è la riga risultato = esegui(azione). Un modello non
ha effetti sul mondo. Un agente sì: chiama un'API, scrive un file,
cancella qualcosa. E un'azione sbagliata non è una risposta sbagliata da
correggere: è un danno.
Ne segue la conseguenza pratica più importante di tutto l'articolo:
Più autonomia dai a un agente, più prolifico diventa. Ed è esattamente nella stessa proporzione che cresce la superficie di danno.
Un agente che può solo leggere è un problema di privacy. Uno che può scrivere in un database è un problema di integrità. Uno che può eseguire comandi è un problema che riguarda la produzione.
La differenza fra i modelli, che è una differenza di forma
Le famiglie di modelli non sono tutte uguali, e la distinzione utile non è la marca.
Modelli solo testo accettano testo e restituiscono testo. È la forma più semplice e quella su cui è costruito tutto il resto.
Modelli multimodali accettano anche immagini o audio. Non è un dettaglio di comodo: un modello che vede un'immagine può sbagliare su cose che non puoi verificare a occhio, ed è il motivo per cui la verifica umana vale di più, non di meno.
Modelli "piccoli" e "grandi" sono la stessa architettura a scala diversa, con un limite pratico che nessuno dice abbastanza: i modelli piccoli girano in locale, su una macchina tua, senza rete. Su un dato riservato, questa è la differenza fra poter usare un modello e non poterlo usare affatto.
Modelli specializzati e generali. Un modello fine-tuned su un dominio piccolo e ben definito batte spesso un modello generale più grande, perché il vantaggio non è nella conoscenza ma nella precisione della forma attesa. In un contesto di sicurezza questo vale più che altrove: un modello che sa cosa è una CVE è utile, un modello generale che la sa a metà è rumore.
Modelli con strumenti. Un modello che sa chiamare una funzione è Diverso da uno che non ci arriva, e questa è la distinzione fra modello e agente che ho fatto sopra.
Perché funziona e perché fallisce
Le due facce della stessa medaglia, e vanno lette insieme.
Perché funziona. Il linguaggio ha una struttura statistica a molte pliche, e quella struttura contiene informazione reale sul mondo. Non tutto il mondo, ma abbastanza da rendere possibile la traduzione, il riassunto, la classificazione e il codice. Il modello non capisce il senso della frase: ha imparato che certe frasi si susseguono, e in certi contesti la correttezza statistica coincide con quella del senso.
Perché fallisce. Lo stesso meccanismo che produce risposte corrette produce risposte false con la identica fluidità, perché la forma è giusta in entrambi i casi. Da qui le quattro proprietà che devi tenere a mente quando usi uno di questi sistemi:
Non distingue vero da plausibile. Una risposta falsa ha la stessa probabilità di sembrare giusta di una vera.
Non ha memoria delle sue fonti, quindi non può dirti da dove ha preso qualcosa. Una citazione senza riferimento è inventata.
Non sa che cosa non sa. La confidenza è uniforme: non c'è un modo di chiedergli "sei sicuro?", perché non c'è un processo interno che valuti la sicurezza.
La finestra di contesto è un limite reale, e lo strumento ne parla poco. Quando una cosa "non la vede", spesso non la vede perché è fuori dalla finestra, non perché non esista.
E c'è il punto che riguarda la sicurezza, che va detto senza gergo: non si mettono segreti in un prompt di un servizio esterno. Quello che scrivi è stato inviato a qualcuno, e la promessa che non venga salvato è una promessa commerciale, non una garanzia tecnica. Il modello locale non ha questo problema, ed è uno dei motivi principali per cui esiste.
Un po' di storia
1958, il perceptron. La prima rete neurale artificiale, di Frank Rosenblatt, che imparava a classificare con lo stesso principio che le reti profonde di oggi, ma con un solo strato. La definizione è quella classica: un classificatore che decide se un input, rappresentato come vettore di numeri, appartiene a una classe o no. Restò un argomento di laboratorio per anni, perché non c'era modo di addestrarlo su dati abbastanza grandi.
1964-1967, ELIZA. Joseph Weizenbaum al MIT scrive il primo chatbot. Non capiva niente: associava schemi e sostituiva parole, e lo script più famoso, DOCTOR, simulava uno psicoterapeuta rogeriano. Weizenbaum si scandalizzò quando si accorse che gli utenti gli attribuivano comprensione, al punto da rendersi conto che aveva capito qualcosa sul rapporto umano che non aveva capito sulla macchina.
È la lezione più importante di tutta la storia, e vale ancora: il primo errore grossolano su questa tecnologia non è stato che le macchine non capissero, è stato che gli umani ci vedessero capimento. Ogni tanto quel libro andrebbe riletto.
2017, il transformer. Google Brain pubblica "Attention Is All You Need", di Ashish Vaswani e colleghi. L'articolo propone l'architettura che oggi è alla base di quasi tutto: ha rimosso la dipendenza sequenziale che rendeva l'addestramento lentissimo, permettendo il parallelismo che poi ha reso possibili i modelli enormi. Nello stesso articolo c'è già la specifica completa del meccanismo di attenzione.
Questa è la svolta vera, e va detto: il salto non è venuto da un'idea misteriosa, ma da un'idea ingegneriosa che ha reso economico il parallelismo.
2020, GPT-3. OpenAI rilascia GPT-3, un modello con 175 miliardi di parametri. La dimostrazione che conta è una sola: con 175 miliardi di parametri e nessun addestramento specifico, il modello sa fare cose per cui nessuno lo aveva programmato, e in pochi shot. È la prima volta che il migliamento è stato per scala e non per architettura.
30 novembre 2022, ChatGPT. Il rilascio che ha cambiato il pubblico. L'unica cosa che ha aggiunto rispetto a GPT-3 è stata l'interfaccia conversazionale, e la messa a disposizione pubblica. Il modello non era nuovo, il modo di usarlo sì.
Oggi. La ricerca si è spostata sulla scala, sull'efficienza e sulle capacità multimodali, e il termine "agente" è entrato nel linguaggio quotidiano per indicare un sistema che usa un modello e agisce sul mondo. È la definizione operativa che ho dato all'inizio, e quella che conta.
La regola che usiamo noi
Il ragionamento di CYBER ONIONS su tutta questa storia è una frase sola:
Un modello produce testo. Un agente compie azioni. Il primo si può correggere a mano, il secondo fa danni che non si annullano.
Tre conseguenze operative, che valgono per qualsiasi progetto in cui queste cose entrano:
parti dal modello, non dall'agente. Aggiungi autonomia solo quando quella che hai già è misurabile e finita;
gli strumenti dell'agente sono il suo perimetro di sicurezza, non le sue istruzioni. Il prompt dice al modello che cosa fare; il permesso che gli dai dice che cosa può fare. Il secondo conta di più del primo;
verifica sempre con strumenti, non a occhio. Un risultato va controllato con un comando che restituisce un dato. È la stessa regola del Vademecum dell'hacker: nessuna verifica fatta a occhio è una verifica.
La ragione di fondo la conosciamo già: il modello a strati insegna che ogni strato esclude quelli sotto. Un modello linguistico non esclude niente: ti dà una risposta che sembra completa senza che tu sappia quale parte si sia inventata. È la stessa struttura, con un rischio in più.
Se di tutto questo resta una cosa sola: un modello è uno strumento di scrittura, non una fonte. Tutto il resto è questione di quanto gli affidi prima di verificare.