图像处理能量泛函优化——L1范数正则化项,软阈值公式

接上篇更新的L2范数求解的问题,接着讲L1范数更新的问题
L1范数正则化项又称为拉布拉斯先验。带有L1正则化项的问题是图问题,求解相对简单,具有闭式解。其求解就是著名的软阈值公式。

问题

  x   = arg ⁡ min ⁡ x ρ 2 ∥ x − b ∥ 2 2 + λ ∥ x ∥ 1 \textbf{ x } = \arg \mathop {\min }\limits_\textbf{x} \frac\rho{2}\left\| {\textbf{x} - \textbf{b}} \right\|_2^2 + {\lambda\left\| \textbf{x} \right\|_1}  x =argxmin2ρxb22+λx1

其中,   x   \textbf{ x }  x    b \textbf{ b}  b均为向量。

推倒与求解

原问题是对向量进行求解,难以解决。但是如果   x   \textbf{ x }  x    b \textbf{ b}  b都是标量,那么问题就简单了。

1. 问题分解

问题分解
在图像处理中,我们通常将向量   x   \textbf{ x }  x    b \textbf{ b}  b的元素都看成独立的,则原问题的求解可以转换为对单个元素的求解,抽取原问题中的一个元素进行求解,则问题转换为

x = arg ⁡ min ⁡ x ρ 2 ( x − b ) 2 + λ ∣ x ∣ x = \arg \mathop {\min }\limits_x {\frac{\rho }{2}\left( {x - b} \right)^2} + \lambda \left| x \right| x=argxmin2ρ(xb)2+λx

其中, x x x, b b b(没有加粗),表示标量,为向量   x   \textbf{ x }  x    b \textbf{ b}  b中的第i个元素,省略下表i。
2. 分解问题求解

分解的问题就是一个一元二次问题求解最小值,由于图像处理中,存在某些先验知识,一般 ρ , λ \rho, \lambda ρ,λ都为非负数。将上述问题重写为

x = arg ⁡ min ⁡ x ρ 2 ( x − b ) 2 + λ ∣ x ∣ , s . t . ρ ≥ 0 , λ ≥ 0 x = \arg \mathop {\min }\limits_x {\frac\rho{2}\left( {x - b} \right)^2} + \lambda \left| x \right|,s.t. \rho \ge 0, \lambda \ge 0 x=argxmin2ρ(xb)2+λxs.t.ρ0,λ0

求解这个问题初中知识就够了。下面简单的给出结论
x ≥ 0 x \ge 0 x0:

x = { b − λ ρ b − λ ρ > 0 0 b − λ ρ ≤ 0 x = \left\{ \begin{array} { c c } { b - \frac { \lambda } { \rho } } & { b - \frac { \lambda } { \rho } > 0 } \\ { 0 } & { b - \frac { \lambda } { \rho } \leq 0 } \end{array} \right. x={bρλ0bρλ>0bρλ0

x ≤ 0 x \le 0 x0:

x = { 0 b + λ ρ > 0 b + λ ρ b + λ ρ ≤ 0 x = \left\{ \begin{array} { c c } { 0 } & { b + \frac { \lambda } { \rho } > 0 } \\ { b + \frac { \lambda } { \rho } } & { b + \frac { \lambda } { \rho } \leq 0 } \end{array} \right. x={0b+ρλb+ρλ>0b+ρλ0

求解还是简单的,但是使用分段函数的形式写出来太不美观,如何写成一个式子,当初还是难到了我,读者可以自己想想,我是没有想出来,师兄教的

x = sign ⁡ ( b ) max ⁡ ( ∣ b ∣ − λ ρ , 0 ) x = \operatorname { sign } ( b ) \max \left( | b | - \frac { \lambda } { \rho } , 0 \right) x=sign(b)max(bρλ,0)

这样写的目的当然不只是为了好看,更是为了编写代码。MATLAB不几行就搞定了。
3. 原问题求解
分解的每隔问题求解了,其实原问题就解出来了,但是我们通常看到的求解这种问题,可不是一个一个子问题这样写出来,下面给出常见的求解形式。

x = s h r i n k λ ρ ( b ) x = shrin{k_{\frac{\lambda }{\rho }}}\left( b \right) x=shrinkρλ(b)

注意这里的元素依然是标量。 s h r i n k shrink shrink称为软阈值算子。其含义为
S k ( a ) = { a − k a &gt; k 0 a ≤ k a + k    a &lt; − k S _ { k } ( a ) = \left\{ \begin{array} { c } { a - k \quad a &gt; k } \\ { 0 \quad a \leq k } \\ { a + k \ \ a &lt; - k } \end{array} \right. Sk(a)=aka>k0aka+k  a<k

软阈值公式,我们也叫作软阈值收缩公式,只是因为他求解的过程可以看出收缩的过程。就以上式为例,当a较大的时候,就在 a a a的基础上减去 k k k。 反之,如果 a a a是负值, a a a越小,就在 a a a的基础上加上 k k k,一直在像0值附近收缩。简单的公式还是特别有意思的,这种求解的思路也是特别受用,在很多其他类似的问题上,例如硬阈值、TV正则化项等都可以使用这种思路求解。

MATLAB实现

matlab实现的代码特别简单。

% define the soft threshold function, which is used above.
function y = soft(x,tau)

y = sign(x).*max(abs(x)-tau,0);

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值