Apakah algoritma kompresi lossless mengurangi entropi?

35

Menurut Wikipedia :

Entropi Shannon mengukur informasi yang terkandung dalam pesan sebagai lawan bagian pesan yang ditentukan (atau dapat diprediksi). Contoh yang terakhir termasuk redundansi dalam struktur bahasa atau sifat statistik yang berkaitan dengan frekuensi kemunculan pasangan huruf atau kata, kembar tiga dll.

Jadi entropi adalah ukuran dari jumlah informasi yang terkandung dalam sebuah pesan. Coders entropi digunakan untuk mengkompresi pesan seperti losslessy ke jumlah bit minimum yang diperlukan untuk mewakilinya (entropi). Bagi saya ini sepertinya encoder entropi yang sempurna adalah semua yang diperlukan untuk mengompresi pesan sebanyak mungkin.

Namun banyak algoritma kompresi menggunakan langkah-langkah sebelum pengkodean entropi untuk mengurangi entropi pesan.

Menurut Wikipedia bahasa Jerman

Entropiekodierer adalah milik Anda dan juga Kodierern kombiniert. Dabei dienen vorgeschaltete Verfahren dazu, mati Entropie der Daten zu verringern.

Dalam Bahasa Inggris:

Coders entropi sering dikombinasikan dengan encoders lain. Langkah-langkah sebelumnya berfungsi untuk mengurangi entropi data.

yaitu bzip2 menggunakan Burrows-Wheeler-Transform diikuti oleh Move-To-Front-Transform sebelum menerapkan pengkodean entropi (pengkodean Huffman dalam kasus ini).

Apakah langkah-langkah ini benar-benar mengurangi entropi pesan, yang akan berarti mengurangi jumlah informasi yang terkandung dalam pesan? Ini tampaknya bertentangan dengan saya, karena itu berarti bahwa informasi hilang selama kompresi, mencegah dekompresi lossless. Atau apakah mereka hanya mengubah pesan untuk meningkatkan efisiensi algoritma pengkodean entropi? Atau apakah entropi tidak berhubungan langsung dengan jumlah informasi dalam pesan?

robert
sumber
1
Bisa jadi cara untuk memperkirakan entropi.
pipa

Jawaban:

39

Banyak deskripsi entropi yang membingungkan membingungkan dengan cara ini karena entropi tidak cukup rapi dan rapi seperti yang kadang-kadang disajikan. Secara khusus, definisi standar entropi Shannon menetapkan bahwa itu hanya berlaku ketika, seperti Wikipedia katakan, "informasi karena peristiwa independen adalah aditif."

Dengan kata lain, peristiwa independen harus independen secara statistik . Jika tidak, maka Anda harus menemukan representasi data yang menentukan peristiwa dengan cara yang membuat mereka benar-benar independen. Jika tidak, Anda akan melebih-lebihkan entropi.

Dengan kata lain, entropi Shannon hanya berlaku untuk distribusi probabilitas benar, dan tidak untuk proses acak secara umum. Untuk contoh konkret proses yang tidak sesuai dengan asumsi entropi Shannon, pertimbangkan ...

Proses Markov

Proses Markov menghasilkan serangkaian acara di mana peristiwa terbaru disampel dari distribusi yang bergantung pada satu atau lebih peristiwa sebelumnya. Jelas sekali sejumlah besar fenomena dunia nyata dimodelkan dengan lebih baik sebagai proses Markov daripada sebagai distribusi probabilitas independen yang terpisah. Misalnya: teks yang sedang Anda baca sekarang!

Laju entropi Shannon yang dihitung secara naif dari proses Markov akan selalu lebih besar atau sama dengan laju entropi sebenarnya dari proses tersebut. Untuk mendapatkan entropi proses yang sebenarnya, Anda harus memperhitungkan ketergantungan statistik di antara berbagai peristiwa. Dalam kasus sederhana, rumus untuk itu terlihat seperti ini :

H(S)=-sayahalsayaj halsaya(j)loghalsaya(j)

Ini juga dapat direpresentasikan seperti ini :

H(Y)=-sayajμsayaPsayajlogPsayaj

Sekali lagi mengutip Wikipedia, di sini " μsaya adalah distribusi asimtotik dari rantai" - yaitu, probabilitas keseluruhan bahwa peristiwa tertentu akan terjadi selama horizon panjang.

Ini semua adalah cara yang rumit untuk mengatakan bahwa bahkan ketika Anda dapat menghitung probabilitas keseluruhan dari suatu peristiwa tertentu, urutan peristiwa tertentu lebih mungkin daripada yang lain dihasilkan oleh proses Markov. Jadi misalnya, tiga untaian kata bahasa Inggris berikut ini semakin kecil kemungkinannya:

  • Mereka berlari ke pohon
  • Pohon itu berlari ke arah mereka
  • Pohon mereka berlari

Tetapi entropi Shannon akan menilai ketiga string sebagai sama-sama mungkin. Entropi proses Markov memperhitungkan perbedaannya, dan sebagai hasilnya, ia memberikan tingkat entropi yang lebih rendah untuk proses tersebut.

Tingkat entropi tergantung pada model

Jika Anda memperbesar jalan keluar, inilah gambaran besarnya: laju entropi dari urutan peristiwa tertentu dari sumber yang tidak diketahui bergantung pada model. Anda akan menetapkan tingkat entropi yang berbeda untuk serangkaian acara tertentu tergantung pada bagaimana Anda memodelkan proses yang menghasilkannya.

Dan sangat sering, model proses Anda tidak akan benar. Ini bukan masalah yang sederhana atau mudah untuk dipecahkan. Pada kenyataannya, secara umum, tidak mungkin untuk menetapkan tingkat entropi yang benar ke urutan peristiwa yang cukup panjang dan kompleks jika Anda tidak tahu apa proses yang mendasarinya sebenarnya. Ini adalah hasil sentral dalam teori informasi algoritmik .

Apa yang dimaksud dalam praktik adalah bahwa dengan sumber yang tidak diketahui dari urutan kejadian, model yang berbeda akan menghasilkan entropi yang berbeda, dan tidak mungkin untuk mengetahui mana yang benar dalam jangka panjang - meskipun yang menetapkan entropi terendah mungkin yang terbaik.

pengirim
sumber
2
Terima kasih banyak! Ini menjelaskan dengan sempurna apa kesalahan dalam alasan saya.
robert
Jawaban Anda akan lebih baik jika memiliki dekompresi data, gambar dan audio sebagai contoh proses pemodelan. Dalam misalnya kompresi data LZ, model mengasumsikan mesin (decoder) yang mengambil sebagai perintah input seperti (D, L): "salin ke output L simbol yang berdekatan dari offset D relatif ke posisi keluaran saat ini", atau (c): " salin simbol c ke posisi keluaran saat ini ”. Encoder LZ mengubah aliran simbol inputnya ke bahasa perintah dekoder, dan aliran simbol perintah memiliki entropi (dan panjang) yang berbeda dari aliran yang disandikan. Jenis kompresi lain memiliki mesin yang berbeda.
piiperi
@piiperi yang kedengarannya membantu — saya tidak tahu detail itu. (Saya datang pada pertanyaan dari sudut pandang pembelajaran mesin.)
pengirim
@senderle Maksud saya memperluas bab "Tingkat entropi bergantung pada model" dengan beberapa contoh proses nyata. Anda berbicara tentang proses yang menghasilkan peristiwa, dan data, gambar, video, audio, dll. Komponen pemrosesan kompresor dapat dilihat sebagai proses tersebut. Coder entropi murni adalah langkah terakhir dari pipa kompresi data. Tak satu pun dari langkah-langkah pipa benar-benar "mengurangi entropi". Sebaliknya, masing-masing membuat instruksi untuk mesin yang dapat mereproduksi aliran simbol asli. Dan setiap aliran instruksi memiliki entropi yang berbeda dan seringkali memiliki panjang yang berbeda (yaitu lebih pendek).
piiperi
12

Tidak, jika algoritma ini lossless, tidak ada langkah-langkah dalam urutan kompresi yang dapat mengurangi entropi - jika tidak, ia tidak akan dapat didekompresi / didekodekan. Namun, entropi tambahan dapat disimpan dalam informasi 'out-of-band' - seperti daftar yang perlu dipertahankan untuk men-decode transformasi pindah-ke-depan.

Luke Schwartzkopff
sumber
Jadi apakah langkah-langkah tambahan yang digunakan dalam algoritma kompresi sebelum pengkodean entropi hanya digunakan untuk memungkinkan pembuat kode entropi untuk mendekati entropi? Apakah pembuat kode entropi tidak mendekati entropi sendiri ketika diterapkan pada pesan arbitrer?
robert
Memang, itu tidak (yah, tergantung pada arti tepatnya "tutup").
Grimmy
Langkah-langkah tambahan memungkinkan encoder entropi untuk mempertahankan entropi pesan asli sambil mengurangi informasi yang berlebihan lebih efektif daripada jika itu harus diterapkan sendiri. Apakah Anda menerapkan pra-pemrosesan atau tidak, entropi akan dipertahankan, tetapi kompresi akan kurang efektif (Anda akan berakhir dengan pengkodean yang kurang efisien).
Luke Schwartzkopff
Tidak, transformasi pindahkan ke depan tidak menampilkan daftar terpisah yang harus ditransfer ke dekoder. Kecuali Anda maksud daftar awal.
user253751
Aah, Anda benar, itu bukan contoh terbaik :)
Luke Schwartzkopff
6

Mereka mengurangi entropi nyata yang melekat dalam struktur pesan aslinya. Atau dengan kata lain mereka menyesuaikan pesan untuk memanfaatkan kekuatan tahap kompresi berikutnya.

Salah satu contoh sederhana akan mengganti nama di tag akhir xml dengan simbol khusus. Anda dapat dengan sempurna membuat kembali xml asli dari itu tetapi kompresor tidak harus memasukkan nama lengkap lagi di tempat itu.

Contoh yang lebih nyata adalah kompresi png. Kompresor entropinya adalah DEFLATE, yang merupakan kombinasi dari Lempel-Ziff dan Huffman. Ini berarti bahwa ia bekerja paling baik dengan nilai-nilai dan pola yang sering diulang. Kebanyakan piksel yang berdekatan cenderung memiliki warna yang serupa. Jadi setiap baris diberi filter yang mengubah nilai piksel asli menjadi pengkodean diferensial. Dengan cara ini, nilai-nilai yang akhirnya disandikan oleh DEFLATE sebagian besar mendekati 0. Dalam kasus ekstrem ini akan mengubah gradien yang halus dari semua nilai yang berbeda menjadi nilai tunggal di sepanjang baris di mana bagian LZ atau DEFLATE membuat pekerjaan yang sangat cepat.

ratchet freak
sumber
Apakah itu berarti entropi jelas berbeda dari konten informasi aktual dari suatu pesan? Bagaimana hal itu terkait dengan entropi pesan yang sebenarnya?
robert
dengan "jelas entropi" Maksud saya entropi yang dikodekan entropi ke. Encoder yang berbeda akan memiliki pola berbeda yang mereka cari. Huffman melakukan yang terbaik ketika beberapa simbol yang sama digunakan kembali sering sering digunakan, lempel-ziff melakukan yang terbaik ketika potongan diulang, dll.
ratchet freak
Tetapi algoritma Lempel-Ziv bukan algoritma pengkodean entropi, bukan? Apa yang saya tidak mengerti adalah mengapa mereka digunakan sebelum entropy coders di misalnya LZMA, ketika entropy coder sendiri seharusnya sudah dapat memampatkan pesan ke minimum.
robert
1
@kutschkem Apakah ini berarti entropi bukan ukuran absolut dari isi informasi dari pesan tetapi relatif terhadap apa yang didefinisikan sebagai simbol (misalnya karakter tunggal dianggap sebagai simbol vs 1 bit dianggap sebagai simbol)? Saya pikir itu akan menjelaskan di mana asumsi saya salah.
robert
1
@robert ... Namun ada tradeoff, yang merupakan informasi "out-of-band" yang disebutkan Luke dalam jawabannya, yang umumnya ditambahkan oleh langkah-langkah tersebut (tabel pencarian untuk dapat memecahkan kode informasi yang disandikan). Jadi tidak masuk akal untuk mendefinisikan seluruh konten sebagai satu simbol, dan menyandikannya sebagai 0 karena di suatu tempat informasi harus disimpan apa yang disandikan oleh 0 ini.
kutschkem
6

Coders entropi tidak memampatkan pesan ke jumlah bit minimum yang diperlukan untuk mewakilinya. Saya tahu tergoda untuk berpikir begitu, tetapi bukan itu yang mereka lakukan. Mereka bukan sihir dan mereka tidak bisa mencapainya.

Sebagai gantinya, mereka melakukan sesuatu yang sedikit kurang magis - tetapi masih bermanfaat. Misalkan untuk saat itu kita tahu bahwa setiap karakter pesan dipilih secara independen dari beberapa distribusi. Maka akan mungkin untuk membangun algoritma kompresi lossless yang secara optimal memampatkan pesan. Algoritma ini disebut entropy encoders.

Sekarang pesan nyata biasanya tidak memiliki properti independensi itu. Misalnya, jika Anda melihat Q, kemungkinan huruf berikutnya adalah U. Dan seterusnya. Masih dimungkinkan untuk menerapkan algoritma enkoder entropi ke pesan nyata, di mana setiap karakter tidak dipilih secara terpisah dari yang lain. Algoritma masih akan lossless, masih dapat digunakan untuk kompresi, dan dalam praktiknya, masih akan sering memperpendek panjang pesan. Namun, itu tidak mempersingkat panjang minimum. Itu tidak memampatkan pesan ke sesuatu yang panjangnya sama dengan entropi pesan; itu kompres kurang dari itu.

Begitu Anda menyadari sifat enkode entropi ini, maka paradoksnya menguap.

Secara umum, setiap langkah lossless tidak pernah mengurangi entropi pesan. Namun, mungkin menempatkan pesan ke dalam bentuk di mana beberapa algoritma kompresi lainnya lebih efektif, sehingga mungkin masih berguna (rata-rata) dalam praktiknya.

DW
sumber
2

Kata "Entropi" jika sering digunakan agak longgar, merujuk pada dua hal yang berbeda:

  • "Jumlah total informasi" dalam pesan atau sistem

  • Informasi "kepadatan", atau seberapa erat informasi dikemas.

Kutipan OP tentang entri Wikipedia untuk https://en.wikipedia.org/wiki/Entropy_(information_theory) merujuk pada yang pertama:

Shannon's entropy measures the information contained in a message

Tetapi (setidaknya ketika saya menulis ini) artikel yang sama dimulai dengan:

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

Jadi satu adalah jumlah dan satu adalah laju (mirip dengan jarak vs kecepatan). Ini kadang-kadang disebut properti "luas" dan "intensif" (lihat https://en.wikipedia.org/wiki/Intensive_and_extensive_properties#Extensive_properties ).

Contoh klasik dari pembedaan ini adalah sinyal lentera terkenal Paul Revere: "satu jika melalui darat, dan dua jika melalui laut". 1 bit informasi total (jika kita mengabaikan "tidak ada jika saya belum sampai ke Gereja Utara"). Jika Paul menambahkan satu set lampion di setiap jendela gedung, itu akan menjadi "berlebihan": tidak ada informasi lebih lanjut, sehingga entropi "total" atau "luas" yang sama; tetapi jauh lebih panjang pesan, jauh lebih rendah entropi "intensif".

Jika dia memulai dengan cara itu tetapi perubahan hanya menggunakan satu set lentera, itu "kompresi lossless" seperti dalam pertanyaan OP. Entropi "luas" adalah sama, tetapi "entropi" intensif "berbeda: Karena jumlah lentera di jendela ke-2 sangat berkorelasi dengan berapa banyak yang Anda lihat di pertama, pesan yang berlebihan lebih mudah diprediksi, atau kurang acak, sehingga memiliki entropi intensif jauh lebih rendah.

Ada dua hal penting yang perlu diingat:

  • Pertama, kita biasanya tidak mengetahui entropi "sejati" dari sistem dalam arti apa pun. Seorang pengamat yang naif tidak tahu apakah "3 lentera" akan menjadi pesan yang berbeda, atau apakah sinyal di jendela yang berbeda berlebihan atau tidak. Jika Paul menjadikannya kebiasaan, kita dapat menghitung dan melihat apakah jendelanya selalu cocok satu sama lain. Tapi mungkin kita belum cukup lama menonton untuk melihat pengecualian yang jarang (dan mungkin penting!).

  • Kedua, penting bagaimana Anda mengukur. Pertimbangkan untuk mencoba memperkirakan berapa banyak yang dikomunikasikan oleh masing-masing surat teks (itu angka, entropi "intensif", juga terkadang disebut "entropi relatif"):

    • Jika Anda hanya memperhatikan bahwa orang mengirim teks dalam satuan 8-bit, "perkiraan" pertama Anda mungkin 8 bit per huruf.
    • Jika Anda menghitung jumlah huruf berbeda yang digunakan, Anda akan memperkirakan log2 (26), atau 4,7 bit per huruf (sedikit lebih tinggi jika Anda mempertimbangkan spasi, huruf, dll).
    • Jika Anda menganggap bahwa "e" adalah taruhan yang lebih baik untuk "huruf berikutnya" daripada "z", Anda akan mengukur frekuensi huruf dan mendapatkan sekitar 4,14 (lihat http://people.seas.harvard.edu/~jones/cscie129/ makalah / stanford_info_paper / entropy_of_english_9.htm ).
    • Jika Anda menghitung pasangan surat, Anda akan menemukan pola seperti "qu", "th", dll., Dan mendapatkan sekitar 3,56.
    • Jika Anda menghitung urutan hingga sekitar 5 huruf, Anda akan mendapatkan nilai yang lebih rendah lagi, dan sebagai bonus Anda dapat membedakan bahasa manusia dari teks tersebut dengan andal.
    • Jika Anda sekeras dan sepintar NG Burton dan JCR Licklider dalam "Kendala Jangka Panjang dalam Struktur Statistik Bahasa Inggris Tercetak" (American Journal of Psychology 68 (1955)), Anda bisa mendapatkan urutan 10, 0000 huruf berturut-turut, dan temukan lagi nilai entropi.

Tetapi tentu saja, pesan dapat (dan memang) memiliki banyak pola yang tidak dimodelkan dengan metode n-gram seperti itu, sehingga entropi "benar" masih lebih rendah.

Jika Anda memodelkan sumber tak terbatas teoretis dengan distribusi token Zipfian acak sempurna, Anda dapat menghitung entropi luas dan intensif yang seharusnya, yang ternyata hanya bergantung pada jumlah kemungkinan token berbeda. Grafik dari setiap jenis entropi terlihat ketika jumlah itu meningkat, terdapat di [ http://www.derose.net/steve/writings/dissertation/Diss.0.html] . Keduanya berperilaku sangat berbeda:

Harapan yang membantu atau paling tidak menarik ...

TextGeek
sumber
1

Saya menduga kata-kata dalam Wikipedia bahasa Jerman salah. Kompresor meningkatkan entropi. Artinya, bukan keseluruhan entropi, tetapi entropi per bit : kepadatan informasi. Misalnya beberapa skema pengodean dan kamus run-length diterapkan untuk menyingkat data. Sekarang informasi yang sama dikemas menjadi bit yang lebih sedikit, sehingga setiap bit membawa lebih banyak informasi. Pengodean Huffman berikutnya melakukan sedikit lebih banyak hal yang sama; itu hanya lapisan kompresi.

Kaz
sumber