軟閾值(Soft Thresholding)目前很是常見,文獻【1】【2】最先提出了這個概念。軟閾值公式的表達方式概括起來常見的有三種,如下是各文獻中的軟閾值定義符號:html
文獻【1】式(12):算法
文獻【2】:app
文獻【3】:ide
文獻【4】式(8):函數
文獻【5】式(1.5):學習
文獻【6】式(12)註釋:測試
文獻【7】:優化
其中文獻【1】【2】【3】【5】是第一種,也是最多見的一種;文獻【4】【6】是第二種,我的認爲可讀性比第一種要好;文獻【7】是第三種,我的認爲可讀性最好。固然,它們表達的意思是同樣的(不管是sgn(x)仍是sign(x)都是符號函數,即當x>0時爲1,當x<0時爲-1):ui
以文獻【1】符號爲例解釋第一種表示方式。這裏w是變量,λ是閾值(非負值),符號(|w|-λ)+表示當(|w|-λ)>0時則等於|w|-λ,當(|w|-λ)<0時則等於0。那麼分三種狀況來討論:第一種狀況是w>λ>0,則sgn(w)=1,|w|=w,(|w|-λ)必定大於0,(|w|-λ)+=|w|-λ,因此ηS(w,λ)=w-λ;第二種狀況是w<-λ<0,則sgn(w)=-1,|w|=-w,(|w|-λ)也必定大於0,(|w|-λ)+=|w|-λ,因此ηS(w,λ)=-1*(-w-λ)= w+λ;第三種狀況是|w|<λ,此時(|w|-λ)必定小於0,則(|w|-λ)+=0,因此ηS(w,λ)=0。所以spa
以文獻【6】符號爲例解釋第二種表示方式。這種表示方式中符號max{|u|-a,0}的做用與第一種表示方式中的符號(|w|-λ)+的做用同樣,即當(|u|-a)>0時max{|u|-a,0}=(|u|-a),當(|u|-a)<0時max{|u|-a,0}=0,知道了這一點剩下的分析與第一種表示方式相同。
綜上,三種表示方式均是一致的。
弄清楚了軟閾值(Soft Thresholding)的符號表示之後,接下來講一說它的做用。如下內容主要參考了文獻【7】,這是一個很是棒的PPT!!!
軟閾值(SoftThresholding)能夠求解以下優化問題:
其中:
根據範數的定義,能夠將上面優化問題的目標函數拆開:
也就是說,咱們能夠經過求解N個獨立的形如函數
的優化問題,來求解這個問題。由中學時代學過的求極值方法知道,能夠求函數f(x)導數:
這裏要解釋一下變量x絕對值的導數,當x>0時,|x|=x,所以其導數等於1;當x<0時,|x|=-x,所以其導數等於-1;綜合起來,x絕對值的導數等於sgn(x)。令函數f(x)導數等於0,得:
這個結果等號兩端都有變量x,須要再化簡一下。下面分三種狀況討論:
(1)當b>λ/2時
假設x<0,則sgn(x)=-1,因此x=b+λ/2>0,與假設x<0矛盾;
假設x>0,則sgn(x)=1,因此x=b-λ/2>0,成立;
因此此時在x=b-λ/2>0處取得極小值:
即此時極小值小於f(0),而當x<0時
即當x<0時函數f(x)爲單調降函數(對任意△x<0,f(0)<f(△x))。所以,函數在x=b-λ/2>0處取得最小值。
(2)當b<-λ/2時
假設x<0,則sgn(x)=-1,因此x=b+λ/2<0,成立;
假設x>0,則sgn(x)=1,因此x=b-λ/2<0,與假設x<0矛盾;
因此此時在x=b+λ/2<0處取得極小值:
即此時極小值小於f(0),而當x>0時
即當x>0時函數f(x)爲單調升函數(對任意△x>0,f(△x)>f(0))。所以,函數在x=b+λ/2<0處取得最小值。
(3)當-λ/2<b<λ/2時(即|b|<λ/2時)
假設x<0,則sgn(x)=-1,因此x=b+λ/2>0,與假設x<0矛盾;
假設x>0,則sgn(x)=1,因此x=b-λ/2<0,與假設x<0矛盾;
即不管x爲大於0仍是小於0均沒有極值點,那麼x=0是否爲函數f(x)的極值點呢?
對於△x≠0,
當△x >0時,利用條件b<λ/2可得
當△x <0時,利用條件b<λ/2可得(注:此時|△x |=-△x)
所以,函數在x=0處取得極小值,也是最小值。
綜合以上三種狀況,f(x)的最小值在如下位置取得:
與前面的軟閾值(Soft Thresholding)對比一下,發現了麼?若將上式中的b視爲變量,λ/2視爲閾值,上式即爲軟閾值(SoftThresholding)的公式。
至此,咱們能夠獲得優化問題
的解爲
注:該式爲軟閾值(Soft Thresholding)的矩陣形式。
當優化問題變爲
由於對目標函數乘一個常係數不影響極值點的得到,因此可等價爲優化問題
此時的解爲soft(B, λ)。
軟閾值(Soft Thresholding)的函數代碼能夠寫成專門針對優化問題
軟閾值(Soft Thresholding)是如此簡單以致於能夠用一句代碼去實現它[8]:
固然,若是不習慣這種形式,也能夠寫成常見的函數形式:
function [ soft_thresh ] = softthresholding( b,lambda ) soft_thresh = sign(b).*max(abs(b) - lambda/2,0); end
必定要注意:這種寫法是針對最開始的優化問題:
但我我的感受更應該寫成這種通用形式:
function [ x ] = soft( b,T ) x = sign(b).*max(abs(b) - T,0); end
如此以後,若要解決優化問題
只需調用soft(B, λ/2)便可;若要解決優化問題
只需調用soft(B, λ)便可。
用如下一小段代碼測試一下軟閾值,用來求解優化問題:
這裏用的對比函數是基追蹤降噪(BPDN_quadprog.m),參見壓縮感知重構算法之基追蹤降噪(Basis PursuitDe-Noising, BPDN)(http://blog.csdn.net/jbb0523/article/details/52013669),使用BPDN時,實際上就是觀測矩陣爲單位陣時的一種特殊狀況:
clear all;close all;clc; b = [-0.8487 -0.3349 0.5528 1.0391 -1.1176]'; lambda = 1; x1=soft(b,lambda) x2=BPDN_quadprog(b,eye(length(b)),lambda) fprintf('\nError between soft and BPDN = %f\n',norm(x1-x2))
這裏就不給出輸出結果了。運行後,觀察輸出結果可知,soft函數與BPDN_quadprog函數的輸結果相同。
另外,能夠在matlab裏輸入如下命令看一個軟閾值的圖像:
x=-5:0.1:5;T=1;y=soft(x,T);plot(x,y);grid;
能夠發現,軟閾值解決的優化問題和基追蹤降噪問題很像,但並不同,並且須要格外說明的是,軟閾值並能不解決基追蹤降噪問題,文獻【8】在最後明確說明了這一點:
近來學習研究各類算法,發現給本身挖的坑有點深,有點跳不出來了,各類問題接踵而來,各類新概念一個接着一個,而軟閾值(Soft Thresholding)就是其中之一,根本無法子繞過去。在文獻【6】中,做者描述軟閾值(Soft Thresholding)時用的是「the well-known soft-threshold function」,好吧,還well-kown。在學習過程當中文獻【9】對我幫助也挺大的,但從做者的語氣來看,也沒有多麼well-kown啊……
最後,很是感謝文獻【7】的PPT,看了以後讓我有一種醍醐灌頂的感受……
【1】Donoho D L, JohnstoneJ M. Ideal spatial adaptation by wavelet shrinkage[J]. Biometrika, 1994, 81(3):425-455.
【2】Donoho D L.De-noising by soft-thresholding[J]. IEEE transactions on information theory,1995, 41(3): 613-627.
【3】Bredies K, Lorenz D.Iterative soft-thresholding converges linearly[R]. Zentrum fürTechnomathematik, 2007.
【4】Bioucas-Dias J M,Figueiredo M A T. A new TwIST: two-step iterative shrinkage/thresholdingalgorithms for image restoration[J]. IEEE Transactions on Image processing,2007, 16(12): 2992-3004.
【5】Beck A, Teboulle M. Afast iterative shrinkage-thresholding algorithm for linear inverse problems[J].SIAM journal on imaging sciences, 2009, 2(1): 183-202.
【6】Wright S J, Nowak RD, Figueiredo M A T. Sparse reconstruction by separable approximation[J]. IEEETransactions on Signal Processing, 2009, 57(7): 2479-2493.
【7】谷鵠翔.IteratedSoft-Thresholding Algorithm[Report,slides]. http://www.sigvc.org/bbs/thread-41-1-2.html
【8】http://www.simonlucey.com/soft-thresholding/
【9】http://blog.sina.com.cn/s/blog_6d0e97bb01015vq3.html