Các thuật toán nén lossless có làm giảm entropy không?


35

Theo Wikipedia :

Entropy của Shannon đo lường thông tin chứa trong một tin nhắn trái ngược với phần của thông điệp được xác định (hoặc có thể dự đoán được). Các ví dụ sau này bao gồm sự dư thừa trong cấu trúc ngôn ngữ hoặc thuộc tính thống kê liên quan đến tần suất xuất hiện của các cặp chữ cái hoặc từ, bộ ba, v.v.

Vì vậy, entropy là thước đo lượng thông tin có trong một tin nhắn. Các bộ mã hóa Entropy được sử dụng để losslessy nén một thông điệp như vậy đến số bit tối thiểu cần thiết để thể hiện nó (entropy). Đối với tôi điều này có vẻ như một bộ mã hóa entropy hoàn hảo sẽ là tất cả những gì cần thiết để losslessy nén một tin nhắn càng nhiều càng tốt.

Tuy nhiên, nhiều thuật toán nén sử dụng các bước trước khi mã hóa entropy để giảm entropy của thông điệp.

Theo Wikipedia tiếng Đức

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

Bằng tiếng Anh:

Các lập trình viên Entropy thường được kết hợp với các bộ mã hóa khác. Các bước trước phục vụ để giảm entropy của dữ liệu.

tức là bzip2 sử dụng Burrows-Wheeler-Transform theo sau là Move-To-Front-Transform trước khi áp dụng mã hóa entropy (mã hóa Huffman trong trường hợp này).

Các bước này có thực sự làm giảm entropy của tin nhắn, điều này có nghĩa là giảm lượng thông tin có trong tin nhắn? Điều này có vẻ mâu thuẫn với tôi, vì điều đó có nghĩa là thông tin bị mất trong quá trình nén, ngăn chặn việc giải nén không mất mát. Hay họ chỉ đơn thuần chuyển đổi thông điệp để cải thiện hiệu quả của thuật toán mã hóa entropy? Hoặc entropy không tương ứng trực tiếp với lượng thông tin trong tin nhắn?


1
Có thể là một cách để ước tính entropy mặc dù.
đường ống

Câu trả lời:


39

Rất nhiều mô tả ngẫu nhiên về entropy gây nhầm lẫn theo cách này vì entropy không hoàn toàn gọn gàng và gọn gàng như một biện pháp đôi khi được trình bày. Cụ thể, định nghĩa chuẩn của entropy Shannon quy định rằng nó chỉ áp dụng khi, như Wikipedia nói, "thông tin do các sự kiện độc lập là phụ gia."

Nói cách khác, các sự kiện độc lập phải độc lập thống kê . Nếu chúng không phải, thì bạn phải tìm một đại diện cho dữ liệu xác định các sự kiện theo cách làm cho chúng thực sự độc lập. Nếu không, bạn sẽ đánh giá quá cao entropy.

Nói một cách khác, entropy của Shannon chỉ áp dụng cho các phân phối xác suất thực sự, và không áp dụng cho các quy trình ngẫu nhiên nói chung. Đối với các ví dụ cụ thể về các quy trình không phù hợp với các giả định của entropy Shannon, hãy xem xét ...

Quy trình Markov

Một quy trình Markov tạo ra một loạt các sự kiện trong đó sự kiện gần đây nhất được lấy mẫu từ một bản phân phối phụ thuộc vào một hoặc nhiều sự kiện trước đó. Rõ ràng một số lượng lớn các hiện tượng trong thế giới thực được mô hình hóa tốt hơn như các quá trình Markov hơn là các phân phối xác suất độc lập, rời rạc. Ví dụ: văn bản bạn đang đọc ngay bây giờ!

Tỷ lệ entropy Shannon được tính toán một cách ngây thơ của một quy trình Markov sẽ luôn luôn lớn hơn hoặc bằng tỷ lệ entropy thực sự của quy trình. Để có được entropy thực sự của quá trình, bạn cần tính đến sự phụ thuộc thống kê giữa các sự kiện. Trong các trường hợp đơn giản, công thức cho điều đó trông như thế này :

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

Điều này cũng có thể được đại diện như vậy :

H(Y)=ijμiPijlogPij

μi

Đây hoàn toàn là một cách nói phức tạp mà ngay cả khi bạn có thể tính xác suất tổng thể của một sự kiện nhất định, các chuỗi sự kiện nhất định có nhiều khả năng hơn các sự kiện khác được tạo ra bởi quy trình Markov. Vì vậy, ví dụ, ba chuỗi từ tiếng Anh sau đây ngày càng ít có khả năng:

  • Họ chạy đến gốc cây.
  • Cây chạy đến chỗ họ.
  • Cây họ chạy

Nhưng entropy của Shannon sẽ đánh giá cả ba chuỗi có khả năng như nhau. Entropy quá trình Markov đưa sự khác biệt vào tài khoản, và kết quả là, nó gán tỷ lệ entropy thấp hơn cho quy trình.

Tỷ lệ Entropy phụ thuộc vào mô hình

Nếu bạn thu nhỏ lối ra, đây là bức tranh lớn: tốc độ entropy của một chuỗi các sự kiện nhất định từ một nguồn không xác định phụ thuộc vào mô hình. Bạn sẽ chỉ định một tỷ lệ entropy khác nhau cho một chuỗi các sự kiện cụ thể tùy thuộc vào cách bạn mô hình hóa quá trình tạo ra chúng.

Và rất thường xuyên, mô hình của quá trình của bạn sẽ không hoàn toàn chính xác. Đây không phải là một vấn đề đơn giản hoặc dễ dàng để giải quyết. Trên thực tế, nói chung, không thể chỉ định tỷ lệ entropy thực sự cho một chuỗi các sự kiện đủ dài và phức tạp nếu bạn không biết quy trình cơ bản thực sự là gì. Đây là một kết quả trung tâm trong lý thuyết thông tin thuật toán .

Trong thực tế, điều đó có nghĩa là khi đưa ra một chuỗi các sự kiện chưa biết, các mô hình khác nhau sẽ mang lại các entropi khác nhau và không thể biết điều nào là đúng trong thời gian dài - mặc dù cái được gán entropy thấp nhất có lẽ là tốt nhất.


2
Cảm ơn nhiều! Điều này giải thích hoàn hảo những sai lầm trong lý luận của tôi là gì.
robert

Câu trả lời của bạn sẽ tốt hơn nữa nếu nó có bộ giải nén dữ liệu, hình ảnh và âm thanh như các ví dụ về các quy trình được mô hình hóa. Trong ví dụ nén dữ liệu LZ, mô hình giả định một máy (bộ giải mã) nhận các lệnh đầu vào như (D, L): Sao chép vào đầu ra L ký hiệu liền kề từ offset D so với vị trí đầu ra hiện tại, hoặc (c): sao chép ký hiệu c vào vị trí đầu ra hiện tại. Bộ mã hóa LZ biến đổi luồng ký hiệu đầu vào của nó thành ngôn ngữ lệnh của bộ giải mã và luồng ký hiệu lệnh có một entropy (và độ dài) khác với luồng được mã hóa. Các loại nén khác có máy khác nhau.
piiperi

@piiperi nghe có vẻ hữu ích. Tôi không biết bất kỳ chi tiết nào trong số đó. (Tôi đang đến câu hỏi từ quan điểm học máy.)
gửi

@senderle Tôi có nghĩa là mở rộng chương "Tỷ lệ Entropy phụ thuộc vào mô hình" với một số ví dụ quy trình cụ thể. Bạn nói về một quá trình tạo ra các sự kiện và các thành phần xử lý dữ liệu, hình ảnh, video, âm thanh, v.v. có thể được xem như các quá trình đó. Một bộ mã hóa entropy thuần túy là bước cuối cùng của một đường ống nén dữ liệu. Không có bước nào trong đường ống thực sự "giảm entropy". Thay vào đó, mỗi người trong số họ tạo ra các hướng dẫn cho một máy có thể tái tạo luồng biểu tượng ban đầu. Và mỗi luồng lệnh có một entropy khác nhau và thường có độ dài khác nhau (tức là ngắn hơn).
piiperi

12

Không, nếu thuật toán là lossless, không có bước nào trong chuỗi nén có thể làm giảm entropy của nó - nếu không nó sẽ không thể được giải nén / giải mã. Tuy nhiên, entropy bổ sung có thể được lưu trữ trong thông tin 'ngoài băng' - chẳng hạn như danh sách cần được duy trì để giải mã biến đổi di chuyển về phía trước.


Vì vậy, các bước bổ sung được sử dụng trong các thuật toán nén trước khi mã hóa entropy chỉ được sử dụng để cho phép bộ mã hóa entropy đến gần hơn với entropy? Có phải một lập trình viên entropy không tự mình đến gần với entropy khi áp dụng cho một thông điệp tùy ý?
robert

Thật vậy, nó không (tốt, tùy thuộc vào ý nghĩa chính xác của "đóng").
Grimmy

Các bước bổ sung cho phép bộ mã hóa entropy duy trì entropy của thông điệp gốc trong khi giảm thông tin thừa có hiệu quả hơn so với việc nó được áp dụng riêng. Cho dù bạn có áp dụng tiền xử lý hay không, entropy sẽ được giữ nguyên, nhưng nén sẽ kém hiệu quả hơn (bạn sẽ kết thúc bằng mã hóa kém hiệu quả hơn).
Luke Schwartzkopff

Không, biến đổi di chuyển về phía trước không xuất ra một danh sách riêng mà phải được chuyển đến bộ giải mã. Trừ khi bạn có nghĩa là danh sách ban đầu.
dùng253751

Aah, bạn nói đúng, đó không phải là ví dụ tốt nhất :)
Luke Schwartzkopff

6

Chúng làm giảm entropy rõ ràng vốn có trong cấu trúc của thông điệp ban đầu. Hay nói cách khác, họ điều chỉnh thông điệp để tận dụng điểm mạnh của các giai đoạn nén tiếp theo.

Một ví dụ đơn giản sẽ thay thế tên trong các thẻ kết thúc của xml bằng một ký hiệu đặc biệt. Bạn hoàn toàn có thể tạo lại xml gốc từ đó nhưng máy nén không phải bao gồm tên đầy đủ một lần nữa ở nơi đó.

Một ví dụ thực tế hơn là nén png. Máy nén entropy của nó là DEFLATE, là sự kết hợp của Lempel-Ziff và Huffman. Điều này có nghĩa là nó hoạt động tốt nhất với các giá trị và các mẫu lặp lại thường xuyên. Hầu hết các pixel liền kề có xu hướng là màu tương tự. Vì vậy, mỗi hàng được chỉ định một bộ lọc biến các giá trị pixel gốc thành mã hóa vi sai. Bằng cách này, các giá trị cuối cùng được mã hóa bởi DEFLATE gần như bằng 0. Trong trường hợp cực đoan, điều này sẽ biến một độ dốc mịn từ tất cả các giá trị khác nhau thành một giá trị trong toàn hàng mà phần LZ hoặc DEFLATE thực hiện rất nhanh.


Điều đó có nghĩa là entropy rõ ràng khác với nội dung thông tin thực tế của một tin nhắn? Làm thế nào là liên quan đến entropy thực tế của tin nhắn?
robert

với "entropy rõ ràng" Tôi có nghĩa là entropy mà mã hóa entropy có thể nén xuống. Bộ mã hóa khác nhau sẽ có các mẫu khác nhau mà họ tìm kiếm. Huffman làm tốt nhất khi một vài biểu tượng được sử dụng thường xuyên được sử dụng thường xuyên, lempel-ziff hoạt động tốt nhất khi các đoạn được lặp đi lặp lại, v.v.
ratchet freak

Nhưng thuật toán Lempel-Ziv không phải là thuật toán mã hóa entropy, phải không? Điều tôi không hiểu là tại sao chúng được sử dụng trước các bộ mã hóa entropy, ví dụ như LZMA, khi bộ mã hóa entropy tự nó có thể đã nén thông điệp xuống mức tối thiểu.
robert

1
@kutschkem Điều này có nghĩa là entropy không phải là thước đo tuyệt đối về nội dung thông tin của tin nhắn mà có liên quan đến những gì được định nghĩa là ký hiệu (ví dụ: một ký tự được coi là ký hiệu so với 1 bit được coi là ký hiệu)? Tôi nghĩ rằng điều đó sẽ giải thích những giả định của tôi sai ở đâu.
robert

1
@robert ... Mặc dù vậy, có một sự đánh đổi, đó là thông tin "ngoài băng" mà Luke đề cập trong câu trả lời của anh ấy, thường được thêm vào bởi các bước đó (bảng tra cứu để có thể giải mã thông tin được mã hóa). Vì vậy, sẽ không có nghĩa gì khi định nghĩa toàn bộ nội dung là một ký hiệu và mã hóa nó thành 0 bởi vì ở đâu đó thông tin phải được lưu trữ những gì 0 này mã hóa.
kutschkem

6

Các lập trình viên Entropy không nén thông điệp đến số bit tối thiểu cần thiết để thể hiện nó. Tôi biết thật hấp dẫn khi nghĩ như vậy, nhưng đó không phải là những gì họ làm. Họ không phải là phép thuật và họ không thể đạt được điều đó.

Thay vào đó, họ làm một cái gì đó ít ma thuật hơn - nhưng vẫn hữu ích. Giả sử tại thời điểm mà chúng ta biết rằng mỗi ký tự của tin nhắn được chọn độc lập với một số phân phối. Sau đó, có thể xây dựng một thuật toán nén không mất dữ liệu để nén tối ưu các thông điệp. Các thuật toán này được gọi là bộ mã hóa entropy.

Bây giờ tin nhắn thực sự thường không có tài sản độc lập đó. Chẳng hạn, nếu bạn thấy một chữ Q, có khả năng chữ cái tiếp theo là chữ U. V.v. Vẫn có thể áp dụng thuật toán mã hóa entropy cho một thông điệp thực, trong đó mỗi ký tự không được chọn độc lập với phần còn lại. Thuật toán sẽ vẫn không bị mất, nó vẫn có thể được sử dụng để nén và trong thực tế, nó vẫn sẽ thường rút ngắn độ dài của tin nhắn. Tuy nhiên, nó không rút ngắn nó đến độ dài tối thiểu có thể. Nó không nén tin nhắn đến một cái gì đó có độ dài bằng với entropy của tin nhắn; nó nén nó ít hơn thế

Một khi bạn nhận ra tính chất này của bộ mã hóa entropy, thì nghịch lý sẽ bay hơi.

Nói chung, bất kỳ bước mất mát nào cũng không bao giờ làm giảm entropy của tin nhắn. Tuy nhiên, nó có thể đưa thông điệp vào một hình thức trong đó một số thuật toán nén khác hiệu quả hơn, vì vậy nó vẫn có thể hữu ích (trung bình) trong thực tế.


2

Từ "Entropy" nếu thường được sử dụng một cách lỏng lẻo, để chỉ hai điều khác nhau:

  • "Tổng lượng thông tin" trong tin nhắn hoặc hệ thống

  • "Mật độ" thông tin, hoặc thông tin được đóng gói chặt chẽ như thế nào.

Trích dẫn của OP về mục nhập của Wikipedia cho https://en.wikipedia.org/wiki/Entropy_(inatures_theory) đề cập đến mục đầu tiên:

Shannon's entropy measures the information contained in a message

Nhưng (ít nhất là khi tôi viết bài này), cùng một bài viết bắt đầu bằng:

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

Vì vậy, một là một số tiền và một là một tỷ lệ (tương tự như khoảng cách so với tốc độ). Đôi khi chúng được gọi là thuộc tính "mở rộng" và "chuyên sâu" (xem https://en.wikipedia.org/wiki/Intensive_and_extensive_properIES#Extensive_properies ).

Một ví dụ kinh điển về sự khác biệt là tín hiệu đèn lồng nổi tiếng của Paul Revere: "một nếu bằng đường bộ và hai nếu bằng đường biển". 1 bit của tổng số thông tin (nếu chúng tôi bỏ qua trường hợp "không có gì nếu tôi chưa đến North Church"). Nếu Paul thêm một bộ đèn lồng khác vào mỗi cửa sổ của tòa nhà, đó sẽ là '' 'dự phòng' '': không có thêm thông tin, do đó, cùng một entropy "tổng" hoặc "rộng"; nhưng độ dài tin nhắn nhiều hơn, vì vậy entropy "chuyên sâu" thấp hơn nhiều.

Nếu anh ta bắt đầu theo cách đó nhưng thay đổi chỉ sử dụng một bộ đèn lồng, thì đó là "nén không mất mát" như trong câu hỏi của OP. Entropy "mở rộng" là như nhau, nhưng entropy "chuyên sâu" thì khác: Bởi vì số lượng đèn lồng trong cửa sổ thứ 2 tương quan nhiều với số lượng bạn đã thấy trong lần đầu tiên, thông điệp dư thừa có thể dự đoán được nhiều hơn, hoặc ít ngẫu nhiên hơn, vì vậy có entropy chuyên sâu thấp hơn nhiều.

Có hai điều quan trọng khác cần nhớ:

  • Đầu tiên, chúng ta thường không biết entropy "thực sự" của một hệ thống theo nghĩa nào đó. Một người ngoài cuộc ngây thơ không biết liệu "3 chiếc đèn lồng" sẽ là thông điệp khác nhau hay liệu các tín hiệu trong các cửa sổ khác nhau có dư thừa hay không. Nếu Paul biến việc đi xe của mình thành thói quen, chúng ta có thể đếm và xem liệu các cửa sổ có luôn khớp với nhau không. Nhưng có lẽ chúng ta đã không theo dõi đủ lâu để thấy các trường hợp ngoại lệ hiếm gặp (và có thể quan trọng!).

  • Thứ hai, nó quan trọng như thế nào bạn đo lường. Cân nhắc việc cố gắng ước tính mức độ được truyền đạt của mỗi chữ cái liên tiếp (đó là một tỷ lệ, vì vậy entropy "chuyên sâu", đôi khi còn được gọi là "entropy tương đối"):

    • Nếu bạn chỉ lưu ý rằng mọi người gửi văn bản xung quanh theo đơn vị 8 bit, "ước tính" đầu tiên của bạn có thể là 8 bit mỗi chữ cái.
    • Nếu bạn đếm số lượng chữ cái riêng biệt đang được sử dụng, bạn sẽ ước tính log2 (26) hoặc 4,7 bit cho mỗi chữ cái (cao hơn một chút nếu bạn xem xét khoảng trắng, trường hợp, v.v.).
    • Nếu bạn cho rằng "e" là đặt cược tốt hơn cho "chữ cái tiếp theo" so với "z", bạn sẽ đo tần số chữ cái và nhận được khoảng 4,14 (xem http://people.seas.harvard.edu/~jones/cscie129/ giấy tờ / stanford_info_apers / entropy_of_english_9.htm ).
    • Nếu bạn đếm các cặp chữ cái, bạn sẽ chọn các mẫu như "qu", "th", v.v. và nhận được khoảng 3,56.
    • Nếu bạn đếm chuỗi tối đa khoảng 5 chữ cái, bạn sẽ vẫn nhận được các giá trị thấp hơn và như một phần thưởng, bạn hoàn toàn có thể phân biệt được ngôn ngữ của con người trong văn bản).
    • Nếu bạn là người khó tính và thông minh như NG Burton và JCR Licklider trong "Những ràng buộc tầm xa trong cấu trúc thống kê của tiếng Anh in" (Tạp chí Tâm lý học Hoa Kỳ 68 (1955)), bạn có thể có được chuỗi 10, 0000 chữ cái liên tiếp và tìm một giá trị entropy khác.

Nhưng tất nhiên, các thông điệp có thể (và làm) có nhiều mẫu không được mô hình hóa bằng các phương thức n-gram như vậy, vì vậy entropy "thật" vẫn thấp hơn.

Nếu bạn mô hình hóa một nguồn vô hạn theo lý thuyết với phân phối mã thông báo Zipfian hoàn toàn ngẫu nhiên, bạn có thể tính toán entropy mở rộng và chuyên sâu mà nó sẽ có, điều này chỉ phụ thuộc vào số lượng mã thông báo riêng biệt có thể có. Đồ thị của mỗi loại entropy trông như thế nào khi số đó tăng lên, nằm trong [ http://www.derose.net/steve/writings/dissertation/Diss.0.html] . Hai người cư xử khá khác nhau:

Hy vọng rằng sẽ giúp hoặc ít nhất là thú vị ...


1

Tôi nghi ngờ từ ngữ trong Wikipedia tiếng Đức bị nhầm. Máy nén làm tăng entropy. Đó là để nói, không phải entropy tổng thể, mà là entropy trên mỗi bit : mật độ thông tin. Ví dụ, một số lược đồ mã hóa và từ điển chạy dài được áp dụng để ngưng tụ dữ liệu. Bây giờ cùng một thông tin được đóng gói thành ít bit hơn, vì vậy mỗi bit mang nhiều thông tin hơn. Mã Huffman tiếp theo thực hiện nhiều hơn một chút giống nhau; nó chỉ là một lớp nén khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.