软阈值 (Soft Thresholding)函数解读

软阈值 (Soft Thresholding)函数解读版权声明:本文为博主原创文章,遵循CC4.0by-sa版权协议,转载请附上原文出处链接和本声明。…

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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

题目:软阈值(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)函数解读

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


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

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

软阈值 (Soft Thresholding)函数解读

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


 
 
 
  1. function [ x ] = soft( b,T )
  2. x = sign (b).* max (abs(b) - T,0);
  3. 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时,实际上就是观测矩阵为单位阵时的一种特殊情况:


 
 
 
  1. clear all; close all;clc;
  2. b = [- 0. 8487 - 0. 3349 0. 5528 1.0391 - 1.1176] ';
  3. lambda = 1;
  4. x1=soft(b,lambda)
  5. x2=BPDN_quadprog(b,eye(length(b)),lambda)
  6. 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

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135147.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月5日 下午6:16
下一篇 2022年6月5日 下午6:16


相关推荐

  • linux C 中的volatile使用【转】[通俗易懂]

    linux C 中的volatile使用【转】

    2022年3月12日
    34
  • Java分页显示(旅游线路)

    Java分页显示(旅游线路)

    2021年11月11日
    39
  • soapclient php 扩展,PHP扩展—SOAP[通俗易懂]

    soapclient php 扩展,PHP扩展—SOAP[通俗易懂]一、概述及安装SOAP扩展可以用于编写SOAP服务器和客户端,支持SOAP1.1,SOAP1.2和WSDL1.1规格的子集。此扩展需要libxmlPHP扩展。这表示需要使用–enable-libxml,尽管这将隐式完成因为libxml是缺省开启的。要开启SOAP支持,配置PHP时要加上–enable-soap.二、相关函数is_soap_fault—…

    2025年6月1日
    5
  • TypeScript 学习手册

    TypeScript 学习手册TypeScript 学习手册 JavaScript 是一门动态弱类型语言 对变量的类型非常宽容 而且不会在这些变量和他们的调用者之间建立结构化的契约 TypeScript 是拥有类型系统的 JavaScript 的超集 可以编译成纯 JavaScript 思维方式决定了编程习惯编程习惯奠定了工程质量工程质量划定了能力边界第一章前言强 弱类型语言 动 静态类型语言强类型语言与弱类型语言在强类型语言中 当一个对象从调用函数传递到被调用函数时 其类型必须与被调用函数中声明的类型兼容 通俗定义

    2026年3月19日
    2
  • Openclaw🦞 安装指南

    Openclaw🦞 安装指南

    2026年3月13日
    2
  • 【工具使用】应用层DNS协议工具—iodine

    【工具使用】应用层DNS协议工具—iodine0x01iodine 工具介绍 iodine 工具是基于 C 语言开发的 分为服务端程序 iodined 和客户端 iodine iodine 支持 EDNS base32 base64 base128 等多种编码规范 iodine 支持转发模式和中继模式 iodine 原理 通过 TAP 虚拟网卡 在服务端建立一个局域网 在客户端 通过 TAP 建立一个虚拟网卡 两者通过 DNS 隧道连接 处于同一局域网 可以通过 ping 命令通信 在客户端和服务端之间建立连接后 客户机上会多出一块 dns0 的虚拟网卡 DNS 隧道

    2025年6月21日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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