http://blog.csdn.net/jwh_bupt/article/details/12070273
稀疏编码系列:
---------------------------------------------------------------------------
之前几次讲到了ScSPM,以及改进的LLC。SPM是不带结构性的稀疏编码,而LLC是考虑了结构性的稀疏编码。这次,我想更加全面地介绍一些结构性稀疏的内容。文章的最后会给出几个典型的例子,附加源代码(matlab版本的)和引文的pdf,供大家实验。
Data representation(不仅仅局限于图像)往往基于如下最小化问题:
(1)
其中X是观测到的数据的特征矩阵,D是字典
,Z是字典上的描述
。约束项
和
使得字典dictionary和描述code具有一定结构性。当D给定时,确定Z的过程叫做representation persuit。当D和Z同时未知时,确定D就是dictionary learning的问题。
稀疏表示,通常对Z做约束,使得Z中的每一列只能取少量的非0系数。其中最简单的约束项就是
(2)
这时问题就变成了LASSO。K-means + Hard-VQ则是一种更严格的稀疏编码,相比L1-norm的约束,Hard-VQ引入了严重的重建误差,所以效果会比较差。这是介绍ScSPM和LLC时候的内容了,这里简单重复一下。
LASSO被LLC改进的一个很重要原因,就是缺少smooth,其潜在的原因便是Z中的非0元素缺少结构信息(unstructured sparse coding)。所以,后面很多论文的工作就是提出带结构性的稀疏模型。我们将字典D中的每一个码字称为dictionary atoms。令表示为D中一些码字的集合,并将所有这类集合定义为G,即
。G中每一个group可以overlap也可以不overlap(这就对应于不同的group sparse model)。而约束项可以表示为:
(3)
其中是
的子向量(只取了group中的元素)。可以看出,对每一个group内部,利用了L2-norm。由于L2-norm本身不小于0,故group之间其实是L1-norm。这样的约束造成了group选择特性,即group成组地取0或不取0。这样仍然不够完美,因为group内部的各个atom不能满足稀疏性。于是就有方法提出,在(3)式之后再加(2)式作为约束,以保证group内的稀疏性,即:
(4)
可以看出当且各
,(3)就退化成了lasso。
关于常见的一些结构性稀疏,列举如下:
Hierarchical Sparse Coding[code | read more],认为非0的系数之间存在层次结构,即group与group之间要么不overlap,如果overlap则一个group必会包含另一个group。一种典型的层次结构就是tree结构
Overlapping group sparse coding[code |read more],则将约束relax,即允许group之间相互overlap。这个模型据说在genetic data的描述中十分有效,大家不妨试试
Graph-Guided Sparse Coding[code |read more],建立一个graph,graph中各结点是dictionary中的各个atom。Graph-Guided不同于以上的group sparse coding,它可以加入更加复杂的结构信息。它的形式是:
(5)
不同就不同在,这里
。从直观上理解,dictionary中的每个atom被视为图中的一个节点,而
则代表节点之间边的权重。而权重
是可以做很多文章的,比如考虑atom与atom之间在语义层次上的关联、结构层次上的关联,等等。
-----------------
二、ADMM求解方法
转自http://www.cnblogs.com/breezedeus/p/3496819.html
从等式约束的最小化问题说起:
上面问题的拉格朗日表达式为:
也就是前面的最小化问题可以写为:
minx
max
y
L(x,y)
。
它对应的对偶问题为:
maxy
min
x
L(x,y)
。
下面是用来求解此对偶问题的对偶上升迭代方法:
这个方法在满足一些比较强的假设下可以证明收敛。
为了弱化对偶上升方法的强假设性,一些研究者在上世纪60年代提出使用扩展拉格朗日表达式(augmented Lagrangian)代替原来的拉格朗日表达式:
其中
ρ>0
。对应上面的对偶上升方法,得到下面的乘子法(method of multipliers):
注意,乘子法里把第二个式子里的
αk
改成了扩展拉格朗日表达式中引入的
ρ
。这不是一个随意行为,而是有理论依据的。利用
L(x,y)
可以导出上面最小化问题对应的原始和对偶可行性条件分别为(
∂L
∂y
=0
,
∂L
∂x
=0
):
既然
xk+1
最小化
L
ρ
(x,y
k
)
,有:
上面最后一个等式就是利用了
yk+1
=y
k
+ρ(Ax
k+1
−b)
。从上面可知,这种
y
k+1
的取法使得
(x
k+1
,y
k+1
)
满足对偶可行条件
∂L
∂x
=0
。而原始可行条件在迭代过程中逐渐成立。
乘子法弱化了对偶上升法的收敛条件,但由于在x-minimization步引入了二次项而导致无法把x分开进行求解(详见[1])。而接下来要讲的Alternating Direction Method of Multipliers (ADMM)就是期望结合乘子法的弱条件的收敛性以及对偶上升法的可分解求解性。ADMM求解以下形式的最小化问题:
其对应的扩展拉格朗日表达式为:
ADMM包括以下迭代步骤:
ADMM其实和乘子法很像,只是乘子法里把
x
和
z
放一块求解,而ADMM是分开求解,类似迭代一步的Gauss-Seidel方法。其中(3.4)中的推导类似于乘子法,只是使用了
z
k+1
最小化
L
ρ
(x
k+1
,z,y
k
)
:
其中用到了
z
对应的对偶可行性式子:
∂L∂z
=∇g(z)+B
T
y=0
定义新变量
u=1ρ
y
,那么(3.2-3.4)中的迭代可以变为以下形式:
在真正求解时通常会使用所谓的over-relaxation方法,也即在
z
和
u
中使用下面的表达式代替其中的
Ax
k+1
:
αk
Ax
k+1
−(1−α
k
)(Bz
k
−c)
,
其中
αk
为relaxation因子。有实验表明
α
k
∈[1.5,1.8]
可以改进收敛性([2])。
下面让我们看看ADMM怎么被用来求解大型的机器学习模型。所谓的大型,要不就是样本数太多,或者样本的维数太高。下面我们只考虑第一种情况,关于第二种情况感兴趣的读者可以参见最后的参考文献[1, 2]。样本数太多无法一次全部导入内存,常见的处理方式是使用分布式系统,把样本分块,使得每块样本能导入到一台机器的内存中。当然,我们要的是一个最终模型,它的训练过程利用了所有的样本数据。常见的机器学习模型如下:
minimize x
∑
J
j=1
f
j
(x)+g(x)
,
其中
x
为模型参数,
f
j
(x)
对应第
j
个样本的损失函数,而
g(x)
为惩罚系数,如
g(x)=||x||
1
。
假设把
J
个样本分成
N
份,每份可以导入内存。此时我们把上面的问题重写为下面的形式:
除了把目标函数分成
N
块,还额外加了
N
个等式约束,使得利用每块样本计算出来的模型参数
x
i
都相等。那么,ADMM中的求解步骤(3.2)-(3.4)变为:
例如求解L1惩罚的LR模型,其迭代步骤如下(
u=1ρ
y
,
g(z)=λ||z||
1
):
其中
x¯
≐1
N
∑
N
i
x
i
,
y
¯
的定义类似。
在分布式情况下,为了计算方便通常会把
u
的更新步骤挪在最前面,这样
u
和
x
的更新可以放在一块:
ADMM的框架确实很牛逼,把一个大问题分成可分布式同时求解的多个小问题。理论上,ADMM的框架可以解决大部分实际中的大尺度问题。我自己全部实现了一遍这个框架,主要用于求解LR问题,下面说说我碰到的一些问题:
1. 收敛不够快,往往需要迭代几十步。整体速度主要依赖于
xi
更新时所使用的优化方法,个人建议使用liblinear里算法,但是不能直接拿来就用,需要做一些调整。
2. 停止准则和
ρ
的选取:停止准则主要考量的是
x
i
和
z
之间的差异和它们本身的变动情况,但这些值又受
ρ
的取值的影响。它们之间如何权衡并无定法。个人建议使用模型在测试集上的效果来确定是否停止迭代。
3. 不适合MapReduce框架实现:需要保证对数据的分割自始至终都一致;用MPI实现的话相对于其他算法又未必有什么优势(如L-BFGS、OwLQN等)。
4. relaxation步骤要谨慎:
α
的取值依赖于具体的问题,很多时候的确可以加快收敛速度,但对有些问题甚至可能带来不收敛的后果。用的时候不论是用x -> z -> u的更新步骤,还是用u -> x -> z的更新步骤,在u步使用的x_hat要和在z步使用的相同(使用旧的z),而不是使用z步刚更新的z重算。
5. warm start 和子问题求解逐渐精确的策略可以降低
xi
更新时的耗时,但也使得算法更加复杂,需要设定的参数也增加了。
[References]
[1] S. Boyd. Alternating Direction Method of Multipliers (Slides).
[2] S. Boyd et al. Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers, 2010.