绿色健康小清新

耐得住寂寞,守得住繁华

李宏毅机器学习-63-Structured Learning-03-Structured Support Vector Machine

Structured Support Vector Machine

结构化学习要解决的问题,即需要找到一个强有力的函数 f

f:XYf : X \rightarrow Y

  1. 输入和输出都是具有结构化的对象;
  2. 对象可以为:sequence(序列),list(列表),tree(树结构),bounding box(包围框),等等

其中,X是一种对象的空间表示,Y是另一种对象的空间表示。

Unified Framework(统一框架:两步走,三问题)

two steps(两步)

第一步:训练

  • 寻找一个函数 F

    F:X×YR\mathrm{F} : X \times Y \rightarrow \mathrm{R}

  • F(x, y): 用来评估对象x和y的兼容性 or 合理性

第二步:推理 or 测试

  • 给定一个对象 x,求得:

    y~=argmaxyYF(x,y)\tilde{y}=\arg \max _{y \in Y} F(x, y)

    即给定任意一个x,穷举所有的y,将(x, y)带入F,找出最适当的y作为系统的输出。

three problems(三问题)

  • Q1: Evaluation(评估)

    • What: F(x, y) 的形式
  • Q2: Inference(推理)

    • How: 如何解决 “arg max” 问题

      y~=argmaxyYF(x,y)\tilde{y}=\arg \max _{y \in Y} F(x, y)

      即转换为最优化的求解问题。
  • Q3: Training(训练)

    • 给定训练数据,如何求解 F(x, y)?

Example Task: Object Detection(示例任务:目标检测)

Evaluation

F(x,y)F(x,y)做一些假设,可以让之后的任务变得容易一点,这里假设F(x,y)F(x,y)是线性的。

xx是一张图片,yy是一个bounding box。也就是F(x,y)F(x,y)可以写成一个weight(ww),跟一个特征向量ϕ()ϕ()的内积。ww是Q3里通过训练数据学习出来的,而ϕ()ϕ()是人工定的。

开放问题:F(x,y)F(x,y)可以是非线性的吗?

你可能知道说F(x,y)F(x,y)如果是线性的话,其实是很弱的,做不了什么太厉害的事情,必须要依赖一个复杂的抽特征的方式来得到一个好的结果。但这可能不是我们想要的,我们希望机器能做更复杂的事而不是有太多人的知识介入在里面。关于F(x,y)F(x,y)非线性的研究还很少,因为F(x,y)F(x,y)不是线性的话,等会要讨论的都不成立了。所以我们之后,多数情况都是假设F(x,y)F(x,y)是线性的。

Inference

给你一个xx,你要去穷举所有可能的y,看哪一个y可以让你的评估函数(wϕ(x,y)w⋅ϕ(x,y))最大,那么需要一个演算法有效的做这件事情。

y~=argmaxyYwϕ(x,y)\tilde{y}=\arg \max _{y \in \mathbb{Y}} w \cdot \phi(x, y)

以目标检测为例,就要穷举所有可能的bounding box,对每个bounding box都要算一个分数(wϕ()w⋅ϕ())。比如上图右边中间的bounding box得到的分数最大,那就把这个bounding box作为结果y^\hat{y}。你可能觉得穷举听起来是一个很花时间的东西,事实上我们有比较有效率的方法去做穷举(需要自己去想)。

  • 目标检测(取决于ϕ(x, y))
    • Branch & Bound algorithm(分支定界法)
    • Selective Search(选择性搜索)
    • 序列标记(会在下一章着重复现,其取决于ϕ(x,y)\phi(x,y))
  • Viterbi Algorithm(维特比译码算法)
    • 遗传算法(基因演算)

使用什么算法取决于你的task,如果你有不同的task,就要想不同的算法。甚至同一个task,特征ϕ(x,y)\phi(x,y)定义不同,也需要不同的算法。

你可以想象这个统一框架是有用的,虽然没有教你问题具体怎么解决,给你一个结构化学习的问题,如果你不知道这个统一框架,那你就不知道从何解起,而统一框架给了你一个思路。

如果你不知道Q2怎么解,可以使用经典算法,可以解决很多的问题,不过有时候找到的不一定是准确的结果。

开放问题:如果我们没有办法找到一个准确的结果,也就是arg max只能有一个近似的结果,那么这对我们的结果影响有多大?

在以下课程里,我们都假设Q2已经解决了。

Training

训练数据:

{(x1,y^1),(x2,y^2),(xN,y^N)}\left\{\left(x^{1}, \hat{y}^{1}\right),\left(x^{2}, \hat{y}^{2}\right) \ldots,\left(x^{\mathrm{N}}, \hat{y}^{\mathrm{N}}\right)\right\}

我们希望找到一个F(x,y)F(x,y) ,使得F(x1,y1)F(x^1,y^1)必须比其他所有的F(x1,y)F(x^1,y) 的值大,同理F(x2,y2)F(x^2,y^2)必须比其他所有的F(x2,y)F(x^2,y)的值大,以此类推…。

在之后的课程里面,我们集中在Q3,假设已经知道怎么抽ϕ(x,y)ϕ(x,y),Q2里已经解决了如何算y~\tilde{y}


Outline(大纲)

Separable case(可分情形)

也就是SVM里面提到过的,数据是线性可分的,也就是说存在一个权重向量x^\hat{x}使得:

w^ϕ(x1,y^1)w^ϕ(x1,y)+δw^ϕ(x2,y^2)w^ϕ(x2,y)+δ\begin{aligned} \hat{w} \cdot \phi\left(x^{1}, \hat{y}^{1}\right) & \geq \hat{w} \cdot \phi\left(x^{1}, y\right)+\delta \\ \hat{w} \cdot \phi\left(x^{2}, \hat{y}^{2}\right) & \geq \hat{w} \cdot \phi\left(x^{2}, y\right)+\delta \end{aligned}

其中,红色代表正确的特征点(feature point),蓝色代表错误的特征点(feature point),可分性可以理解为,我们需要找到一个权值向量,其作用是与 ϕ(x, y) 做内积(inner product) ,能够将正确的point比蓝色的point的值均大于一个δ\delta

Structured Perceptron(结构化感知机)

  1. 输入:训练数据集

{(x1,y^1),(x2,y^2),(xN,y^N)}\left\{\left(x^{1}, \hat{y}^{1}\right),\left(x^{2}, \hat{y}^{2}\right) \ldots,\left(x^{\mathrm{N}}, \hat{y}^{\mathrm{N}}\right)\right\}

  1. 输出:权值向量w

  2. 算法

    • 初始化w=0w=0

    • do

      • 对于每一个数据样本(xn,y^n)(x^n,\hat{y}^n)(按照顺序或者随便取都可以):

        • 找一个y~n\tilde{y}^nargmaxyYwϕ(xn,y)arg \max\limits_{y∈Y}w·\phi(x^n,y)的值最大(Q2,假设已经解决):

          y~n=argmaxyYwϕ(xn,y)\tilde{y}^n=arg \max\limits_{y∈Y}w·\phi(x^n,y)

        • 如果y~n\tilde{y}^n和正确的值y^n\hat{y}^n 不一样,那就更新ww

          ww+ϕ(xn,y^n)ϕ(xn,y~n)w \rightarrow w+\phi(x^n,\hat{y}^n)-\phi(x^n,\tilde{y}^n)

          更新方式为ww + 正确y^n\hat{y}^n 形成的特征向量ϕ(xn,y^n)\phi(x^n,\hat{y}^n) - 当前最大的特征向量ϕ(xn,y~n)\phi(x^n,\tilde{y}^n)就是让ww跟正确的
          向量靠近得近一点,跟错误的向量远离一点

    • 看完所有数据之后,ww都没有更新的话,也就是说对所有数据来说,argmaxarg \max得到的结果都是各自的y^\hat{y}的话,这个ww就是我们要的

这个算法很简单,问题就是我们不知道到底要花多久才会收敛。

更新次数

结论

在argmaxargmax中的yy非常多,真的能很轻易的找到红点,跟蓝色点分开吗?

结论是可以的,在可分情形下,在可分情形下,为了得到w^\hat{w},我们最多只需更新(R/δ)2(R / \delta)^{2}次。其中:

  • δ\delta 为间隔(使得误分的点和正确的点能够线性分离),
  • R为ϕ(x,y)\phi(x, y)ϕ(x,y)\phi(x, y′)的最大距离(即特征之间最大的距离)

所以算法需要的信息,与y的空间大小无关!不管蓝色的点有多少个,都不会影响我们需要更新的次数。

证明

证明只需要更新(R/δ)2(R/δ)^2

每次发现一笔错误的时候,就会更新一次w。如果你找出来的arg max是y^\hat{y} 就不会被更新,只有y~y^\tilde{y} ≠ \hat{y}时才会被更新。

上图w0=0w1w2wkwk+1w^{0}=0 \rightarrow w^{1} \rightarrow w^{2} \rightarrow \ldots \ldots \rightarrow w^{k} \rightarrow w^{k+1} \rightarrow \ldots \ldots是w更新的演化过程,我们检查wk,wk1w^k,w^{k-1}之间的关系,一定会有:

wk=wk1+ϕ(xn,y^n)ϕ(xn,y~n))(1)w^{k}=w^{k-1}+\phi\left(x^{n}, \hat{y}^{n}\right)-\phi\left(x^{n}, \widetilde{y}^{n}\right)) \tag{1}

提醒一下

这里考虑的是可分情形。

  • 也就是说存在w^\hat{w}
  • 在所有的数据(任意n)上
  • 使得正确的y^\hat{y}的值 ≥ 所有非正确y的值 +δδ
  • 如上图最下方所示

不失一般性的可以假设w^\hat{w} 的长度为1,如果我们可以找到一个w让我们的数据可分离,那么对w做标准化,让它的长度变为1,还是一样可以让数据可分离。

正式开始证明:

首先看一件事情,w^\hat{w}wkw^k之间的关系,如果去计算它们之间的夹角βk\beta_k,会发现当k越来越大时,夹角βk\beta_k越来越小。可以算cosβkcos\beta_k来观察夹角大小:

cosρk=w^w^wkwk\cos \rho_{k}=\frac{\hat{w}}{\|\hat{w}\|} \cdot \frac{w^{k}}{\left\|w^{k}\right\|}

假定存在一个权值向量w^\hat{w}使得

n\forall n,所有的样本:yY{y^n}\forall y \in Y-\left\{\hat{y}^{n}\right\},对于一个样本的所有不正确的标记;

w^ϕ(xn,y^n)w^ϕ(xn,y)+δ\hat{w} \cdot \phi\left(x^{n}, \hat{y}^{n}\right) \geq \hat{w} \cdot \phi\left(x^{n}, y\right)+\delta

不失一般性,假设w^=1\|\widehat{w}\|=1

w^wk=w^(wk1+ϕ(xn,y^n)ϕ(xn,y~n))=w^wk1+w^ϕ(xn,y^n)w^ϕ(xn,y~n)(2)\begin{aligned} \hat{w} \cdot w^{k} &=\hat{w} \cdot\left(w^{k-1}+\phi\left(x^{n}, \hat{y}^{n}\right)-\phi\left(x^{n}, \widetilde{y}^{n}\right)\right) \\ &=\hat{w} \cdot w^{k-1}+\hat{w} \cdot \phi\left(x^{n}, \hat{y}^{n}\right)-\hat{w} \cdot \phi\left(x^{n}, \widetilde{y}^{n}\right) \end{aligned} \tag{2}

在可分情形下,有

w^ϕ(xn,y^n)w^ϕ(xn,y~n)δ(3)\hat{w} \cdot \phi\left(x^{n}, \hat{y}^{n}\right)-\hat{w} \cdot \phi\left(x^{n}, \widetilde{y}^{n}\right)\geq \delta \tag{3}

从而由公式(2)和公式(3)可以得到:

w^wkw^wk1+δ\hat{w} \cdot w^{k} \geq \hat{w} \cdot w^{k-1}+\delta

进一步推导:

w^w1δw^w22δ......w^wkkδ\hat{w} \cdot w^{1} \geq \delta\\\hat{w} \cdot w^{2} \geq 2\delta \\......\\\hat{w} \cdot w^{k} \geq k\delta

最后我们可以得到:

w^wkkδ\hat{w} \cdot w^{k} \geq k\delta

也就是说cosβkcos \beta_k的分子是随着k的增大而增大的,但是光分子变大并不能说明夹角变小,例如:

分子变大,很可能是造成向量的长度变长,这个时候的夹角并没有变化!

因此我们还要看cosβkcos \beta_k的分母 。分母中,w^=1||\hat{w}||=1,所以只要考虑wk||w^k||就可以,如果wk||w^k||不变,且分子变大,那么夹角就能证明是变小的拉。根据公式(1):

wk2=wk1+ϕ(xn,y^n)ϕ(xn,y~n)2=wk12+ϕ(xn,y^n)ϕ(xn,y~n)2+2wk1(ϕ(xn,y^n)ϕ(xn,y~n))(4)\begin{aligned} \left\|w^{k}\right\|^{2} & =\| w^{k-1}+\phi\left(x^{n}, \hat{y}^{n}\right)-\phi\left.\left(x^{n}, \widetilde{y}^{n}\right)\right|^{2}\\ & =\left\|w^{k-1}\right\|^{2}+\left\|\phi\left(x^{n}, \hat{y}^{n}\right)-\phi\left(x^{n}, \widetilde{y}^{n}\right)\right\|^{2}+2 w^{k-1} \cdot\left(\phi\left(x^{n}, \hat{y}^{n}\right)-\phi\left(x^{n}, \widetilde{y}^{n}\right)\right) \end{aligned} \tag{4}

其中,

ϕ(xn,y^n)ϕ(xn,y~n)2>0\| \phi\left(x^{n}, \hat{y}^{n}\right)-\phi\left(x^{n}, \widetilde{y}^{n}\right)^{2}|| \gt 0

这个没什么问题,就相当于是距离,肯定是大于0的,主要是后面那一项;

2wk1(ϕ(xn,y^n)ϕ(xn,y~n))<02 w^{k-1} \cdot\left(\phi\left(x^{n}, \hat{y}^{n}\right)-\phi\left(x^{n}, \widetilde{y}^{n}\right)\right)\lt0

这里是因为算法中规定,只有ϕ(xn,y^n)\phi\left(x^{n}, \hat{y}^{n}\right)小于ϕ(xn,y~n)\phi\left(x^{n}, \widetilde{y}^{n}\right)才会有更新动作,这里既然是出于更新中,所以这项小于0。

假设两个特征ϕ(xn,y^n)\phi\left(x^{n}, \hat{y}^{n}\right)ϕ(xn,y~n)\phi\left(x^{n}, \widetilde{y}^{n}\right) 的最大距离是RR,公式(4)可以写为:

wk2wk12+R2\left\|w^{k}\right\|^{2} \leq\left\|w^{k-1}\right\|^{2}+\mathrm{R}^{2}

我们假设任意两个特征向量之间的距离小于R,并且ww的初始值w0=0w^0=0,则有:

w12w02+R2=R2w22w12+R22R2......wk2kR2\left\|w^{1}\right\|^{2} \leq\left\|w^{0}\right\|^{2}+\mathrm{R}^{2}=\mathrm{R}^{2}\\ \left\|w^{2}\right\|^{2} \leq\left\|w^{1}\right\|^{2}+\mathrm{R}^{2}\leq2\mathrm{R}^{2}\\ ......\\ \left\|w^{k}\right\|^{2} \leq k\mathrm{R}^{2}

最后我们可以得到:

wk2kR2\left\|w^{k}\right\|^{2} \leq k\mathrm{R}^{2}

我们上面推导出了两个结论:

w^wkkδwk2kR2\hat{w} \cdot w^{k} \geq k \delta \qquad \left\|w^{k}\right\|^{2} \leq k \mathrm{R}^{2}

则带入cosρk\cos \rho_{k}的式子中,可以得到:

cosρk=w^w^wkwkkδkR2=kδR1\cos \rho_{k}=\frac{\hat{w}}{\|\hat{w}\|} \cdot \frac{w^{k}}{\left\|w^{k}\right\|} \geq \frac{k \delta}{\sqrt{k R^{2}}}=\sqrt{k} \frac{\delta}{R} \leq 1

即:

k(Rδ)2k \leq\left(\frac{R}{\delta}\right)^{2}

就得到我们的结论最多更新(Rδ)2\left(\frac{R}{\delta}\right)^{2}


How to make training fast?(如何快速训练?)

k(Rδ)2k \leq\left(\frac{R}{\delta}\right)^{2}我们发现,如果δδ越大,那么更新次数越少,你可能为了让训练快一点,会想个方法让δδ增加。你会想说找一组好的特征,可以让红色的圈圈跟蓝色的圈圈分得比较开,你让所有的特征乘以2,相当于上图最下方的图放大2倍,这样ϕ\phi就直接增加了2倍。但是这样并不会让学习变快,因为R同时也增加了2倍。所以单纯放大是没用的,要真的去挪动点的位置。

Non-separable case(不可分情形)

不可分情形要考虑的是,虽然没有任何一个向量可以让正确答案和错误答案被正确分开,但是在这些向量里面,我们还是可以区分出好坏,鉴别出高下。

比如有一个ww′,可以把正确答案排在第二名,有另外一个ww′′,把正确答案排在最后一名。虽然w,ww',w''都没有办法让正确答案高过所有其他答案,但是ww′明显更好。所以在不可分情形下, 还是可以定义一些评估方法来看ww是好是坏。

Defining Cost Function(定义成本函数)

定义一个成本函数C来评估w的效果有多差,然后选择w,从而最小化成本函数C。

关于CnC^n,就是第n笔数据xnx^n 的cost,意思是:给定的w,在所有的y里面,找到使得wϕ(xn,y)w ⋅ ϕ ( x^n , y )最大的值:

maxywϕ(xn,y)\max\limits_{y}w\cdot \phi(x^n,y)

然后减去正确y^n\hat{y}^nwϕ(xn,y^n)w\cdot\phi(x^n,\hat{y}^n)的值:

Cn=maxywϕ(xn,y)wϕ(xn,y^n)C^n =\max\limits_{y}w\cdot \phi(x^n,y)-w\cdot\phi(x^n,\hat{y}^n)

这里CnC^n 最小值是0;因为它的值不可能是负的,如果max就是正确的,相减最小为0。

为什么是减去正确y^n\hat{y}^nwϕ(xn,y^n)w\cdot\phi(x^n,\hat{y}^n)的值,因为之前上节课的假设中我们已经假定这个值我们会算,所以顺其自然的用这个值了,如果你要用最正确的前三个值也可以,但是你不会求这三个值,会很麻烦。

把所有的cost累加起来就是CC

C=n=1NCnC = \sum_{n=1}^N C^n


(Stochastic) Gradient Descent((随机)梯度下降法)

虽然cost函数中有一个max操作,是不可导的,但是还是可以梯度下降的,例如之前激活函数ReLU虽然在0点不可导,还不是可以反向传播。

目标是:Find ww minimizing the cost C :

C=n=1NCnCn=maxywϕ(xn,y)wϕ(xn,y^n)C= \sum_{n=1}^NC^n \\ C^n =\max\limits_{y}w\cdot \phi(x^n,y)-w\cdot\phi(x^n,\hat{y}^n)

  • 当w不同时,y也会发生改变(在w的二维空间下,被max切割后的效果);

  • 求解C的梯度Cn\bigtriangledown C^n,只需要求解ϕ\phi 之间的差值即可:

    Cn=ϕ(xn,y)ϕ(xn,y^n)\bigtriangledown C^n = \phi(x^n,y) - \phi(x^n,\hat{y}^n)

  • 最后利用SGD(随机梯度下降法)更新参数w。

想象上图最下方是w形成的空间,被max切割成好几块。这里是二维平面,那么w就是二维的向量。

  • ww在最左边区域的时候maxywϕ(xn,y)\max\limits_{y}w\cdot \phi(x^n,y)的取值是yy'
  • ww在最中间区域的时候maxywϕ(xn,y)\max\limits_{y}w\cdot \phi(x^n,y)的取值是yy''
  • ww在最右边区域的时候maxywϕ(xn,y)\max\limits_{y}w\cdot \phi(x^n,y)的取值是yy'''

因此在每个区域中的CnC^n也可以很好算出来:

  • ww在最左边区域的时候Cn=maxywϕ(xn,y)wϕ(xn,y^n)C^n =\max\limits_{y}w\cdot \phi(x^n,y')-w\cdot\phi(x^n,\hat{y}^n)
  • ww在最中间区域的时候Cn=maxywϕ(xn,y)wϕ(xn,y^n)C^n =\max\limits_{y}w\cdot \phi(x^n,y'')-w\cdot\phi(x^n,\hat{y}^n)
  • ww在最右边区域的时候Cn=maxywϕ(xn,y)wϕ(xn,y^n)C^n =\max\limits_{y}w\cdot \phi(x^n,y''')-w\cdot\phi(x^n,\hat{y}^n)

这三个区域中的边界部分不可以微分,但是在中间的区域都是可以微分的,因此,三个区域对ww进行微分后求梯度Cn\bigtriangledown C^n变成:

  • ww在最左边区域的时候Cn=ϕ(xn,y)ϕ(xn,y^n)\bigtriangledown C^n = \phi(x^n,y') - \phi(x^n,\hat{y}^n)
  • ww在最中间区域的时候Cn=ϕ(xn,y)ϕ(xn,y^n)\bigtriangledown C^n = \phi(x^n,y'') - \phi(x^n,\hat{y}^n)
  • ww在最右边区域的时候Cn=ϕ(xn,y)ϕ(xn,y^n)\bigtriangledown C^n = \phi(x^n,y''') - \phi(x^n,\hat{y}^n)

那么整个算法的流程如下图所示:

  • For t=1 to T:

    • 每次都随机抽取一个样本{xn,y^n}\{x^n,\hat{y}^n\}

      • 首先要知道落在哪个区域里面(当前w下),算出来是在y~n\tilde{y}^n区域里面:

        y~n=argmaxy[wϕ(xn,y)]\tilde{y}^n = arg \max\limits_{y}[w\cdot \phi(x^n,y)]

      • 计算梯度:

        Cn=ϕ(xn,y~n)ϕ(xn,y^n)\bigtriangledown C^n = \phi(x^n,\tilde{y}^n) - \phi(x^n,\hat{y}^n)

      • 更新w:

        wwηCn=wη[ϕ(xn,y~n)ϕ(xn,y^n)]w \rightarrow w - \eta\bigtriangledown C^n = w-\eta[\phi(x^n,\tilde{y}^n) - \phi(x^n,\hat{y}^n)]

这里也注意两点:

  • 当学习率设为1时,就转换为经典的结构化感知机
  • 当设置不同的学习率,将会产生不同的模型。

Considering Errors(考虑误差)

要修改下我们的误差函数,在之前的误差函数里,对我们来说所有错误都是一视同仁的,事实上错误并不是同等地位的。

在结构化学习的例子里面,output有很多的可能,有一些output跟正确的很接近。比如上图右边,正确的是红色框框,如果output是第二个框框(也是框在凉宫春日脸上),你对这个结果也是可以接受的,但是框在下面两个框框上你就不能接受了。所以不同的错误之间还是有差别的(错误有不同的等级),我们应该把这件事考虑进去。比如框在樱花树上,那结果是非常差的,我会希望它的分数特别低,而框在凉宫春日脸上(有些地方没框好),其实结果也是可以接受的,希望跟正确的分数比较接近。如果有另外一个w,不仅能把正确的放在第一位,还可以让那些可以接受的结果分数比较高,错的很离谱的结果分数很低,那显然这个w更好。这样的ww还有一个好处,得到的结果是比较安全的,假如testing跟trainging数据是有一些差距的,就算第一名不是正确的,也可以保证和正确的不会有太大偏差。

怎么把不同误差不同等级考虑到误差函数里呢?

一个可能的想法说,如上图红色框框是正确的,两个黄色框框是错误的,但是第二个错误的框框和正确的很像,会希望分数差距比较小。反之有个框框(上图第三个)错得很离谱,会希望分数和正确的分数差距比较大。


Defining Error Function(定义误差函数)

现在的问题就变成,如何考虑Error,或者说如何来衡量计算结果与正确结果之间的差距(difference)?

这件事情其实也是取决task的,不同task你要想办法自己定义。

我们的定义(y^,y)\triangle(\hat{y},y)为误差的函数,至于到底什么样子要自己定义。以下讨论我们假设\triangle是一个正值,如果是自己对自己,那么\triangle就是0,常见的做法把\triangle定义成上图右下方所示:

(y^,y)=1A(y^)A(y)A(y^)A(y)\triangle(\hat{y},y) = 1 - \frac{A(\hat{y})∩A(y)}{A(\hat{y})∪A(y)}

A(y)A(y)代表yy框框的面积,如果两个框框的面积交集很小,那么\triangle就接近1,交集很大,\triangle接近0。


Another Cost Function(其它的成本函数)

有了 \triangle 之后,怎么修改成本函数?

本来的成本函数CNC^N计算时,是取分数最高的y

Cn=maxy[wϕ(xn,y)]wϕ(xn,y^n)\begin{array}{l}{C^{n}=\max _{y}\left[w \cdot \phi\left(x^{n}, y\right)\right]-w \cdot \phi\left(x^{n}, \hat{y}^{n}\right)}\end{array}

现在不是取分数最大,而是要分数++\triangle最大,\triangle也可以叫做Margin:

Cn=maxy[Δ(y^n,y)+wϕ(xn,y)]wϕ(xn,y^n){C^{n}=\max _{y}\left[\Delta\left(\hat{y}^{n}, y\right)+w \cdot \phi\left(x^{n}, y\right)\right]-w \cdot \phi\left(x^{n}, \hat{y}^{n}\right)}

思想就是:如果max中找出来的 y 的\triangle值很大,那么为了使CnC^n越小,就会希望wϕ(xn,y)w\cdotϕ(x^n,y)越小(跟正确答案的分数差的越远),反之如果有个y 跟正确框框很像的话(\triangle值很小),分数就会更接近正确的分数。加上\triangle让错误的框框分数离正确的越远,而让可以接受的框框分数变化比错误的远小,这样就拉大了两者之间跟正确分数的差距,就让错误的更错,稍微正确的没有那么错。


Gradient Descent(梯度下降)

为了和之前没有考虑Error的梯度求解区分开来,之前用的是y~\tilde{y},这里用yˉ\bar{y},具体过程如下:

  • For t=1 to T:

    • 每次都随机抽取一个样本{xn,y^n}\{x^n,\hat{y}^n\}

      • 首先要知道落在哪个区域里面(当前w下),算出来是在y~n\tilde{y}^n区域里面:

        yˉn=argmaxy[(y^n,y)+wϕ(xn,y)]\bar{y}^n = arg \max\limits_{y}[\triangle(\hat{y}^n,y)+w\cdot \phi(x^n,y)]

      • 计算梯度:

        Cn=ϕ(xn,yˉn)ϕ(xn,y^n)\bigtriangledown C^n = \phi(x^n,\bar{y}^n) - \phi(x^n,\hat{y}^n)

      • 更新w:

        wwηCn=wη[ϕ(xn,yˉn)ϕ(xn,y^n)]w \rightarrow w - \eta\bigtriangledown C^n = w-\eta[\phi(x^n,\bar{y}^n) - \phi(x^n,\hat{y}^n)]


Another Viewpoint(其他观点)

之前的成本函数有另外一个观点用来解释。之前的成本函数CnC^n 是你在训练数据上的误差的上界,当你去最小化有间隔的成本函数时,你是在最小化训练数据的误差上界,虽然最小化训练误差上界不代表误差一定会减小,但是也是有可能会跟着变小的。

假设不正确的函数如上图右上方所示,拿y~\tilde{y} 当做output,希望最小化的成本函数是CC′(y^,y~\hat{y},\tilde{y} 差距之和),那我们希望找到一个w,让CC′越小越好。但是最小化CC′并没有那么容易,因为\triangle 可以是任何函数,想想看就算一个函数在某些地方不可微,总体上也还是可以使用梯度下降的,但是如果\triangle比那些某些地方不可微的函数还要复杂,比如阶梯状函数,那么梯度下降就完全没用了。

这样CnC^n就派上用场了,CnC^nCC′的上界,那么就找w来最小化CnC^n,进而间接去最小化CC′

那么如何证明CC是误差函数之和CC'的上界呢?

我们要证明的就是:

(y^n,y~n)Cn\triangle (\hat{y}^n,\tilde{y}^n) \le C^n

证明开始:

由于:

wϕ(xm,y~n)wϕ(xn,y^n)0w\cdot \phi(x^m,\tilde{y}^n) - w\cdot\phi(x^n,\hat{y}^n) \ge 0

我们可以得到下列不等式:

(y^n,y~n)(y^n,y~n)+[wϕ(xm,y~n)wϕ(xn,y^n)]\triangle (\hat{y}^n,\tilde{y}^n) \le \triangle (\hat{y}^n,\tilde{y}^n) +[w\cdot \phi(x^m,\tilde{y}^n) - w\cdot\phi(x^n,\hat{y}^n)]

运用结合律,可以得到:

More Cost Functions(更多成本函数的证明)

Δ(y^n,y~n)Cn\Delta\left(\hat{y}^{n}, \tilde{y}^{n}\right) \leq C^{n}

  • Margin Rescaling(间隔调整),就是我们上面的解决方案:

    Cn=maxy[Δ(y^n,y)+wϕ(xn,y)]wϕ(xn,y^n)C^{n}=\max _{y}\left[\Delta\left(\hat{y}^{n}, y\right)+w \cdot \phi\left(x^{n}, y\right)\right]-w \cdot \phi\left(x^{n}, \hat{y}^{n}\right)

  • Slack Variable Rescaling(松弛变量调整):

    Cn=maxyΔ(y^n,y)[1+wϕ(xn,y)wϕ(xn,y^n)]C^{n}=\max _{y} \Delta\left(\hat{y}^{n}, y\right)\left[1+w \cdot \phi\left(x^{n}, y\right)-w \cdot \phi\left(x^{n}, \hat{y}^{n}\right)\right]

    这个方法的大概思想是:y 与y^\hat{y}的差距很大,Δ\Delta 也就很大,乘起来之后结果会把差距放大;反之,y 与y^\hat{y}的差距很小,Δ\Delta 也就很小,乘起来之后结果也会很小。

另外之前那种用的加法,有缺陷,没有考虑到w 和Δ\Delta的大小(因为Δ\Delta自己定义的),例如一个是0.001,一个是1000,那么加法对这个权重上没有考虑清楚,用乘法的话就是自带normalization效果,所以这个方法有它的道理。


Regularization(正则化)

  • 训练数据和测试数据可以有不同的分布;

  • 如果w与0比较接近,那么我们就可以最小化误差匹配的影响;我们把w接近于0这件事加到成本函数里。也就是说在原来的成本函数里加上w的L2正则。

  • 即在原来的基础上,加上一个正则项12w2\frac{1}{2}\|w\|^{2},λ为权衡参数;

    C=n=1NCnC=λn=1NCn+12w2C=\sum_{n=1}^{N} C^{n} \Rightarrow \quad C=\lambda \sum_{n=1}^{N} C^{n}+\frac{1}{2}\|w\|^{2}

  • For t=1 to T:

    • 每次都随机抽取一个样本{xn,y^n}\{x^n,\hat{y}^n\}

      • 首先要知道落在哪个区域里面(当前w下),算出来是在y~n\tilde{y}^n区域里面:

        yˉn=argmaxy[(y^n,y)+wϕ(xn,y)]\bar{y}^n = arg \max\limits_{y}[\triangle(\hat{y}^n,y)+w\cdot \phi(x^n,y)]

      • 计算梯度:

        Cn=ϕ(xn,yˉn)ϕ(xn,y^n)+w\bigtriangledown C^n = \phi(x^n,\bar{y}^n) - \phi(x^n,\hat{y}^n)+w

      • 更新w:

        wwηCn=wη[ϕ(xn,yˉn)ϕ(xn,y^n)]ηw=(1η)wη[ϕ(xn,yˉn)ϕ(xn,y^n)]\begin{aligned} w \rightarrow w - \eta\bigtriangledown C^n &= w-\eta[\phi(x^n,\bar{y}^n) - \phi(x^n,\hat{y}^n)]-\eta w \\ &=(1-\eta)w-\eta[\phi(x^n,\bar{y}^n)-\phi(x^n,\hat{y}^n)] \end{aligned}


Structured SVM(结构化支持向量机)

概念介绍

SVM 即支持向量机,常用于二分类模型。它主要的思想是:

  1. 它是特征空间上间隔最大的线性分类器;

  2. 对于线性不可分的情况,通过非线性映射算法将低维空间的线性不可分的样本映射到高维特征空间,高维特征空间能够进行线性分析。

什么是结构化?

我们在结构化的介绍中也已经介绍过了!其实机器学习中,如果按照输出空间不同可以分为:

  • 二元分类 (binary classification)

  • 多元分类 (multiclass classification)

  • 回归问题 (regression)

  • 结构化预测 (structured prediction)

其中前面三类都是我们常见且经常用的,第四种结构化预测重点体现在结构化上,前面三类的输出都是标签类别或者回归值之类的单变量,而结构化预测输出是一种结构化的数据结构,比如输入一句话,输出是一颗语法树。此外,结构还可以是图结构、序列结构等。

特点

  • 输入输出都是一种带有结构的对象
  • 对象:sequence,list,tree,bounding box

结构化 SVM:

结构化 SVM间互相存在依赖关系的结构数据,对传统 SVM 进行了改进,可以说结构化 SVM 是在传统 SVM 的基础上扩展出来的。结构化 SVM 使用时主要涉及学习和推理两个过程,与大多数机器学习算法一样,学习其实就是确定模型的参数的过程,而推理就是根据学习到的模型对给定的输入进行预测的过程,这一点我们在前面也已经介绍了很多了!


公式的三种描述

描述一:

求得w使得C最小化,使得:

C=λn=1NCn+12w2C=\lambda \sum_{n=1}^{N} C^{n}+\frac{1}{2}\|w\|^{2}

其中:

Cn=maxy[Δ(y^n,y)+wϕ(xn,y)]wϕ(xn,y^n)C^{n}=\max _{y}\left[\Delta\left(\hat{y}^{n}, y\right)+w \cdot \phi\left(x^{n}, y\right)\right]-w \cdot \phi\left(x^{n}, \hat{y}^{n}\right)

移项可以得到:

Cn+wϕ(xn,y^n)=maxy[Δ(y^n,y)+wϕ(xn,y)](1)\\C^{n}+w \cdot \phi\left(x^{n}, \hat{y}^{n}\right)=\max _{y}\left[\Delta\left(\hat{y}^{n}, y\right)+w \cdot \phi\left(x^{n}, y\right)\right] \tag{1}

将 max 去掉,我们将式子转换成:

For y  Cn+wϕ(xn,y^n)Δ(y^n,y)+wϕ(xn,y)(2)For\ \forall{y} : \ \ {C^{n}+w \cdot \phi\left(x^{n}, \hat{y}^{n}\right) \geq \Delta\left(\hat{y}^{n}, y\right)+w \cdot \phi\left(x^{n}, y\right)} \tag{2}


这里有一个问题:(1)和(2)式是等价的吗?

我们假设:

f(x)=maxy(y)(a)f(x) = \max\limits_y (y) \tag{a}

如果y=1,2,3,4,5,6,7,8,9y={1,2,3,4,5,6,7,8,9},那么f(x)=9f(x) = 9

如果我们直接写成:

f(x)>y(b)f(x) > \forall y \tag{b}

显然(a)和(b)不等价,因为在(b)中,f ( x ) 可以等于10,11,12,etc。

但是如果我们加上一个约束:minimize f(x)minimize \ f(x)

这个时候(a)和(b)就等价了!


根据式子(2)进行一项,可以进一步得到;

wϕ(xn,y^n)wϕ(xn,y)Δ(y^n,y)Cn{w \cdot \phi\left(x^{n}, \hat{y}^{n}\right)-w \cdot \phi\left(x^{n}, y\right) \geq \Delta\left(\hat{y}^{n}, y\right)-C^{n}}

描述二:

也就是说:

找到ww去最小化CC

C=12w2+λn=1NCnC = \frac{1}{2}||w||^2 + \lambda \sum_{n=1}^N C^n

对于每一个n的每一个y,即:

For n     For y       wϕ(xn,y^n)wϕ(xn,y)Δ(y^n,y)Cn\begin{aligned} &For\ \forall n: \\ &\ \ \ \ \ For \ \forall y: \\ &\ \ \ \ \ \ \ {w \cdot \phi\left(x^{n}, \hat{y}^{n}\right)-w \cdot \phi\left(x^{n}, y\right) \geq \Delta\left(\hat{y}^{n}, y\right)-C^{n}} \end{aligned}

描述三:

到这里,通常是把C 换成ϵ\epsilon(slack variable,中文名:松弛因子),描述2等价于:

找到w,ϵ1,,ϵNw,\epsilon^1,\cdots,\epsilon^N去最小化CC

C=12w2+λn=1Nϵn(1)C = \frac{1}{2}||w||^2 + \lambda \sum_{n=1}^N \epsilon^n \tag{1}

对于每一个n的每一个y,即:

For n     For y       wϕ(xn,y^n)wϕ(xn,y)Δ(y^n,y)ϵn(2)\begin{aligned} &For\ \forall n: \\ &\ \ \ \ \ For \ \forall y: \\ &\ \ \ \ \ \ \ {w \cdot \phi\left(x^{n}, \hat{y}^{n}\right)-w \cdot \phi\left(x^{n}, y\right) \geq \Delta\left(\hat{y}^{n}, y\right)-\epsilon^{n}} \end{aligned} \tag{2}

对于描述3中的公式(2),如果y=y^ny = \hat{y}^n,有:

w(ϕ(xn,y^n)ϕ(xn,y^n))=0Δ(y^n,y^n)=0w \cdot (\phi(x^n,\hat{y}^n)-\phi(x^n,\hat{y}^n)) = 0 \\ \Delta(\hat{y}^n,\hat{y}^n) = 0

进一步进行化简可以得到:

ϵn0\epsilon^n \ge 0

描述3中的公式(2)就等价于:

For yy^n   wϕ(xn,y^n)wϕ(xn,y)Δ(y^n,y)ϵn,   ϵn0\begin{aligned} & For \ \forall y \ne \hat{y}^n: \\ & \ \ \ {w \cdot \phi\left(x^{n}, \hat{y}^{n}\right)-w \cdot \phi\left(x^{n}, y\right) \geq \Delta\left(\hat{y}^{n}, y\right)-\epsilon^{n}}, \ \ \ \epsilon^n \ge 0 \end{aligned}


Intuition Explanation(直观解释)

黄框与红框差距越大,它们之间的margin也就是Δ\Delta也就越大,因此我们要找的参数w要满足下面的条件:

当然黄色的框框不止这两个,还有很多很多个,就是除了正确的红框之外的任意位置都可以有黄框,写成数学表达就是:yy^\forall y \neq \widehat y,所以上面的不等式也是有无穷多个。

这样我们就很难找到一个参数w使得所有的不等式都成立。

因此我们想办法把margin变小一点,不用Δ\Delta来作为margin,而是用:Δε\Delta-\varepsilon来作为margin(注意,使得margin变小是要减去一个正数才可以,否则减去负数就变大了。所以这里默认ε0\varepsilon\geq0,如果ε0\varepsilon\leq0会是使得上面的不等式约束更加严格。):

上图中的绿色margin长度应该变小就更加逼真了。。。

由于ε\varepsilon的作用是放宽约束,所以起了一个名字叫松弛因子。我们当然不会希望约束放得太宽,否则margin就失去存在的意义了(例如:ε\varepsilon\to\infty,margin 就变成了负值,随便一个参数w就能满足条件),因此,我们还加上了一个条件就是ε\varepsilon要最小化。

就好比妹子想找高富帅,这个条件没法找到,她也不会找一个矮矬穷,会想办法找一个高富,高帅,富帅。

下面举例:

假设,我们现在有两个训练数据:

(x1,y^1)(x2,y^2)\left(x^{1}, \hat{y}^{1}\right) 和 \left(x^{2},\hat{y}^2\right)

对于x1x^{1}而言,我们希望正确的减去错误的,要求大于它们之间的Δ\Delta减去ε1\varepsilon^{1},同时满足:

yy^1ε10\forall y \neq \hat{y}^{1} 且 \varepsilon^{1} \geq 0

同理,对于x2x^{2}而言,一样采用以上方式,我们希望正确的减去错误的,要求大于它们之间的Δ\Delta减去ε1\varepsilon^{1},同时满足:

yy^2ε20\forall y \neq \hat{y}^{2} 且 \varepsilon^{2} \geq 0

在满足以上这些不等式的前提之下,我们希望

12w2+λn=12εn\frac{1}{2} ||w||^2 + \lambda \sum_{n=1}^{2} \varepsilon^{n}

是最小的!

换一种说法就是:

找到w,ε1,,εNw, \varepsilon^{1}, \cdots, \varepsilon^{N},最小化CC ,其中:

C=12w2+λn=12εnC=\frac{1}{2} ||w||^2 + \lambda \sum_{n=1}^{2} \varepsilon^{n}

在最小化目标函数同时,要求我们满足以下的限制:

对所有的训练样本,以及所有不是正确答案的标记,我们希望,正确答案的分数减去其它标记的分数大于等于正确标记与其它标记之间的差距再减去一个εn\varepsilon^{n},同时满足其大于等于0,即

For n:    For yy^n         w(ϕ(xn,y^n)ϕ(xn,y))Δ(y^n,y)εn,εn0\begin{aligned} & For \ \forall n :\\ & \ \ \ \ For \ \forall y \neq \hat{y}^{n}:\\ & \ \ \ \ \ \ \ \ \ w \cdot\left(\phi\left(x^{n}, \hat{y}^{n}\right)-\phi\left(x^{n}, y\right)\right) \geq \Delta\left(\hat{y}^{n}, y\right)-\varepsilon^{n}, \varepsilon^{n} \geq 0 \end{aligned}

  • 可以利用SVM包中的solver来解决以上的问题;
  • 是一个二次规划(Quadratic Programming QP)的问题;
  • 约束条件过多,需要通过切割平面算法(Cutting Plane Algorithm)解决受限的问题。

Cutting Plane Algorithm for Structured SVM(切割平面算法)

无约束条件的问题求解

👉 DivMCuts: Faster Training of Structural SVMs with Diverse M-Best Cutting-Planes

假设我们先不考虑限制的部分,只考虑最小化部分,来看一下解的是什么样的问题。

我们只看要最小化的部分,有w和ϵ ,现在假设w只有一维,训练数据只有一笔。在没有约束条件下,最小化就很容易,看起来就像上图右下方图示。

问题是这里有些约束,这些约束是做什么事情?


有约束条件的问题求解

在w和εiε^i组成的参数空间中(本来是高维的,这里用二维的平面来做个样例),颜色表示Cost C的值:

C=12w2+λn=1NεnC=\frac{1}{2}\|w\|^{2}+\lambda \sum_{n=1}^{N} \varepsilon^{n}

在没有限制的情况下,绿的点对应的是最小值。也就是还没有引入任何约束的时候的Cost C的最小值。

我们现在把之前推导出来的约束加上:

For n:    For yy^n         w(ϕ(xn,y^n)ϕ(xn,y))Δ(y^n,y)εn,εn0\begin{aligned} & For \ \forall n :\\ & \ \ \ \ For \ \forall y \neq \hat{y}^{n}:\\ & \ \ \ \ \ \ \ \ \ w \cdot\left(\phi\left(x^{n}, \hat{y}^{n}\right)-\phi\left(x^{n}, y\right)\right) \geq \Delta\left(\hat{y}^{n}, y\right)-\varepsilon^{n}, \varepsilon^{n} \geq 0 \end{aligned}

图像变成了:

在有限制的情况下,只有中间阴影部分是符合约束条件的,因此需要在该区域内(How如何确定多边形的形状?)寻找最小值。


Cutting Plane Algorithm(算法)

我们观察约束可以看到,虽然约束很多,但是很多约束实际上是冗余的,真正起到决定Cost最小值的是下图中的两条红线,其他约束去掉也不会影响结果:

绿线(冗元)表示移除此约束不会影响问题的求解,删除冗元线条,原本是穷举yy^ny \neq \hat{y}^{n},而现在我们需要移除那些不起作用的线条,保留有用的线条,这些有影响的线条集可以理解为Working Set,用An\mathbb{A}^{n}表示(利用迭代法寻找Working Set)。

那么我们的约束条件就变成了;

For n:    For yAn,yy^n         w(ϕ(xn,y^n)ϕ(xn,y))Δ(y^n,y)εn,εn0\begin{aligned} & For \ \forall n :\\ & \ \ \ \ For \ y ∈A^n, y \neq \hat{y}^{n}:\\ & \ \ \ \ \ \ \ \ \ w \cdot\left(\phi\left(x^{n}, \hat{y}^{n}\right)-\phi\left(x^{n}, y\right)\right) \geq \Delta\left(\hat{y}^{n}, y\right)-\varepsilon^{n}, \varepsilon^{n} \geq 0 \end{aligned}

如果Working set比较小,那么Cost最小值就是有可能解出来的,下面来看如何确定Working set,用的是一个迭代的算法:

Quadratic Program (QP):凸优化的二次规划问题。

原本解决QP问题,需要考虑所有可能的标记y,但如果给定一组Working Set,我们仅需考虑作用集里的标记y即可;然后再解决QP问题就相对简单多了。

  • 对每一个example都初始化它的working set ,初始化AnA1,A2,,ANA^n:A^1,A^2,\cdots,A^N
  • 接下来根据初始化的Working Set,去解这个project programming,本来要考虑所有的y,但是给定一组Working Set后,只要考虑Working Set中的y就可以了。
  • 假设根据Working Set解出一个w后,再用这个w去找一些新的成员加到Working Set里
  • Working Set变化后再去接project programming,又得到一个不一样的w…不断循环下去,直到w不再变化为止!

下面是图解这个算法如何运作的:

初始化working set AnA^n,最开始是不考虑约束的,因此An=nullA^n = null。在没有约束的情况下,求解QP的结果就是w是蓝色这个点。

看看蓝色的点是没有办法满足哪些约束。例如下图中的红色约束:

虽然蓝点不满足很多约束,但我们现在只找出没有满足的最“严重的”那一个,这个选择标准后面再解释(应该是按垂直距离)即可:

那么我们就把找出来的这个约束记为:yy',然后把yy'加入到working set 中:

An=An{y}={y}A^n = A^n ∪ \{y'\} = \{y'\}

新的working set不再是空的了,里面有东西了,根据新的working set,我们重新算最小值:

然后再看这个蓝色星星不满足哪些约束:

我们把找出来的这个约束记为:yy'',然后把yy''加入到working set 中:

An=An{y}={y,y}A^n = A^n ∪ \{y''\} = \{y',y''\}

下面又重复迭代,根据新的working set计算最小值:

然后再看这个蓝色星星不满足哪些约束:

我们把找出来的这个约束记为:yy''',然后把yy'''加入到working set 中:

An=An{y}={y,y,y}A^n = A^n ∪ \{y'''\} = \{y',y'',y'''\}

下面又重复迭代,根据新的working set计算最小值:

至此,完毕!


Find the most violated one(向有效集中添加元素的策略)

上面挖了个坑,如何找到最小值相对应最不满足的约束条件是什么?现在来填:

常规约束条件:

Constraint     w(ϕ(x,y^)ϕ(x,y))Δ(y^,y)εConstraint: \ \ \ \ \ w \cdot(\phi(x, \hat{y})-\phi(x, y)) \geq \Delta(\hat{y}, y)-\varepsilon

violated constraint刚好相反:

Violate a Contraint     w(ϕ(x,y^)ϕ(x,y))<Δ(y^,y)εViolate \ a \ Contraint: \ \ \ \ \ w^{\prime} \cdot(\phi(x, \hat{y})-\phi(x, y))<\Delta(\hat{y}, y)-\varepsilon^{\prime}

在多数的violated constraints中,我们选定一个标准来衡量violation的程度(偏差越多,violated的越严重):

Degree of Violation:     Δ(y^,y)εw(ϕ(x,y^)ϕ(x,y))Degree \ of \ Violation: \ \ \ \ \ \Delta(\hat{y}, y)-\varepsilon^{\prime}-w^{\prime} \cdot(\phi(x, \hat{y})-\phi(x, y))

又因为ε′与wϕ(x,y^)w^{\prime} \cdot \phi(x, \hat{y}) 是固定值,不影响评价标准,所以上面式子中的这两项可以去掉,从而得到:

Degree of Violation:     Δ(y^,y)+wϕ(x,y)Degree \ of \ Violation: \ \ \ \ \ \Delta(\hat{y}, y)+w^{\prime} \cdot \phi(x, y)

有了评价标准后,最不满足的就是最大值那个拉:

The most violated one:    argmaxy[Δ(y^,y)+wϕ(x,y)]The\ most\ violated\ one: \ \ \ \ \arg \max _{y}[\Delta(\hat{y}, y)+w \cdot \phi(x, y)]


算法总结
  • 给定训练数据集

    {(x1,y^1),(x2,y^2),,(xN,y^N)}\left\{\left(x^{1}, \hat{y}^{1}\right),\left(x^{2}, \hat{y}^{2}\right), \cdots,\left(x^{N}, \hat{y}^{N}\right)\right\}

  • 每一个pair都有一个Working Set,且初始设定为

A1 null, A2 null, ,ANnull\mathbb{A}^{1} \leftarrow \text { null, } \mathbb{A}^{2} \leftarrow \text { null, } \cdots, \mathbb{A}^{N} \leftarrow null

  • 重复以下过程

    • 根据已经有的Working set,解一个w

    • 根据现在的w,对每一个训练数据(xn,y^n)(x^n,\hat{y}^n)

      • 找出不满足最严重的的约束,用yˉn\bar{y}^n 表示:

        yˉn=argmaxy[Δ(y^,y)+wϕ(x,y)]\bar{y}^n = \arg \max _{y}[\Delta(\hat{y}, y)+w \cdot \phi(x, y)]

      • yˉn\bar{y}^n 加进Working set:

        AnAn{yn}\mathbb{A}^{n} \leftarrow \mathbb{A}^{n} \cup\left\{\overline{y}^{n}\right\}

  • 直到A1,A2,,.ANA^1,A^2,\cdots,.A^N不再改变

  • 返回ww

示例解释

用目标检测举个例子:

假设,我们现在有两个训练数据:(x1,y^1)(x2,y^2)\left(x^{1}, \hat{y}^{1}\right) 和 \left(x^{2}, \hat{y}^{2}\right)

初始的Working set是:

A1={}A2={}\begin{array}{l}{A^{1}=\{ \}} \\ {A^{2}=\{ \}}\end{array}


无约束的问题解决

上图的约束少写了:ϵ1>0,ϵ2>0\epsilon^1 \gt 0,\epsilon^2\gt0

由于没有约束,上面那个式子很容易看出来,当w = 0 w=0的时候,得到最小值。


有约束的问题解决

然后用w = 0去找the most violated的约束。

此时:

A1={}A2={}w=0\begin{array}{l}{A^{1}=\{ \}} \\ {A^{2}=\{ \}}\end{array}\\ w=0

y1=argmaxy[Δ(y^1,y)+0ϕ(x1,y)]\overline{y}^{1}=\arg \max _{y}\left[\Delta\left(\hat{y}^{1}, y\right)+0 \cdot \phi\left(x^{1}, y\right)\right]

下面给出六个黄框框

上图由于w = 0 ,当去解violated约束时,也就是求解argmaxy[Δ(y^1,y)+0ϕ(x1,y)]\arg \max _{y}\left[\Delta\left(\hat{y}^{1}, y\right)+0 \cdot \phi\left(x^{1}, y\right)\right]。后面一项为0,所以可以用直接去掉(对应着上图的红杠)。

只剩下Δ\Delta,这个玩意如果黄框不和红框重叠,值就会很大。看到Δ\Delta有三个一样的都最大,都是1,我们随便挑一个,右下角那个作为yˉ1\bar{y}^1

同样去计算y2y^2对应的:

y2=argmaxy[Δ(y^2,y)+0ϕ(x2,y)]\overline{y}^{2}=\arg \max _{y}\left[\Delta\left(\hat{y}^{2}, y\right)+0 \cdot \phi\left(x^{2}, y\right)\right]

yˉ1,yˉ2\bar{y}^1,\bar{y}^2加入到working set中得到:

然后用新的working set解决下图QP问题(下图中的working set中有两个约束),计算得到w=w1w = w^1

w1w^1去找the most violated的约束。

对于第一个training data来说

y1=argmaxy[Δ(y^1,y)+w1ϕ(x1,y)]\overline{y}^{1}=\arg \max _{y}\left[\Delta\left(\hat{y}^{1}, y\right)+w^1 \cdot \phi\left(x^{1}, y\right)\right]

我们用右上角那个yˉ1=1.55\bar{y}^1 = 1.55的黄色框框作为the most violated的约束

当然对第二个training data((x2,y^2)(x^2,\hat{y}^2))也做同样的事情,然后更新working set:

然后用新的working set解决下图QP问题(下图中的working set中有四个约束),计算得到w=w2w = w^2

这个过程不断迭代下去,直到 A1,A2A^1,A^2 不再变化为止。

这里有学生提问,老师又补充了一些知识,在Structured SVM的原版文章中,作者在更新working set上有一个条件,就是在the most violated的约束基础上还要加一个值,满足这个条件的约束才加入working set中,否则不加,这个值越大,整个算法的迭代次数就越少。


Multi-class and binary SVM(多类别与二元支持向量机)

Multi-class SVM(多类别支持向量机)

  • Q1:评估

    F(x,y)=wϕ(x,y)F(x, y)=w \cdot \phi(x, y)

    如果存在K类,则我们将有K个权值向量:

    {w1,w2,,wK}\left\{w^{1}, w^{2}, \cdots, w^{K}\right\}

    y的标签自然就有:

    y{1,2,,k,,K}y \in\{1,2, \cdots, k, \cdots, K\}

    从而可以计算得到wwϕ(x,y)\phi(x,y)

    w={w1w2wkwK}  ϕ(w,y)={00x0}w = \left\{\begin{matrix} w^1 \\ w^2 \\ \vdots \\ w^k \\ \vdots \\ w^K \end{matrix}\right\} \ \ \phi(w,y) = \left\{\begin{matrix} 0 \\ 0 \\ \vdots \\ \overrightarrow{x} \\ \vdots \\ 0 \end{matrix}\right\}

    w就是权值,主要是ϕ(x,y)\phi(x,y)到底是什么?我们看到ϕ(x,y)\phi(x,y)中只有一个x\overrightarrow{x},其它都为0,意思就是:当x属于某一个类别时,假设为m,我们就将x\overrightarrow{x}放在ϕ(x,y)\phi(x,y)这个向量的第m个位置上。所以我们的F(x,y)=wϕ(x,y)F(x, y)=w \cdot \phi(x, y)可以进一步改写为:

    F(x,y)=wyxF(x, y)=w^{y} \cdot \vec{x}

  • Q2:推理

    F(x,y)=wyxy^=argmaxy{1,2,,k,,K}F(x,y)=argmaxy{1,2,,k,,K}wyx\begin{array}{l}{F(x, y)=w^{y} \cdot \vec{x}} \\ \\ {\hat{y}=\arg \max\limits_{y \in\{1,2, \cdots, k, \cdots, K\}} F(x, y)} \\ {\quad=\arg \max\limits_{y \in\{1,2, \cdots, k, \cdots, K\}} w^{y} \cdot \vec{x}}\end{array}

    穷举所有的y,使得F(x, y)最大化,这里类的数量通常很少,所以我们可以穷举它们

  • Q3:训练

    • 求得w,ε1,,εNw, \varepsilon^{1}, \cdots, \varepsilon^{N},最小化C

    C=12w2+λn=1NεnC=\frac{1}{2}\|w\|^{2}+\lambda \sum_{n=1}^{N}\varepsilon^{n}

    • 对任意的n:

      • 对于任意的yy^n\forall y \neq \hat{y}^{n}

        w(ϕ(xn,y^n)ϕ(xn,y))Δ(y^n,y)εn,εn0(1)w \cdot\left(\phi\left(x^{n}, \hat{y}^{n}\right)-\phi\left(x^{n}, y\right)\right) \geq \Delta\left(\hat{y}^{n}, y\right)-\varepsilon^{n}, \varepsilon^{n} \geq 0 \tag{1}

        上式中的Δ(y^n,y)\Delta(\widehat y^n, y)按之前的说法是指正确分类和错误分类的差距,这个差距是我们可以自己定义的,例如下面:

        y{dog,cat,bus,car}Δ(y^n=dog,y=cat)=1Δ(y^n=dog,y=bus)=100\begin{aligned} & y \in \{dog,cat,bus,car\} \\ & \Delta(\hat{y}^n=dog,y=cat) = 1 \\ & \Delta(\hat{y}^n=dog,y=bus) = 100 \end{aligned}

        有N笔训练数据,每一个数据有K个分类,只有一个分类是正确的,那么由K − 1个分类是错误的,所以我们的约束的数量就是:

        N(K1)N(K-1)

        按老师的说法,这些个约束不多,直接算即可。

        根据前面的定义,我们有:

        wϕ(xn,y^n)=wy^xwϕ(xn,y)=wyx(2)\begin{array}{l}{w \cdot \phi\left(x^{n}, \hat{y}^{n}\right)=w^{\hat{y}} \cdot \vec{x}} \\ {w \cdot \phi\left(x^{n}, y\right)=w^{y} \cdot \vec{x}}\end{array} \tag{2}

        将(2)代入(1)可以得到;

        (wy^nwy)xΔ(y^n,y)εn,εn0\left(w^{\hat{y}^{n}}-w^{y}\right) \cdot \vec{x} \quad \geq \Delta\left(\hat{y}^{n}, y\right)-\varepsilon^{n}, \varepsilon^{n} \geq 0


Binary SVM(二元支持向量机)

就是多分类中的K=2的场景,这个时候:

y{1,2}y \in \{1,2\}

同样对yy^n\forall y \neq \hat{y}^{n}

(wy^nwy)xΔ(y^n,y)εn,εn0\left(w^{\hat{y}^{n}}-w^{y}\right) \cdot \vec{x} \quad \geq \Delta\left(\hat{y}^{n}, y\right)-\varepsilon^{n}, \varepsilon^{n} \geq 0

由于是二分类,我们可以定义当分类不正确的时候:

  • 如果y为1:

    (w1w2)x1εn\left(w^{1}-w^{2}\right) \cdot \vec{x} \geq 1-\varepsilon^{n}

    w1w2=ww^1-w^2=w,可以转换为:

    wx1εnw \cdot \vec{x} \geq 1-\varepsilon^{n}

  • 如果y为2:

    (w2w1)x1εn\left(w^{2}-w^{1}\right) \cdot \vec{x} \geq 1-\varepsilon^{n}

    w2w1=ww^2-w^1=-w,可以转换为:

    wx1εn-w \cdot \vec{x} \geq 1-\varepsilon^{n}

这里就推出了二分类的SVM 的形式,感觉上面的ϵn\epsilon^n 应该对应到相应的上标。


Beyond Structured SVM(open question)(下一步支持向量机(开放问题))

深度神经网络

Structured SVM有一个很大的缺陷,就是它是linear的(怪怪的,不是说有一个核的方法来做划分平面,来解决非线性划分方法吗),如果想要结构化SVM的扩展性更好,我们需要定义一个较好的特征,但是人为设定的特征往往十分困难,一个较好的方法是利用DNN生成特征。

先训练好一个DNN来抽取特征,再接一个结构化SVM,最后训练的结果往往十分有效!

Ref:

  • Hao Tang, Chao-hong Meng, Lin-shan Lee, “An initial attempt for phoneme recognition using Structured Support Vector Machine (SVM),” ICASSP, 2010
  • Shi-Xiong Zhang, Gales, M.J.F., “Structured SVMs for Automatic Speech Recognition,” in Audio, Speech, and Language Processing, IEEE Transactions on, vol.21, no.3, pp.544-555, March 2013

同时训练结构化支持向量机和深度神经网络

本来是先训练好一个DNN,再接一个结构化SVM。但是可以将DNN与结构化SVM一起训练,同时更新DNN与结构化SVM中的参数!

Ref:

  • Shi-Xiong Zhang, Chaojun Liu, Kaisheng Yao, and Yifan Gong, “DEEP NEURAL SUPPORT VECTOR MACHINES FOR SPEECH RECOGNITION”, Interspeech 2015

用深度神经网络代替结构化支持向量机

再用一个DNN代替结构化SVM,即将x和y作为输入,F(x, y)(为一个标量)作为输出!

从而我们的cost就是:

C=12θ2+12θ2+λn=1NCnC = \frac{1}{2}||\theta||^2 + \frac{1}{2}||\theta'||^2 + \lambda \sum_{n=1}^N C^n

其中cost function cnc^n为:

Cn=maxy[Δ(y^n,y)+F(xn,y)]F(xn,y^n)C^n = \max\limits_y [\Delta(\hat{y}^n,y)+F(x^n,y)] - F(x^n,\hat{y}^n)

Ref:

  • Yi-Hsiu Liao, Hung-yi Lee, Lin-shan Lee, “Towards Structured Deep Neural Network for Automatic Speech Recognition”, ASRU, 2015
-------------本文结束感谢您的阅读-------------
六经蕴籍胸中久,一剑十年磨在手

欢迎关注我的其它发布渠道