Gli algoritmi di compressione senza perdita riducono l'entropia?


35

Secondo Wikipedia :

L'entropia di Shannon misura le informazioni contenute in un messaggio in contrapposizione alla parte del messaggio determinata (o prevedibile). Esempi di quest'ultimo includono la ridondanza nella struttura del linguaggio o le proprietà statistiche relative alle frequenze di occorrenza di coppie di lettere o di parole, terzine, ecc.

Quindi l'entropia è una misura della quantità di informazioni contenute in un messaggio. I codificatori di entropia vengono utilizzati per comprimere senza perdita di dati tale messaggio al numero minimo di bit necessari per rappresentarlo (entropia). A me sembra che un perfetto encoder entropico sarebbe tutto ciò che serve per comprimere il messaggio senza perdita di dati il ​​più possibile.

Molti algoritmi di compressione tuttavia utilizzano passaggi prima della codifica entropica per ridurre presumibilmente l'entropia del messaggio.

Secondo Wikipedia in tedesco

Entropiekodierer werden häufig mit anderen Kodierern kombiniert. Dabei dienen vorgeschaltete Verfahren dazu, die Entropie der Daten zu verringern.

In inglese:

I codificatori di entropia sono spesso combinati con altri encoder. I passaggi precedenti servono per ridurre l'entropia dei dati.

vale a dire che bzip2 usa la trasformazione di Burrows-Wheeler seguita da una trasformazione Move-To-Front prima di applicare la codifica entropica (codifica Huffman in questo caso).

Questi passaggi riducono davvero l'entropia del messaggio, il che implicherebbe la riduzione della quantità di informazioni contenute nel messaggio? Questo mi sembra contraddittorio, poiché ciò significherebbe che le informazioni sono state perse durante la compressione, prevenendo la decompressione senza perdita di dati. Oppure trasformano semplicemente il messaggio per migliorare l'efficienza dell'algoritmo di codifica entropica? O l'entropia non corrisponde direttamente alla quantità di informazioni nel messaggio?


1
Potrebbe essere un modo per stimare l'entropia però.
pipe

Risposte:


39

Molte descrizioni casuali di entropia sono confuse in questo modo perché l'entropia non è una misura così ordinata e ordinata come talvolta viene presentata. In particolare, la definizione standard di entropia di Shannon stabilisce che si applica solo quando, come afferma Wikipedia, "le informazioni dovute a eventi indipendenti sono additive".

In altre parole, gli eventi indipendenti devono essere statisticamente indipendenti. Se non lo sono, devi trovare una rappresentazione dei dati che definisca gli eventi in modo da renderli veramente indipendenti. Altrimenti, sopravvaluterai l'entropia.

Per dirla in un altro modo, l'entropia di Shannon si applica solo alle vere distribuzioni di probabilità e non ai processi casuali in generale. Per esempi concreti di processi che non corrispondono ai presupposti dell'entropia di Shannon, considera ...

Processi di Markov

Un processo Markov genera una serie di eventi in cui l'evento più recente viene campionato da una distribuzione che dipende da uno o più eventi precedenti. Ovviamente un gran numero di fenomeni del mondo reale sono meglio modellati come processi di Markov che come distribuzioni di probabilità discrete e indipendenti. Ad esempio: il testo che stai leggendo adesso!

Il tasso di entropia di Shannon calcolato in modo ingenuo di un processo di Markov sarà sempre maggiore o uguale al tasso di entropia reale del processo. Per ottenere la vera entropia del processo, è necessario tenere conto della dipendenza statistica tra gli eventi. In casi semplici, la formula è simile alla seguente :

H(S)=ipij pi(j)logpi(j)

Questo può anche essere rappresentato in questo modo :

H(Y)=ijμiPijlogPij

Sempre citando Wikipedia, qui " è la distribuzione asintotica della catena", ovvero la probabilità complessiva che un determinato evento si verifichi su un lungo orizzonte.μi

Questo è tutto un modo complicato per dire che anche quando è possibile calcolare la probabilità complessiva di un determinato evento, alcune sequenze di eventi hanno maggiori probabilità di essere generate da un processo Markov. Quindi, ad esempio, le seguenti tre stringhe di parole inglesi hanno sempre meno probabilità:

  • Corsero verso l'albero
  • L'albero corse da loro
  • Albero che correvano

Ma l'entropia di Shannon valuterà tutte e tre le stringhe come ugualmente probabili. L'entropia del processo di Markov tiene conto della differenza e, di conseguenza, assegna una velocità di entropia inferiore al processo.

I tassi di entropia dipendono dal modello

Se esegui lo zoom indietro, ecco il quadro generale: il tasso di entropia di una determinata sequenza di eventi da una fonte sconosciuta dipende dal modello. Assegnerai una diversa velocità di entropia a una particolare serie di eventi a seconda di come modelli il processo che li ha generati.

E molto spesso, il tuo modello di processo non sarà del tutto corretto. Questo non è un problema semplice o facile da risolvere. In effetti, in generale, è impossibile assegnare un tasso di entropia reale a una sequenza di eventi sufficientemente lunga e complessa se non si conosce quale sia il vero processo sottostante. Questo è un risultato centrale nella teoria dell'informazione algoritmica .

Ciò che in pratica significa che, data una fonte sconosciuta di sequenze di eventi, modelli diversi produrranno entropie diverse, ed è impossibile sapere quale sia la soluzione corretta nel lungo periodo, sebbene quella che assegna l'entropia più bassa sia probabilmente la migliore.


2
Grazie mille! Questo spiega perfettamente quale fosse l'errore nel mio ragionamento.
Robert

La tua risposta sarebbe ancora migliore se avesse dati, decompressori di immagini e audio come esempi di processi modellati. Ad esempio nella compressione dei dati LZ, il modello assume una macchina (decodificatore) che accetta come comandi di input come (D, L): "copia nell'output L simboli contigui dall'offset D rispetto alla posizione di output corrente", oppure (c): " copia il simbolo c nella posizione di uscita corrente ”. L'encoder LZ trasforma il flusso del simbolo di input nel linguaggio di comando del decodificatore e il flusso del simbolo di comando ha un'entropia (e una lunghezza) diversa rispetto al flusso codificato. Altri tipi di compressione hanno macchine diverse.
piiperi,

@piiperi che sembra utile, non conosco nessuno di questi dettagli. (Vengo alla domanda dal punto di vista dell'apprendimento automatico.)
Senderle,

@senderle Intendevo espandere il capitolo "I tassi di entropia dipendono dal modello" con alcuni esempi concreti di processo. Parli di un processo che genera eventi e i componenti di elaborazione dei compressori di dati, immagini, video, audio ecc. Possono essere visti come tali processi. Un codificatore di entropia pura è il passaggio finale di una pipeline di compressione dei dati. Nessuno dei passaggi della pipeline "riduce l'entropia". Al contrario, ognuno di essi crea istruzioni per una macchina in grado di riprodurre il flusso di simboli originale. E ogni flusso di istruzioni ha un'entropia diversa e spesso una lunghezza diversa (cioè più corta).
piiperi,

12

No, se l'algoritmo è privo di perdite, nessun passaggio nella sequenza di compressione può ridurne l'entropia, altrimenti non sarebbe possibile decomprimerlo / decodificarlo. Tuttavia, l'entropia aggiuntiva può essere memorizzata in informazioni "fuori banda", ad esempio l'elenco che deve essere mantenuto per decodificare la trasformazione di spostamento in primo piano.


Quindi i passaggi aggiuntivi utilizzati negli algoritmi di compressione prima della codifica entropica sono appena utilizzati per consentire al codificatore entropico di avvicinarsi all'entropia? Un codificatore di entropia non si avvicina all'entropia da solo quando applicato a un messaggio arbitrario?
Robert

Anzi, non lo è (beh, a seconda del significato esatto di "chiudere").
Grimmy

I passaggi aggiuntivi consentono all'encoder dell'entropia di mantenere l'entropia del messaggio originale, riducendo nel contempo le informazioni superflue in modo più efficace rispetto a se fossero applicate da sole. Sia che applichi la pre-elaborazione o meno, l'entropia verrà preservata, ma la compressione sarebbe meno efficace (finiresti con una codifica meno efficiente).
Luke Schwartzkopff il

No, la trasformazione sposta in primo piano non genera un elenco separato che deve essere trasferito al decodificatore. A meno che tu non intenda l'elenco iniziale.
user253751

Aah, hai ragione, non è stato il miglior esempio :)
Luke Schwartzkopff l'

6

Riducono l' apparente entropia inerente alla struttura del messaggio originale. O in altre parole, sintonizzano il messaggio per sfruttare i punti di forza delle prossime fasi di compressione.

Un semplice esempio potrebbe essere la sostituzione del nome nei tag di fine di xml con un simbolo speciale. Puoi ricreare perfettamente l'xml originale da quello, ma il compressore non deve includere nuovamente il nome completo in quel posto.

Un esempio più reale è la compressione png. Il suo compressore per entropia è DEFLATE, che è una combinazione di Lempel-Ziff e Huffman. Ciò significa che funziona meglio con valori e schemi che si ripetono spesso. La maggior parte dei pixel adiacenti tende ad avere colori simili. Quindi a ogni riga viene assegnato un filtro che trasforma i valori di pixel originali in una codifica differenziale. In questo modo i valori che finiscono per essere codificati da DEFLATE sono per lo più vicini a 0. In casi estremi questo trasformerà un gradiente uniforme da tutti i diversi valori in un singolo valore in tutta la riga di cui la porzione LZ o DEFLATE fa un lavoro molto veloce.


Ciò significa che l'entropia apparente è diversa dall'effettivo contenuto informativo di un messaggio? In che modo ciò è correlato all'entropia effettiva del messaggio?
Robert

con "apparente entropia" intendo l'entropia che l'entropia codificata può comprimere. Encoder diversi avranno modelli diversi che cercano. Huffman fa meglio quando gli stessi pochi simboli vengono riutilizzati spesso usati spesso, lempel-ziff fa meglio quando si ripetono blocchi, ecc.
maniaco del cricchetto

Ma gli algoritmi di Lempel-Ziv non sono algoritmi di codifica entropica, giusto? Ciò che non capisco è il motivo per cui vengono utilizzati prima dei programmatori di entropia, ad esempio in LZMA, quando il programmatore di entropia da solo potrebbe presumibilmente già comprimere il messaggio al minimo.
Robert

1
@kutschkem Questo significa che l'entropia non è una misura assoluta del contenuto informativo di un messaggio ma è relativa a ciò che è definito come un simbolo (ad es. un singolo carattere è considerato un simbolo contro 1 bit considerato un simbolo)? Penso che spiegherebbe dove erano sbagliate le mie ipotesi.
Robert

1
@robert ... C'è però un compromesso, che è l'informazione "fuori banda" menzionata da Luca nella sua risposta, che viene generalmente aggiunta da quei passaggi (tabelle di ricerca per poter decodificare le informazioni codificate). Quindi non ha senso definire l'intero contenuto come un simbolo e codificarlo come 0 perché da qualche parte è necessario memorizzare le informazioni che codifica questo 0.
Kutschkem,

6

I programmatori di entropia non comprimono il messaggio al numero minimo di bit necessari per rappresentarlo. So che è allettante pensarlo, ma non è quello che fanno. Non sono magici e non possono raggiungerlo.

Invece, fanno qualcosa di un po 'meno magico, ma comunque utile. Supponiamo per il momento di sapere che ogni personaggio del messaggio è stato scelto indipendentemente da qualche distribuzione. Quindi sarebbe possibile creare un algoritmo di compressione senza perdita di dati che comprime in modo ottimale i messaggi. Questi algoritmi sono chiamati encoder entropici.

Ora i messaggi reali di solito non hanno quella proprietà di indipendenza. Ad esempio, se vedi una Q, è probabile che la lettera successiva sia una U. E così via. È ancora possibile applicare un algoritmo encoder entropico a un messaggio reale, in cui ogni personaggio non viene scelto indipendentemente dal resto. L'algoritmo sarà comunque privo di perdite, può ancora essere utilizzato per la compressione e, in pratica, accorcia spesso la lunghezza del messaggio. Tuttavia, non lo accorcia alla lunghezza minima possibile. Non comprime il messaggio a qualcosa la cui lunghezza è uguale all'entropia del messaggio; lo comprime meno.

Una volta che realizzi questa proprietà degli encoder entropici, il paradosso evapora.

In generale, qualsiasi passaggio senza perdita non riduce mai l'entropia del messaggio. Tuttavia, potrebbe mettere il messaggio in una forma in cui alcuni altri algoritmi di compressione sono più efficaci, quindi potrebbe essere comunque utile (in media) nella pratica.


2

La parola "Entropia", se usata spesso in modo un po 'lento, si riferisce a due cose diverse:

  • La "quantità totale di informazioni" in un messaggio o sistema

  • La "densità" delle informazioni, o quanto strettamente le informazioni sono imballate.

La citazione di OP della voce di Wikipedia per https://en.wikipedia.org/wiki/Entropy_(information_theory) si riferisce alla prima:

Shannon's entropy measures the information contained in a message

Ma (almeno quando scrivo questo) lo stesso articolo inizia con:

Information entropy is the average rate at which information is produced by a stochastic source of data.

Quindi uno è un importo e uno è un tasso (simile alla distanza rispetto alla velocità). Queste sono talvolta chiamate proprietà "estese" e "intensive" (vedi https://en.wikipedia.org/wiki/Intensive_and_extensive_properties#Extensive_properties ).

Un classico esempio di distinzione è il famoso segnale lanterna di Paul Revere: "uno se via terra e due se via mare". 1 bit di informazioni totali (se ignoriamo il caso "none se non sono ancora arrivato a North Church"). Se Paolo aggiungesse un altro insieme di lanterne in ogni finestra dell'edificio, ciò sarebbe "ridondante": niente più informazioni, quindi la stessa entropia "totale" o "estesa"; ma molta più lunghezza del messaggio, molta più bassa entropia "intensiva".

Se inizia in quel modo ma cambia per usare solo un set di lanterne, questa è "compressione senza perdita" come nella domanda di OP. L'entropia "estesa" è la stessa, ma l'entropia "intensiva" è diversa: poiché il numero di lanterne nella seconda finestra è altamente correlato con quante ne hai viste nella prima, il messaggio ridondante è più prevedibile, oppure meno casuale, quindi ha un'entropia intensiva molto più bassa.

Ci sono altre due cose importanti da ricordare:

  • Primo, in genere non conosciamo l'entropia "vera" di un sistema in entrambi i sensi. Uno spettatore ingenuo non sa se "3 lanterne" sarebbe un messaggio diverso o se i segnali in una finestra diversa sono ridondanti o meno. Se Paul fa del suo giro un'abitudine, possiamo contare e vedere se le finestre corrispondono sempre l'una all'altra. Ma forse non abbiamo guardato abbastanza a lungo per vedere le rare (e probabilmente importanti!) Eccezioni.

  • In secondo luogo, importa come si misura. Considera di provare a stimare quanto viene comunicato da ogni successiva lettera di testo (che è un tasso, quindi entropia "intensiva", a volte anche chiamata "entropia relativa"):

    • Se noti che le persone inviano testo in unità di 8 bit, la tua prima "stima" potrebbe essere di 8 bit per lettera.
    • Se conti il ​​numero di lettere distinte in uso, stimeresti log2 (26) o 4,7 bit per lettera (un po 'più in alto se consideri spazi, maiuscole, ecc.).
    • Se consideri che "e" è una scommessa migliore per "lettera successiva" rispetto a "z", misurerai le frequenze delle lettere e andrai in giro 4.14 (vedi http://people.seas.harvard.edu/~jones/cscie129/ papers / stanford_info_paper / entropy_of_english_9.htm ).
    • Se conti le coppie di lettere, prenderai schemi come "qu", "th", ecc. E otterrai circa 3,56.
    • Se conti sequenze fino a circa 5 lettere, otterrai valori ancora più bassi e come bonus puoi distinguere in modo abbastanza affidabile in quale linguaggio umano si trova il testo).
    • Se sei duro e intelligente come NG Burton e JCR Licklider in "Vincoli a lungo raggio nella struttura statistica dell'inglese stampato" (American Journal of Psychology 68 (1955)), puoi ottenere sequenze di 10, 0000 lettere di fila e trova ancora un altro valore di entropia.

Ma, naturalmente, i messaggi possono (e fare) avere molti modelli che non sono modellati da tali metodi n-gram, quindi l'entropia "vera" è ancora più bassa.

Se modelli una fonte infinita teorica con una distribuzione di token Zipfian perfettamente casuale, puoi calcolare l'entropia estesa e intensiva che avrebbe, che risulta dipendere solo dal numero di possibili token distinti. I grafici di come appare ogni tipo di entropia all'aumentare di quel numero si trovano in [ http://www.derose.net/steve/writings/dissertation/Diss.0.html] . I due si comportano in modo abbastanza diverso:

Spero che aiuti o sia almeno interessante ...


1

Sospetto che la formulazione nella Wikipedia tedesca sia errata. I compressori aumentano l'entropia. Vale a dire, non l'entropia generale, ma l'entropia per bit : la densità delle informazioni. Ad esempio, per condensare i dati viene applicato uno schema di codifica di lunghezza e dizionario. Ora le stesse informazioni sono raggruppate in un minor numero di bit, quindi ogni bit contiene più informazioni. La successiva codifica di Huffman fa un po 'di più la stessa cosa; è solo un altro livello di compressione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.