寫給互聯網冬天裏程序員看的數據壓縮

原文地址:
http://blog.52sox.com/data-co...

網上戲說2018是互聯網的冬天,先有阿里、騰訊、華爲不擴招進行人員優化,後有美團、知乎裁人,好生熱鬧。不得不說,中國的經濟進入1個新的階段,用官方的話就是新生態,用百姓的話說就是,咱們告別了粗曠的放養,迎來了精耕細做的時代。
當咱們在爲互聯網冬天感到擔驚受怕的時候,前方傳來董小姐廠加薪的捷報。然而此次又是別人家的公司。 程序員

格力加薪

聽你說了大半天的話,就是爲了跟我說這些傷心的事情?若是內裏是這樣想的,那麼你能夠關閉你網頁上的標籤頁了。算法

適合讀者人羣

下面要說的內容,適合如下人羣:編程

  • 小白程序員,不管編程語言
  • 準備年後跳槽的程序員
  • 數據開發工程師
  • 數據算法工程師
  • 在校相關專業(數分、應用數學)大學生
  • 喜歡裝X的某些人

做爲已經入坑2家的數據人,只能從自身的經驗和發展路線來說述數據壓縮。下面咱們要準備開始上車了。編程語言

引言

在過去10多年裏,咱們見證通訊方式的變革,並且這一過程仍在持續。這一變革既包括因特網規模持續不斷的增加(從2M到100M帶寬的飛躍),也包括移動通訊的爆炸式發展(從2G到4G,以及即將商用的5G),還體如今視頻通訊重要性的不斷增長。而在這個革命的全部這些領域中,數據壓縮都是基礎支撐技術之一。
在2013年,大數據概念的提出,Hadoop打響了第一炮。而在2016年,咱們迎來大數據的元年。而2017年,迎來了人工智能AI元年。技術和工具的不斷推陳出新,咱們也在成長中老去。那麼,你可能會提出這樣的問題:工具

  • 爲何須要數據壓縮?
  • 瞭解數據壓縮有什麼好處?
  • 我工做都不涉及這部分,跟我講這個,你不是在浪費個人時間?

爲了回答這樣問題,咱們有必要先說下什麼是數據壓縮再回答這些問題也不遲。oop

什麼是數據壓縮

簡而言之,數據壓縮就是以緊湊方式表示信息的技術或科學。人們識別出數據中存在的結構特徵,並加以利用,生成這些緊湊表示方式。
說完了數據壓縮的概念,咱們將注意力回到以前的問題上,分別進行解釋。性能

爲何須要數據壓縮

之因此須要數據壓縮,是由於人們以數字形式生成和利用的信息愈來愈多。在大數據時代裏,咱們能夠說,當前咱們被大量的各類信息所包圍。好比在百度中輸入1個智能手環的搜索,而後你會在隔天發現各類智能手環的廣告。固然,這些精準的廣告營銷並無達到咱們的指望,至少如今看來還不夠智能。
而隨着須要傳輸、存儲的數據呈爆炸式增加,人們在致力於開發更好的傳輸與存儲技術方面取得很大的進步,可是取得的成果還不夠。相關技術也層次不窮,好比大數據處理中的Hadoop工具,關於Hadoop及其生態圈,能夠參見
根據帕金森第一法則的推論,對大容量存儲與傳輸能力需求的增加,至少是存儲與傳輸能力增加速度的2倍。而在有些狀況下,存儲與傳輸能力並無顯著的提升,好比經過無線電波傳送的信息量會受到大氣特性的限制。
而經過數據壓縮,咱們能夠提升其傳輸能力,下降存儲的空間。學習

瞭解數據壓縮有什麼好處

說了大白天的數據壓縮的問題,你尚未告訴咱們瞭解或學習數據壓縮到底有什麼用。
學習數據壓縮並不必定能讓你拿高薪,也不必定能讓你找到新的崗位,可是可讓你具有必定的數據思惟的基礎。至少,在實踐中會懂得應用,並選擇合適的方案。
切記,數據壓縮只是基礎,所謂基礎就是沒有它,你的上層建築是無法構建起來的。大數據

對持有浪費時間觀念的辯訴

這個時候,有人會說,你真是浪費個人時間。個人工做又不涉及這部份內容,跟我嘮叨這東西幹嗎?
若是你是這樣的觀點,那麼你不妨問下你本身,你平時是否是不聽歌、看電影?而這些都與JPEG、MP三、H.264標準息息相關。優化

數據壓縮真的有那麼重要

而學習數據壓縮,只是1種擴展你技術的1種選擇,好比選擇合適的方案解決工程問題。固然,若是你已經厲害到能夠設計出合理的數據壓縮方案,你也能夠選擇自助創業。

圖鴨科技

在互聯網冬天,有1家科技公司近期完成了數千萬的A輪融資。若是你對圖像處理領域有所瞭解的話,就會發現實際上就是AI+DSP的模式,並不算多大的事情。
固然這也是別人家公司的事情,該幹嗎幹嗎。
說了這麼多,若是你以爲沒有什麼看點,那麼能夠直接關閉標籤頁了。若是沒有,咱們就繼續把。

數據壓縮的方式

在數據壓縮的早期,1個典型的例子就是是摩爾斯電碼的使用,它經過對電報發送的字符以點和划來編碼。經過統計發現,某些字符的出現頻率要高於其餘字符,因而爲出現頻率較高的字符分配較短的序列,從而減小發送1條消息所須要的平均時間。其中,霍夫曼(Huffman)編碼就是利用思想。
咱們能夠經過許多不一樣類型的結構來實現壓縮,而不只僅侷限於利用統計其結構來進行壓縮。
在不一樣類型的數據中,存在許多其餘類型的結構能夠爲壓縮技術所用。例如,在語音中,咱們在說話時,喉部的物理構造決定了所能發出的聲音。換句話說,產生語音的力學特徵使語音具備了某種結構。所以,咱們能夠不直接傳送語音自己,而是傳送喉部構造的相關信息,而接收器利用這些信息來合成語音。這樣,咱們只須要不多的數據就能表示足夠的喉部結構信息,從而實現壓縮。而這就是壓縮方法早期版本中的聲碼器。
除了對數據的結構的利用外,咱們還能夠對數據的一些特性入手。好比,在許多時候,好比傳送或存儲語音和圖像時,這些數據最終是由人來體驗的,而人的感知能力是有限的。對於這些數據中表示的一些內容沒法被用戶感知,那麼就能夠將沒有必要保留這些信息。咱們經過利用人類的知覺侷限,經過丟棄一些不相干的信息來實現壓縮。
在開始研究數據壓縮技術以前,咱們先對這一領域做一總體概述。

什麼是壓縮技術

對於數據壓縮而言,咱們須要先設計出對應的算法及方案。
壓縮技術或壓縮算法實際上指的是以下的2種算法組成的:

  • 壓縮算法,取得輸入X,生成1種須要較少二進位的表示Xc
  • 重構算法,對壓縮後的表示Xc執行操做,生成重構結果y

這些操做的示意圖以下圖所示:

數據壓縮

咱們沿循慣例,將壓縮算法和重構算法結合在一塊兒,稱爲壓縮算法。
而根據重構需求,咱們能夠將數據壓縮劃分爲2大類:

  • 無損壓縮,重構結果y和X相同
  • 有損壓縮,實現的壓縮比一般高於無損壓縮,但重構結果y可能與X不一樣

無損壓縮

在無損壓縮技術中,不容許存在信息的損失,該技術一般用於一些不容許原數據與重構數據之間存在任何差異的應用中,其中以文本壓縮做爲表明。
對於文本壓縮而言,若是壓縮後的文本與原文不一致,可能會形成語義的謬以千里。

有損壓縮

有損壓縮技術會形成一些信息損失,採用該技術壓縮後的數據一般不能再準確還原或重構。可是,若是能夠接受重構結果中存在的這種失真,那麼它所實現的壓縮比一般要比無損壓縮高的多。
而在設計出1種數據壓縮方案以後,咱們還須要可以測量它的性能。而數據壓縮的應用領域多種多樣,因此用於描述和測量壓縮性能的術語也有所不一樣。

性能的測量

咱們能夠用多種方式來評估一種壓縮算法,咱們能夠從以下一些方面進行測量:

  • 算法的相對複雜度
  • 算法在給定計算機上的運行速度
  • 壓縮量
  • 重構結果與原數據之間的相似程度

經常使用的指標有:

  • 壓縮比
  • 速率

建模與編碼

而對重構結果的要求可能直接決定了應當採用有損仍是無損壓縮方案,但具體使用哪1種壓縮方案,則可能須要許多不一樣因素來決定。其中最重要的一些因素就是待壓縮數據的特性。好比,1種可以有效壓縮文本的技術,不必定能一樣有效地壓縮圖像。
而要針對特定數據開發數據壓縮算法,咱們能夠分爲2個階段來進行:

  • 建模
  • 編碼

在第1階段,咱們一般稱之爲建模,咱們嘗試瞭解數據中存在的冗餘狀況,並用1個模型來描述這種冗餘。而第2階段,咱們經過編碼的方式來描述這個模型,描述數據與模型之間的差異。而數據與模型之間的差異一般稱爲殘差。
好比在前面的摩爾斯電碼中,咱們先經過統計的方式瞭解到某個字符的頻率比其餘的字符高,這就是1個建模的過程。而使用較短序列分配給較高頻率的字符,就是1種編碼方式。

結語

在數據壓縮中,咱們有許多不一樣方法來描述數據的特徵,而不一樣的特徵描述方式能夠獲得不一樣的壓縮方案。

參考書籍:

《Introduction to Data Compression,Fourth Edition》P1-8
相關文章
相關標籤/搜索