结构化学习

一.问题的提出 我们先回想一下之前经常处理的问题,我们常常是在给定这样一组模式的情况下: (x1,y1),...,(xn,yn)∈X×Y 寻找这样一个映射: f:X→Y 但是我们注意到,在各种回归和分类问题中,我们常常认为Y=R,也即是响应变量为标量,但是我们应该注意到,我们在学习过程中,往往还要面对另一类很重要的问题,需要我们通过模型得到结构化的y,例如,我们在进行自然语言处理的时候,我们在输入一个句子(x),我们可能希望得到一个解析树(y),显然,这是我们之前的模型所无法处理的,因此我们引入了结构化学习(Structured Learning)。 二.Ranking SVM 1. 问题说明 在介绍怎么解决这一类问题之前,让我先绕一点儿弯路,想一下另一个问题:我们在进行网络检索的时候,我们常常需要需要考虑一个问题,当我们获取到检索相关的文档之后,我们需要对文档做一定的顺序排列返回给用户,原因很简单,放在前面的文档显然更加占便宜,容易被用户关注到。 考虑直接将排序问题转化为以查询-文档为训练样本的分类或者回归问题: 但是我们注意到,这样的建模方法所进行的样本训练是跨查询进行的,而这些查询中由于对文档的重要性标注有不同的数量级差异,而这种差异会导致我们在训练时学习到不必要的特性,从而干扰模型的效果。 进一步,我们注意到我们在进行排序的时候,只需要考虑在同一个查询中的文档相对分值大小,因此不会跨查询进行: 因此我们考虑充分利用这种特性获得更好性能的模型。 2. 模型建立 给定训练数据: D={Dqi}Ni=1,Dqi={(dij,yij)}Mij=1 分别对应查询集合和查询的文档集合。 对于每一个查询-文档对都建立特征向量ϕ(q,d) 将其参数化,不妨设: f(q,d)=⟨w,ϕ(q,d)⟩ 对于文档di和文档dj,我们都可以一组序偶对: (ϕ(q,di)−ϕ(q,di),z),z={+1,di>dj−1,di 然后,我们注意到,我们已经建立了一个求解目标,对于任何的输入x,我们希望找到: y^=argmaxy∈YF(x,y;w) 因此,这个问题也被转化为一个二分类问题,我们得到如下样本点: ∀y∈Y∖yi,(ψ(xi,yi)−ψ(xi,y),+1) ∀y∈Y∖yi,(ψ(xi,y)−ψ(xi,yi),−1) 四.损失函数的建立 在解决模型的时候,我们毫无例外地,需要定义一个优化方向,我们按照机器学习的一般方法,首先定义损失函数: 对于一个给定的样本(xi,yi),我们可以借鉴上面的Ranking SVM思想,由于我们在进行模型推断的时候,我们并不需要跨xi进行,因此我们只需要比较得到相对大小即可,我们可以直观的获得一个损失函数: E=maxy∈Y 可能会有人有疑问,这个并不是我们常见的经验损失函数,我将在后面对这个问题进行解释,并且证明它们的同质性。 先占个坑,我们直观意义上的损失函数为: Eempirical=1n∑nΔ(y~,y) 五.使用感知机进行求解 我们考察上面的损失函数,我们注意到,尽管上面的函数是一个阶梯函数,但是我们在取定y的时候,依然可以对其进行求导: ∂E∂w=ψ(xi,y~)−ψ(xi,yi) 使用梯度下降法,我们可以得到: wk+1=wk−η∇E=wk−η(ψ(xi,y~)−ψ(xi,yi)) 如果我们取学习率参数为1,那么我们就很轻易的获得: wk+1=wk−ψ(xi,y~)+ψ(xi,yi) 我们注意到,这恰好是感知机的迭代方式。 进一步,根据感知机收敛法则,这样的迭代式一定能够结束的,并且最大迭代次数: k≤Rσ 很庆幸,没有与|Y|扯上关系,那么这个问题的求解就是很简单的了。 六.Structured SVM 从上面的感知机模型,我们一个很自然的想法就是,我们可不可以使用SVM对问题的解的形式做进一步的优化: 与SVM相似,如果我们提出约束: ∀i∈{1,2,3,...,n},∀y∈Y∖yi ≥1 上面约束的意思也很明显,就是我们要求最佳的匹配要比其它的好出一个度。 此时我们的优化目标为: minw12∥w∥2 这与我们之前的SVM是完全一致的,但是值得一提的我们注意到Y空间的高维性会带来求解的困难。 进一步,如果我们引入松弛因子,我们有: minw,ξi12∥w∥2+Cn∑i=1nξi s.t. ≥1−ξi,∀i∈{1,2,3,...,n},∀y∈Y∖yi 七.re-scaling slacks or margin 1. slack re-scaling 我们解到这一步的时候,可能都觉得会松了一口气,但是其实我们还忽略了另一个问题,也就是我们之前一直忽略的经验损失函数,我们仅仅考虑了两个模式的匹配程度,但是从一个角度讲,如果这两个结果在结构上是相似的,我是是不是就应该倾向于接受它;反之呢,我们是不是该选择抛弃它? 基于上面的做法,我们进一步引入惩罚因子——经验损失函数,直观的,我们可以将这个惩罚因子加在松弛因子上,那么其约束条件变为: ≥1−ξiΔ(yi,y),∀i∈{1,2,3,...,n},∀y∈Y∖yi 2. margin re-scaling 也许你也能看出来,将这个惩罚因子加在第一个因子上也是合情合理的,此时,约束变为: ≥Δ(yi,y)−ξi,∀i∈{1,2,3,...,n},∀y∈Y∖yi 这两个并不是很难理解,进一步可以引出来我们下面对于损失函数的解释。 八.why not 经验损失? 我们知道,在一般的SVM中,我们求得的合页损失函数是0-1损失函数的一个上界,但是structured svm还要更复杂一点。 回到我们上面关于slack re-scaling的公式,结合松弛因子的约束: 整理得: ξi=maxy≠yi{0,maxΔ(yi,y)(1−())} 我们可以分为两种情况进行讨论: 1.= 从而我们有: ξi≥0=Δ(yi,y) 2.不相等,即我们没有找到严丝合缝的match: ξi=maxΔ(yi,y)(1−())≥Δ(yi,y) 从而我们得出结论:我们求出的损失函数是经验损失的一个上界(upper bound)。 对于margin re-scaling的证明不再赘述。 进一步,我们注意到对于结构化的输出,经验损失函数的定义是比较复杂的,此时我们很难对其进行求导等操作,因此我觉得这也算是一个权宜之计。 九.参数学习-cutting plane algorithm 我们注意到在上面的优化目标中,我们可能在求解上遇到一些困难。 考察约束个数,我们发现上述的约束个数为n*|Y|-n,如果我们考虑Y的维度十分高的时候,我们对于这个问题的求解是无能为力的。 但是我们同时进行一些直观的思考,我们很难去想象,我们最终搜索的可行域,是被所有的约束条件所限制的,直观上和实际上,大多数约束都属于redundancy,对于我们的求解,我们希望避开所有这样的约束(甚至于,某些有意义的约束在求解过程中也是可以忽略的)。 因此我们在实际求解中,我们会使用cutting plane algorithm,其思想是进行试错,每一次选择违背最厉害(violated mostly)的约束,将之加入到约束集中,直到不违反任何约束为止。 考虑到我们的学习过程可以和约束选择过程可以同时进行,因此我们不难想象这一个算法的收敛是比较快的。 其算法步骤如下: 或者: https://www.cnblogs.com/sugar-mouse-wbz/p/9884898.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信