硬阈值(Hard Thresholding)函数解读[通俗易懂]

硬阈值(Hard Thresholding)函数解读[通俗易懂]题目:硬阈值(HardThresholding)函数解读1、硬阈值(HardThresholding)函数的符号    硬阈值(HardThresholding)并没有软阈值(SoftThresholding)那么常见,这可能是因为硬阈值解决的问题是非凸的原因吧。硬阈值与软阈值由同一篇文献提出,硬阈值公式参见文献【1】的式(11):     第一次邂逅硬阈值

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

题目:硬阈值(Hard Thresholding)函数解读

1、硬阈值(Hard Thresholding)函数的符号

        硬阈值(Hard Thresholding)并没有软阈值(Soft Thresholding)那么常见,这可能是因为硬阈值解决的问题是非凸的原因吧。硬阈值与软阈值由同一篇文献提出,硬阈值公式参见文献【1】的式( 11):

硬阈值(Hard Thresholding)函数解读[通俗易懂]

        第一次邂逅硬阈值(HardThresholding)是在文献【2】中:

硬阈值(Hard Thresholding)函数解读[通俗易懂]

        在查询软阈值(Soft Thresholding)的过程中,搜到了文献【3】,进而看到了提到了文献【4】:

硬阈值(Hard Thresholding)函数解读[通俗易懂]

        文献【4】中提到的Fig 1如图所示:

硬阈值(Hard Thresholding)函数解读[通俗易懂]

        硬阈值的符号到底表示什么意思呢?以文献【1】符号为例,清晰一点来说就是这样的:

硬阈值(Hard Thresholding)函数解读[通俗易懂]

这里w是变量,λ是阈值。

2、硬阈值(HardThresholding)函数的作用

        弄清楚了硬阈值(HardThresholding)的符号表示以后,接下来说一说它的作用。这里主要是参考了软阈值的推导过程,然后自己经过一番琢磨和推导而得。

        硬阈值(HardThresholding)可以求解如下优化问题:

硬阈值(Hard Thresholding)函数解读[通俗易懂]

其中:

硬阈值(Hard Thresholding)函数解读[通俗易懂]

||X||0是求向是向量X的零范数,即向量X中非零元素的个数。根据范数的定义,可以将上面优化问题的目标函数拆开:

硬阈值(Hard Thresholding)函数解读[通俗易懂]

其中拆分项中符号|x|0的意思是

硬阈值(Hard Thresholding)函数解读[通俗易懂]

        现在,我们可以通过求解N个独立的形如函数

硬阈值(Hard Thresholding)函数解读[通俗易懂]

的优化问题,来求解这个问题。将f(x)进一步写为:

硬阈值(Hard Thresholding)函数解读[通俗易懂]

        对于x≠0部分,我们知道它的最小值在x=b处取得,最小值为λ。现在的问题是λ与b2到底谁更小?最小者将是函数f(x)的最小值。求解不等式b2>λ可得

硬阈值(Hard Thresholding)函数解读[通俗易懂]

此时最小值在x=0处取得;

        求解不等式b2<λ可得

硬阈值(Hard Thresholding)函数解读[通俗易懂]

此时最小值在x=b处取得;

        因此

硬阈值(Hard Thresholding)函数解读[通俗易懂]

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

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

硬阈值(Hard Thresholding)函数解读[通俗易懂]

的解为

硬阈值(Hard Thresholding)函数解读[通俗易懂]

注:该式为硬阈值(Hard Thresholding)的矩阵形式,这里的B是一个向量,应该是逐个元素分别执行硬阈值函数;。

3、硬阈值(HardThresholding)的变形

        当优化问题变为

硬阈值(Hard Thresholding)函数解读[通俗易懂]

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

硬阈值(Hard Thresholding)函数解读[通俗易懂]

此时的解为硬阈值(Hard Thresholding)函数解读[通俗易懂]

4、硬阈值(Hard Thresholding)的MATLAB代码

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

硬阈值(Hard Thresholding)函数解读[通俗易懂]

        MATLAB函数代码如下(参考了文献【5】倒数第2页):

function [ hard_thresh ] = hardthresholding( b,lambda )
    sel = (abs(b)>sqrt(lambda));
    hard_thresh = b.*sel;
end

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

硬阈值(Hard Thresholding)函数解读[通俗易懂]

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

function [ x ] = hard( b,T )
    sel = (abs(b)>T);
    x = b.*sel;
end

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

硬阈值(Hard Thresholding)函数解读[通俗易懂]

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

硬阈值(Hard Thresholding)函数解读[通俗易懂]

只需调用hard(B, sqrt(2*λ))即可。

5、硬阈值(HardThresholding)测试代码

        硬阈值(Hard Thresholding)要解决的优化问题目标函数是非凸的,不太常见,手边目前没有其它函数求解这个问题,因此测试代码只能测一下这个函数编写的正确与否了:

clear all;close all;clc; 
b = [-0.8487   -0.3349    0.5528    1.0391   -1.1176]';
lambda = 0.5;
x1=hardthresholding(b,lambda)
x2=hard(b,sqrt(lambda))
fprintf('\nError between hardthresholding and hard = %f\n',norm(x1-x2))

这里就不给出输出结果了。可以运行一下,从输出结果来看,函数的功能是正确的。

        另外,可以在matlab里输入以下命令看一个软阈值的图像:

x=-5:0.01:5;T=1;y=hard(x,T);plot(x,y);grid;

硬阈值(Hard Thresholding)函数解读[通俗易懂]

6、结束语

        终于搞明白了硬阈值和软阈值,在文献【3】最后作者提到“哎,数学不好害死人啊,什么时候才能达到大牛们的高度啊”,相信很多人会有同样的感觉吧。但转念一想,我们不可能把矩阵分析、数值分析、泛函分析、最优化、组合数学等(脑子里就想到了这么多)所有的数学基础课内容都学完再去搞研究的,边研究边学习,哪儿不会了补哪儿才是最正常的模式吧……

        再说了,如果让你单纯的学数学基础,你可能会感觉非常无聊,可能还会经常抱怨一句:学这些枯燥的数学有什么用呢?

        还是继续前进吧,想信自己,路会越走越宽的……

7、参考文献

【1】Donoho D L, JohnstoneJ M. Ideal spatial adaptation by wavelet shrinkage[J]. Biometrika, 1994, 81(3):425-455.

2Wright SJ, Nowak R D, Figueiredo M A T. Sparse reconstruction by separableapproximation[J]. IEEE Transactions on Signal Processing, 2009, 57(7):2479-2493.

3http://blog.sina.com.cn/s/blog_6d0e97bb01015vq3.html

4Elad M,Figueiredo M A T, Ma Y. On the Role of Sparse and Redundant Representations inImage Processing[J]. Proceedings of the IEEE, 2010, 98(6):972-982.

【5】http://www.docin.com/p-553314466.html

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • rinetd安装

    第一步:下载安装包wgethttp://www.boutell.com/rinetd/http/rinetd.tar.gz第二步解压安装包tar-zxvfrinetd.tar.gz第三步进入rinetd修改 rinetd.c文件bindPort>=65536    变个更为  bindPort>=65535connectPort

    2022年4月8日
    191
  • 二、设计模式-必要的基础知识—旅行前的准备 #和设计模式一起旅行#[通俗易懂]

    设计模式-谈谈模式和设计模式模式(Pattern),指事物的标准样式,百度百科上面说的,其实说白了模式就是我们现在说的套路!模式 == 套路模式是一种思想,说大了特别的复杂和深奥,不管怎么样模式的使用可以解决特定场景下特定的问题!准确表达:模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。软件模式那么在软件中使用模式,就是软件模式(Sof…

    2022年2月27日
    44
  • springcache清除缓存_什么叫做缓存数据

    springcache清除缓存_什么叫做缓存数据概述从spring3开始,spring开始支持缓存组件,并提供了一系列非常方便的注解。其中,Cache接口定义了基本的增删改查方法,Spring提供了一些默认的实现,比如RedisCa

    2022年8月16日
    3
  • iMX8MPlus和iMX8QM机器学习框架eIQ性能对比

    iMX8MPlus和iMX8QM机器学习框架eIQ性能对比ByToradex胡珊逢机器学习算法对算力要求较高,通常会采用GPU,或者专用的处理器如NPU进行加速运算。NXP先后推出的两款处理器iMX8QuadMax和iMX8MPlus分别可以采用GPU和NPU对常用的机器学习算法例如TensorFlowLite等进行加速。文章将使用NXPeIQ框架在两个处理器上测试不同算法的性能。这里我们将使用Toradex的ApalisiMX8QM4GBWBITV1.1C和VerdiniMX8MPl…

    2022年10月19日
    0
  • 虚拟机与宿主机网络[通俗易懂]

    虚拟机与宿主机网络[通俗易懂]桥接、NAT和host-only三种网络连接方式的区别一、不同网络连接方式对网络网络影响简介:二、三种网络连接方式详细介绍:我本机宿主机使用win10系统,IP地址为:192.168.1.117。1、桥接方式桥接方式下,虚拟机和宿主机处于同一网段,真实存在于网络中,像是一台真实的主机。虚拟机和宿主机彼此互通,且网络中的其他主机也可以互通。就像是连接在hub中的主机一样。获取的IP地址网段为:192.168.1.X,实际获取的为192.168.1.220。优点:可以轻松实现上网,同网段中的主机

    2022年8月21日
    6
  • 学习stopwatch

    学习stopwatch处理过程(学习stopwatch)虽然debug可以查看到每一步代码执行时发生的变化,但是不能清楚的看到每一步执行的时间,这个时候Stopwatch就派上用场了。什么是stopwatch?Stopwatch是Guava(Google开源java库)中推出的计时器类,可以用于方便的检测两个代码直接执行的速度Stopwatch简单用法//引入Guava包guava-19.0.jarimpo…

    2022年6月23日
    25

发表回复

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

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