soft thresholding and hard thresholding

soft thresholding and hard thresholding今天在看MichaelElad大牛的论文《OntheRoleofSparseandRedundantRepresentationsinImageProcessing》中,看到了softthresholding和hardthresholding这两个概念,很是不明白,所以上网查了一些资料,先把网上查的东西贴出来讨论下。网上资料大体是说这是指两类的函数,分别

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



今天在看Michael Elad 大牛的论文《On the Role of Sparse and Redundant Representations in Image Processing》中,看到了soft thresholding 和hard thresholding 这两个概念,很是不明白,所以上网查了一些资料,先把网上查的东西贴出来讨论下。

网上资料大体是说这是指两类的函数,分别是软阈值函数和硬阈值函数,在matlab中soft thresholding function 的形式是

% Function to solve soft thresholding problem
%
% arg min_{x} ||x – b||_{2}^{2} + lambda*||x||_{1}
%
% Usage:- x = soft_thresh
%
% where:- <in>
        b = bias vector
        lambda = weighting on the l1 penalty
        <out>
        x = solution         
%
% Written by Simon Lucey 2012
function x = soft_thresh(b,lambda)

% Set the threshold
th = lambda/2;

% First find elements that are larger than the threshold
k = find(b > th);
x(k) = b(k) – th;

% Next find elements that are less than abs
k = find(abs(b) <= th);
x(k) = 0;

% Finally find elements that are less than -th
k = find(b < -th);
x(k) = b(k) + th;
x = x(:);

或者上述函数也可以更简洁的用一句matlab代码表示:

soft_thresh = @(b,lambda) sign(b).*max(abs(b) – lambda/2,0); %对matlab比较精通的同学可以解释下。
下面进行对比:

b = [-0.8487   -0.3349    0.5528    1.0391   -1.1176]’;
lambda=2;

 

soft_thresh(b, lambda)

ans =

         0
         0
         0
    0.0391
   -0.1176

 

soft_thresh_cvx(b, lambda)

ans =

   -0.0000
   -0.0000
    0.0000
    0.0391
   -0.1176

可以看到,两者产生的结果完全一样,我自己也在自己的电脑上试验了一下,前提是需要安装斯坦福大学的凸优化解决包CVX,试验结果和simon的完全一样,CVX的解决时间为0.263894秒,而soft thresholding的时间仅仅为0.002016秒,快了130倍!!!

作者Simon在最后提醒说soft thresholding不能简单的用来解决下面形式的问题,

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

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

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

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

(0)
blank

相关推荐

发表回复

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

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