Bregman分离算法比Bregman迭代算法更简单、更有效。接上篇博客,我们可以构造优化模型 argminH(u)+J(u) 来还原真实目标数据,一般理解为 H(u) 是我们的目标最小化模型,常用的有 H(u)=1/2(Au−Y)2 ,其中u是目标,Y是观测结果,A是导致观测结果与真实结果不一致的原因;J(u)一般是一个约束项,自从压缩感知火了之后,一般J(u)是一个L1模型,即一个绝对值函数,等价于要找一组u,使得u的表示最简单。整体表示为
argmin|Φ(u)|+H(u)
Φ(u) 是表达式,其L1模型略难求解。一种技巧是建立约束优化模型:
argmin|d|+H(u),s.t.d=Φ(u)→argmin|d|+H(u)−λ/2(d−Φ(u))2
这里将约束变为L2项。是一个为了松弛变量做出的折中。原先复杂的
Φ(u) 被放入二次函数——一个简单的凸函数中,很好计算梯度了;而复杂的L1约束项约束了d。令
J(u,d)=|d|+H(u) ,约束问题变为
argminu,dJ(u,d)+H(u) 我们引入二元Bregman散度,这样就可以使用Bregman迭代算法了。
(uk+1,dk+1)=argminu,dDp(u,uk,d,dk)+λ/2(d−Φ(u))2(1)
pk+1u=pku−∂J(u,d)∂u=pku−λ∇Φ(uk+1)T(Φ(uk+1)−dk+1)=−λ∑i∇Φ(Φ(ui)−di)(2)
pk+1d=pkd−∂J(u,d)∂d=pku−λ(dk+1−Φ(uk+1))=−λ∑i(di−Φ(ui)(3)
令
bk=∑i(Φ(ui−di) ,如果把
Φ 视作线性映射,那么有
pku=−λ∇ΦTbk,pkd=λbk 。
现在来看u的优化公式,d固定当做常量,
uk 也是常量。由(1)得到
uk+1=argminJ(u,dk)−<pku,u−uk>+λ/2(dk−Φ(u))2=argminJ(u,dk)−<−λ∇ΦTbk,u−uk>+λ/2(dk−Φ(u))2=argminH(u)+λ∇ΦT(u−uk)bk+λ/2(dk−Φ(u))2+C
很多文献在这一步后面直接给出了结果,
∇Φ 莫名其妙就消了,也没有推导,非常晦涩。这里我推测右边是用了泰勒展开式,其中
Ruk 是余项:
∇ΦT(u−uk)bk+1/2(dk−Φ(u))2=bk[Φ(uk)+∇ΦT(u−uk)+Ruk]+1/2(dk−Φ(u))2+C1=bkΦ(u)+bkdk+1/2(dk−Φ(u))2+C2=1/2[(dk−Φ(u))2−2bk(dk−Φ(u))+(bk)2]+C3=1/2(dk−Φ(u)−bk)2+C3
所以得到:
uk+1=argminH(u)+λ/2[dk−Φ(u)−bk]2
同理得到:
dk+1=argmin|d|+λ/2[d−Φ(uk+1)−bk]2
bk+1=bk+[Φ(uk+1)−dk+1]
如此迭代直到u收敛。
其中d的优化,由于表达式d只是一个变量,所以它的L1优化模型类比
argmin1/2(Ax−b)2+|x| ,这个已经有非常成熟的优化解法。