Entropy

我可以僅通過壓縮來測量熵嗎?

  • September 14, 2020

假設我有一個包含英語單詞的文件。沒有意義的文字,只是重複了幾句話。原始大小為 1559454 字節,被某個程序壓縮為 75742 字節。(似乎是一個非常好的壓縮器。)我可以使用字節減少來估計生成此類文件的源的熵嗎?

我可以使用字節減少(壓縮源輸出時)估計生成此類文件的源的熵嗎?

,至少對於香農熵而言。熵是源的一個特徵,不能從源輸出的有限樣本中確定。如果沒有有關來源的資訊,甚至無法在實踐中對其進行估計,並且該問題沒有提供此類資訊。

我們能做的最好的事情是估計生成文件的源熵的合理上限: $ 75742/1559454 $ 每個輸出位的熵位。這不是數學上的確定性:從數學上講,完全隨機的源生成該文件是可能的(機率是 $ 2^{-8\times1559454}>0 $ )。這也不是一個實際的確定性,除非我們添加一個模糊的假設,即觀察到的特徵繼續存在:輸出由 $ 1559454 $ 固定字節後跟無限多個均勻隨機字節是一個來源 $ 1 $ 每個輸出位的熵位。

我們沒有比 $ 0 $ . 證明:任何無限期輸出的確定性程序都是零熵源。製作一個無限期地輸出一個序列的確定性程序是微不足道的 $ 1559454 $ 字節(也許,重複)。這不僅僅是理論上的:

  • 輸出由兩個字節的重複序列組成的程序a 產生的輸出首先 $ 1559454 $ bytes 匹配問題陳述,即使對於某些實際的壓縮器;比如說,一個永遠不會壓縮超過 20 倍的壓縮器(這對於例如音頻壓縮器來說是相當合理的)。
  • 即使我們限制在實際使用中可能合理出現的文件,完全有可能設計用於將文件混淆成英文單詞的程序,編寫為(基本且相當差的)隱寫術工具,其輸出與問題陳述相匹配(例如一個實際的文本壓縮器)當作為輸入時輸入一個大約的文件 $ 50000 $ 字節,包括它是否全為零。

結論:嘗試僅從其輸出來評估源的熵的實際程序注定最多只能給出該熵的合理上限(並且只能在測試的輸出具有代表性的假設下這樣做)。計算壓縮比就是這樣一種方法。

在這種情況下,壓縮將是測量熵的糟糕方法;壓縮文件會導致非英語結果,保證您的熵計算幾乎是無用的(儘管在技術上是正確的)。對於您的情況,更好的方法是對單詞的選擇進行一些數學運算。

通過壓縮計算熵適用於二進制數據,而不是文本。


  • 有多少個可能的詞可供選擇?

    • 更多可供選擇的詞將意味著更大的熵:詞比。
  • 他們是如何隨機選擇的?單詞選擇器是否具有近乎完美的隨機性?

    • 這個選擇器的熵將決定你的詞熵水平。這是引導您關注的部分。
  • 你有多少字?

    • 如果每個單詞都是從一組隨機選擇的 $ 256 $ 詞(具有完美熵),那麼每個詞對應於 $ 1 $ 隨機字節(8 位熵)。

由於英語有不同長度和結構的單詞,通過壓縮計算熵會導致結果不一致。但是,如果您想通過壓縮來測量它:


  • 您的結果將根據熵:字節比率,而不是熵:字比率。

    • 要糾正這個問題,請找到樣本中所有單詞的平均字節長度,然後將熵除以該平均值以獲得熵:單詞比率。
  • 某些單詞會更相似,因此希望壓縮器具有更少的熵。

    • 這是無法糾正的。您只能通過獲取更多不同數據的樣本將其過濾為“雜訊”。

    • 如果您的文件是恆定的(您正在測量特定文件,而不是隨機單詞生成器),這將永遠污染您的結果。但是,較大的文件會減少這種情況。

    • 英語語言本身的熵會影響你的結果。無論您採集多少樣本,情況都會如此。

      • 某些詞似乎比其他詞具有更少或更多的熵,而實際上,如果隨機選擇,每個詞都具有相同的熵。
      • 您的壓縮功能不知道這一點。
  • 更好的壓縮函式會帶來更好的結果

    • 使用壓縮來測量熵的想法是將數據與自身的“理想壓縮”版本進行比較。越接近理想壓縮效果越好。

    • 使用理想壓縮函式壓縮後,您可以將輸出大小除以輸入大小(這應該在 0.0 和 1.0 之間)。如果理想數據具有 1 位熵,那麼您測試的數據必須具有您之前得到的數字。

    • 如果壓縮不是理想的壓縮,實際上不是,您可以獲取壓縮數據的熵(這需要您知道壓縮數據的熵)並乘以之前的大小比率。

      • 或者,只是假設您的壓縮機是完美的並接受由此產生的不准確性。這可能更實用。

      • 您可以通過重複應用壓縮來估計壓縮數據的熵,直到獲得完美的熵(無壓縮)。然後只需乘以前面所述的尺寸比。

        • 這只有在壓縮函式可以有效地壓縮自己的輸出時才有效。
        • 在這種情況下,您最終會遞歸地測量熵。
  • 為了獲得最佳結果,您可以為您的特定數據製作壓縮函式。

    • 如果您有 65536 個字,則可以通過將每個字轉換為唯一的 16 位序列來獲得理想的壓縮。這僅適用於單詞數是 2 的冪。

      • 除非字數是 256 的冪,否則您必須能夠處理位長度數據而不是字節長度。這需要你的一些聰明才智。

      • 如果您想審核您的單詞選擇,則必須使用正常的壓縮函式對其進行壓縮(這將成為您測試熵的數據)。

        • 這可以消除與壓縮英語相關的許多偏見。
        • 在這種情況下,您最終會遞歸地測量熵。

如您所見,對您的單詞選擇進行一些數學運算可能會好得多。但是,如果您想知道單詞選擇器本身的熵,則別無選擇,只能使用壓縮。


最後一點:

  • 如果每個樣本都以相同的方式生成,則每個樣本將具有相等的熵。

    • 您的壓縮測試會不同意並說不同的樣本具有不同的熵。

    • 壓縮是估計熵的好方法,但它不能確定熵。

      • 您可以簡單地取多個樣本的平均值來找到每個樣本的實際熵。

引用自:https://crypto.stackexchange.com/questions/83884