结构预测瀑布(Structured prediction cascades)

也是很久没有看跟deep不相关的论文了,而且本身对图模型也不是特别的熟悉(虽然上过课,但是也是基本上忘的差不多。)

读这篇Structured prediction cascades是因为我的qualifying exam。我们这qualifying exam是给你assign一篇非你领域内的论文,然后给你一个月时间,然后做个关于这个paper的presentation。理论上他可以问任何跟这篇论文相关的问题,可以问的很偏,但是这主要看老师,有些老师就喜欢狂问问题,问蒙你,有些就比较和善。

我的committee member都很和善,当时我拿到名单我就觉得妥了。。。。然而。。。。。我是conditional pass。。。。。很尴尬,但是基本上算过了。

接下来是这篇论文,论文地址http://homes.cs.washington.edu/~taskar/pubs/aistats10cascades.pdf事实上这是一篇10年的paper,那个时候deep learning还没有这么牛逼,所以这篇文章跟dl半毛钱关系都没有。

首先在这篇文章中,主要研究的是structured prediction。structured prediction是什么呢?可以它认为是监督学习的一种。如果预测的输出是一个离散变量,我们一般称之为分类,如果是一个实数,我们一般叫他回归。而如果输出是一个structured object,则这时候叫structured prediction。

什么东西是structured data?structured object一般可以被分解成几个部分,并且部分之间包含信息。比如说一句句子,中间词与词总有主谓宾定状补的关系吧。image,text,甚至蛋白质folds都可以认为是结构数据。

有很多我们熟悉的问题都可以看作是structured prediction,比如说nlp中的pos tagging,parsing,translation,再比如vision中的segmentation,pose estimation。

这篇文章主要考虑的就是模型在做预测的时候approximation vs. computation. Approximation其实就是说模型能拟合的程度(在regression里面就是,你用一次来拟合二次就approximation就很差,三次来拟合二次approximation就很好)。approximation vs. computation就是,简单的模型approximation不够,但是速度快;而复杂的模型虽然approximation好,表达能力更强,但是速度太慢。这篇文章就是来解决这个问题的。

解决的方法就是用cascades(一串模型),用coarse to fine的方式来解决这个问题。这里先介绍一下cascade在face detector里面的用法。(这也是这篇文章的灵感来源)

结构预测瀑布(Structured prediction cascades)

结构预测瀑布(Structured prediction cascades)

这里是一个face detection的cascade例子。每一层的模型做的事情是确定哪些一定不是face,然后把他们滤掉。一开始可以先用简单的模型,快速滤掉明显错误的,然后再用复杂的模型在更小的搜索空间里搜索。由于搜索空间小了,所以原本跑的慢的模型也不会太慢了。

 

放在structure prediction中其实也是一样,我们想找到的是最好的一个输出,而每一层的模型就是将肯定是错的输出滤掉。

模型

notation:input space 结构预测瀑布(Structured prediction cascades), output space 结构预测瀑布(Structured prediction cascades), X和Y的联合分布D(X, Y),训练数据S和loss function 结构预测瀑布(Structured prediction cascades)

一般来说,监督学习可以认为是,学习一个结构预测瀑布(Structured prediction cascades),使得期望loss结构预测瀑布(Structured prediction cascades)最小。

在结构预测下,结构预测瀑布(Structured prediction cascades)就是有结构的,这篇论文里,他们假设Y是定长的离散向量:结构预测瀑布(Structured prediction cascades)

马尔可夫模型

TL;DR,他们定义了一个score function 结构预测瀑布(Structured prediction cascades),这个公式来自于markov模型,c为markov网络中的cliques。

 

这篇paper他们用了概率图模型来定义结构预测瀑布(Structured prediction cascades)(其实他们最后并没有用到概率解释),那么这时候结构预测瀑布(Structured prediction cascades)就可以了。之所以使用图模型,1是这样可以对变量之间的关系进行建模,2是因为这样就可以使得argmax操作(inference)变成tractable的。(如果在Y空间中爆搜,就是指数级别的复杂度)

根据图模型然后就可以将结构预测瀑布(Structured prediction cascades)因子化,变成定义在clique上的因子的乘积

结构预测瀑布(Structured prediction cascades)

结构预测瀑布(Structured prediction cascades)是一个y的subset,是包含在clique c中的元素。

 

再进一步,我们这里用log-linear的模型,这样的话,就可以继续写成

结构预测瀑布(Structured prediction cascades)

为了之后notation方便,我们定义结构预测瀑布(Structured prediction cascades)结构预测瀑布(Structured prediction cascades),这样的话

结构预测瀑布(Structured prediction cascades)

所以这时候结构预测瀑布(Structured prediction cascades)。再之后我们就不用考虑概率解释了,就把结构预测瀑布(Structured prediction cascades)当作是一个分数,给(x,y)对的一个分数。

 

在这篇文章中,他们在每一层使用的都是linear-chain markov模型;随着层数的增高,他们从第一层的0阶到最后3阶4阶。

 

结构预测瀑布(Structured prediction cascades)结构预测瀑布(Structured prediction cascades)结构预测瀑布(Structured prediction cascades)

此图为一阶markov模型的示意图。

 

在一阶markov中,clique分别为结构预测瀑布(Structured prediction cascades),且结构预测瀑布(Structured prediction cascades)

 

瀑布

在cascade的每一层中,都是上面介绍的这种linear分数模型,不同的是,每一层拥有不同的参数和结构,越后面的层越复杂。和普通的结构预测不一样,cascade模型只有在最后一层才做预测,前面所有的层都是做filtering。

Inference(推断)

怎么样用cascade做推断呢,其实很简单,就是通过一层一层的layer,每一层都滤掉一些错误解。滤掉错误解的方式,是滤掉错误的的clique assignment。比如说这一层是first order markov model,那我滤掉的就是 y1y2, y2y3 ... y_{l-1}yl的取值。怎么样的取值会被滤掉呢,我们可以计算每个clique 取值的max marginal(之后再定义,这里可以认为是clique assignment的分数),如果max marginal大于一个阈值(一会再定义),则它就被滤掉了。

max-marginal的定义为,结构预测瀑布(Structured prediction cascades)也就是说,所有拥有y_c clique取值的y能获得的最大分数。

然后阈值的定义如下,

结构预测瀑布(Structured prediction cascades)

其中结构预测瀑布(Structured prediction cascades)结构预测瀑布(Structured prediction cascades)结构预测瀑布(Structured prediction cascades)。这个阈值其实就是最高可能分数和平均max marginal分数的一个convex组合。其中alpha是在dev set上调的,可以认为是一个超参数。

这样的定义,1,与所有分数都是在同一scale的,不会因为不同x不同scale而会产生问题。第二,这个阈值关于w是凸的,所以之后训练时能是一个凸优化。

 

训练

cascade的训练时一层一层分开训练的。每一层我们先选定一些结构预测瀑布(Structured prediction cascades)的取值,然后训练的到w。

loss function为:

结构预测瀑布(Structured prediction cascades)

其中,结构预测瀑布(Structured prediction cascades)

这个loss function和在svm中非常像,简单的说就是希望ground truth的分数要比threshold要高一个margin(这里是1)。他们用subgreadient descent来训练这个模型。

实验

简单的说,就是他们能不怎么损失精度的得到更快的速度。

 

结尾

并不是特别exciting的paper,但是作为qualifying exam让我复习一遍图模型还是可以的。虽然这篇文章本身的idea很好,但是其实follow up的工作并不多,可能实际使用中没有特别的优势吧。

但是图模型在deep中还是有挺多应用的。用来做segmentation的post processing,或者将crf变成rnn啊,或者将本文中linear model替换成一个deepnet啊。可移步概率图模型与深度学习能够如何结合? - 知乎

 

ps:很明显写到后面不是很想写了。。。。。。。但是如果想具体了解一些细节的话,这里有我写的英文的summary。http://ttic.uchicago.edu/~rluo/files/qualifying_exam_summary.pdf

如果再想多了解一些,这里是原paper,http://homes.cs.washington.edu/~taskar/pubs/aistats10cascades.pdf

如果再再想多了解一些的话,这里是原paper的journal版本,虽然没发出去,https://arxiv.org/pdf/1208.3279.pdf

 

原文出处:https://zhuanlan.zhihu.com/p/27315649