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

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

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

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

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

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

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

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

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

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

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

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

其中:

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

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

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

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

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

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

求解不等式b2<λ可得

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

因此

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

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

的解为

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

3、硬阈值(HardThresholding)的变形

当优化问题变为

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

此时的解为

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

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

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

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

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

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

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

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

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

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

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

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

  1. clear all;close all;clc;
  2. b = [-0.8487 -0.3349 0.5528 1.0391 -1.1176]';
  3. lambda = 0.5;
  4. x1=hardthresholding(b,lambda)
  5. x2=hard(b,sqrt(lambda))
  6. 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;

6、结束语

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

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

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

7、参考文献

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

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

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

【4】Elad 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

硬阈值(Hard Thresholding)函数解读相关推荐

  1. 软阈值函数作用图matlab,软阈值(Soft Thresholding)函数解读

    题目:软阈值(Soft Thresholding) 函数解读 1.软阈值(Soft Thresholding)函数的符号 软阈值(Soft Thresholding)目前非常常见,文献[1][2]最早 ...

  2. 软阈值(Soft Thresholding) 函数解读

    题目:软阈值(Soft Thresholding) 函数解读 1.软阈值(Soft Thresholding)函数的符号 软阈值(Soft Thresholding)目前非常常见,文献[1][2]最早 ...

  3. 软阈值(Soft Thresholding)函数解读

    原文:https://www.cnblogs.com/wlzy/p/7966525.html 软阈值(Soft Thresholding)函数解读 函数的符号 软阈值(Soft Thresholdin ...

  4. 软阈值(Soft Thresholding)函数和硬阈值(Hard Thresholding)函数

    本文仅供自学使用,文中内容来至文章:https://blog.csdn.net/jbb0523/article/details/52103257 和https://blog.csdn.net/jbb0 ...

  5. 软阈值(Soft Thresholding)函数

    1. 软阈值(Soft Thresholding)函数的作用   软阈值(Soft Thresholding)可以求解如下优化问题:        arg min ⁡ x ∥ X − B ∥ 2 2 ...

  6. 迭代硬阈值算法IHT:Iterative Hard-Thresholding

    迭代硬阈值算法IHT:Iterative Hard-Thresholding 前言 硬阈值函数 迭代硬阈值算法 参考 前言 最近在学习压缩感知的重构算法,重构算法整体来看分为三大类: ①贪婪迭代类算法 ...

  7. 软阈值 (Soft Thresholding)函数解读

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

  8. 迭代硬阈值(IHT)的补充说明

    题目:迭代硬阈值(IHT)的补充说明 本篇是对压缩感知重构算法之迭代硬阈值(IHT)的一个补充. 学完IHT后,近期陆续学习了硬阈值(hard Thresholding)函数和Majorization ...

  9. 迭代硬阈值(IHT)

    题目:压缩感知重构算法之迭代硬阈值(Iterative Hard Thresholding,IHT) 本篇来介绍IHT重构算法.一般在压缩感知参考文献中,提到IHT时一般引用的都是文献[1],但IHT ...

最新文章

  1. mysql _rowid_mysql 5.7 _rowid虚列之一
  2. 5秒到1秒,记一次效果“非常”显著的性能优化
  3. Xcode中导入.a静态库后报错添加-force_load或-all_load
  4. javaScript——廖雪峰老师学习笔记(一)
  5. 如何在SAP S/4HANA Cloud系统里创建employee
  6. WC2019 自闭记
  7. 精确的数据访问冲突_每个程序员都必须知道的8种通用数据结构
  8. bzoj1217: [HNOI2003]消防局的设立 [树形dp]
  9. Node.js新手教程——怎样实现文件上传功能
  10. DeepMind开源了强化学习库“松露”,团队自身也严重依赖它
  11. Flash:LoadVars数据提交与表单处理
  12. 严蔚敏数据结构之线性表的基本操作
  13. jdk帮助文档的获取
  14. matlab 系统找不到指定路径
  15. filter grok 判断_Grok 正则捕获
  16. python京东预约抢购_Python参考代码:京东抢券脚本
  17. python字符串常见方法
  18. Android RSA加密解密的 工具类的使用
  19. mysql 批量替换 某个字段的值 replace 方法
  20. 资产分类计算机软件,固定资产管理系统_资产分类名称(电子计算机及其外围设备篇)...

热门文章

  1. 什么是阻抗匹配以及为什么要阻抗匹配
  2. 里氏代换原则C#详解
  3. 带你了解EOF!!!
  4. linux /etc/security/login.cfg,AIX用户管理
  5. 【linux】shell编程 脚本语法
  6. matlab: strcat用法
  7. LogiScope100MHZ 16通道逻辑分析仪
  8. 计算机二级c++考试
  9. 个人去办理上沪c流程
  10. 修复XAMPP安装过程中 因端口80被占用 Apache无法启动的问题