这节我们主要学习

  • 回顾一下结构化学习的模型
  • 可分离的情况
  • 不可分离的情况
  • 结构化支持向量机
  • 切割平面法
  • 多分类支持向量机

1. 回顾

1.1 结构化学习

  • 我们需要一个功能更强大的函数$f$
    • 输入和输出都是具有结构的对象
    • 对象:序列,列表,树,边界框$…$

1.2 统一框架

分为 Training 和 Testing 两个部分。

1.3 三个问题

  • $F(x,y)$ 长什么样子
  • 怎样求解 arg max 问题
  • 如何找到$F(x,y)$

1.4 实例任务

在本节课程中,我们使用目标检测的例子进行讲解;

但我们今天学习到的内容同样可以用作其他任务.

**问题1:估算**

假设 $F(x,y)$ 是线性的

**问题2:推理**

找到使 $F(x,y)$ 最大的 $\tilde y$

求解 $\tilde y$ 的方法

  • 目标检测
    • 分支定界算法
    • 选择性搜索
  • 序列标记
    • 维特比算法
  • 算法依赖于 $\phi (x,y)$

  • 遗传算法
**问题3:训练**

数据集对应的 $F(x,y)$ 应该是最大的

接下来我们忽略问题 1 和问题 2,直接关注于问题 3。

2. 可分离的情况

假设:可分离

  • 权重向量 $\hat w$ 存在,使得所有红色标记点的乘积的值大于其余蓝色点的乘积的值加上 $\delta$(红色代表是正确的,蓝色代表是错误的)

2.1 结构感知器

当 $w$ 不再更新的时候,算法结束。

2.2 数学证明

在可分离的案例中,为了获得 $\hat w$,最多需要更新 $(\frac {R} {\delta})^2$ 次

$\delta:$边距;

$R:$ $\phi(x,y)$ 和 $\phi (x,y’)$ 之间的最大距离

当看见一个错误的时候,$w$ 进行更新

在可分离的案例中,我们不是一般性地设 $\hat w$ 的长度为 1(若 $\hat w$ 的长度不为 1,但是对其标准化之后,这依然是一个可分离的问题)

随着 $k$ 的增加,$\hat w$ 和 $w^k$ 之间的夹角 $\rho_k$ 越来越小。

$cos\rho_k= \frac{\hat w}{\|\hat w\|}$

如图,分子 $\hat w \cdot w^k$ 的值随着 $k$ 的增大越来越大

分母,我们之前假设 $\hat w$ 的长度为1,确定 $w^k$ 的长度即可。

夹角的余弦值为:

余弦值的下界会不断增加,但余弦值不会超过1;

所以$k$要小于等于$(\frac {R} {\delta})^2$,即最多需要更新$(\frac {R} {\delta})^2$次

如何让训练更快?

当边距越大的时候,训练越快

3. 不可分离的情况

当数据不能完全分离的时候,我们依旧可以判断某些权重比其他的权重更好。

定义一个损失 $C$ 来估计权重 $w$ 到底有多差,我们需要选择最小化损失 $C$ 的 $w$

损失的定义如下:

用所有可能y得到的最大值减去训练样本对应的值,得到最后的损失函数的值(都是大于等于 0 的)。

3.1 随机梯度下降

$C^n=max[w\cdot \phi (x^n,y)]-w\cdot \phi (x^n,\hat y^n)$

由于存在 $max$ 函数,当 $w$ 在不同的区域的时候,$y$ 的取值是不一样的

计算梯度:

随机选取一个训练数据,确定 $y$ 在 $w$ 的哪个区域中,然后采用梯度下降法进行更新。

当 $\eta$=1 的时候,我们实际上是在处理结构化感知器

3.2 考虑误差

之前,我们并没有考虑不正确的 $y$ 的差异性,实际上右边的情况,比左边的要好很多。

所以,我们需要考虑不正确的 $y$ 之间的好坏。

定义误差函数:

$\Delta (\hat y,y)$:y 和 $\hat y$ 之间的误差(是大于 0 的)

当 $\hat y$ 和 $y$ 之间完全没有重叠的时候,误差最大为 1;

当 $\hat y$ 和 $y$ 之间重合的时候,误差为 0。

我们需要找到新的函数的最大值,因此我们需要设计一个较好的误差,让这个最大值能够解出来;

其余部分与改良前的算法没有什么区别。

  • 最小化新的损失函数是最小化训练集上误差的上限

$C’$ 误差可能出现阶梯状的情况,影响梯度更新;我们使用新的损失函数 $C$ 来代替;

3.3 正则化

当训练集数据和测试集数据属于不同的分布的时候,$w$ 接近0可以消除 mismatch 的影响。

原始的损失函数可以让错误的答案与正确答案之间保持间距;

正则化能够让 $w$ 接近 0。

4. 结构化支持向量机

我们需要找到 $w$,使损失函数达到最小。

由于我们需要最小化损失函数,所以上式和下面的不等式相等(将 $w \cdot \phi(x^{n},\hat y^{n})$ 移到等式左边)。

我们将 $C^n$ 称为松弛变量,使用 $\epsilon$ 来表示。

对于任意的 $y$ 不等于 $\hat y$,上述不等式均成立。

我们可能会遇到不存在 w 使 w 与 $\phi (x^n,\hat y^n)$ 的乘积满足 margin 的要求,

所以,可以使用松弛变量来减小不等式的约束。

不让不等式的约束无限减小,$\epsilon$ 应该竟可能的小。

在满足不等式的情况下,我们希望 $\epsilon$ 的和最小

我们在最小化损失函数同时,需要满足上面的约束条件。

$y$ 的取值有成千上万中可能,当限制条件这么多情况下,我们应该如何求解最小值?

5. 切割平面算法

我们需要在满足下面约束条件的情况下,求得损失函数的最小值。

根据不同的约束条件,我们可以将曲面分成不同的区域,求得对应区域的最小值。

不同的约束条件将参数空间分割成不同的部分。

尽管这里众多的约束条件,但是真真起作用的还是红色线条表示的部分。

  • 元素被不断迭代地选入工作集

每次迭代之前,都会有一个工作集,计算 $w$,

然后选择合适的元素加入工作集,进行下一次迭代

  • 将元素逐渐添加到工作集中

我们初始化工作集为空集,计算得到(二次规划问题)一个 $w$,

然后找到最不满足当前约束条件的元素加入到工作集中,不断迭代。

  • 找到最不满足约束的元素

当$w$和$\epsilon$确定之后,如何寻找最不满足约束条件的 $y$:

  • 初始化每个训练集数据的工作集为空;

  • 不断循环直到每个工作集不再改变:
  • 在相应的工作集下,利用二次规划求解 $w$
  • 对于每一个训练数据,找到最违反规则的 y
  • 将该元素加入到相应的工作集进行更新

  • 返回 $w$

6.多分类支持向量机

我们可以用结构化学习的框架来处理多分类问题:

  • 评估:
  • 如果有K类,那么我们有K个权重向量{$w^1,w^2,…,w^K$}

  • 推理:

类的数量通常很小,所以我们可以枚举它们。

  • 训练

由于约束条件比较少,我们直接穷举即可。

当两个类别差别较大时,我们可以将 $\Delta$ 的值设置的较大

7. 深度神经网络与结构化支持向量机

前面我们学习的结构化模型都是线性的,功能不是很强大;

  • 使用深度神经网络生成较为强大的模型,

  • 将结构化支持向量机和深度神经网络一起训练

  • 将结构化支持向量机用深度神经网络代替,变成更深的神经网络