Loading AI tools
来自维基百科,自由的百科全书
向量量化(英語:Vector quantization)是一個在訊號處理中的一個量化(离散化)方法。其為藉由樣本向量(prototype vector)的訓練來估算密度機率函數,並藉由此密度函數推估最有效的量化方案。此技術原用於資料壓縮,透過分割大數量的資料點(函數),讓每個小群集都有相同的資料點,而這些小群集的所有資料就由其正中央的點作為代表,這點與k-平均演算法以及其他群集分析的特性相當。 向量量化所使用的密度分佈法的優勢在於,此種壓縮法對於高機率出現(密集)的資料誤差小,而對低機率(稀疏)的資料誤差大,故特別適用於大量且高維度的向量破壞性資料壓縮。 向量量化是競逐式學習的一種技巧,故與深度學習的自編碼器其中使用的自組織對應以及稀疏神經編碼有關係。
向量量化其實就是找附近既定的點,來當作一個區間的代表,從而簡化資料量。參見下圖,在-1到1的數值都會近似為0,在1到3的數值都會近似為2,以此類推,這些數值都會以0, 2, 4, 6的整數表示出來,以二進位編碼可以用二位元表示之,從而壓縮了資料。然而,若是資料並非平均分散在-1到7之間,而是有疏密分佈,這樣的話把量化點取在0, 2, 4, 6便會造成誤差變大。為了要求失真達到最低,需要一個可以計算出使失真最小的少數代表向量(碼向量),這組碼向量稱之為編碼簿(codebook)。
為了要產生量化的編碼簿,需要以下是先定義及給定的資料:
而計算的目的,就是為了尋找具有最小誤差的編碼簿,以二維的向量為例,如下圖,便是尋找那些紅色星星(編碼)與畫分空間的方法(藍色線段)。假設給定的向量樣本共有M個,每個的維度皆是k維,這些向量可以表示如下:
而要對應過去的目標向量,也就是編碼簿,假定編碼簿大小為N,也就是將劃分為N個區塊,同樣可以表示如下:
每個編碼簿裡的碼向量都有一個對應的區塊, 只要落在區塊內,就會透過向量量化對應到。整個空間以表示,表示分割的子空間,對應函數為,這樣的映射表示如下:
經過映射後產生的與原本的之間存在一個非負值的誤差,計為,這個誤差便是前述的誤差測量方法算出來的值。將所有d的加總寫為,為求表示簡便,這裡使用最常見且最廣用的平方誤差做為範例:
當然誤差的計算可以隨時更換,如增加權重、使用其他範數(norm)等等。這些誤差測量的方法的共通點為,他們的計算都是從誤差向量出發的,故這些誤差均可表示成此誤差向量的函數。而更複雜的誤差計算方法同樣的在其他資料壓縮領域有被使用,例如語音訊號處理等。
經過以上的步驟,向量量化的問題可以寫為:
給定向量樣本及編碼簿大小,找到使平均誤差最小的編碼簿及空間劃分。
上述使誤差最小的映射函數,意即編碼簿,需要透過樣本向量的訓練最佳化。基本的步驟如下:
為了確保所有在編碼簿裡面的量化向量都使用到,可以增設一個敏感度參數,訓練步驟如下:
上述的步驟需搭配疊代門檻使解答收斂,如模擬退火法。
實際上的向量量化演算法首先在1980由Y. Linde, A. Buzo, R. M. Gray 三位學者提出的[1],現在被稱為LBG演算法。此演算法與k-means演算法雷同,內容為不斷調整映射範圍及量化向量位置,使誤差趨近於區域最小值。其疊代步驟如下:
LBG演算法十分依賴起始編碼簿,產生起始編碼簿的方法有以下幾種:
隨機挑選要求數量的碼向量作為起始編碼簿
向量量化常使用在有損資料壓縮,這個方法可以將多為度的向量空間壓縮至有限的離散子空間,向量維度同時被降低(僅需索引),減少儲存空間,因而壓縮了資料。因為此方法會隨著資料密度分佈的變化影響權重,其壓縮的失真比例會隨著資料密度成反比。其具有簡單的解碼方式,僅須透過索引進行查表(Table lookup)即完成解碼。壓縮程度亦高,有較低的位元率。
編碼簿設計與壓縮需要耗費較多的時間,多數花費在尋找最近的碼向量以及計算向量距離;且壓縮後的影像品質與編碼本的好壞關聯度大,針對擁有不同統計特性的訊號,往往需要設計不同的編碼簿,才能夠實際使用上。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.