[譯者注:本文原作者提出的三個資料壓縮方面有些讓人腦洞大開的感覺,如果對資料壓縮原理很有興趣的同學,建議看看這篇文章。]
Rich Geldreich 是我一個很厲害的同事,最近發表了一篇很有意思的文章,闡述了他對未來無失真壓縮技術的看法和見解。然後,我自己有些按捺不住了,也想談談我的看法~~ (嘿嘿,這正是網際網路的魅力,不是麼?)
在我看來,目前資料壓縮領域比較熱點研究點有兩大塊:
第一大塊是找編解碼效能和資料壓縮比的平衡點(比如LZHAM、Brotli、LZFSE這些壓縮演算法)。從實用角度看,這個出發點毫無疑問是沒問題的。而且我認為這正是資料壓縮系統的價值所在,所以,往這個方向努力的確是正確的。
第二大塊是嘗試將神經網路理論用在資料壓縮領域中。當然,像ZPAQ[譯者注:一種非常適合用來做增量壓縮備份的壓縮工具,官網]和其他的基於Context Mixing的編碼演算法並不適合開發人員做一些日常的壓縮操作(主要是因為需要較大的記憶體和較長的執行時間),但在壓縮比方面,這些壓縮演算法卻代表著最前沿的技術。他們的原理就是隻要提供足夠多統計模型,Context Mixing演算法就可以取得相當不錯的壓縮比。
(這是圖的下標題)看到top15的大文字資料壓縮工具都是基於Context Mixing演算法的,而基於BWT的只能排進前20,是不是感到有些驚豔啊? [譯者注:BWT基本原理是將字串變成字元矩陣,然後對字元矩陣進行進行排序和變換,也是資料壓縮領域的一個熱點]
總而言之,目前在資料壓縮領域的所有大動作都是針對我們已知的東西。基本上都是結合資料轉換、基於統計特徵的編碼,以及 context mixing 演算法去獲得更好的結果
但是這些都沒有戳中我的要點。
首先要承認所有這些工作都很棒,但是現在貌似有慢慢迷失資料壓縮演算法根本目標的趨勢。有人說只要做到了某個程度就意味著壓縮的問題被解決了,對於這種說法我是不買賬的。最近已經關注了很多很多這方面的研究點(可能太多了),越看越感覺我們離“問題被解決”的程度還差很遠很遠:資料壓縮領域還有很多大坑需要我們去填。
也許我馬上列出的部分點有些太過於理論以至於根本不現實,甚或是看上去有些瘋狂。但他們確實是我們現在的資訊理論和資料壓縮領域需要被關注的。
1 排列帶來的難題
現代資料壓縮理論是圍繞統計特徵來設計的,真的追溯起來估計有200年的歷史了。這麼多年下來,我們都沒有另闢蹊徑,提出一個新概念的。更糟糕的是,我們的思維都被固化在這上面了。
想想看,根據現代資料壓縮理論,一般認為一旦統計資訊被提取出來,我們根本沒辦法進行進一步壓縮了。基本上就意味著,一旦我們完成了統計特徵提取,這條路就走到頭了。這種觀點恰恰正是我們最大的死穴。
看看這個經典的排列 [5, 7, 1, 4, 6, 3, 2, 0] 。根據資訊理論,這個排列是不可壓縮的:因為每個符號都出現了,而且沒有重複出現的。從統計特徵的角度看,我們只能做到這一步了。
一個排列,以及它的一種迴圈表示方法
像這樣的排列,基於統計的編碼演算法(霍夫曼編碼, arithmetic【譯者注:這裡不是算術的意思,是一種壓縮編碼演算法】 , ANS) 都無能為力了。亦或者是更高層的資料轉換演算法也不行,比如LZ,BWT和RLE。 Delta壓縮可能會表現好一些,但是實際應用中效果並不明顯。針對二進位制的Context Mixing可能表現會更好一些,前提是能將更長的bit序列對映到特定模式。
但基本上,我們現在所有資料壓縮的理論模型遇到這樣的排列時,都沒能有更大作為。這方面的困難性導致幾乎沒人在研究它。
我可以很肯定的說,沒人真的在乎這個課題,我的意思是想要在這樣的排列面前取得突破性進展的概率非常非常低,所以大部分研究者都不會考慮這個問題。但在我看來,真的很奇怪,像排列這麼簡單的一個概念居然會對我們現有的資料壓縮領域會有這麼大的困難。
2 為什麼沒有更多類似於BWT的演算法?
不知道為什麼,我們現有的壓縮體系大多數都被限定在了線性資料上。準確說來,所有壓縮演算法是在考慮以某種形式將資訊的上下文組織起來,然後用這種組織方式來實現壓縮,沒有人真正考慮將資料流中的資料打亂的。
導致這一現象的原因是對順序的編碼是很困難的,需要額外的資料來支撐。意思就是如果我可以將要壓縮的資料先排好序,那麼所有演算法都取得更好的壓縮率。但是怎麼將排序好的資料給恢復回去需要大量的資料來做輔助。而這些輔助資料就是上一小節中提到的經典排列(我們已經知道它有多難壓縮了)。
BWT是目前最適用於人類基因組資訊的壓縮演算法
我就是很奇怪為什麼沒有更多類似於BWT的演算法。在字母排列領域,只有BWT獨家一份。當然,也有少許演算法對它做了一些修改,但是沒有像LZ演算法那樣有90個變體。有沒有其他對排序轉換的演算法呢?
坦白來說,這方面的多樣性缺失是有它的道理的,連BWT的作者自己都說不清他們是如何找到這個演算法的,所以我們也不能期望隨便冒出來個工程師在未做大量嘗試的情況下就能提出個類似的演算法。
但是我的重點是,像這種型別的演算法,不該只有BWT獨家一份。就像有那麼一句話說的:“無獨有偶”,只是我們還沒有發現罷了。
3 柯氏複雜性
[譯者注:柯氏複雜性是一種衡量想要表達一個序列的複雜度的指標,這句話有點拗口,有興趣的同學自行百度一下,想要更加深入瞭解的可以看看文章開頭我給出的那篇文章]
熵不是一種很好的衡量手段,看看[0,1,2,3]和[0,3,1,2]這兩個序列,他們的熵值一樣,但是很明顯我們可以看到其中有一個可以有更短的表示形式。
柯氏複雜性是個很有意思的衡量指標,簡單來說,它是用來衡量你的資料有多大,可以用多大的程式來生成你需要的資料。這對於資料壓縮領域來說是個新方向:怎麼把這個思想用到資料流中,進而用到資料壓縮演算法中?
上圖完全是由Fractal演算法生成的,生成這個圖片的程式非常非常小,比最好的
這是一個完全未被探索過的空間,只要我們能將資料塊分割中多個部分,每個部分都可以用一個很小的程式來生成,那麼所有程式的大小將比原來資料的體積小很多。但我估計這個想法有些過於科幻,就我所知的現有計算機能力而言,我不確定是不是能完成這樣的任務。不過,不管怎樣,這個想法還是挺激動人心的。
我們的路還很長
這三個問題告訴我們,資料壓縮領域還沒有達到“問題被解決”的程度,我們只是關注我們能做哪些事情,而不是這件事情本身有多少種可能性。事實上是還有很多需要探索的地方。資訊理論知識理論而已,離真理還差很遠。
而且,就像別人說的那樣,理論就是用來被突破的。
打賞支援我翻譯更多好文章,謝謝!
打賞譯者
打賞支援我翻譯更多好文章,謝謝!
任選一種支付方式