影象處理能量泛函優化——L1範數正則化項,軟閾值公式
接上篇更新的L2範數求解的問題,接著講L1範數更新的問題
L1範數正則化項又稱為拉布拉斯先驗。帶有L1正則化項的問題是圖問題,求解相對簡單,具有閉式解。其求解就是著名的軟閾值公式。
問題
其中, , 均為向量。
推倒與求解
原問題是對向量進行求解,難以解決。但是如果 , 都是標量,那麼問題就簡單了。
1. 問題分解
問題分解
在影象處理中,我們通常將向量
,
的元素都看成獨立的,則原問題的求解可以轉換為對單個元素的求解,抽取原問題中的一個元素進行求解,則問題轉換為
其中,
,
(沒有加粗),表示標量,為向量
,
中的第i個元素,省略下表i。
2. 分解問題求解
分解的問題就是一個一元二次問題求解最小值,由於影象處理中,存在某些先驗知識,一般 都為非負數。將上述問題重寫為
求解這個問題初中知識就夠了。下面簡單的給出結論
當
:
當 :
求解還是簡單的,但是使用分段函式的形式寫出來太不美觀,如何寫成一個式子,當初還是難到了我,讀者可以自己想想,我是沒有想出來,師兄教的
這樣寫的目的當然不只是為了好看,更是為了編寫程式碼。MATLAB不幾行就搞定了。
3. 原問題求解
分解的每隔問題求解了,其實原問題就解出來了,但是我們通常看到的求解這種問題,可不是一個一個子問題這樣寫出來,下面給出常見的求解形式。
注意這裡的元素依然是標量。
稱為軟閾值運算元。其含義為
軟閾值公式,我們也叫作軟閾值收縮公式,只是因為他求解的過程可以看出收縮的過程。就以上式為例,當a較大的時候,就在 的基礎上減去 。 反之,如果 是負值, 越小,就在 的基礎上加上 ,一直在像0值附近收縮。簡單的公式還是特別有意思的,這種求解的思路也是特別受用,在很多其他類似的問題上,例如硬閾值、TV正則化項等都可以使用這種思路求解。
MATLAB實現
matlab實現的程式碼特別簡單。
% define the soft threshold function, which is used above.
function y = soft(x,tau)
y = sign(x).*max(abs(x)-tau,0);