文章目录
Chambolle-Pock算法
一个挺好的凸优化算法,能很好地求解许多正则化的问题,像L1正则化、TV(TGV、TNV)等等。参考文献[1]是原算法,[2]是对一些优化问题的应用。个人觉得[2]更容易理解,所以本文基于文献[2]。下面1和2先简要介绍凸共轭(convex conjugate)和近似点算子(proximal operator),因为算法中会用到,然后3列出算法步骤
1. 凸共轭(convex conjugate)
比如,对于一个函数 H ( z ) H(\mathbf{z}) H(z),它的凸共轭函数就如下式所示(加粗的x和y表示向量):
H ∗ ( y ) = max z { y T z − H ( z ) } H^{*}(\mathbf{y})=\max_{\mathbf{z}}\{\mathbf{y}^T\mathbf{z}-H(\mathbf{z})\} H∗(y)=zmax{
yTz−H(z)}
介绍凸共轭主要是为了简化求解问题的计算。对于形如 minimize x { F ( A x ) + G ( x ) } \text{minimize}_{\mathbf{x}}\{F(\mathbf{Ax})+G(\mathbf{x})\} minimizex{
F(Ax)+G(x)}的问题,可以用类似ADMM的方法来拆分问题从而方便求解。具体方法如下:
(1)先把问题重新表达成约束问题
minimize x , z F ( z ) + G ( x ) subject to z = A x \text{minimize}_{\mathbf{x, z}}\ F(\mathbf{z})+G(\mathbf{x})\\ \text{subject\ to\ }\mathbf{z=Ax} minimizex,z F(z)+G(x)subject to z=Ax
(2)用拉格朗日乘子法(y是对偶变量),问题变成:
min x , z max y F ( z ) + y T ( A x − z ) + G ( x ) = min x