在开始正文之前,咱首先得说明一下,这篇东西偏向于理论,各位看官可以自行跳过某些部分。这方面的工作奠基人同样也是compressive sensing的大牛之一E.J Candes(Donoho的得意门生),以及Candes的学生Ben Recht,前者刚从caltech被挖到stanford,后者目前刚到wisconsin做AP。Candes大牛,stanford统计系出生,师从Donoho。Candes原来的主要工作集中在小波分析上(实际上C牛非常多产),比如著名的curvelets以及ridgelets,04年左右开始和Tao合作从事compressive sensing的理论工作,这里有他的简要介绍。
继续唠叨,上回说到借着collaborative filtering的东风,矩阵的稀疏表示受到了广泛的关注。说到矩阵的稀疏性,大部分看官可能有所误解。这个矩阵稀疏表示严格而言可以分为两种:
1. 矩阵元素的稀疏性,即矩阵非0元个数相对较少。参照向量的范数,同样可以定义矩阵的0范数,并将其松弛到矩阵的1范数的优化问题。
2. 矩阵奇异值的稀疏性,即矩阵奇异值中非0元的个数(即矩阵的秩)相对较少。仿照向量情况下0范数与1范数的关系,同样可以将其松弛的到迹范数(trace norm)的优化问题。
咱下面会分别聊聊这两个问题。首先,咱的出发点是machine learning中的collaborative filtering,这个概念并不是啥新东西了,最早大约可以追朔到1992的某篇同名文章。这玩意是做啥的呢,通俗的说,每次你在淘宝上闲逛的时候,下面都会有一行推荐商品。这些个网络服务商(淘宝,Amazon, Ebay)就在想了,如果这个推荐系统做的足够好,那么消费者(比如你我)的购物欲望就会得到刺激,这个销量也就上去了。实际上,这和超市里玲琅满目的货架是一个道理。
这里就得提提Netflix Prize这件事了,话说netflix是家在线dvd租赁公司,这公司就抱了同样的想法。不过这家公司想了个主意:该公司提供数据,出资100万美刀,奖励研发这个推荐系统算法的小组,并要求这些算法发表在学术会议或期刊之上。这可以算是现实版的百万富翁了(学术和money两不误),于是collaborative filtering着实火了一把(比如SIGKDD上的不少文章)。最终历时两年,由AT&T实验室成员组成的BellKor’s Pragmatic Chaos赢得了这100万刀。顺到一提,国内也有不少家伙参与了这个Prize,比如排名第二的Ensemble组里就能看到中科院某所学生的身影。
这个推荐系统咋做呢?我们先从简单的模型开始。以netflix为例,netflix有个影评系统,在你租完DVD以后会让你打分(1-5分)。当然不是所有人都会认真去打,实际上只有少数家伙会给打分(这世界上懒人何其之多)。同样,对每个用户而言,他也只可能给部分看过的DVD打分。假设现在有个用户和
部电影,如果把所有评分列成一张大表,可以得到矩阵
。其中,每一行对应一个用户的评分,每一列对应一部电影的用户评价。可以想象,这个矩阵中只有少部分元素是已知的(图1)。
从现有的用户数据,来预测未知的用户数据,这就是collaborative filtering了。那么这个东西怎么实现呢?解释起来难,做起来容易,这个模型放在在topic model里叫做Probabilistic latent semantic analysis (PLSA),放在代数里叫做矩阵分解(Matrix Fatorization)或者矩阵填充(Matrix Completion),这里就只能形象的解释下。虽然用户千奇百怪、电影成千上万,但总可以归结为若干类型:比如有腐女向、宅男向电影之分,再比如有悲剧也有喜剧。如果把这些latent factor画成一个空间,那么不同的用户群体应当位于这个latent factor空间的不同位置,体现了不同用户的喜好。如果可以把用户喜好连同潜在的latent factor一同计算出来,预测也自然水到渠成了。从某种角度来看,奇异值分解过程也就是上述的剥离latent factor和用户喜好的过程,这其中的philosophy可以参见这篇文章。
咱首先要谈的是矩阵奇异值的稀疏性,为此先来回忆下奇异值分解。
1. 奇异值非负,即
2. 奇异值非0元的个数即为矩阵的秩(rank)
如果把奇异值写成对角矩阵的形式(比如SVD分解的标准形式),其对角元为
。进一步,矩阵
的迹范数(trace norm)
定义为矩阵奇异值之和,即有
现在我们可以把collaborative filtering的基本问题回顾一下,给定一张推荐数据表,已知其下标子集
中的元素(也就是有评分的部分),如何恢复这个矩阵?这就是matrix completion的问题了…
乍眼一看,这基本就是mission impossible了,即使只有一个元素未知,这个矩阵也不可能唯一。但是如果我们加一些限制条件,这个问题就变得有趣起来了。Candes考虑的是这么一个问题:
其中表示在子集
上的投影(即只取子集上的对应元素)。实际上,同样的问题可以有不同的表达形式,如果把这个优化问题稍作调整,可以得到相对容易解释的模型:
其中Frobenius范数也就是矩阵的2范数。从这个式子来看,我们希望找到这么一个矩阵,使得其在已有的数据上和用户评分
尽可能的一致(2范数意义下),同时具有比较低的秩(受到上限
的约束)。这里对于秩的约束,很多时候是为了降低模型自身的复杂度(比如collaborative filtering,multiple instance learning)。当然,这里也可以看成是一个fidelity term + regulariztion term的经典形式。
实际上矩阵的rank是一个不那么友好的函数,rank自身是非凸、不连续的,最后的结果就是对于rank的优化问题是NP难的。类比0范数与1范数的关系,矩阵的秩(rank)相当于这个对角阵的0范数;矩阵
的迹范数(trace norm)
相当于这个对角矩阵的1范数。为此,如果这个对角矩阵足够稀疏,即矩阵
的秩
,那么可参照向量的稀疏表示,利用矩阵的迹范数(trace norm)代替矩阵的秩(rank)。
同样,由于迹范数(trace norm)是凸的,上式是一个凸优化问题,故而必有唯一的最优解。如果这种近似是可以接受的,那么这个问题自然也就解决了。
这种近似靠谱么?这就是Candes和Recht回答的关键问题。Candes从random orthogonal model出发,证明了在此假设下从某个秩为的真实矩阵
中均匀抽取
个元素,且满足(这里不妨设
,反之只需要转置即可)
则凸优化问题的唯一最优解至少以概率
逼近原始矩阵
,即有
其中均为某常数。更进一步,如果矩阵的秩
足够小,对于元素数量
的要求会进一步降低。
咱来聊聊这个结果,这说明在random orthogonal model假设成立的条件下,如果相对于
比较小,那么只需要知道这个矩阵中约
个元素,就可以很高的概率恢复出这个矩阵。举例而言,如果我们有一个
秩为10的矩阵,那我们大致只需要从中随机抽取约270万个元素就可以(以很高概率)恢复出原始矩阵了(当然270万貌似也是一个很大的数,但原始矩阵约含有1700万个元素…)。实际上,这是一个相对保守的界,Recht在此基础上还进行了一系列的理论工作。自从出现了这个之后,under mild condition,大家都把rank直接放成trace norm了…从实用的角度来说,Candes告诉我们用凸优化去近似一个NP问题,可能得到很好的解。从实验结果来看(代码见此),这种近似有时候效果一流,但有时候也根本不work(违背了假设条件),故而具体问题还得具体对待。
虽然早在04年NIPS上,就有人提出了类似的优化方法(MMMF),用trace norm代替rank,并且ML领域中也确实有不少类似的工作。但是,Candes的工作解决了根本的理论问题,并为一系列的rank minimization的问题指了一条出路。这里有一个比较有意思的地方是,MMMF是从构造最大间隔线性分类器的角度出发来考虑matrix factorization的问题,并且用的是low norm,但和matrix completion的模型本质上是差不多的,两者关系大家可以自行推导下。
咱接着要讨论的是矩阵元素的稀疏性,这个工作也和Candes有着很大的关系。咱先把上面的公式照着copy一遍:
如果咱已知矩阵的全部元素,这个东西类似很常见的PCA了:
这样问题就变成了去噪+降维。进一步把F范数(2范数)改写为0范数:
为啥是0范数呢,这是基于这么一种假设:误差相对于总体样本而言总是稀疏的。于是,我们可以引入辅助变量表示误差,并把上式稍作改写:
这里的用于平衡矩阵的秩和误差的稀疏性。同样,rank和0范数什么的都是相当讨厌的东西,于是咱松弛一下,就有
这就是Robust Principle Component Analysis (RPCA) 或者Principle Component Pursuit 的核心模型了。这幅图很好的说明了RPCA和PCA的区别(转自Yi Ma主页)。
| |
PCA | RPCA |
说起RPCA,这里岔开两句,这个东西原来是Yi Ma的学生John Wright发在NIPS09上的一篇文章。结果接收之后,被Candes指出了一个bug(审稿人没看出来),于是Candes对这个问题进行了考虑,从而就有了一篇叫做《Robust Principal Component Analysis?》的文章(preprint)。Candes证明了在同matrix completion基本相同的假设下,这种近似以很高的概率恢复精确结果(详细结果可见RPCA的论文)。特别的,此时可以简单选择参数。Matrix Completion(MC)和 RPCA在Yi Ma的主页上有一个简单的介绍,上面列举了相关文献与代码的链接。
MC和RPCA在computer vision上有啥用呢?John Wright在NIPS的文章里做了两个实验:背景建模,人脸阴影去除。大家有兴趣可以查查cvpr 10的paper, 有用MC来做video denoising的,有用RPCA来做人脸对齐的…还有那篇best paper也是紧密相关。咱本来还想聊聊这些模型的优化算法,鉴于篇幅所限,就只能留到(下)篇去了。