现有一个求稀疏编码的问题:
min∥z∥0s.t. x=Dz
其中D∈Rn×m, z∈Rm 是 x∈Rn 的 sparse code.
解决上式是一个复杂度随 m 以指数级增长的组合问题,最常见的解决方法是将 l0 范数替换为 l1范数.即目标函数变为:
argD,zmin21∥x−Dz∥22+λ∥z∥1
假设 D 已给定,即:
argzmin21∥x−Dz∥22+λ∥z∥1
对于凸二范数 f1= 21∥x−Dz∥22,叫做reconstruction 项,它的函数是这样的

对于凸一范数 f2=λ∥z∥1,叫做sparsity penalty 项,它的函数是这样的,故其导数为符号函数。

现在我们来求解这个目标函数,即得到使 f 值最小时的z.将函数变形为:
f=f1+f2= 21∥x−Dz∥22+λ∥z∥1=21(x−Dz)T(x−Dz)+λ∥z∥1
故可以梯度下降法来求 z. 对f 求 x 的偏导:
∂z∂f=∂z∂f1+∂z∂f2=DT(Dz−x)+λsign(z)
对于reconstruction 项
zk+1=zk−αDT(Dz−x)
对于penalty 项zk+1=zk−αλsign(z)
问题来了,符号函数 sign(z) 在 0 处是不可微的
解决办法:如果 l1norm 的梯度因为 z 而改变符号,则将其设为 0 ,即
if:sign(z)=sign(z−αλsign(z))thenz=0else:z=z−αλsign(z)
上面的两项的处理过程概括起来就是 ISTA算法
1.初始化 z(0)=0
2.当 z(k) 未收敛
zk=zk−αDT(Dz−x)
zk+1=shrink(zk,αλ)
shrink:用来查看函数值是否:不变 / 变0
总结上述步骤:
zk+1zk+1=Sαλ(zk+αDT(x−Dz))=SLλ(zk+L1DT(x−Dz))(α=L1)
只有当 L≥σmax(DTD) 时,才能保证收敛性,σmax(A) 表示 A 的最大特征值,soft thresholding function Sθ(x) 定义为:
Sθ(x)=sign(x)⋅max(∣x∣−θ,0)
