匹配追蹤算法(MP)簡介


圖像的稀疏表征

分割原始圖像為若干個$$\sqrt{n} \times \sqrt{n}$$的塊. 這些圖像塊就是樣本集合中的單個樣本\(y = \mathbb{R}^n\). 在固定的字典上稀疏分解\(y\)后,得到一個稀疏向量. 將所有的樣本進行表征一戶,可得原始圖像的稀疏矩陣. 重建樣本\(y = \mathbb{R}^n\)時,通過原子集合即字典\(\mathrm{D} = \{d_i\}^k_{i=1} \in \mathbb{R}^{n \times m} (n < m)\)中少量元素進行線性組合即可:

\[y = \mathrm{D} x \]

其中,\(x = \{x_1, x_2, \cdots, x_m\} \in \mathbb{R}^m\)\(y\)\(\mathrm{D}\)上的分解系數,也稱為稀疏系數.

字典矩陣中的各個列向量被稱為原子(Atom). 當字典矩陣中的行數小於甚至遠小於列數時,即\(m \leqslant n​\),字典\(\mathrm{D}​\)是冗余的。所謂完備字典是指原子可以張成\(n​\)緯歐式空間\(y = \mathbb{R}^n​\). 如果在某一樣本在一過完備字典上稀疏分解所得的稀疏矩陣含有大量的零元素,那么該樣本就可以被稀疏表征,即具有稀疏性。一般用\(l_0​\)范數作為稀疏度量函數,圖像的稀疏表征數學模型如下:

\[\min\limits_x ||x||_0, \qquad \mathrm{s.t.} \; y= \mathrm{D} x \]

稀疏表征不僅具有過完備性,還應該具有稀疏性。對於一個過完備字典\(\mathrm{D}\),為了可以分解出更合適且稀疏的稀疏表征,應當含有更多的原子。

在稀疏表征理論方面的研究主要可分為兩個方面:字典的構建和稀疏編碼.

稀疏編碼的目標就是在滿足一定的稀疏條件下,通過優化目標函數,獲取信號的稀疏系數. 經典的算法有匹配追蹤(Matching Pursuit,MP)、正交匹配追蹤(Orthogonal Matching Pursuit,OMP)、基追蹤(Basis Pursuit,BP)算法等.

MP算法是稀疏表征中用於稀疏求解的最基本方法之一. 我在學習過程中參考網上一些資料,覺得大部分寫得比較理論化,看起來稍微吃力一些. 閱讀了Koredianto Usman的Introduction to Matching Pursuit(MP)一文,我覺得這篇文章寫得很不錯,從實例出發,很好接. 這篇博文是我對該文章翻譯的基礎上而寫的.

注:

  1. 原文中有一些小錯誤,我在譯文中進行了修改. 有對照原文閱讀的同學,若發現有不一致,請不要奇怪.
  2. 所有計算結果都保留兩位小數.

問題提出

考慮下面一個簡單例子:

給定稀疏信號 $$x=\begin{pmatrix}-1.2 \ 1 \ 0\end{pmatrix}$$

字典矩陣A為:$$\mathrm{A}=\begin{pmatrix}-0.707 & 0.8 & 0 \ 0.707 & 0.6 & -1\end{pmatrix}$$

(注:原文中稱\(\mathrm{A}\)為measurement matrix)

所以,\(y=\mathrm{A} \cdot x=\begin{pmatrix}1.65 \\ -0.25\end{pmatrix}\)

現在,給定\(y=\begin{pmatrix}1.65 \\ -0.25\end{pmatrix}\)\(\mathrm{A}=\begin{pmatrix}-0.707 & 0.8 & 0 \\ 0.707 & 0.6 & -1\end{pmatrix}\),

如何求得\(x\)呢?

匹配追蹤

在上面的列子中\(\rm{A}\)中的列向量稱之為Basis(基)或者Atoms(原子). 所以,我們有如下原子:

\[b_1=\begin{pmatrix}-0.707 \\ 0.707\end{pmatrix} \qquad b_2=\begin{pmatrix}0.8 \\ 0.6\end{pmatrix} \qquad b_3=\begin{pmatrix}0 \\ -1\end{pmatrix} \]

因為\(\rm{A} = \begin{bmatrix}b_1 & b_2 & b_3\end{bmatrix}\),如果我們令\(x = \begin{bmatrix}a & b & c\end{bmatrix}\),則\(\mathrm{A}\cdot x = a\cdot b_1 + b\cdot b_2 + c\cdot b_3\).

\(\mathrm{A}\cdot x\)是原子\(b_1\)\(b_2\)\(b_3\)的線性組合

\[\mathrm{A} \cdot x = \begin{pmatrix}-0.707 & 0.8 & 0 \\ 0.707 & 0.6 & -1\end{pmatrix} \cdot \begin{pmatrix}-1.2 \\ 1 \\ 0\end{pmatrix} = -1.2 \cdot \begin{pmatrix}-0.707 \\ 0.707\end{pmatrix} + 1 \cdot \begin{pmatrix}-0.8 \\ 0.6\end{pmatrix} + 0 \cdot \begin{pmatrix}0 \\ -1\end{pmatrix} = y = \begin{pmatrix}-1.65 \\ 0.25\end{pmatrix} \]

從上面的方程可以看出,\(b_1\)\(y\)值的貢獻最大,然后是\(b_2\),最后是\(b_3\). 匹配追蹤算法剛好逆方向進行計算:我們首先從\(b_1\)\(b_2\)\(b_3\)中選出對\(y\)值貢獻最大的,然后從差值(residual)中選出貢獻次大的,以此類推.

而貢獻值的計算通過內積(點積)進行計算,MP算法步驟如下:

  1. 選擇對\(y\)值貢獻最大的原子\(p_i=\max_j<b_j, y>\)
  2. 計算差值\(r_i = r_{i-1} - p_i \cdot <r_{i-1}, p_i>\) (注:該公式在原文中稍微有點問題,這里做了修正. 對於\(r_0=y\)
  3. 選擇剩余原子中與\(r_i\)內積最大的
  4. 重復步驟2和3,直到差值小於給定的閾值(稀疏度)

下面進行實例計算:

首先,分別計算\(y\)\(b_1\)\(b_2\)\(b_3\)的內積:

\[<y, b_1>=-1.34, \qquad <y, b_2>=1.17, \qquad <y, b_3>=0.25 \]

取絕對值以后,我們可以發現\(b_1\)\(y\)得到最大的內積值. 然后,在第一步中我們選擇\(b_1\). 接下來計算差值:

\(r_1 = y - b_1 \cdot <y, b_i> = \begin{pmatrix}1.65 \\ -0.25\end{pmatrix} - (-1.34) \cdot \begin{pmatrix}-0.707 \\ 0.707\end{pmatrix} = \begin{pmatrix}0.70 \\ 0.70\end{pmatrix}\)

接來下,計算差值和\(b_2\)\(b_3\)的內積:

\[<r_1, b2_>=0.98 \qquad <r_1, b_3>=-0.70 \]

取絕對值以后,\(b_2\)\(y\)值的貢獻最大。

接下來,計算差值\(r_2 = r_1 - b_2 \cdot <r_1, b_2> = \begin{pmatrix}0.7 \\ 0.7\end{pmatrix} - \begin{pmatrix}0.8 \\ 0.6\end{pmatrix} \cdot 0.98 = \begin{pmatrix}-0.08 \\ 0.11\end{pmatrix}\)

最后,計算\(r_2\)\(b_3\)的內積:\(<r_2, b_3>=-0.11\)

所以,最后的三個稀疏稀疏是\(\begin{pmatrix}-1.34 \\ 0.98 \\ -0.11\end{pmatrix}\)

這和准確的系數\(\begin{pmatrix}-1.2 \\ 1 \\ 0\end{pmatrix}\)很接近

反酸回去,和給定的\(y\)也很接近.

\[\mathrm{A} \cdot x = \begin{pmatrix}-0.707 & 0.8 & 0 \\ 0.707 & 0.6 & -1\end{pmatrix} \cdot \begin{pmatrix}-1.34 \\ 0.98 \\ -0.11\end{pmatrix} = \begin{pmatrix}1.73 \\ -0.25\end{pmatrix} \]

MP算法實質

從下面的圖,我們可以很清楚地看到MP算法的實質:就是利用原子向量的線性運算去逐漸去逼近信號向量,經過不停地迭代,最后達到給定的稀疏度.

匹配追蹤算法可以直接得到信號稀疏性的表達. 以貪婪迭代的方法選擇\(\mathrm{D}\)的列,使得在每次迭代的過程中所選擇的列與當前冗余向量最大程度的相關.

數學上對MP算法的解釋


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM