機器之心原創,做者:仵冀穎,編輯:Hao Wang。算法
在網絡帶寬有限的年代,數據壓縮顯得尤其難得。還記得美劇硅谷第一季裏面大殺四方的數據壓縮算法讓 pied piper 公司煊赫一時。高效的數據壓縮使得大型網絡應用可以在移動端成爲可能,其前景很是誘人。大數據時代的來臨,數據的體量和數據的增加速度都達到了一個史無前例的高度。隨着 5G 技術的快速發展,邊緣計算、物聯網、聯邦學習等應用需求及應用場景愈來愈多。在傳輸網絡和存儲能力有限的狀況下,數據壓縮技術發揮了愈來愈重要的做用。在傳統數據壓縮算法不斷髮展的同時,近年來深度學習網絡也應用於數據壓縮中得到了很好的效果。網絡
一、數據壓縮背景知識數據結構
咱們在平常中常常用到的數據壓縮的工具基本都是上述幾種經典方法的變種、組合或優化,不多有單獨使用某一種技術。例如,gzip 的壓縮原理是:先使用 LZ77 算法的一個變種進行壓縮,對獲得的結果再使用靜態或動態哈夫曼編碼的方法進行壓縮;bzip2 的壓縮原理爲:使用了一個遊程編碼器進行編碼,接下來塊排序壓縮和 Move-to-Front(MTF ) 變換進一步產生大量相同符號,進一步使用另外一個遊程編碼器進行編碼。最後結果用 Huffman 編碼,將一個消息頭與其打包;LZMA 是 Deflate 和 LZ77 算法改良和優化後的壓縮算法,而 Deflate 則是同時使用了 LZ77 算法與哈夫曼編碼的一個無損數據壓縮算法。可是,面對大數據時代的數據處理,傳統的數據壓縮方法顯得愈來愈力不從心,沒法知足大致量、快速增加和結構複雜等特徵的數據壓縮,尤爲是實時數據壓縮的處理要求。併發
近年來,機器學習領域經歷了爆炸式的發展,一些研究人員使用傳統神經網絡模型在數據壓縮領域得到了較好的效果。將原始圖像經由神經網絡處理後,僅需存儲神經網絡權重而無需存儲圖像自己的信息,從而在不下降圖像質量的狀況下得到了較高的壓縮比。以此爲基礎,將神經網絡與其它壓縮技術結合、改進神經網絡結構、改進神經網絡的訓練算法等,進一步推動了神經網絡在數據壓縮中的應用。可是,神經網絡是淺層網絡,模型的收斂速度、穩定性、權值更新的有效性等都存在不足,此外,神經網絡依賴於有標籤的預訓練數據,這在實際應用場景中很難知足。
app
二、基於深度學習的數據壓縮
框架
深度學習的引入有效解決了傳統方法存在的問題。與傳統壓縮技術相比,基於深度學習的方法具備下列的自然優點:
less
因爲深度學習的參數是基於大量實際數據推導出來的,而傳統的數據壓縮編碼方法主要是基於先驗知識手工構建的,所以深度學習的優良內容自適應性優於基於信號處理的模型。dom
深度學習的方法有效利用了較大的接受域 (Receptive Field),所以不但能利用相鄰的信息還能夠利用遠距離的樣本提升編碼效率,但傳統的編碼工具只利用相鄰的樣本,難以利用遠距離的樣本。機器學習
基於深度學習的壓縮方法是靈活的,能夠根據特定的域特徵進一步減小比特率,同時實現快速處理,深度學習的內部表示適合於現代數據處理。ide
與傳統神經網絡壓縮技術相比,基於深度學習的方法優點在於:(1)基於多層網絡結構,深度學習模型具備較好的非線性映射能力,所以能有利於學習到數據(特別是圖像)的深層次特徵。(2)深度學習模型經過多層學習和權值微調的過程,提升了訓練速度,從而能知足大致量數據壓縮的要求。(3)更深的學習層次可以更加有效的去除掉冗餘數據特徵,從而得到更高的壓縮比。
到目前爲止,隨機神經網絡(Random Neural Network)、卷積神經網絡(Convolutional Neural Network,CNN)、遞歸神經網絡(Recurrent Neural Networks,RNN)、生成對抗網絡(Generative Adversarial Networks,GAN)、變分自動編碼器((Variational) Auto-Encoder,VAE)等都陸續應用到了數據壓縮中。本文從近兩年重要學術會議的研究成果中選擇了基於 GAN 和 VAE 的兩種深度學習數據壓縮技術進行分析與討論。
1. GAN 在有損壓縮中的應用
這篇文章提出了一種分佈保持的有損壓縮系統(Distribution-Preserving Lossy Compression,DPLC)。該系統應用於圖像壓縮場景,在不一樣的壓縮比率下編碼器可以生成與原始數據分佈一致的編碼,其解碼器則以零比特率生成獨立同分布樣本,而後隨着比特率的增長逐漸產生包含更多原始圖像內容的重構,最終在足夠高的比特率狀況下實現完美的重建。
對於隨機變量 X,令 P_X 表示 X 的分佈,E_X[X] 表示指望。W~P_X 表示 W 聽從 P_X 的分佈,X~Y 表示 X 和 Y 爲同分布的。在標準的有損壓縮系統中,編碼器的任務是生成編碼 E: X→W,從而將原始輸入編碼爲 R 比特的碼,解碼器的任務是將碼映射回原始空間 D: W→X,同時最小化某些失真度量 d:XxX,任務目標函數表示爲:
在傳統壓縮方法中,E 和 D 具備典型肯定性,所以不一樣的重構輸入的數量 X^:=D(E(x)) 由 2^R 限定,這就致使重建的 X^會出現降質的問題,例如引發圖像的模糊、模塊化等。爲了解決這一問題,須要向目標函數中增長一個約束項,即「重構實例的分佈遵循訓練數據的分佈」:
增長這一約束項至關於學習了 R=0 時通常未知分佈 P_X 的精確生成模型,考慮到生成模型,天然地咱們就想到了引入 GAN。爲了減小上式的鬆弛對平均值問題的誤差,將 D 分解爲 D=G o B,其中 G 爲生成模型(從固定的先驗分佈 P_Z 中提取樣本做爲輸入,訓練以最小化 P_G(Z) 和 P_X 之間的差別),B 爲隨機函數(與原目標函數 E 一塊兒訓練以最小化固定值 G 的失真)。瓦瑟斯坦距離(Wasserstein Distance)能夠被定義爲任意的運輸成本函數,所以適用於本文對於量化重建質量的失真度量 D。對於隨機變量 X 和 Y,Wasserstein 距離爲:
壓縮過程爲了從原始數據中學習 G、B 和 E,將每一個份量參數化爲深度神經網絡,並經過隨機梯度降低(SGD)求解相應的優化問題。如前所述,G*能夠經過 WGAN 或 WAE 學習。因爲 WAE 框架天然的包含了一個編碼器,它能保證潛在空間 Z 的結構易於編碼,而使用 WGAN 則不具備這樣的特性。在本文的實驗中,咱們觀察到使用 WAE 的圖像中邊緣的銳化程度弱於 WGAN。另外一方面,因爲 WAE 目標因爲重建偏差項而嚴重懲罰了模式丟失,所以 WAE 比 WGAN 更不容易發生模式丟失。爲告終合這兩種方法的優勢,咱們經過 Wd 的凸組合,提出了 Wd 的原形式和對偶形式的新的優化組合:
基於 G(Z) 或 G(F(X) 的僞樣本訓練 f,因爲 F(X) 和 P_Z 之間的不匹配(在優化過程開始時更爲明顯),這些樣本通常不會遵循相同的分佈。所以須要作下面的調整:
基於 G(Z.~) 的樣本訓練 f,其中 Z.~=UZ+(1-U)F(X),U~Uniform(0,1)。
基於 F(X) 中的樣本訓練 G,計算 WGAN 和 WAE 的損失項。
本文在兩個標準的生成性建模基準圖像數據集上完成實驗,CelebA 和 LSUN 臥室,其中圖像都縮小到 64x64 分辨率。圖 2 給出了不一樣方法的測試 MSE(越小越好)、重建 FID(越小越好)和條件像素方差 PV(越大越好)。CelebA 的結果顯示在最上面一行,LSUN 臥室的結果顯示在最下面一行。本文提出的 DPLC 模型的 PV 隨着速率的下降而穩定地增長,也就是說,它們生成的有效圖像內容逐漸多於 GC。
2. VAE 在無損壓縮中的應用:
論文標題:Bit-Swap: Recursive Bits-Back Coding for Lossless Compression with Hierarchical Latent Variables, ICML2019
地址:https://arxiv.org/abs/1905.06845
給定離散原始數據 x = (x1,..., xD),其分佈表示爲 p_data,基於機率似然性設計的 ANS 無損壓縮機制爲:使用機率 p_θ(x),當其碼長知足-log p_θ(x)=-log p_data(x) 時,獲得的平均碼長 E[-log p_θ(x)] 接近數據 H(x) 的熵,即獲得最優壓縮方案的平均碼長。ANS 使用一元機率分佈或徹底分解機率分佈 p(x) 來編碼原始符號向量 x,從而產生-log p(x) 比特位。ANS 算法的狀態是具備堆棧結構的比特流:每次編碼符號時,其比特位都被推到堆棧的最右側;每次解碼符號時,比特位都從堆棧的最右側彈出。圖 3 給出 ANS 的工做機制。
本文使用潛在變量模型計算原始數據 p_data(x) 的近似邊緣分佈 p_θ(x):
其中 z 爲潛在變量。VAE 引入推理模型 q_θ(z|x) 來逼近模型後驗機率 p_θ(z|x):
編碼端的處理流程以下:
發送者發送一個使用先驗 p(z) 和 x 進行編碼獲得的潛在樣本 z~q_θ(z|x),使用 p_θ(x|z) 進行編碼;
使用 q_θ(z|x) 從比特流中解碼獲得 z,以後從比特流中減去-log q_θ(z|x) 長度的比特位;
使用 p_θ(x|z) 對 x 進行編碼,向比特流中增長-log p_θ(x|z) 長度的比特位;
使用 p(z) 對 x 進行編碼,向比特流中增長-log p_(z) 長度的比特位;
最終獲得了一個長度爲 N_total:=N_init+log q_θ(z|x)-log p_θ(x|z)-log p_(z) 比特位的比特流,併發送給接收端。
當模型具備許多潛在變量時,在傳遞初始比特流 N_init 時就會帶來效率問題(這也是深度學習大量參數所帶來的問題)。爲解決這一問題,本文使用層次潛在變量模型,即具備多個潛在變量且其採樣過程服從形式的馬爾可夫鏈的 VAE,如圖 4:
此時近似邊緣分佈 p_θ(x) 爲:
爲每一個隱層 z_i 定義推理模型 q_θ(z_i|z_(i-1)),這樣能夠基於變分界限計算邊緣機率 p_θ(x),此時 ELBO 目標函數爲:
在本文提出的 Bit-Swap 模型中,生成模型和推理模型的採樣過程都服從隨機變量之間的馬爾可夫鏈依賴關係。與標準 VAE 的處理相似,數據 x 是根據潛在變量 z_1 生成的。然而,z_1 再也不是固定的先驗值,而是由第二個潛在變量 z_2 生成的。相似的,z_2 也不是固定先驗值,而是由第三個潛在變量 z_3 生成的,依此類推。這些嵌套依賴項使咱們可以遞歸地應用 bits back 參數。咱們能夠對第一個潛在變量應用 bits back 參數的前兩個步驟:首先解碼 z_1,而後直接編碼 x,這將向比特流中添加新的比特位,z_2,L 的進一步解碼操做將須要較少的初始比特來繼續。以相似的方式遞歸地應用第二個潛在變量 z_2 的 bits back 參數:首先解碼 z_2,而後編碼 z_1。Bit-Swap 所需的初始位的數量上限爲:
本文提出的 Bit-Swap 數據壓縮算法完整的算法以下:
以三個隱藏層爲例,Bit-Swap 的過程如圖 5 所示。
本文在 ImageNet 的 32×32 像素隨機塊上訓練分層潛變量模型。爲了測試,獨立於測試集拍攝了 100 幅圖像。100 幅圖像的壓縮比見表 1。這 100 幅圖像被裁剪成每邊 32 像素的倍數,這樣就能夠用 32 個像素塊來擬合一個網格。網格被視爲一個數據集,必須按順序處理才能被壓縮。做者在基線方案中使用相同的裁剪圖像,而不是先將圖像分紅 32 x 32 像素的塊。
關於深度學習在數據壓縮中的應用,做者單獨創建了研究主頁,更新相關的研究成果並提供代碼、視頻下載等,感興趣的能夠訪問 https://bair.berkeley.edu/blog/2019/09/19/bit-swap/。
三、基於深度學習的數據壓縮應用前景展望
由上文的分析和具體論文實例的結果能夠看出,深度學習方法在處理數據壓縮問題時,再也不像傳統方法同樣嘗試找到數據自身的統計特徵、數值特徵等,而是自動挖掘複雜結構的數據內在特徵。深度學習的數據挖掘和重構能力使得其可以在保持數據特徵、保證編碼效果的同時得到較高的壓縮比。
儘管應用效果很好,但深度學習方法仍是存在自身侷限性:
當數據量大、數據結構複雜時,深度學習的總體結構也會變得很是複雜,當進行較深層次的訓練時,模型所須要的時間會急速增加。由本文選擇的兩篇實例能夠看到,做者在實驗中都將圖像進行了縮小處理,例如 32×3二、64x64 大小的圖片,做者也在討論中提到,若是使用原始大小的圖片,計算時間和成本都會很是巨大;
深度學習方法仍是缺乏對內在機理的分析,在不一樣的數據壓縮應用中仍是以「黑盒」的方式使用,主要方法就是經過調整訓練層、參數等改進壓縮效果。
正如深度學習在其它機器學習場景中應用的狀況,基於深度學習的數據壓縮得到了讓人驚喜的效果,但仍然存在一些問題。不斷提高的視頻清晰度碼率,對低延遲網絡無比依賴的應用程序,以及一衆 VR 和 AR 設備的投入使用,在這樣的背景下,數據壓縮仍然是須要長期投入研究的領域。深度學習研究和在工業場景中的應用任重而道遠。
做者介紹:仵冀穎,工學博士,畢業於北京交通大學,曾分別於香港中文大學和香港科技大學擔任助理研究員和研究助理,現從事電子政務領域信息化新技術研究工做。主要研究方向爲模式識別、計算機視覺,愛好科研,但願能保持學習、不斷進步。