软阈值(Soft Thresholding)函数解读「建议收藏」

软阈值(Soft Thresholding)函数解读「建议收藏」题目:软阈值(SoftThresholding)函数解读1、软阈值(SoftThresholding)函数的符号    软阈值(SoftThresholding)目前非常常见,文献【1】【2】最早提出了这个概念。软阈值公式的表达方式归纳起来常见的有三种,以下是各文献中的软阈值定义符号:文献【1】式(12):文献【2】:文献【3】:文献【4】

大家好,又见面了,我是你们的朋友全栈君。

题目:软阈值(Soft Thresholding) 函数解读

1、软阈值(Soft Thresholding)函数的符号

        软阈值(Soft Thresholding)目前非常常见,文献【1】【2】最早提出了这个概念。软阈值公式的表达方式归纳起来常见的有三种,以下是各文献中的软阈值定义符号:

文献【1】式(12):

软阈值(Soft Thresholding)函数解读「建议收藏」

文献【2】:

软阈值(Soft Thresholding)函数解读「建议收藏」

文献【3】:

软阈值(Soft Thresholding)函数解读「建议收藏」

文献【4】式(8):

软阈值(Soft Thresholding)函数解读「建议收藏」

文献【5】式(1.5):

软阈值(Soft Thresholding)函数解读「建议收藏」

文献【6】式(12)注释:

软阈值(Soft Thresholding)函数解读「建议收藏」

文献【7】:

软阈值(Soft Thresholding)函数解读「建议收藏」

        其中文献【1】【2】【3】【5】是第一种,也是最常见的一种;文献【4】【6】是第二种,个人认为可读性比第一种要好;文献【7】是第三种,个人认为可读性最好。当然,它们表达的意思是一样的(无论是sgn(x)还是sign(x)都是符号函数,即当x>0时为1,当x<0时为-1):

        以文献【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。因此

软阈值(Soft Thresholding)函数解读「建议收藏」

        以文献【6】符号为例解释第二种表示方式。这种表示方式中符号max{|u|-a,0}的作用与第一种表示方式中的符号(|w|-λ)+的作用一样,即当(|u|-a)>0时max{|u|-a,0}=(|u|-a),当(|u|-a)<0时max{|u|-a,0}=0,知道了这一点剩下的分析与第一种表示方式相同。

        综上,三种表示方式均是一致的。

2、软阈值(Soft Thresholding)函数的作用

        弄清楚了软阈值(Soft Thresholding)的符号表示以后,接下来说一说它的作用。以下内容主要参考了文献【7】,这是一个非常棒的PPT!!!

        软阈值(SoftThresholding)可以求解如下优化问题:

软阈值(Soft Thresholding)函数解读「建议收藏」

其中:

软阈值(Soft Thresholding)函数解读「建议收藏」

        根据范数的定义,可以将上面优化问题的目标函数拆开:

软阈值(Soft Thresholding)函数解读「建议收藏」

        也就是说,我们可以通过求解N个独立的形如函数

软阈值(Soft Thresholding)函数解读「建议收藏」

的优化问题,来求解这个问题。由中学时代学过的求极值方法知道,可以求函数f(x)导数:

软阈值(Soft Thresholding)函数解读「建议收藏」

        这里要解释一下变量x绝对值的导数,当x>0时,|x|=x,因此其导数等于1;当x<0时,|x|=-x,因此其导数等于-1;综合起来,x绝对值的导数等于sgn(x)。令函数f(x)导数等于0,得:

软阈值(Soft Thresholding)函数解读「建议收藏」

        这个结果等号两端都有变量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处取得极小值:

软阈值(Soft Thresholding)函数解读「建议收藏」

        即此时极小值小于f(0),而当x<0时

软阈值(Soft Thresholding)函数解读「建议收藏」

        即当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处取得极小值:

软阈值(Soft Thresholding)函数解读「建议收藏」

        即此时极小值小于f(0),而当x>0时

软阈值(Soft Thresholding)函数解读「建议收藏」

        即当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,

软阈值(Soft Thresholding)函数解读「建议收藏」

        当△x >0时,利用条件b<λ/2可得

软阈值(Soft Thresholding)函数解读「建议收藏」

        当△x <0时,利用条件b<λ/2可得(注:此时|△x |=-△x)

软阈值(Soft Thresholding)函数解读「建议收藏」

        因此,函数在x=0处取得极小值,也是最小值。

        综合以上三种情况,f(x)的最小值在以下位置取得:

软阈值(Soft Thresholding)函数解读「建议收藏」

        与前面的软阈值(Soft Thresholding)对比一下,发现了么?若将上式中的b视为变量,λ/2视为阈值,上式即为软阈值(SoftThresholding)的公式。

        至此,我们可以得到优化问题

软阈值(Soft Thresholding)函数解读「建议收藏」

的解为

软阈值(Soft Thresholding)函数解读「建议收藏」

        注:该式为软阈值(Soft Thresholding)的矩阵形式。

3、软阈值(Soft Thresholding)的变形

        当优化问题变为

软阈值(Soft Thresholding)函数解读「建议收藏」

        因为对目标函数乘一个常系数不影响极值点的获得,所以可等价为优化问题

软阈值(Soft Thresholding)函数解读「建议收藏」

此时的解为soft(B, λ)。

4、软阈值(Soft Thresholding)的MATLAB代码

        软阈值(Soft Thresholding)的函数代码可以写成专门针对优化问题

软阈值(Soft Thresholding)函数解读「建议收藏」

        软阈值(Soft Thresholding)是如此简单以至于可以用一句代码去实现它[8]:

软阈值(Soft Thresholding)函数解读「建议收藏」

        当然,如果不习惯这种形式,也可以写成常见的函数形式:

function [ soft_thresh ] = softthresholding( b,lambda )
    soft_thresh = sign(b).*max(abs(b) - lambda/2,0);
end

        一定要注意:这种写法是针对最开始的优化问题:

软阈值(Soft Thresholding)函数解读「建议收藏」

        但我个人感觉更应该写成这种通用形式:

function [ x ] = soft( b,T )
    x = sign(b).*max(abs(b) - T,0);
end

        如此之后,若要解决优化问题

软阈值(Soft Thresholding)函数解读「建议收藏」

只需调用soft(B, λ/2)即可;若要解决优化问题

软阈值(Soft Thresholding)函数解读「建议收藏」

只需调用soft(B, λ)即可。

5、软阈值(Soft Thresholding)测试代码

        用以下一小段代码测试一下软阈值,用来求解优化问题:

软阈值(Soft Thresholding)函数解读「建议收藏」

这里用的对比函数是基追踪降噪(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;

软阈值(Soft Thresholding)函数解读「建议收藏」

6、总结

        可以发现,软阈值解决的优化问题和基追踪降噪问题很像,但并不一样,而且需要格外说明的是,软阈值并能不解决基追踪降噪问题,文献【8】在最后明确说明了这一点:

软阈值(Soft Thresholding)函数解读「建议收藏」

        近来学习研究各种算法,发现给自己挖的坑有点深,有点跳不出来了,各种问题接踵而来,各种新概念一个接着一个,而软阈值(Soft Thresholding)就是其中之一,根本没法子绕过去。在文献【6】中,作者描述软阈值(Soft Thresholding)时用的是“the well-known soft-threshold function”,好吧,还well-kown。在学习过程中文献【9】对我帮助也挺大的,但从作者的语气来看,也没有多么well-kown啊……

        最后,非常感谢文献【7】的PPT,看了之后让我有一种醍醐灌顶的感觉……

7、参考文献

【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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/130199.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • pycharm plot不显示_python怎么安装matplotlib.pyplot

    pycharm plot不显示_python怎么安装matplotlib.pyplot如下案例,可以正常保存图像,但是plt.show()不能正常显示图像:#coding=utf-8importpandasaspdimportmatplotlib.pyplotaspltdata=pd.read_csv(‘ccpoints.csv’,header=0)plt.scatter(data.x,data.y,c=&amp;amp;quot;red&amp;amp;quot;,marker=’o’,l…

  • sp_executesql和execute的区别

    sp_executesql和execute的区别execute对拼成的字符串SQL是有长度限制的,今天在开发中就遇到这种情况,由于长度过长总是被截取。导致报错!后决定改用sp_executesql。但是sp_executesql对参数类型有限制,我声明的类型为varchar(max),报错:Procedureexpectsparameter@statementoftypentext/nchar/nvarchar。这句话

  • fcntl 函数「建议收藏」

    fcntl 函数「建议收藏」fcntl函数浅解Linux系统中使用man查看fcntl函数的原型为fcntl(intfd,intcmd,……/arg/);自己在使用时用到了fcntl(intfd,intcmd,longarg);F_SETFL:设置文件状态标志。将文件的状态标志设置为第三个参数arg的值(取整数值),其中O_RDONLY,O_WRONLY,O_RDWR,O_CREAT

    2022年10月26日
  • Linux使用SCP进行文件传输

    Linux使用SCP进行文件传输本章内容基于CentOS6.5(32位)scp就是securecopy,是用来进行远程文件拷贝的。数据传输使用ssh,并且和ssh使用相同的认证方式,提供相同的安全保证。scp不需要安装额外的软件,使用起来简单方便,安全可靠且支持限速参数但是它不支持排除目录为了学习SCP命令我创建了3个Linux虚拟机,其ip地址分别位192.168.132.130、192.168.132.1…

  • MixMatch论文学习笔记

    MixMatch论文学习笔记项目内容论文名MixMatch:AHolisticApproachtoSemi-SupervisedLearning作者DavidBerthelot,NicholasCarlini,IanGoodfellow,AvitalOliver,NicolasPapernot,ColinRaffel主要内容发表时间2019年Abstract

  • linux ftrace的原理和实现_bytes≤buffersize

    linux ftrace的原理和实现_bytes≤buffersize1、简介ringbuffer是trace框架的一个基础,所有的trace原始数据都是通过ringbuffer记录的。ringbuffer的作用主要有几个:1、存储在内存中,速度非常快,对系统性能的影响降到了最低;2、ring结构,循环写。可以很安全的使用又不浪费内存,能够get到最新的trace信息;但是,难点并不在这。真正的难点是系统会在常规上下文、中断(NMI、IRQ、SOF…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号