Salta ai contenuti

Distribuzioni, valore atteso, varianza

Una rete neurale che classifica immagini, un LLM che predice il prossimo token, un sistema di raccomandazione che ordina prodotti: in ogni caso il modello non emette una risposta, emette una distribuzione di probabilità sulle risposte possibili. Capire come queste distribuzioni si costruiscono, come si combinano e come si misurano è il prerequisito di ogni cosa che segue.

Tre osservazioni, prese da tre angoli diversi del lavoro quotidiano con sistemi AI, motivano un capitolo dedicato alla probabilità di base.

La prima osservazione è di superficie. Ogni LLM — Claude, GPT, Gemini, Llama — produce a ogni passo una distribuzione di probabilità sui token del proprio vocabolario, tipicamente cinquantamila o centomila valori non negativi che sommano a uno. Quel vettore è una distribuzione categorica, ed è l’oggetto matematico su cui si esercitano tutte le scelte di sampling: greedy, temperature, top-k, top-p. Senza il vocabolario delle distribuzioni di probabilità, “regolare la temperatura” è una manopola misteriosa; con quel vocabolario, è una trasformazione esplicita di una densità.

La seconda osservazione è interna al training. La loss più usata in classificazione — cross-entropy — è la negative log-likelihood di una variabile categorica. Equivalenza argomentabile: minimizzare la cross-entropy fra la distribuzione vera (one-hot della label) e la distribuzione predetta (softmax dei logits) è esattamente lo stesso problema di scegliere i parametri che rendono massima la probabilità dei dati osservati sotto il modello (maximum likelihood estimation, MLE). I due punti di vista — “minimizzare una distanza fra distribuzioni” e “massimizzare la probabilità dei dati” — coincidono. Riconoscere questa equivalenza permette di leggere con tranquillità la metà dei paper di deep learning.

La terza osservazione è di stabilità. L’inizializzazione dei pesi (Glorot/Xavier 2010, He 2015), il dropout (Srivastava et al. 2014), la batch normalization, perfino la calibrazione finale di un classificatore (Guo et al. 2017): tutti ragionano su varianze, distribuzioni, attese. Sapere cosa significhi “preservare la varianza attraverso un layer” o “campionare una maschera Bernoulli” non è un dettaglio teorico; è il linguaggio nel quale il training stesso è descritto.

L’obiettivo di questo capitolo è installare quel vocabolario, con il rigore minimo necessario e la maggior parte dell’energia spesa sull’intuizione. Niente teoria della misura, niente integrazione di Lebesgue, niente sigma-algebre se non come sidebar. Distribuzioni, valore atteso, varianza, indipendenza, condizionata, leggi limite. Quanto basta per leggere PRML, Deep Learning di Goodfellow-Bengio-Courville, e i paper canonici di ML moderno senza inciampare sulla notazione.

La probabilità nasce a metà del Seicento da una domanda di scommettitori. Nel 1654 Antoine Gombaud, cavaliere di Méré (1607-1684, scrittore e filosofo francese, giocatore d’azzardo accanito), pone a Blaise Pascal (1623-1662, matematico e filosofo francese) un problema concreto: due giocatori decidono di interrompere una partita prima della fine, come dividere equamente la posta data la posizione corrente? Pascal scrive a Pierre de Fermat (1607-1665, magistrato e matematico francese), e dalla loro corrispondenza nasce un’idea radicale per l’epoca: la divisione equa va calcolata non sul passato ma sul valore atteso dei possibili futuri. La probabilità diventa una disciplina matematica autonoma.

Il primo trattato sistematico è di Christiaan Huygens (1629-1695, fisico e astronomo olandese), De Ratiociniis in Ludo Aleae del 1657, che introduce esplicitamente il concetto di expectatio, il valore atteso. Mezzo secolo dopo Jakob Bernoulli (1654-1705, matematico svizzero) lavora a Ars Conjectandi — pubblicato postumo nel 1713 dal nipote Nicolaus — e dimostra il primo risultato limite della probabilità: la legge debole dei grandi numeri, da lui chiamata Theorema Aureum. La frequenza relativa di successi in n prove indipendenti tende, in probabilità, alla probabilità di successo singola. Per la prima volta una proprietà del mondo (la frequenza osservata) è messa in relazione formale con un parametro teorico (la probabilità).

Pierre-Simon Laplace (1749-1827, matematico e astronomo francese) consolida il campo con Théorie analytique des probabilités (Courcier, 1812), monumentale sintesi che contiene la definizione classica P(A) = casi favorevoli / casi possibili (valida sotto equiprobabilità), una versione del teorema centrale del limite per somme di Bernoulli, e la regola di Bayes-Laplace per le probabilità inverse. Per oltre un secolo, Théorie analytique è il riferimento standard.

Fra Laplace e Kolmogorov si inserisce il lavoro di Abraham de Moivre (1667-1754, matematico francese rifugiato a Londra), che nel 1733 in Approximatio ad Summam Terminorum Binomii (a+b)^n in Seriem expansi mostra che la binomiale per n grande si avvicina alla curva che oggi chiamiamo gaussiana — antesignano del CLT — e di Thomas Bayes (1701-1761, ministro presbiteriano e matematico inglese), il cui Essay towards solving a Problem in the Doctrine of Chances (Philosophical Transactions, 1763, postumo, presentato da Richard Price) contiene la prima formulazione del teorema che porta il suo nome. Carl Friedrich Gauss (1777-1855, matematico tedesco) aggiunge nel 1809 la “legge degli errori” — la distribuzione gaussiana come modello di errori di misura astronomica — in Theoria Motus Corporum Coelestium. La normalità non era nata come oggetto astratto: era il modello fenomenologico degli errori di osservazione.

Il salto fondazionale è del 1933. Andrey Kolmogorov (1903-1987, matematico russo) pubblica Grundbegriffe der Wahrscheinlichkeitsrechnung (Springer), un libretto di ottanta pagine che fonda la probabilità sulla teoria della misura e introduce i tre assiomi che la definiscono in modo rigoroso. Kolmogorov dissolve i paradossi della “probabilità classica” — fra cui il paradosso di Bertrand, dove la stessa domanda riceve tre risposte diverse a seconda di cosa si intende per “scelta a caso” — fissando una volta per tutte l’oggetto matematico misura di probabilità.

Sul versante interpretativo, la corrente bayesiana riceve fondamento assiomatico autonomo con Richard Cox (1898-1991, fisico americano), che in Probability, Frequency and Reasonable Expectation (American Journal of Physics, 1946) deriva i postulati della probabilità a partire da requisiti di consistenza per il “ragionamento plausibile”. Edwin Jaynes (1922-1998, fisico americano) sviluppa e diffonde questo programma in Probability Theory: The Logic of Science (postumo, 2003). Il punto di Cox-Jaynes è forte: una volta che si vogliono assegnare gradi di credenza a proposizioni in modo internamente coerente, gli assiomi di Kolmogorov sono l’unica scelta possibile a meno di ri-parametrizzazioni monotone. La probabilità diventa l’estensione logica del ragionamento booleano agli stati di credenza.

Decoder rapido dei termini che useremo:

  • Spazio campionario Ω: l’insieme di tutti gli esiti possibili di un esperimento.
  • Evento A: un sottoinsieme di Ω. Una collezione di esiti.
  • Misura di probabilità P: una funzione che associa a ogni evento un numero in [0,1], con le proprietà fissate dagli assiomi di Kolmogorov.
  • Variabile aleatoria (random variable, RV) X: una funzione X: Ω → R che attribuisce un numero a ogni esito. È il modo formale in cui un esperimento aleatorio produce dati numerici.
  • Distribuzione di X: la misura di probabilità indotta da X sull’asse reale. Nelle applicazioni ML, “distribuzione” e “variabile aleatoria” sono spesso usate come sinonimi operativi.
  • PMF (probability mass function): per X discreta, p(x) = P(X = x).
  • PDF (probability density function): per X continua, f(x) tale che P(a ≤ X ≤ b) sia l’area sotto f fra a e b. La PDF non è una probabilità — è una densità.
  • CDF (cumulative distribution function): F(x) = P(X ≤ x), definita sia per X discrete sia per X continue.

concept graph: "Probability" al centro, archi a "Sample space + events", "Random variable", "Distribution (PMF / PDF / CDF)", "Expectation + variance", "Independence + chain rule", "Limit theorems (LLN, CLT)", "ML applications: cross-entropy, softmax, sampling, dropout, init"; small badges with dates: Pascal-Fermat 1654, Bernoulli 1713, Laplace 1812, Kolmogorov 1933

Prima delle formule, due immagini diverse del concetto stesso di “probabilità di un evento”. Compatibili, complementari, ma utili in momenti diversi.

Hai una moneta. La lanci mille volte e annoti gli esiti. Conti i testa, divi per mille, ottieni un numero — diciamo 0.498. Lanci altre mille volte: ottieni 0.503. Altre mille: 0.501. Quando il numero di lanci diventa grande, la frequenza relativa dei testa si stabilizza intorno a un valore. Quel valore limite è, per definizione, la probabilità del testa per quella moneta.

Questa è l’interpretazione frequentista. La probabilità è una proprietà oggettiva del mondo, manifestata da una sequenza ripetibile di esperimenti. P(A) = 0.5 vuol dire “se ripetessi l’esperimento all’infinito, la frequenza di A si stabilizzerebbe a 0.5”.

Pregi: concreta, misurabile, ben definita per esperimenti effettivamente ripetibili (lanci, decadimenti radioattivi, processi industriali). Limiti: cosa significa P(“domani piove a Milano”) in senso frequentista? Cosa significa P(“questo specifico paziente sopravvive all’intervento”)? Eventi unici, non ripetibili, mettono in difficoltà l’interpretazione frequentista.

Cambio prospettiva. Non sto pensando a una sequenza ripetibile; sto pensando a quanto sono disposto a scommettere sul fatto che un certo evento accada. Se penso che P(A) = 0.7, sono disposto a pagare fino a 70 centesimi per un biglietto che paga un euro se A accade, zero altrimenti. Probabilità diventa un numero che descrive il mio stato di credenza, vincolato a essere coerente — cioè non offrire scommesse che mi farebbero perdere comunque, qualunque cosa accada (è il celebre argomento del Dutch book).

Questa è l’interpretazione bayesiana. La probabilità è una proprietà dell’osservatore, non del mondo. Diversi osservatori, con informazioni diverse, possono assegnare probabilità diverse allo stesso evento; ognuna è valida purché internamente coerente.

Pregi: si applica naturalmente a eventi unici, ipotesi scientifiche, parametri di modelli. Limiti: la scelta del prior può sembrare arbitraria, soprattutto in assenza di dati.

Punto chiave: gli assiomi sono compatibili con entrambe

Sezione intitolata “Punto chiave: gli assiomi sono compatibili con entrambe”

La cosa importante è che la matematica è la stessa. I tre assiomi di Kolmogorov che vedremo fra poco sono soddisfatti tanto dalla frequenza relativa limite quanto dal grado di credenza razionale. Il calcolo delle probabilità — somma, prodotto, condizionata, indipendenza — funziona identicamente nelle due letture. Il dibattito tra frequentisti e bayesiani è una questione di interpretazione, non di matematica. Lo riprenderemo in bayes-base.

Tieni entrambe le immagini in mente. Per parlare di legge dei grandi numeri o di Monte Carlo, l’angolo frequentista è naturale. Per parlare di inferenza, prior, posterior, calibrazione di un classificatore, l’angolo bayesiano è più produttivo.

Dato uno spazio campionario Ω e una famiglia F di sottoinsiemi (gli “eventi misurabili”), una misura di probabilità è una funzione P: F → [0, 1] che soddisfa:

  1. Non-negatività: P(A) ≥ 0 per ogni evento A.
  2. Normalizzazione: P(Ω) = 1.
  3. Additività numerabile: per ogni successione A_1, A_2, … di eventi a due a due disgiunti, P(A_1 ∪ A_2 ∪ …) = P(A_1) + P(A_2) + …

Da questi tre, in poche righe, derivano tutti i risultati elementari:

  • P(complemento di A) = 1 − P(A).
  • P(insieme vuoto) = 0.
  • A ⊆ B implica P(A) ≤ P(B).
  • P(A ∪ B) = P(A) + P(B) − P(A ∩ B) (inclusione-esclusione).

Sidebar: per Ω finito o numerabile, F può essere semplicemente l’insieme delle parti di Ω. Per Ω = R, la cura per i casi patologici (esistono sottoinsiemi non misurabili, come l’insieme di Vitali) richiede di restringersi alla σ-algebra di Borel: la più piccola famiglia di sottoinsiemi di R che contiene gli intervalli ed è chiusa per complemento e unione numerabile. Il lettore che si occupa di ML può lavorare per anni senza incontrare un caso non misurabile; menzioniamo l’esistenza per onestà, non per usarla.

Dati due eventi A e B con P(B) > 0, la probabilità condizionata di A dato B è

P(AB)=P(AB)/P(B)P(A | B) = P(A ∩ B) / P(B)

Intuizione: stai riducendo lo spazio campionario al solo B, e ri-normalizzando le probabilità in modo che B abbia massa uno. È un cambio di unità di misura della probabilità.

Riarrangiando, P(A ∩ B) = P(B) · P(A | B). Iterando questa fattorizzazione, si ottiene la regola della catena (chain rule):

P(A1,A2,...,An)=P(A1)P(A2A1)P(A3A1,A2)...P(AnA1,...,An1)P(A_1, A_2, ..., A_n) = P(A_1) · P(A_2 | A_1) · P(A_3 | A_1, A_2) · ... · P(A_n | A_1, ..., A_{n-1})

Questa è la formula su cui si reggono tutti i modelli autoregressivi. Un LLM stima esattamente

P(token1,token2,...,tokenT)=t=1TP(tokenttoken<t)P(token_1, token_2, ..., token_T) = ∏_{t=1}^{T} P(token_t | token_{<t})

Generare testo è applicare la regola della catena un fattore per volta, campionando dal condizionamento sui token già emessi. Il termine “modello del linguaggio” è esattamente questo: una stima di una distribuzione congiunta su sequenze, fattorizzata per catena.

Due eventi A e B sono indipendenti se P(A ∩ B) = P(A) · P(B). Equivalentemente, se P(A | B) = P(A) (sapere B non cambia la probabilità di A).

Più avanti incontreremo l’indipendenza condizionata: A e B sono indipendenti dato C se P(A ∩ B | C) = P(A | C) · P(B | C). È la struttura formale delle reti bayesiane.

L’acronimo i.i.d. (independent and identically distributed) si applica a una sequenza di variabili aleatorie tutte con la stessa distribuzione e a due a due indipendenti. È l’assunzione di base di moltissime tecniche ML, e — spoiler — quasi sempre violata nei dati reali. Tornerà nella sezione “Dove si rompe”.

Teorema di Bayes (qui solo enunciato e intuizione)

Sezione intitolata “Teorema di Bayes (qui solo enunciato e intuizione)”

Dalle definizioni P(A | B) = P(A ∩ B) / P(B) e P(B | A) = P(A ∩ B) / P(A), eguagliando i numeratori si ottiene il teorema di Bayes:

P(HD)=P(DH)P(H)/P(D)P(H | D) = P(D | H) · P(H) / P(D)

Lettura standard: H è un’ipotesi, D sono i dati osservati, P(H) è il prior (credenza prima di osservare D), P(D | H) è la likelihood (quanto i dati sono compatibili con l’ipotesi), P(H | D) è il posterior (credenza aggiornata dopo aver visto D), P(D) è una costante di normalizzazione.

In una riga: aggiorna il prior in proporzione alla likelihood. Trattamento esteso, prior coniugati, esempi medici classici, applicazioni ML in bayes-base. Qui ci basta sapere che il teorema esiste, è una conseguenza diretta della definizione di condizionata, e che è il modo formale in cui un osservatore razionale incorpora informazione nuova.

Classe di affermazione: teorema in senso pieno. Conseguenza diretta degli assiomi di Kolmogorov via la definizione di condizionata.

Una variabile aleatoria è una funzione X: Ω → R (richiediamo che sia misurabile; nei casi che incontreremo lo è automaticamente). Etichetta numerica per ogni esito.

X discreta: assume valori in un insieme finito o numerabile. È completamente caratterizzata dalla sua PMF p(x) = P(X = x), con somma su tutti i valori uguale a 1.

X continua: assume valori in un intervallo (o tutto R). È caratterizzata da una PDF f(x) ≥ 0 con integrale totale uguale a 1, e

P(aXb)=abf(x)dxP(a ≤ X ≤ b) = ∫_a^b f(x) dx

Attenzione, errore frequente: f(x) non è P(X = x). Per X continua, P(X = x) = 0 per ogni singolo x; ha senso parlare solo di probabilità di intervalli. La PDF è una densità; le sue unità sono “probabilità per unità di X”. Una PDF gaussiana N(0, 1) valutata in zero vale 1/√(2π) ≈ 0.399, che non è una probabilità (è una densità).

La CDF F(x) = P(X ≤ x) è definita per entrambi i casi, è non decrescente, va da 0 a 1, e contiene tutte le informazioni della distribuzione. Per X continua, F è la primitiva di f.

three side-by-side panels: left "Bernoulli(0.3) PMF" with two bars at 0 and 1 of heights 0.7 and 0.3; center "Binomial(10, 0.3) PMF" with eleven bars peaking around 3; right "Gaussian N(0,1) PDF" with the bell curve, axes labeled "x" and "f(x)" or "p(x)" appropriately; type=vector-svg

Le più importanti per ML, in formula essenziale e con un’intuizione operativa.

Bernoulli(p). X ∈ {0, 1}, P(X = 1) = p. Modella un lancio di moneta truccata, una maschera di dropout, una predizione di classificatore binario. Attesa p, varianza p(1−p) (massima a p = 0.5).

Binomiale(n, p). X = numero di successi in n Bernoulli i.i.d. P(X = k) = C(n, k) p^k (1−p)^{n−k}. Attesa np, varianza np(1−p). Cresce intorno a np con deviazione √(np(1−p)).

Categorica(p_1, …, p_K). Generalizza Bernoulli a K classi: X ∈ {1, …, K} con P(X = k) = p_k, ∑ p_k = 1. È la distribuzione di output di un classificatore multi-classe, e — equivalenza argomentabile — è esattamente ciò che un layer softmax produce: una distribuzione categorica parametrizzata dai logits z attraverso p_k = exp(z_k) / ∑_j exp(z_j). Argomento: il softmax mappa R^K nel simplesso K-1-dimensionale delle distribuzioni categoriche, ed è invertibile a meno di una costante additiva sui logits. Per ogni z, softmax(z) è una categorica; per ogni categorica, esistono logits che la producono.

Multinomiale(n, p_1, …, p_K). Conteggi di n estrazioni i.i.d. da una categorica.

Uniforme continua su [a, b]. f(x) = 1/(b−a). Attesa (a+b)/2, varianza (b−a)²/12.

Gaussiana / normale N(μ, σ²).

f(x) = (1 / (σ √(2π))) · exp(−(x − μ)² / (2 σ²))

Attesa μ, varianza σ². Centrale per il teorema centrale del limite (vedi sotto), per le inizializzazioni di pesi (Glorot, He), per il rumore in molti modelli generativi.

Poisson(λ). Conteggi di eventi rari in un intervallo. P(X = k) = e^{−λ} λ^k / k!. Attesa = varianza = λ.

Esponenziale(λ). Tempi di attesa fra eventi Poisson. f(x) = λ e^{−λ x} per x ≥ 0. Attesa 1/λ, varianza 1/λ². Memorylessness: P(X > s + t | X > s) = P(X > t) — il sistema “dimentica” il tempo già passato.

Il valore atteso (mean, expectation) di X è

E[X]=xxp(x)(Xdiscreta)E[X] = ∑_x x · p(x) (X discreta) E[X]=xf(x)dx(Xcontinua)E[X] = ∫ x · f(x) dx (X continua)

Proprietà fondamentale: linearità. E[aX + bY] = a E[X] + b E[Y], sempre, anche se X e Y non sono indipendenti. Questa proprietà, banale dalla definizione, è uno strumento potentissimo per calcolare attese di somme complicate.

La varianza di X è Var(X) = E[(X − E[X])²] = E[X²] − E[X]² (la seconda uguaglianza è un esercizio di linearità). Misura la dispersione attorno alla media. La deviazione standard σ = √Var(X) ha la stessa unità di X.

Var(aX + b) = a² Var(X). Var(X + Y) = Var(X) + Var(Y) + 2 Cov(X, Y), dove la covarianza è Cov(X, Y) = E[(X − E[X])(Y − E[Y])]. Se X e Y sono indipendenti, Cov(X, Y) = 0 e Var(X + Y) = Var(X) + Var(Y).

La correlazione di Pearson ρ(X, Y) = Cov(X, Y) / (σ_X · σ_Y) è in [−1, 1] ed è adimensionale. Misura associazione lineare — un legame deterministico ma non lineare (Y = X²) può avere ρ = 0.

import numpy as np
rng = np.random.default_rng(42)
# Bernoulli(0.3): mille campioni e frequenza relativa
X = rng.binomial(n=1, p=0.3, size=1000)
print(X.mean()) # ~0.30
# Gaussiana N(0, 1): stima di E[X^2] = Var(X) + E[X]^2 = 1
Z = rng.standard_normal(100_000)
print((Z**2).mean()) # ~1.00
# Categorica K=4 con probabilità date
p = np.array([0.1, 0.2, 0.3, 0.4])
samples = rng.choice(4, size=10_000, p=p)
print(np.bincount(samples, minlength=4) / 10_000) # ~p

Legge dei grandi numeri (LGN). Per X_1, X_2, … i.i.d. con E[X] = μ finito, la media campionaria X̄_n = (1/n) ∑ X_i converge a μ. Versione debole (Bernoulli 1713, Khinchin 1929): convergenza in probabilità. Versione forte (Kolmogorov 1933): convergenza quasi certa. Classe di affermazione: teoremi, con prove formali (ipotesi minime: i.i.d., E[X] finita; per la versione forte va bene anche varianza infinita purché esista la media).

Teorema centrale del limite (CLT). Per X_1, X_2, … i.i.d. con E[X] = μ e Var(X) = σ² finite, la distribuzione di

Z_n = (X̄_n − μ) / (σ / √n)

tende in legge a N(0, 1) per n → ∞. Forma intuitiva: somme di tanti contributi indipendenti finiti tendono a una Gaussiana, indipendentemente dalla forma della distribuzione di partenza (purché la varianza sia finita). Classe: teorema, prima formulazione di Laplace (1812) per Bernoulli, generalizzazioni di Lyapunov 1901 e Lindeberg 1922.

![four side-by-side histograms titled “Sum of n uniform0,1 random variables”, with n = 1, 2, 5, 30; the first is rectangular, the second triangular, the third already bell-shaped, the fourth indistinguishable from a Gaussian; below each, an overlay of the corresponding theoretical Gaussian for n=30; type=vector-svg]

Una nota concettuale che ripaga il tempo speso. In ML moderno conviene smettere di pensare alla “probabilità” come a un singolo numero in [0, 1] e iniziare a pensare alla distribuzione come all’oggetto matematico di prima classe. Una distribuzione categorica su K classi è un punto del simplesso K-1-dimensionale: un vettore di K componenti non negative che sommano a uno. Una distribuzione gaussiana 1D è una coppia (μ, σ²). Una multivariata è una coppia (μ, Σ) con Σ matrice di covarianza simmetrica e definita positiva.

Tre operazioni elementari su distribuzioni che ricorrono ovunque.

  • Marginalizzazione: data una distribuzione congiunta P(X, Y), la marginale di X è P(X) = ∑_y P(X, y) (discreta) o ∫ P(X, y) dy (continua). “Sommare via” una variabile.
  • Condizionamento: ridurre lo spazio campionario fissando una variabile e ri-normalizzare. P(Y | X = x) = P(X = x, Y) / P(X = x).
  • Combinazione (miscela): una mixture di distribuzioni P_1, …, P_K con pesi w_k che sommano a uno è la distribuzione P(x) = ∑_k w_k P_k(x). Mixture di Gaussiane (GMM), mixture density networks, mixture of experts in MoE LLM: tutto poggia su questa operazione.

Riconoscere un’architettura ML come “calcola questa marginale”, “condiziona qui”, “questa è una mixture su K esperti” è metà del lavoro di leggerne la matematica.

Quattro esempi eterogenei, scelti per coprire angoli diversi: combinatoria classica, simulazione Monte Carlo, ragionamento bayesiano, training loss.

Lancio due dadi a sei facce, equilibrati e indipendenti. Lo spazio campionario è Ω = {(i, j) : 1 ≤ i, j ≤ 6}, di cardinalità 36. Tutte le 36 coppie sono equiprobabili: P({(i, j)}) = 1/36.

Evento A = “la somma vale 7” = {(1,6), (2,5), (3,4), (4,3), (5,2), (6,1)}, cardinalità 6.

P(A)=6/36=1/60.167.P(A) = 6 / 36 = 1/6 ≈ 0.167.

Per confronto, P(somma = 2) = 1/36 e P(somma = 12) = 1/36. La somma 7 è la più probabile perché è quella con più decomposizioni — un piccolo esercizio di combinatoria che, in dimensioni molto più alte, è esattamente il motivo per cui la massa di probabilità di una Gaussiana N(0, σ² I) in spazi di dimensione d si concentra in un guscio di raggio σ √d (curse of dimensionality, in preparazione).

Esempio 2 — Codice: simulazione Bernoulli e legge dei grandi numeri

Sezione intitolata “Esempio 2 — Codice: simulazione Bernoulli e legge dei grandi numeri”

Voglio convincermi visivamente della LGN. Simulo una moneta truccata con p = 0.3, calcolo la frequenza relativa cumulata in funzione del numero di lanci, e plotto.

import numpy as np
import matplotlib.pyplot as plt
rng = np.random.default_rng(42)
p = 0.3
N = 10_000
X = rng.binomial(n=1, p=p, size=N)
freq = np.cumsum(X) / np.arange(1, N + 1)
plt.plot(freq)
plt.axhline(p, color='red', linestyle='--', label=f"p = {p}")
plt.xscale('log')
plt.xlabel('n')
plt.ylabel('frequenza relativa')
plt.legend()

Comportamento atteso e osservato: per n piccolo (< 100), la curva oscilla ampiamente sopra e sotto 0.3. Verso n = 1000, le oscillazioni si riducono a circa ±0.03. A n = 10 000, l’errore tipico è dell’ordine di 1/√n ≈ 0.01. Coerente con il fatto che la deviazione standard della media campionaria di n Bernoulli è √(p(1−p)/n) ≈ 0.0046 a n = 10 000.

Questa è la base concettuale di Monte Carlo: per stimare un valore atteso, campiona molte volte e fai la media. Errore tipico ~1/√n. Indipendente dalla dimensionalità del problema (a differenza di metodi di quadratura), il che è il motivo per cui Monte Carlo domina in alta dimensione.

line plot of relative frequency of heads vs number of flips on a log-scaled x-axis, oscillating around the dashed horizontal line at 0.3 and converging visibly; type=vector-svg

Esempio 3 — Probabilità condizionata: il test diagnostico

Sezione intitolata “Esempio 3 — Probabilità condizionata: il test diagnostico”

Una malattia ha prevalenza dello 0.1% nella popolazione (P(D) = 0.001). Esiste un test con sensibilità del 99% (P(test+ | D) = 0.99) e specificità del 99% (P(test− | non D) = 0.99). Una persona prende il test e risulta positiva. Qual è la probabilità che abbia davvero la malattia?

Reazione istintiva tipica: “circa il 99%, no?”. Risposta corretta:

P(Dtest+)=P(test+D)P(D)/P(test+)P(D | test+) = P(test+ | D) · P(D) / P(test+) =0.990.001/[0.990.001+0.010.999]= 0.99 · 0.001 / [0.99 · 0.001 + 0.01 · 0.999] =0.000990/0.011880= 0.000990 / 0.011880 0.083≈ 0.083

Otto per cento. Non novantanove. Il prior bassissimo (1 su 1000) domina la likelihood ratio del test (99:1), perché i falsi positivi su 999 sani sono ~10, mentre i veri positivi su un malato sono ~1. Il rapporto 1:10 è la base del posterior, non il rapporto 99:1 dei tassi di errore del test.

Questa è la stessa matematica di Bayes applicata ovunque: filtri spam, validation di test medici, calibrazione di OOD detector. La lezione operativa è che la probabilità di un errore osservato è sempre una funzione del prior della classe sotto test, non solo della qualità del classificatore. Per lo stesso classificatore, applicato a popolazioni diverse, il valore predittivo positivo cambia drasticamente.

Esempio 4 — Scenario reale: cross-entropy di un classificatore binario

Sezione intitolata “Esempio 4 — Scenario reale: cross-entropy di un classificatore binario”

Un classificatore di spam predice, per una email specifica, P(spam | email) = 0.8. La label vera è “spam” (y = 1). La cross-entropy per questo singolo esempio è

L = − [y log q + (1 − y) log(1 − q)] = − log(0.8) ≈ 0.223

dove q è la probabilità predetta della classe positiva. Il modello è premiato per aver assegnato alta probabilità alla classe corretta.

Stesso modello su un’email che NON è spam (y = 0) ma a cui ha assegnato comunque P(spam) = 0.8:

L = − [0 · log(0.8) + 1 · log(0.2)] = − log(0.2) ≈ 1.609

Il modello “paga” molto di più quando assegna alta probabilità alla classe sbagliata. Asimmetria voluta: la cross-entropy è la negative log-likelihood di una variabile categorica, e il logaritmo va a meno infinito quando la probabilità predetta della classe corretta tende a zero. Equivalenza: minimizzare cross-entropy sul training set = MLE dei parametri del modello sotto l’assunzione che le label siano i.i.d. categoriche dato l’input.

Numeri operativi da tenere in mente. Un classificatore “perfetto” su un esempio (q = 1 sulla classe corretta) ha L = 0. Un classificatore “indifferente” (q = 0.5 in caso binario) ha L = log 2 ≈ 0.693. Un classificatore catastroficamente sbagliato (q < 10⁻³ sulla classe corretta) ha L > 6.9. Quando vedi loss medie di 0.05 su un binary classification, vuol dire che in media il modello assegna probabilità ~0.95 alla classe corretta. Quando vedi loss > 1, vuol dire che il modello sta sbagliando spesso o sta “scommettendo” molto sulla classe sbagliata.

Cinque punti dove la probabilità di base entra direttamente nel ferro del moderno deep learning.

Cross-entropy loss come negative log-likelihood. Trattata sopra. È l’equivalenza più produttiva da tenere in mente: ogni volta che leggi un paper che dice “minimizziamo la NLL”, sostituisci mentalmente “cross-entropy con la label distribution” e viceversa. Il cambiamento di prospettiva si paga in zero token e si guadagna in chiarezza.

Softmax come distribuzione categorica parametrizzata. Dati logits z ∈ R^K, softmax(z)_k = exp(z_k) / ∑_j exp(z_j). Il risultato è non negativo e somma uno: per costruzione, una distribuzione categorica. Numerica: il calcolo diretto di exp(z_k) può overflow per z_k grandi. Si usa il log-sum-exp trick:

log ∑_k exp(z_k) = max(z) + log ∑_k exp(z_k − max(z))

Sottraendo il massimo, gli esponenziali sono tutti ≤ 1, niente overflow. Le librerie standard lo fanno automaticamente; sapere perché aiuta a non spaventarsi davanti a nn.LogSoftmax o F.cross_entropy.

Sampling: temperature, top-k, top-p. Date probabilità di output q_k, si vuole campionare il prossimo token. Tre operatori standard.

  • Temperature T: dividi i logits per T prima del softmax. T → 0 collassa la distribuzione su un picco (greedy). T = 1 lascia la distribuzione nativa. T > 1 la appiattisce, aumentando l’entropia. Operatore continuo, monotono nel “grado di casualità”.
  • Top-k: tieni solo i k token con probabilità più alta, azzera gli altri, ri-normalizza. Tronca la coda lunga.
  • Top-p (nucleus sampling, Holtzman et al. 2020): tieni il più piccolo insieme di token la cui massa cumulata supera p, ri-normalizza, campiona. Adattivo: tail più corta su distribuzioni piccate, più lunga su distribuzioni uniformi. È diventato il default in molti sistemi.
flowchart LR
    A["Logits z ∈ R^K"] --> B["Divisione per temperatura T"]
    B --> C["Softmax: q_k = exp(z_k/T) / Σ_j exp(z_j/T)"]
    C --> D{"Truncation?"}
    D -->|top-k| E["Tieni i k token più probabili, rinormalizza"]
    D -->|top-p| F["Tieni il set minimo con massa cumulativa ≥ p, rinormalizza"]
    D -->|none| G["Usa la distribuzione completa"]
    E --> H["Sample un token dalla categorica"]
    F --> H
    G --> H
    H --> I["Token successivo"]

Figura 5 — pipeline di sampling all’output di un LLM — logits, divisione per temperatura, softmax, truncation top-k/top-p, sample categoricale fino al token successivo

Inizializzazione pesi (Glorot 2010, He 2015). Inizializzare a zero rompe la simmetria e blocca il training. Inizializzare troppo grande fa esplodere le attivazioni layer dopo layer; troppo piccolo le fa svanire. Si vuole che la varianza delle attivazioni si conservi attraverso un layer. Per un layer lineare W ∈ R^{out × in} con input X di varianza unitaria, Var(WX) = ∑ Var(W_ij) Var(X_j) = in · Var(W_ij). Per preservare la varianza serve Var(W_ij) ≈ 1/in. Glorot raffina il calcolo tenendo conto anche del backward pass, ottenendo Var(W) = 2/(in + out). He adatta la formula per ReLU, che azzera circa metà del segnale: Var(W) = 2/in.

Dropout come Bernoulli mask (Srivastava et al. 2014). Durante il training, ogni neurone è “spento” con probabilità 1 − p indipendentemente. La maschera m è un vettore Bernoulli(p) i.i.d.; l’output è y = (m ⊙ x) / p (inverted dropout, divisione per p in modo che E[y] = x e l’attesa sia preservata fra training e inference). Equivalente Monte Carlo: ogni forward pass campiona una sotto-rete; il modello finale è approssimativamente l’ensemble medio di tutte le sotto-reti.

Batch normalization come stima Monte Carlo della media e varianza. La batch norm calcola, su ogni mini-batch, la media μ_B e la varianza σ²_B delle attivazioni di un layer e le usa per ri-normalizzare. È una stima Monte Carlo a varianza ridotta, valida nel limite di batch grandi (LGN). I valori cumulati (running mean, running variance) usati a inference sono medie esponenzialmente pesate delle stime di batch.

Variational inference e VAE. I variational autoencoder (in preparazione) imparano un’approssimazione q(z | x) della posterior vera p(z | x) di una variabile latente z. La loss del VAE (ELBO, evidence lower bound) si scompone in un termine di ricostruzione (negative log-likelihood) e in una KL divergence verso il prior; entrambi sono oggetti diretti della probabilità di base.

Modelli di diffusione e processi stocastici. I diffusion model (in preparazione) definiscono una catena Markoviana che aggiunge rumore gaussiano in modo controllato (forward process) e imparano a invertirla (reverse process). Ogni passo è una trasformazione gaussiana parametrizzata. Tutto il framework è probabilità più calcolo differenziale.

Stima Monte Carlo di valori attesi. Quando un valore atteso E[f(X)] non è calcolabile in chiusura, si campionano X_1, …, X_n i.i.d. da p(X) e si stima E[f(X)] ≈ (1/n) ∑ f(X_i). Per LGN, la stima converge al valore vero. L’errore tipico decresce come 1/√n, indipendentemente dalla dimensione di X — il motivo per cui Monte Carlo è la tecnica di scelta in alta dimensione, dove i metodi deterministici di quadratura soffrono della curse of dimensionality.

Sezione importante: ogni strumento di questo capitolo ha confini, e ignorarli è il modo più comune di sbagliare modelli in produzione.

Eventi unici e probabilità soggettive. Cosa significa P(“questa specifica elezione va al candidato X”) in senso frequentista? Non c’è una sequenza ripetibile. L’interpretazione bayesiana lo gestisce naturalmente come grado di credenza, ma rende la scelta del prior un atto soggettivo che va dichiarato. Per applicazioni decisionali ad alto impatto (medicina, politica, finanza), l’incertezza sul prior è spesso più grande dell’incertezza statistica.

Calibrazione di reti neurali (Guo et al. 2017). Il softmax di una rete moderna non è una probabilità ben calibrata. Guo et al. mostrano che ResNet, DenseNet e simili sono sistematicamente overconfident: quando il modello assegna 99% di probabilità a una classe, l’accuratezza reale è tipicamente 80-90%. Cause: training con cross-entropy spinge i logits a saturare; capacità del modello molto maggiore del necessario. Mitigazioni: temperature scaling (un singolo parametro T appreso su un validation set, applicato come z/T prima del softmax) recupera buona calibrazione senza ritrainare. Label smoothing aiuta in fase di training. Per applicazioni dove la probabilità predetta è usata downstream (filtering, abstention, costo asimmetrico), la calibrazione va sempre verificata.

Correlazione non implica causazione. Cov(X, Y) ≠ 0 dice solo che X e Y co-variano. Non dice che X causi Y, né viceversa. Esempi classici: vendite di gelati e annegamenti correlano, ma il caldo è la causa comune. In ML: una feature può essere fortemente predittiva senza essere causale (proxy), e un modello che la sfrutta funziona finché la struttura del mondo non cambia. Per il trattamento formale, causal-inference-intro (in preparazione).

CLT con varianza infinita. Il teorema centrale del limite richiede Var(X) < ∞. Distribuzioni a code pesanti (Cauchy, Pareto con esponente piccolo) violano l’assunzione. Conseguenze: somme di variabili Cauchy non convergono a una Gaussiana — restano Cauchy. In finanza (rendimenti azionari), in geofisica (terremoti), in network science (connettività di scale-free networks), le code pesanti sono la norma; applicare risultati gaussiani è un errore sistemico, non una piccola imprecisione.

Numerica float. Probabilità sono in [0, 1]; prodotti di tante probabilità diventano numeri minuscoli che vanno in underflow nel float a 32 o 64 bit. Soluzione standard: lavorare in log-space. Sommare log-probabilità invece di moltiplicare probabilità. Per somme di esponenziali (per esempio, marginalizzare una variabile latente), il log-sum-exp trick già visto. Quando una libreria espone log_prob invece di prob, c’è una ragione e di solito non va aggirata.

Assunzione i.i.d. spesso violata. La grande maggioranza dei risultati di questo capitolo (LGN, CLT, bound di concentrazione, tutta la statistica inferenziale standard) assume che i dati siano i.i.d.. Nel mondo reale: dati temporali (la prossima osservazione dipende dalla precedente), dati di rete (nodi vicini correlano), dati selezionati con bias (sampling non uniforme), distribution shift fra training e produzione. Quando un modello “funzionava in dev e si rompe in prod”, il sospetto numero uno è una violazione di i.i.d. che nessuno aveva esplicitato.

Parametri continui esattamente uguali a un valore. In una variabile continua, P(X = x) = 0 per ogni x. Domande del tipo “qual è la probabilità che il parametro valga esattamente 0.5?” sono mal poste sotto un modello continuo. Si possono porre come “qual è la probabilità che |X − 0.5| < ε?”, oppure si passa a un mix di distribuzioni continua + atomo (un punto di massa) per rappresentare credibilmente il “potrebbe essere esattamente zero”.

Identicamente distribuite ≠ scambiabili ≠ stazionarie. In sequenze temporali si confondono spesso. “Identicamente distribuite” (assunzione i.i.d.) è più forte di “scambiabili” (de Finetti) e diversa da “stazionarie” (la distribuzione marginale non cambia nel tempo, ma le dipendenze temporali possono esserci). Sapere quale assunzione si sta usando aiuta a scegliere il modello e i diagnostici giusti.

Densità non è probabilità, di nuovo. Vale la pena ripeterlo perché è l’errore numero uno fra chi viene da background discreti. La PDF di N(0, 0.01) valutata in zero vale 1/(0.1 √(2π)) ≈ 3.99 — un numero maggiore di uno. Non è un errore: è una densità, le sue unità sono “probabilità per unità di X”, e si integra (non si somma) per ottenere probabilità. Confondere PDF e PMF porta a expressioni errate del tipo “P(X = 0) = 3.99”, a normalizzazioni sbagliate e a bug subdoli nella loss di modelli generativi continui.

Independence in alta dimensione è quasi mai un dono. In bassa dimensione, possiamo fare diagnostica visiva e accorgerci di forti correlazioni. In alta dimensione (immagini, embeddings, attivazioni di rete), variabili che sembrano indipendenti hanno spesso correlazioni di alto ordine difficili da catturare. Il fatto che Cov(X_i, X_j) = 0 per tutte le coppie non implica indipendenza congiunta. L’esempio classico: X uniforme su {-1, 0, 1}, Y = X² ha covarianza zero con X ma è completamente determinata da X.

Sample efficiency dei tail estimates. Stimare quantili estremi (1%, 0.1%) richiede ordini di grandezza più dati che stimare la media. Un dataset di mille esempi può stimare bene la mediana, malissimo il 99° percentile. In safety-critical ML (rare failure modes, OOD detection) questo limita drasticamente quanto si può imparare empiricamente.

  • Vettori e spazi vettoriali: le distribuzioni discrete come vettori non negativi che sommano a 1, vivono nel simplesso K-1-dimensionale di R^K.
  • Norme e distanze: la KL divergence come “distanza” non simmetrica fra distribuzioni; il legame stretto con cross-entropy.
  • bayes-base: teorema di Bayes esteso, prior coniugati, ragionamento bayesiano completo.
  • entropia-cross-entropy: trattamento sistematico dell’entropia di Shannon, della cross-entropy, della KL divergence e della mutual information.
  • softmax-sigmoid: softmax come categorica parametrizzata, sigmoide come Bernoulli parametrizzata.
  • regressione-logistica (in preparazione): MLE su Bernoulli condizionata = minimizzazione di cross-entropy.
  • attention-intuizione (in preparazione): softmax sui logits di similarità produce una distribuzione di pesi sui token.
  • output-logits (in preparazione): temperature, top-k, top-p come operatori espliciti su una distribuzione categorica.
  • regolarizzazione (in preparazione): dropout come maschera Bernoulli; legame con ensemble approximation.
  • calibration-abstention (in preparazione): calibrazione di reti neurali, temperature scaling, astensione razionale.

Per riferimento rapido, le formule e proprietà di questo capitolo che ricorrono più spesso nei capitoli successivi.

  • Assiomi: P(A) ≥ 0, P(Ω) = 1, additività numerabile su disgiunti.
  • Condizionata: P(A | B) = P(A ∩ B) / P(B).
  • Catena: P(A_1, …, A_n) = ∏ P(A_t | A_{<t}).
  • Bayes: P(H | D) ∝ P(D | H) · P(H).
  • Indipendenza: P(A ∩ B) = P(A) · P(B).
  • Attesa: lineare sempre. E[aX + bY + c] = a E[X] + b E[Y] + c.
  • Varianza: Var(X) = E[X²] − E[X]². Var(aX + b) = a² Var(X). Var(X+Y) = Var(X) + Var(Y) se indipendenti.
  • Bernoulli(p): media p, varianza p(1−p).
  • Binomiale(n, p): media np, varianza np(1−p).
  • Gaussiana N(μ, σ²): media μ, varianza σ². Densità (1/(σ√(2π))) exp(−(x−μ)²/(2σ²)).
  • Categorica(p_1, …, p_K): output di softmax sui logits. Cross-entropy = NLL.
  • LGN: media campionaria → media vera per n → ∞.
  • CLT: somme normalizzate di i.i.d. con varianza finita → N(0, 1) per n → ∞.
  • Errore Monte Carlo: ~σ/√n, indipendente dalla dimensione.
  • Log-sum-exp: max(z) + log ∑ exp(z − max(z)). Stabilità numerica del softmax.
  • Softmax(z)_k: exp(z_k) / ∑_j exp(z_j). Categorica parametrizzata dai logits.
  • Cross-entropy binaria: −[y log q + (1−y) log(1−q)]. Zero se q = y, +∞ se q assegna zero alla classe vera.
  • Correlazione di Pearson: Cov(X, Y) / (σ_X σ_Y) ∈ [−1, 1]. Adimensionale, lineare.
  • i.i.d.: independent and identically distributed. Assunzione cardine, spesso violata; primo sospetto in caso di train/prod gap.
  • Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer. Capitoli 1-2. Riferimento standard per le distribuzioni canoniche con sguardo ML; tratta la famiglia esponenziale unificata.
  • Goodfellow, I., Bengio, Y., Courville, A. (2016). Deep Learning. MIT Press. Capitolo 3. La sintesi più operativa per chi viene dal deep learning. Disponibile gratis online.
  • Wasserman, L. (2004). All of Statistics. Springer. Stile rapido e denso, eccellente per consolidare le fondamenta in poche settimane.
  • MacKay, D. J. C. (2003). Information Theory, Inference, and Learning Algorithms. Cambridge University Press. Capitolo 2. Prospettiva bayesiana esplicita; lega probabilità a codifica e compressione. Disponibile gratis online.
  • 3Blue1Brown — Probability series (YouTube). Intuizioni geometriche di alta qualità; un complemento visivo che ripaga il tempo speso.
  • Kolmogorov, A. N. (1933). Grundbegriffe der Wahrscheinlichkeitsrechnung. Springer. Per chi vuole leggere il documento fondante: ottanta pagine, denso ma leggibile.