Salta ai contenuti

Compressione lossy e perdita accettabile

La compressione senza perdita ha un pavimento invalicabile: l’entropia. Ma quasi nessun dato reale ha bisogno di tornare indietro bit per bit. Se accetti una perdita controllata, scendi sotto quel pavimento — e la teoria rate-distortion ti dice di quanto, fissando il minimo numero di bit per ogni livello di distorsione che sei disposto a tollerare.

Una foto da dodici megapixel occupa, grezza, oltre trenta megabyte. Lo stesso scatto, salvato in JPEG a qualità alta, ne occupa due o tre. Hai buttato via il novanta per cento dei dati e l’immagine, a occhio, è identica. Dov’è finita quell’informazione, e perché non ti manca?

La risposta è che gran parte di quei dati non serviva a nessuno. L’occhio umano non distingue la differenza esatta tra due sfumature di azzurro adiacenti; non percepisce le variazioni più fini di luminosità nelle zone già scure. Un compressore intelligente le scarta, e tu non te ne accorgi.

È compressione con perdita — lossy — e funziona perché la fedeltà perfetta è uno spreco quando chi riceve il dato non la userebbe comunque. La parola “perdita” suona come un difetto; qui è una strategia. Si butta via di proposito, e l’arte sta nel buttare via la cosa giusta.

Questo apre una domanda che la compressione senza perdita non poneva. Nel capitolo sul Minimum Description Length il limite era netto: l’entropia della sorgente. Sotto quel pavimento non si scende, perché significherebbe perdere informazione vera.

Ma se sono disposto a perdere informazione — in cambio di file più piccoli — dove si sposta il pavimento? Qual è il minor numero di bit necessario per restare entro una distorsione che giudico accettabile? La domanda non ha più una risposta singola: la risposta dipende da quanta perdita accetto, e diventa una funzione.

La teoria che risponde si chiama rate-distortion, e la sua risposta è una curva. Per ogni livello di perdita che tolleri, esiste un numero minimo di bit teoricamente sufficiente. Nessun algoritmo, per quanto astuto, può scendere sotto quel numero — è un limite invalicabile, lo stesso statuto della capacità di canale.

Quella curva governa, sotto la superficie, ogni codec multimediale che usi: JPEG e WebP per le immagini, MP3 e AAC per l’audio, H.264 e AV1 per i video in streaming. Quando trascini il cursore “qualità” stai scegliendo, senza saperlo, un punto su quella curva.

E negli ultimi anni il rate-distortion è diventato qualcosa di più: una lente per leggere pezzi centrali del machine learning. I variational autoencoder si lasciano descrivere come problemi rate-distortion; la compressione neurale ottimizza una loss rate-distortion e batte JPEG; la quantizzazione dei pesi di un modello è una scelta su una curva rate-distortion.

E l’idea che apprendere sia, in fondo, decidere cosa scartare trova qui la sua formulazione più precisa. Questo capitolo costruisce la teoria classica e poi attraversa, con cura nel marcare cosa è teorema e cosa analogia, tutti questi ponti.

Questo capitolo siede nella Parte XIII subito dopo i sei che fissano il vocabolario dell’informazione, e raccoglie l’altra metà della storia della compressione. Minimum Description Length ha trattato il caso senza perdita, dove il pavimento è l’entropia e l’obiettivo è ricostruire ogni bit. Qui si rinuncia a quella pretesa di proposito, e il pavimento si abbassa.

Il legame più stretto, però, è con Informazione mutua e dipendenza. Come vedremo, la funzione rate-distortion è un’informazione mutua: la stessa quantità I(X;Y)I(X;Y) che lì misurava la dipendenza tra due variabili, qui viene minimizzata sotto un vincolo.

E con Canali, rumore, capacità c’è una simmetria precisa: là l’informazione mutua si massimizzava per ottenere la capacità di un canale; qui si minimizza per ottenere il rate minimo di una sorgente. Due problemi speculari, lo stesso ingrediente. Tornerà esplicito quando scriveremo la formula.

Il personaggio fondante è di nuovo Claude Shannon (1916-2001, matematico e ingegnere dei Bell Telephone Laboratories, i laboratori di ricerca della compagnia telefonica americana AT&T). Nel 1948 aveva fondato la teoria dell’informazione e dimostrato il limite della compressione senza perdita.

Undici anni dopo, nel 1959, torna sul problema con un paper dal titolo tecnico e preciso: Coding Theorems for a Discrete Source with a Fidelity Criterion (IRE International Convention Record, vol. 7). La parola chiave è “fidelity criterion” — criterio di fedeltà.

Shannon chiede: se accetto che la ricostruzione non sia perfetta, ma soltanto fedele entro una soglia, di quanti bit ho bisogno? La risposta è la funzione che chiama R(d)R(d), il rate equivalente della sorgente quando si tollera una distorsione dd.

Nel paper definisce la distorsione come una matrice di costi — quanto costa scambiare il simbolo ii per il simbolo jj — e dimostra i teoremi di codifica che fissano R(d)R(d) come limite raggiungibile. È la struttura che riconosceremo nella formula moderna, scritta con l’informazione mutua al posto della matrice.

Vale la pena fermarsi sul gesto. Shannon non sta inventando un nuovo algoritmo di compressione: sta spostando la domanda. Fino al 1948 la domanda era “quanto posso comprimere senza perdere nulla”. Dal 1959 la domanda diventa “dato quanto sono disposto a perdere, quanto posso comprimere”.

È un cambio di cornice che apre tutto un campo, perché ammette esplicitamente che la fedeltà perfetta è solo un caso limite, e quasi mai quello interessante. La maggior parte dei dati che produciamo — foto, suoni, video — non andrà mai ricostruita esattamente, e progettare per una fedeltà che nessuno userà è spreco puro.

Per più di un decennio la teoria resta un capitolo specialistico. La sistematizza Toby Berger (1940-2018, ingegnere e teorico dell’informazione americano, a lungo a Cornell) nel 1971, nel volume Rate Distortion Theory: A Mathematical Basis for Data Compression (Prentice-Hall) — il sottotitolo dice tutto: una base matematica per la compressione dei dati.

Da lì in poi è materia da manuale. Il capitolo 13 di Elements of Information Theory di Thomas Cover e Joy Thomas (Wiley, 1991, 2a ed. 2006) ne è l’esposizione canonica, ed è la fonte principale per le formule di questo capitolo. Nel mezzo, nel 1972, Richard Blahut e Suguru Arimoto trovano indipendentemente l’algoritmo che calcola la curva R(D) per una sorgente data: senza di esso la curva sarebbe un oggetto teorico e basta.

C’è un’estensione che diventerà importante per la parte AI. Nel 1999 Naftali Tishby, Fernando Pereira e William Bialek (rispettivamente fisico-informatico israeliano, informatico, e biofisico) pubblicano The Information Bottleneck Method (arXiv physics/0004057), che generalizza il rate-distortion al problema di imparare rappresentazioni utili.

Ci torneremo in una sezione dedicata, quando il filo arriverà al machine learning: l’information bottleneck è il ponte più pulito tra questa teoria nata per le telecomunicazioni e il representation learning di oggi.

Prima di qualsiasi formula, due modi di guardare la compressione con perdita. Il primo la vede come un budget di bit da spendere bene, con uno slider che scorre lungo una curva. Il secondo la vede come una decisione su cosa dimenticare. Sono compatibili, e il secondo è quello che porta dritto all’AI.

Angolo 1: lo slider di qualità e il bordo del possibile

Sezione intitolata “Angolo 1: lo slider di qualità e il bordo del possibile”

Pensa al cursore “qualità” quando esporti un JPEG. A qualità 100 il file è grande e l’immagine è quasi indistinguibile dall’originale: poca distorsione, molti bit. A qualità 10 il file è minuscolo, butterato di artefatti a blocchi: molta distorsione, pochi bit.

Ogni posizione del cursore è un compromesso tra due grandezze in tensione. Non puoi avere insieme file piccolo e fedeltà perfetta: spostare il cursore in una direzione paga sempre nell’altra. Questa tensione, formalizzata, è tutto il capitolo.

Chiamiamo rate il numero di bit per simbolo che spendi, e distorsione la misura di quanto la ricostruzione si discosta dall’originale. Ogni codec, a ogni impostazione, ti dà una coppia (rate, distorsione).

Se le disegni su un grafico — distorsione sull’asse orizzontale, rate su quello verticale — ottieni dei punti. La domanda della teoria è: qual è la migliore coppia possibile? Per una data distorsione, qual è il rate più basso che qualsiasi schema, anche il più ingegnoso ancora da inventare, potrebbe raggiungere?

Quel bordo inferiore è la funzione rate-distortion, R(D)R(D). È una curva: per ogni distorsione DD che sei disposto ad accettare, ti dà il rate minimo teorico. Nessun algoritmo può stare sotto quella curva — è un limite, come la capacità di canale. Gli algoritmi reali stanno sopra, e tutta la storia della compressione lossy è il tentativo di avvicinarsi al bordo.

Gli estremi della curva raccontano già quasi tutto.

A sinistra, distorsione zero: non accetti nessuna perdita. Per una sorgente discreta, R(0)R(0) coincide con l’entropia — sei tornato al limite lossless del capitolo sul Minimum Description Length. Il caso senza perdita è l’estremo sinistro del caso con perdita, niente di più: il lossless è un punto su una curva più grande.

Per una sorgente continua, invece, R(0)R(0) è infinito: rappresentare esattamente un numero reale richiederebbe infiniti bit, perché tra due reali qualsiasi ce ne sono infiniti altri.

Questo è il primo punto controintuitivo: sui dati continui il “senza perdita” non esiste a costo finito. Ogni foto digitale è già, inevitabilmente, una versione con perdita del mondo continuo che ha catturato — il sensore ha quantizzato la luce molto prima che JPEG entrasse in gioco.

A destra, distorsione grande: la curva crolla. Quando la distorsione tollerata supera la “varianza” della sorgente — quanto i dati si sparpagliano attorno alla loro media — il rate scende a zero. Con tanta perdita ammessa, puoi non trasmettere niente ed emettere sempre il valore medio: l’errore resterà comunque sotto soglia. Zero bit.

Tra i due estremi la curva è monotòna decrescente e convessa: più perdita accetti, meno bit servono, ma con rendimenti decrescenti. I primi bit che spendi comprano molta fedeltà; gli ultimi ne comprano pochissima.

Questa forma ha una conseguenza pratica che chiunque abbia esportato un’immagine conosce a istinto. Passare da qualità 50 a qualità 70 migliora visibilmente la foto a costo modesto; passare da 90 a 100 raddoppia il file per un guadagno che a occhio non si vede.

Stai salendo lungo la parte ripida della curva, dove ogni bit aggiuntivo compra una frazione minuscola di fedeltà. La convessità della curva R(D) è il motivo matematico per cui il “punto giusto” del cursore di qualità sta quasi sempre in mezzo, mai agli estremi.

Angolo 2: comprimere come decidere cosa dimenticare

Sezione intitolata “Angolo 2: comprimere come decidere cosa dimenticare”

Capovolgi la prospettiva. La compressione con perdita non è “rovinare” un dato: è scegliere cosa buttare via. E un buon compressore non butta a caso — butta ciò che conta meno per chi riceverà il dato.

JPEG scarta le alte frequenze spaziali, le variazioni più rapide da pixel a pixel, perché l’occhio le percepisce poco. MP3 scarta i suoni mascherati da altri suoni più forti vicini in frequenza, perché l’orecchio non li sentirebbe comunque — è il principio del masking psicoacustico. In entrambi i casi la perdita è mirata: cade dove non fa male.

Cosa decide “dove non fa male”? La misura di distorsione. È la funzione che dice quanto costa ogni errore di ricostruzione. Se la misura è l’errore quadratico, conta riprodurre fedelmente l’energia del segnale. Se la misura è percettiva, conta riprodurre fedelmente ciò che un umano noterebbe. La misura di distorsione codifica, in matematica, cosa conta tenere.

Questo è l’angolo che porta all’AI. Un sistema che apprende è, in un senso preciso, un sistema che decide cosa ricordare e cosa scartare. Una rappresentazione interna — l’embedding di una parola, il latente compresso di un autoencoder — è una versione lossy dell’input: conserva ciò che serve al compito e getta il resto.

Vista così, l’astrazione è perdita controllata, e la misura implicita di distorsione è “quanto degrada il compito se dimentico questo dettaglio”.

Una mappa della metropolitana è un esempio quotidiano. Butta via le distanze reali, la geografia, le curve dei binari, e tiene solo l’ordine delle fermate e gli scambi. È una compressione lossy spietata, e proprio per questo è utile.

La misura di distorsione qui è “riesco ancora a capire dove cambiare linea?”, e rispetto a quella misura la distorsione è zero. Una mappa stradale fedele al millimetro, calata sotto terra, sarebbe inutilizzabile: la fedeltà sbagliata è peggio della perdita giusta.

Questa lettura è un’analogia produttiva, non un’identità formale: la espliciteremo come tale quando arriveremo ai modelli, perché è il punto dove è più facile scivolare da analogia a equivalenza senza accorgersene. Per ora basta tenere il filo: comprimere bene, in questo senso, significa aver capito cosa conta.

Adesso il formalismo, costruito per pezzi. Prima la misura di distorsione; poi la definizione di R(D)R(D) come informazione mutua minimizzata; poi il caso gaussiano con la sua formula chiusa; infine cosa garantisce il teorema di Shannon.

Una misura di distorsione è una funzione d(x,x^)0d(x,\hat{x}) \ge 0 che assegna un costo a ricostruire il simbolo vero xx come x^\hat{x} (il cappuccio indica la ricostruzione). Più la ricostruzione è fedele, più piccolo è il costo; ricostruire esattamente costa zero.

Le due misure classiche:

  • Errore quadratico (squared-error): d(x,x^)=(xx^)2d(x,\hat{x}) = (x-\hat{x})^2. Si usa per segnali continui. Penalizza gli errori grandi in modo più che proporzionale: sbagliare di 2 costa quattro volte sbagliare di 1. È la misura analiticamente più trattabile, e domina la teoria classica per questo.
  • Distorsione di Hamming: d(x,x^)=0d(x,\hat{x}) = 0 se x=x^x = \hat{x}, altrimenti 11. Per sorgenti discrete. Conta semplicemente la frazione di simboli sbagliati, senza graduare la gravità.

La distorsione di un sistema si valuta in media su tutti i simboli: D=E[d(X,X^)]D = \mathbb{E}[d(X,\hat{X})], dove E\mathbb{E} è il valore atteso, la media pesata sulle probabilità.

Un punto da fissare subito, perché è fonte di equivoci: la misura di distorsione è una scelta di modellazione, non un dato di natura. L’errore quadratico è comodo — è derivabile, simmetrico, si risolve a mano — ma non corrisponde a come gli umani percepiscono.

Due immagini con lo stesso errore quadratico rispetto all’originale possono apparire una nitida e una sfocata; due brani con lo stesso errore sulla forma d’onda possono suonare uno pulito e uno disturbato.

È da questa crepa che nasceranno le misure percettive e, all’estremo, il terzo asse di cui parleremo nella sezione “Dove si rompe”. Tieni a mente fin da ora: scegliere dd è scegliere cosa conta, e nessuna scelta è neutrale.

Ecco il cuore. La funzione rate-distortion si definisce così:

R(D)=minp(x^x):E[d(X,X^)]DI(X;X^)R(D) = \min_{p(\hat{x}\mid x)\,:\, \mathbb{E}[d(X,\hat{X})] \le D} I(X;\hat{X})

Leggiamola pezzo per pezzo, perché ogni simbolo conta.

XX è la sorgente, il dato vero. X^\hat{X} è la ricostruzione che arriva a chi riceve.

p(x^x)p(\hat{x}\mid x) è la regola probabilistica che mappa ogni input in una ricostruzione — i teorici la chiamano “canale di test”, perché formalmente assomiglia a un canale rumoroso che da XX produce X^\hat{X}. È la variabile su cui si minimizza: tra tutte le strategie di ricostruzione possibili, cerchiamo la migliore.

Che la strategia sia descritta come una probabilità e non come una funzione deterministica è un dettaglio importante: a volte conviene ricostruire in modo casuale, e la teoria lo ammette. È lo stesso “canale di test” che, quando aggiungeremo il terzo asse della perception, diventerà generativo invece che deterministico.

Il vincolo sotto il “min” — E[d(X,X^)]D\mathbb{E}[d(X,\hat{X})] \le D — dice: considera solo le strategie che restano entro la distorsione DD. Le altre sono fuori gioco.

E la quantità da minimizzare è I(X;X^)I(X;\hat{X}), l’informazione mutua tra sorgente e ricostruzione, esattamente la quantità studiata in Informazione mutua e dipendenza: misura quanti bit la ricostruzione condivide davvero con la sorgente.

In parole povere, questo dice: tra tutte le strategie di ricostruzione che rispettano il budget di distorsione, scegli quella che condivide meno informazione possibile con la sorgente. Meno informazione condivisa significa meno bit da trasmettere — e quel minimo è proprio il rate ottimo.

Perché minimizzare l’informazione condivisa? Sembra paradossale: non vorremmo che la ricostruzione assomigli all’originale? Sì, ma “assomigliare” è già garantito dal vincolo di distorsione. L’informazione mutua misura invece quanti bit servono a specificare la ricostruzione.

Vogliamo la ricostruzione più “economica” — quella che richiede meno bit — tra tutte quelle abbastanza fedeli. Da qui il minimo. Il vincolo tira da una parte (sii fedele), l’obiettivo tira dall’altra (sii economico), e la curva R(D) è il luogo dove le due forze si bilanciano per ogni livello di fedeltà richiesto.

La curva è convessa, e questa non è una proprietà cosmetica. La convessità dice che combinare due punti operativi — usare lo schema A per metà dei simboli e lo schema B per l’altra metà, una tecnica chiamata time-sharing — non fa mai meglio del punto della curva alla distorsione media corrispondente.

Il bordo è già ottimo: non c’è trucco di combinazione che lo migliori. È la garanzia che la curva sia davvero il limite, non un’approssimazione superabile mescolando strategie furbe.

Si noti la simmetria con Canali, rumore, capacità: là la capacità era C=maxp(x)I(X;Y)C = \max_{p(x)} I(X;Y), l’informazione mutua massimizzata sulle statistiche di ingresso. Qui è il contrario: II minimizzata sotto un vincolo. Cover e Thomas mostrano che i due problemi sono formalmente duali — uno l’immagine speculare dell’altro. Non è una somiglianza vaga: è la stessa quantità ottimizzata in due direzioni opposte per due scopi opposti.

Per quasi tutte le sorgenti R(D)R(D) non ha una formula esplicita e si calcola numericamente (con l’algoritmo di Blahut-Arimoto, un’iterazione che converge al punto della curva, dovuta a Richard Blahut e Suguru Arimoto, 1972). C’è però un caso che si risolve a mano ed è il più importante: la sorgente gaussiana.

Una sorgente gaussiana senza memoria con varianza σ2\sigma^2 (la σ2\sigma^2 misura quanto i valori si sparpagliano), sotto distorsione di errore quadratico, ha:

R(D)={12log2σ2D0Dσ20D>σ2R(D) = \begin{cases} \dfrac{1}{2}\log_2\dfrac{\sigma^2}{D} & 0 \le D \le \sigma^2 \\[2mm] 0 & D > \sigma^2 \end{cases}

Leggiamola riga per riga.

Quando D0D \to 0, il rapporto σ2/D\sigma^2/D esplode e il logaritmo con esso: RR \to \infty. Riprodurre esattamente un valore continuo richiede infiniti bit — esattamente l’estremo sinistro discusso nell’intuizione.

Quando D=σ2D = \sigma^2, il rapporto vale 1 e 12log21=0\frac{1}{2}\log_2 1 = 0. Se accetti una distorsione pari all’intera varianza, ti bastano zero bit: emetti sempre la media e l’errore atteso è proprio la varianza. È l’estremo destro.

In mezzo, ogni volta che dimezzi DD, il rate cresce di 12log22=0.5\frac{1}{2}\log_2 2 = 0.5 bit. Detto al contrario: ogni bit in più di rate divide la distorsione per quattro.

Nell’ingegneria del segnale questa è la celebre regola dei “6 dB per bit”. Il decibel è una scala logaritmica del rapporto segnale-rumore, e dividere la distorsione per quattro corrisponde a guadagnare circa sei decibel.

È il motivo per cui l’audio a 16 bit suona drasticamente più pulito dell’audio a 8 bit: otto bit in più valgono circa 48 dB di rumore di quantizzazione in meno. La formula gaussiana è la spiegazione teorica di un fatto che gli ingegneri del suono conoscono da decenni come regola del pollice.

C’è un motivo teorico per cui proprio la gaussiana è il caso di riferimento: a parità di varianza, è la sorgente più difficile da comprimere, quella che richiede il rate massimo per una data distorsione.

L’intuizione è che la gaussiana è la distribuzione “più disordinata” a varianza fissata — ha l’entropia massima — quindi offre meno struttura da sfruttare. Una sorgente con picchi, periodicità o correlazioni è più prevedibile, e la prevedibilità si traduce in bit risparmiati, esattamente come nel caso lossless. La gaussiana non ha nulla da risparmiare, ed è il caso pessimo.

Questo la rende preziosa in pratica: la sua R(D)R(D) funziona come limite superiore valido per qualsiasi sorgente con la stessa varianza. Se modelli i tuoi dati come gaussiani e dimensioni il sistema su quella curva, hai un margine di sicurezza garantito — i dati reali, più strutturati, costeranno meno.

La gaussiana è il caso di riferimento per i dati continui. Per i dati discreti il caso modello è la sorgente di Bernoulli: una sorgente che emette 1 con probabilità pp e 0 con probabilità 1p1-p — un bit sbilanciato.

Sotto distorsione di Hamming (quella che conta semplicemente i bit sbagliati), la sua funzione rate-distortion è:

R(D)={H(p)H(D)0Dmin(p,1p)0D>min(p,1p)R(D) = \begin{cases} H(p) - H(D) & 0 \le D \le \min(p, 1-p) \\ 0 & D > \min(p, 1-p) \end{cases}

dove H()H(\cdot) è la funzione di entropia binaria, H(q)=qlog2q(1q)log2(1q)H(q) = -q\log_2 q - (1-q)\log_2(1-q), già incontrata in Informazione come riduzione di incertezza.

Leggiamola. A D=0D = 0 il rate è H(p)H(p), l’entropia della sorgente: nessun errore ammesso, sei di nuovo al limite lossless.

Man mano che ammetti errori, sottrai H(D)H(D) — l’incertezza che “regali” lasciando sbagliare una frazione DD di bit. È letteralmente l’entropia della sorgente meno l’entropia che ti puoi permettere di buttare via: una sottrazione pulita tra ciò che la sorgente contiene e ciò che rinunci a trasmettere.

Quando DD raggiunge min(p,1p)\min(p, 1-p) — la frazione del simbolo meno frequente — il rate tocca zero: tanto vale indovinare sempre il simbolo più comune e sbagliare sull’altro, senza trasmettere niente.

È lo stesso meccanismo dell‘“emetti la media” del caso gaussiano, tradotto nel discreto: emetti il valore più probabile e accetta gli errori che ne derivano. Se una sorgente emette 1 il 90% delle volte, indovinare sempre 1 sbaglia solo nel 10% dei casi — e dieci per cento di distorsione di Hamming è il punto in cui questa sorgente raggiunge rate zero.

Questa è la formula che Blau e Michaeli useranno come esempio giocattolo quando aggiungeranno il terzo asse della perception, nella sezione “Dove si rompe”: la sorgente di Bernoulli è abbastanza semplice da risolvere a mano e abbastanza ricca da mostrare il fenomeno.

Il teorema rate-distortion (Shannon, 1959) è un risultato di esistenza asintotica. Dice due cose. Primo: per blocchi di dati sufficientemente lunghi, esistono codici che raggiungono qualsiasi coppia (R,D)(R, D) con RR appena sopra R(D)R(D). Secondo: nessun codice, per quanto astuto, può stare sotto la curva R(D)R(D).

Come per la capacità di canale, è una promessa di esistenza, non una ricetta. Shannon garantisce che il bordo è raggiungibile e invalicabile, ma non costruisce il codice che lo raggiunge.

La sua dimostrazione, anzi, è non costruttiva nel modo più frustrante possibile: mostra che codici buoni esistono in abbondanza, scegliendoli a caso, ma un codice scelto a caso non è utilizzabile in pratica — non avrebbe né struttura né un modo efficiente per codificare e decodificare.

Trovare codici pratici che si avvicinino al bordo è il mestiere di decenni di ricerca applicata. La quantizzazione vettoriale raggruppa più campioni e li sostituisce con il più vicino di un insieme di prototipi; il transform coding (la base di JPEG) cambia prima base per concentrare l’energia in pochi coefficienti; e oggi le reti neurali imparano la trasformata direttamente dai dati.

Sono tutti tentativi di colmare la distanza tra il “esiste un codice ottimo” di Shannon e il “ecco un codice che gira sul tuo telefono”. Il bordo teorico non si tocca mai del tutto, ma ogni generazione di codec ci si avvicina un po’ di più — e quel “un po’” è misurabile esattamente come distanza dalla curva R(D).

Esempio 1 — numerico: quanti bit per dimezzare l’errore

Sezione intitolata “Esempio 1 — numerico: quanti bit per dimezzare l’errore”

Prendiamo una sorgente gaussiana con varianza σ2=1\sigma^2 = 1. Voglio sapere a quanto scende l’errore se spendo esattamente 1 bit per simbolo. Inverto la formula:

1=12log21D    log21D=2    1D=4    D=0.251 = \frac{1}{2}\log_2\frac{1}{D} \;\Rightarrow\; \log_2\frac{1}{D} = 2 \;\Rightarrow\; \frac{1}{D} = 4 \;\Rightarrow\; D = 0.25

Con un solo bit per simbolo, la migliore ricostruzione possibile ha errore quadratico medio 0.250.25: un quarto della varianza. Nessuno schema può fare meglio con un bit, per quanto ingegnoso.

Aggiungo un secondo bit (rate = 2):

2=12log21D    1D=16    D=0.06252 = \frac{1}{2}\log_2\frac{1}{D} \;\Rightarrow\; \frac{1}{D} = 16 \;\Rightarrow\; D = 0.0625

L’errore è sceso da 0.250.25 a 0.06250.0625, di nuovo un fattore quattro. La regola “un bit divide la distorsione per quattro” non è un modo di dire: è il contenuto numerico della formula gaussiana.

Esempio 2 — codice: il beta-VAE come problema rate-distortion

Sezione intitolata “Esempio 2 — codice: il beta-VAE come problema rate-distortion”

Un variational autoencoder (VAE) è un modello generativo che impara a comprimere ogni dato xx in un codice latente zz (l’encoder) e a ricostruirlo da zz (il decoder). Il suo obiettivo di addestramento, nella variante chiamata β\beta-VAE, si scrive così:

L = E[ -log p(x|z) ] + beta * KL( q(z|x) || p(z) )
\_____________/ \_____________________/
distortion rate

Il primo termine, logp(xz)-\log p(x\mid z), misura quanto male il decoder ricostruisce xx a partire dal latente: è la distorsione.

Il secondo termine è una divergenza KL (la quantità che misura quanto una distribuzione si discosta da un’altra, vista in Entropia, cross-entropy, KL divergence) tra la distribuzione del codice latente q(zx)q(z\mid x) e un prior p(z)p(z). Quel termine misura quanti bit “costa” il codice latente rispetto al prior, ed è il rate.

Il coefficiente β\beta pesa il rate contro la distorsione — è esattamente il moltiplicatore che fa scorrere il punto operativo lungo la curva R(D)R(D), lo stesso ruolo che avrà il λ\lambda nella compressione neurale dell’esempio successivo.

Con β1\beta \ll 1 il modello fa auto-encoding: rate alto, distorsione bassa, ricostruzioni fedeli. Con β1\beta \gg 1 fa auto-decoding: rate basso, distorsione alta, latenti che finiscono per ignorare l’input. Spostare β\beta è spostarsi sulla curva.

Questa non è un’analogia vaga: è un inquadramento documentato. Il paper di Alexander Alemi e colleghi Fixing a Broken ELBO (ICML 2018, arXiv 1711.00464) mostra che l’obiettivo del VAE definisce letteralmente una curva rate-distortion, e che due modelli con lo stesso valore di obiettivo possono stare in punti completamente diversi di quella curva — uno che comprime bene, l’altro che ricostruisce bene.

Gli autori usano esplicitamente il linguaggio “rate” e “distortion”, e ne traggono una conseguenza pratica: l’ELBO da sola, il numero che si usa per giudicare un VAE, non dice dove finisci sulla curva. Due modelli ugualmente “buoni” secondo l’ELBO possono comportarsi in modi opposti, e questo spiega patologie come il posterior collapse, dove il modello scivola verso rate zero e ignora del tutto il latente.

Il legame con il calcolo variazionale è che minimizzare quell’obiettivo è un problema di ottimizzazione su funzioni, non su numeri: si cerca la migliore distribuzione q(zx)q(z\mid x), non il miglior valore di una variabile. Il rate-distortion del VAE vive in quel linguaggio.

Quando sposti il cursore qualità di un JPEG, stai scegliendo quanto aggressivamente quantizzare i coefficienti della trasformata discreta del coseno (DCT, la trasformata che scompone un blocco di immagine in frequenze spaziali). Quantizzare di più significa meno bit e più artefatti a blocchi: ti muovi verso destra sulla curva R(D)R(D).

MP3 e AAC fanno lo stesso nel dominio delle frequenze audio, guidati da un modello psicoacustico che è, in pratica, una misura di distorsione percettiva. Scartano i suoni che l’orecchio non sentirebbe perché mascherati da altri più forti, e quel mascheramento è studiato e tabulato dalla psicoacustica.

È un compressore che conosce i limiti del ricevitore e li sfrutta: butta esattamente ciò che il ricevitore non avrebbe potuto percepire, e niente di più.

Ogni preset di qualità è un punto operativo. I codec moderni come AV1 (video) e Opus (audio) si avvicinano di più al bordo teorico rispetto ai loro predecessori, spendendo gli stessi bit per meno distorsione percepita — è tutto il valore di una generazione nuova di codec, espresso in una frase rate-distortion.

Esempio 4 — audio: perché 320 kbps suona “trasparente”

Sezione intitolata “Esempio 4 — audio: perché 320 kbps suona “trasparente””

Un brano musicale stereo non compresso (CD, 44100 campioni al secondo, 16 bit, due canali) viaggia a circa 1411 kbps. Un MP3 a 320 kbps lo comprime di un fattore quattro e mezzo, e per la maggior parte degli ascoltatori è indistinguibile dall’originale — “trasparente”, nel gergo.

Come è possibile buttare l’80% dei bit senza sentire la differenza? Perché il modello psicoacustico individua, istante per istante, quali componenti in frequenza sono mascherate da altre più forti e le scarta. La misura di distorsione non è l’errore quadratico sulla forma d’onda — sarebbe enorme — ma l’errore percepito, e rispetto a quella misura la distorsione resta sotto la soglia dell’udibile.

Scendendo a 128 kbps si comincia a sentire: i piatti diventano “acquosi”, le code dei riverberi si impastano. Si è scesi lungo la curva R(D) fino a un punto dove la distorsione percettiva esce dall’invisibile. Lo stesso brano, lo stesso codec, un punto operativo diverso. La curva non è un’astrazione: è ciò che senti quando muovi quel cursore.

Esempio 5 — stato dell’arte: la compressione neurale

Sezione intitolata “Esempio 5 — stato dell’arte: la compressione neurale”

Nel 2017 Johannes Ballé, Valero Laparra ed Eero Simoncelli pubblicano End-to-end Optimized Image Compression (ICLR 2017, arXiv 1611.01704). L’idea: invece di progettare a mano la trasformata come fa JPEG, addestrare una rete neurale a comprimere.

La rete ha tre pezzi — una trasformata di analisi che mappa l’immagine in un codice, una quantizzazione, e una trasformata di sintesi che ricostruisce — e si addestra minimizzando direttamente la quantità R+λDR + \lambda D.

Quella espressione è la lagrangiana del problema rate-distortion: RR è il numero di bit del codice, DD è la distorsione di ricostruzione, e λ\lambda è il trade-off che sceglie il punto sulla curva (lo stesso ruolo del β\beta nel VAE). Allenare un modello per ogni valore di λ\lambda produce un modello per ogni punto operativo: la curva R(D) diventa una famiglia di reti addestrate.

Questi modelli, poi estesi con hyperprior (un secondo livello di codice che descrive la statistica del primo) e componenti autoregressive, hanno superato JPEG e JPEG2000 e competono con i codec video più avanzati.

Questo è stato dell’arte in evoluzione: i risultati specifici cambiano di anno in anno, ma il principio — ottimizzare end-to-end una loss rate-distortion invece di progettare la trasformata a mano — è ormai consolidato.

È notevole che la stessa rete di Ballé usi una non-linearità ispirata ai neuroni della corteccia visiva: un caso in cui la biologia e la teoria dell’informazione si ritrovano, indipendentemente, sullo stesso obiettivo.

L’information bottleneck: rate-distortion che sceglie da sé la distorsione

Sezione intitolata “L’information bottleneck: rate-distortion che sceglie da sé la distorsione”

C’è un’estensione del rate-distortion che merita una sezione propria, perché è il ponte più diretto verso il representation learning e perché risolve, in modo elegante, il punto più scomodo della teoria: la scelta della misura di distorsione.

Ricordiamo il problema. La misura d(x,x^)d(x,\hat{x}) è arbitraria, e cambiarla cambia tutto. Da dove dovrebbe venire? Nel rate-distortion classico la fornisce il progettista a mano: errore quadratico per l’audio, una misura percettiva per le immagini. Ma c’è un caso in cui la distorsione non va scelta: quando comprimere ha uno scopo esterno, un compito da preservare.

Nel 1999 Naftali Tishby, Fernando Pereira e William Bialek propongono The Information Bottleneck Method (arXiv physics/0004057). L’idea: comprimi XX in una rappresentazione X^\hat{X} non per ricostruire XX, ma per conservare l’informazione che XX porta su una terza variabile YY, quella che ti interessa davvero.

L’esempio degli autori: XX sono le immagini di volti, YY sono i nomi delle persone. Vuoi comprimere i volti tenendo l’informazione rilevante per riconoscere chi sono, e buttando tutto il resto (illuminazione, sfondo, posa). La “distorsione” non è più “quanto male ricostruisco il volto”, ma “quanta informazione su YY ho perso”.

Formalmente si minimizza I(X;X^)I(X;\hat{X}) — il rate, quanto comprimo — sotto il vincolo di tenere alta I(X^;Y)I(\hat{X};Y) — quanta informazione rilevante conservo.

È, parola per parola, un problema rate-distortion, con una differenza cruciale: la misura di distorsione non è data a priori, emerge dalle statistiche congiunte di XX e YY. Il “cosa conta tenere” non lo decide il progettista; lo decide il compito. È la risposta più elegante al quarto punto di confusione — l’arbitrarietà di dd — anche se vale solo quando esiste un target esterno da preservare.

Questo chiude il cerchio con Canali, rumore, capacità: l’information bottleneck è letteralmente in mezzo tra i due problemi duali, una compressione (minimizzare II con la sorgente) sotto un vincolo di rilevanza (massimizzare II con il target).

Le equazioni che ne risultano si risolvono con una versione generalizzata dello stesso algoritmo di Blahut-Arimoto che calcola la curva R(D) classica — un segno ulteriore che si tratta dello stesso problema in una veste più ricca.

Per chi lavora con l’AI questo è il framing più naturale di cosa fa una buona rappresentazione: comprime via tutto ciò che non serve al compito e tiene il resto.

Un embedding utile è proprio questo — abbastanza compatto da generalizzare (rate basso), abbastanza informativo da risolvere il compito (rilevanza alta). Il sovradattamento, in questa lente, è una rappresentazione con rate troppo alto: ha memorizzato dettagli irrilevanti invece di comprimerli via, e per questo non generalizza.

Che l’information bottleneck sia anche una descrizione corretta di cosa fanno davvero le reti profonde durante l’addestramento è invece un dibattito aperto, non un fatto acquisito. Alcune affermazioni forti — per esempio che l’addestramento attraversi una fase distinta di “compressione” — sono state contestate da lavori successivi su architetture diverse.

Conviene trattare l’information bottleneck come un framework illuminante e un’ipotesi di ricerca, non come un teorema sul deep learning. È esattamente il tipo di distinzione tra spiegazione, metafora e fatto provato che torna utile tenere ferma, e che riprenderemo nella sezione “Dove si rompe”.

Codec multimediali. È l’applicazione storica e tuttora dominante. JPEG, JPEG2000, MP3, AAC, H.264, H.265, AV1, Opus: ogni “preset di qualità” è un punto su una curva rate-distortion.

Capire la teoria spiega perché certe perdite sono invisibili — quelle che cadono dove la misura di distorsione percettiva dice “non importa” — e altre rovinose. E spiega perché un codec più recente offre la stessa qualità a meno bit: si avvicina di più al bordo teorico, lo stesso bordo che il codec vecchio inseguiva con strumenti più rozzi.

Quantizzazione dei modelli. Ridurre la precisione dei pesi di un modello — da fp16 a int8, int4, o meno — è una scelta su una curva rate-distortion applicata ai parametri invece che ai dati. Meno bit per peso è il rate; la degradazione della qualità del modello è la distorsione.

Metodi come GPTQ e AWQ (vedi quantization-base, in preparazione) scelgono come quantizzare per stare il più vicino possibile al bordo: massima compressione del modello, minima perdita di qualità.

Non tutti i pesi sono ugualmente importanti — alcuni tollerano molta perdita, altri pochissima — ed è esattamente la stessa logica di JPEG che quantizza di più le frequenze meno percepibili. AWQ, per esempio, identifica una piccola frazione di pesi “salienti” e li protegge dalla quantizzazione aggressiva, spendendo lì i bit che risparmia altrove.

È rate-distortion fuori dal suo contesto originale, e funziona perché la struttura del problema è identica: dato un budget di bit, dove conviene spenderli. Il dato compresso non sono pixel o campioni audio, ma i miliardi di numeri che definiscono un modello — e la “distorsione” è quanto peggiora ciò che il modello sa fare.

Progettazione di modelli generativi. Il framing rate-distortion guida la progettazione degli obiettivi nei VAE e nei loro derivati.

Permette di diagnosticare patologie come il posterior collapse — quando il modello ignora il latente e finisce all’estremo “rate zero” della curva senza volerlo — e di scegliere il β\beta per posizionarsi dove serve sulla curva, a seconda che si voglia un buon generatore o un buon compressore.

Representation learning. L’idea che una buona rappresentazione conservi l’informazione rilevante e scarti il resto è, formalmente, un problema rate-distortion generalizzato. È l’information bottleneck, di cui abbiamo parlato nella sezione dedicata, e riappare ovunque si cerchi una rappresentazione compatta ma utile: embedding, codici latenti, feature apprese.

Il rate-distortion è una teoria solida, ma il modo in cui viene applicato e capito ha diversi punti di frattura. Vale la pena conoscerli, perché è dove si concentrano gli errori.

Primo: R(D) non è un algoritmo. È un limite teorico, esattamente come la capacità di canale. JPEG non “implementa” R(D)R(D): ci si avvicina, stando sempre un po’ sopra il bordo.

Confondere il bordo del possibile con un metodo concreto è l’errore più comune di chi incontra la teoria per la prima volta. La curva dice dove si potrebbe arrivare, non come arrivarci — è una mappa del territorio raggiungibile, non un itinerario.

Secondo, e più profondo: distorsione bassa non è sinonimo di qualità percettiva alta. Questo è il punto su cui la teoria classica ha mostrato una crepa, e dove la ricerca recente ha aggiunto un pezzo intero.

Se addestri un modello a minimizzare l’errore quadratico medio, ottieni immagini sfocate. Il motivo è sottile. Di fronte all’incertezza su un dettaglio — la trama esatta di un tessuto, i singoli capelli — la ricostruzione che minimizza l’errore quadratico è la media di tutte le possibilità plausibili.

E la media di tante trame nitide ma diverse è una macchia indistinta. Tecnicamente è la “regression to the mean”: minimizzare l’errore medio spinge verso il valore medio, che è sfocato per costruzione. È il difetto noto delle prime reti di super-risoluzione addestrate sull’errore quadratico, e il motivo per cui si è dovuto cambiare obiettivo.

Yochai Blau e Tomer Michaeli (ricercatori israeliani del Technion, l’istituto di tecnologia di Haifa) dimostrano questo conflitto nel paper The Perception-Distortion Tradeoff (CVPR 2018). Provano matematicamente che, sotto una certa soglia, abbassare la distorsione media costringe ad abbassare la qualità percettiva, e viceversa.

La qualità percepita la definiscono in modo operativo: quanto è difficile, per un discriminatore, distinguere gli output dell’algoritmo dalle immagini reali. Misurata così, è un asse separato dalla distorsione, non una sua conseguenza — due immagini possono avere lo stesso errore medio e qualità percettiva opposta.

Nel seguito, Rethinking Lossy Compression: The Rate-Distortion-Perception Tradeoff (ICML 2019, arXiv 1901.07821), gli stessi autori portano questo terzo asse dentro la teoria della compressione. Il risultato è un trade-off non più a due dimensioni (rate contro distorsione) ma a tre: rate, distorsione, perception. Lo provano in forma chiusa per una sorgente di Bernoulli e lo illustrano su un esempio con MNIST.

Imporre alta qualità percettiva alza la curva rate-distortion, costringendo a sacrificare rate o distorsione. Detto altrimenti: se vuoi un’immagine che sembri reale, paghi — in bit o in fedeltà punto-a-punto.

Questo spiega perché i modelli generativi — i GAN nel paper originale, e oggi i diffusion model — producono immagini che sembrano bellissime pur avendo un errore quadratico non minimo. Vivono dalla parte “buona” dell’asse perception, inventando dettagli plausibili invece di mediarli via.

Un diffusion model che fa super-risoluzione non ricostruisce i capelli veri che mancavano: ne genera di plausibili, e l’occhio li accetta come reali. Il dettaglio è inventato, ma statisticamente coerente con immagini vere, e questo basta a ingannare la percezione. È un’osservazione che ribalta l’intuizione ingenua secondo cui “meno errore uguale immagine migliore” — e che ha conseguenze pratiche, perché valutare un generatore con l’errore quadratico premia esattamente i modelli sbagliati.

Terzo: distorsione zero sui dati continui non dà lossless a costo finito. Per una sorgente continua, ricostruire esattamente un valore reale richiede infiniti bit. Il “senza perdita” esiste solo per sorgenti discrete, dove R(0)R(0) coincide con l’entropia.

Trattare il caso continuo e quello discreto come se avessero lo stesso comportamento all’estremo D=0D=0 è un errore frequente. La gaussiana e la Bernoulli, i due casi chiusi che abbiamo visto, divergono proprio qui: una esplode a infinito, l’altra si ferma all’entropia.

Quarto: la misura di distorsione non è neutra. Cambiare d(x,x^)d(x,\hat{x}) cambia tutta la curva e l’ottimo. L’errore quadratico è una scelta di comodo — si risolve a mano — non perché rifletta cosa conta davvero.

Gran parte dei “fallimenti” della compressione lossy sono in realtà fallimenti della misura di distorsione: stiamo ottimizzando la cosa sbagliata, e il risultato matematicamente ottimo è percettivamente brutto.

Le misure percettive — SSIM, che confronta struttura e contrasto locale, e più di recente LPIPS, basata sulle feature di una rete neurale addestrata — esistono proprio per ridurre questo divario. Ma nessuna cattura perfettamente la percezione umana, che dipende dal contesto, dall’attenzione, persino dal contenuto semantico. Scegliere dd resta, in parte, un atto di giudizio, non un calcolo.

Quinto, sull’analogia con l’AI: attenzione a non trasformarla in equivalenza. Dire che “una rappresentazione interna è una compressione lossy dell’input” è un’analogia illuminante. Nei casi del VAE e della compressione neurale è qualcosa di più: un inquadramento formale documentato, perché gli autori scrivono esplicitamente le loro loss come problemi rate-distortion.

Ma “apprendere è compressione rate-distortion” come affermazione universale sarebbe un’equivalenza indebita. Non ogni forma di apprendimento si lascia ridurre a un problema rate-distortion ben posto, e dove non c’è una misura di distorsione esplicita l’analogia resta euristica, non teorema.

La distinzione conta, ed è il tipo di scivolamento facile da non notare. Il rate-distortion spiega certi modelli (il VAE, la cui loss è una lagrangiana rate-distortion documentata), ne ispira altri (la compressione neurale, progettata esplicitamente su quel principio), e offre una metafora feconda per altri ancora (l’astrazione come perdita controllata, dove non c’è alcuna misura di distorsione formale).

Tenere separati questi tre statuti — spiegazione, ispirazione, metafora — è metà del valore di conoscere la teoria. L’altra metà è sapere che, oltre questi tre, “apprendere è compressione” resta una congettura affascinante e non un teorema dimostrato.

  • Minimum Description Length — il complemento senza perdita di questo capitolo. R(0)R(0) per sorgenti discrete è l’entropia, il pavimento lossless: il lossy comincia dove finisce il lossless.
  • Informazione mutua e dipendenza — prerequisito concettuale: R(D)R(D) è informazione mutua minimizzata. Senza capire I(X;Y)I(X;Y) la definizione di R(D)R(D) resta opaca.
  • Canali, rumore, capacità — la dualità: la capacità massimizza l’informazione mutua, il rate-distortion la minimizza. Due problemi speculari con lo stesso ingrediente.
  • Informazione come riduzione di incertezza — l’entropia come R(0)R(0) discreto; il filo che lega Shannon 1948 (lossless) a Shannon 1959 (lossy).
  • Entropia, cross-entropy, KL divergence — la divergenza KL è il termine “rate” nell’obiettivo del VAE; serve per leggere l’esempio 2.
  • Ottimizzare funzioni di funzioni — l’obiettivo del VAE è un problema variazionale; il rate-distortion del VAE vive in quel linguaggio.
  • Il trade-off che non muore mai — analogia (non identità) con il trade-off complessità/errore: anche lì spendere “più capacità” compra meno errore con rendimenti decrescenti.
  • vae (in preparazione) — il variational autoencoder letto in chiave rate-distortion.
  • diffusion (in preparazione) — perché i diffusion model stanno bene sull’asse perception del trade-off a tre.
  • quantization-base (in preparazione) — la quantizzazione dei pesi come punto su una curva rate-distortion applicata ai parametri.
  • Claude E. Shannon, “Coding Theorems for a Discrete Source with a Fidelity Criterion” (IRE International Convention Record, vol. 7, 1959). Il paper fondante: introduce R(d)R(d) e il “fidelity criterion”. Tecnico ma sorprendentemente leggibile nelle prime pagine.
  • Thomas M. Cover, Joy A. Thomas, “Elements of Information Theory”, cap. 13 (Wiley, 2a ed. 2006). L’esposizione canonica: definizione formale, formula gaussiana, dualità con la capacità, algoritmo di Blahut-Arimoto.
  • Toby Berger, “Rate Distortion Theory: A Mathematical Basis for Data Compression” (Prentice-Hall, 1971). La monografia che ha sistematizzato il campo. Per chi vuole la teoria completa.
  • Yochai Blau, Tomer Michaeli, “Rethinking Lossy Compression: The Rate-Distortion-Perception Tradeoff” (ICML 2019, arXiv 1901.07821). Il terzo asse: perché qualità percettiva e distorsione non coincidono, e cosa succede alla curva quando si pretende il realismo.
  • Alexander A. Alemi et al., “Fixing a Broken ELBO” (ICML 2018, arXiv 1711.00464). Il ponte tra VAE e rate-distortion: l’ELBO come curva R(D)R(D), e perché l’obiettivo da solo non dice dove finisci sulla curva.
  • Naftali Tishby, Fernando Pereira, William Bialek, “The Information Bottleneck Method” (1999, arXiv physics/0004057). Il rate-distortion generalizzato al representation learning: la distorsione che emerge dalle statistiche congiunte invece di essere data a priori.