感知机及其变体

669 阅读6分钟

内容大纲

    1. 感知机
    • 1.1 感知机的定义
    • 1.2 感知机的训练算法
      • 1.2.1 数据集的线性可分性
      • 1.2.2 感知机的损失函数
      • 1.2.3 感知机学习算法的原始形式
      • 1.2.4 感知机学习算法的对偶形式
        • 1.2.4.1 从原始形式到对偶形式
        • 1.2.4.2 对偶形式的学习算法
    • 1.3. 感知机的训练为什么能够收敛
    • 1.4. 示例
    1. 感知机的变体
    1. 投票感知机
    1. 平均感知机
    • 4.1 定义
    • 4.2 训练算法
    1. 结构化感知机
    • 5.1 结构化学习
      • 5.1.1 结构化学习的定义
        • 5.1.1.1 通用处理框架
        • 5.1.1.2 通用框架的概率解释
      • 5.1.2 结构化学习要解决的三个问题
    • 5.2 结构化感知机
      • 5.2.1 结构化感知机的定义
      • 5.2.2 结构化感知机的训练
        • 5.2.2.1 结构化感知机的训练策略
        • 5.2.2.2 结构化感知机的训练算法
    1. 参考资料

1. 感知机

感知机(Perceptron)是一种用于二分类问题的线性分类模型,它的输入为表示样本特征的特征向量,输出为表示样本分类的正类或负类。

1.1 感知机的定义

假设输入的特征空间是XRn,输出空间是Y={1,+1}输入xX表示某个样本的特征向量,对应于特征空间的某个点,输出yY表示样本的类别。则由输入空间到输出空间的如下函数:y=f(x)=sign(wx+b)称为感知机。其中,x是输入的特征向量,y是代表正类或负类的输出类别,wRn称为权重向量,bR称为偏置,sign(z)为符号函数,即sign(z)={+1, if z01, if z<0\begin{aligned} & 假设输入的特征空间是X \subseteq R^n,输出空间是Y=\{-1, +1\}。\\ & 输入 \vec{x} \in X 表示某个样本的特征向量,对应于特征空间的某个点,\\ & 输出y \in Y 表示样本的类别。则由输入空间到输出空间的如下函数:\\ & \boxed{y = f(x) = sign(\vec{w} \cdot \vec{x} + b)} \\ & 称为感知机。其中,\vec{x}是输入的特征向量,y是代表正类或负类的输出类别,\\ & \vec{w} \in R^n 称为权重向量,b \in R称为偏置,sign(z)为符号函数,即 \\ & \boxed{ sign(z) = \begin{cases} +1, \ \text{if } z \ge 0 \\ -1, \ \text{if } z \lt 0 \end{cases} } \end{aligned}

1.2 感知机的训练算法

感知机对应于在输入的特征空间中将样本划分为正负两类的分离超平面,属于判别模型。

1.2.1 数据集的线性可分性

给定一个数据集T={(x1,y1),(x2,y2),,(xn,yn)}其中xiRnyiY={1,+1}i[1,n],如果存在某个超平面S:wx+b=0能够将数据集的正类样本点和负类样本点正确地划分到超平面的两侧,即对所有正类的第i个样本,有wxi+b>0对所有负类的第i个样本,有wxi+b<0那么就称数据集T为线性可分的数据集,否则,称为线性不可分的。\begin{aligned} & 给定一个数据集T=\{(\vec{x_1}, y_1), (\vec{x_2}, y_2), \dots, (\vec{x_n}, y_n)\},\\ & 其中x_i \in R^n,y_i \in Y=\{-1, +1\},i \in [1, n],如果存在某个超平面 \\ & \boxed{S: \vec{w} \cdot \vec{x} + b = 0} \\ & 能够将数据集的正类样本点和负类样本点正确地划分到超平面的两侧,即 \\ & 对所有正类的第i个样本,有\vec{w} \cdot \vec{x_i} + b > 0,\\ & 对所有负类的第i个样本,有\vec{w} \cdot \vec{x_i} + b < 0,\\ & 那么就称数据集T为线性可分的数据集,否则,称为线性不可分的。 \end{aligned}

1.2.2 感知机的损失函数

感知机的训练目标就是在假设训练集是线性可分的情况下求出能够将训练集进行线性划分的分离超平面S,为此,感知机的训练策略就是要选用一个损失函数并将损失函数极小化,取极小化时的参数作为最终的模型参数。

那么问题来了,如何选取损失函数?

一个自然的方案是选取误分类样本点的总数,即训练时不断地减少误分类样本点的总数。然而这样的损失函数并不是权重和偏置的连续可导函数,无法使用梯度下降等最优化方法来求取极小值,所以感知机采用一种用来衡量误分类样本点到分离超平面的总距离的方法作为损失函数。

既然是衡量距离,那么,先给出输入空间Rn中任意一点xi到超平面S的距离,假设超平面的方程为wx+b=01wwxi+b其中w为向量wL2范数。因为当模型将样本点(xi,yi)误分类为(xi,yi^)时,有yi^=yi又因为 yi^={+1, wxi+b01, wxi+b<0所以 yi^(wxi+b)=yi(wxi+b)0所以 wxi+b=yi(wxi+b)所以 误分类的样本点(xi,yi^)到分离超平面S的距离为:1wyi(w xi+b)最后,忽略wL2范数,假设模型的误分类样本点的集合为M,那么所有的误分类点到超平面S的总距离即最终的损失函数为:L(w,b)=(xi,yi)Myi(w xi+b)\begin{aligned} & 既然是衡量距离,那么,先给出输入空间R^n中任意一点x_i到超平面S的距离,\\ & 假设超平面的方程为\vec{w} \cdot \vec{x} + b = 0:\\ & \boxed{\frac{1}{||\vec{w}||}|\vec{w} \cdot \vec{x_i} + b|} \\ & 其中||\vec{w}||为向量\vec{w}的L_2范数。\\ & 因为当模型将样本点(x_i, y_i)误分类为(x_i, \hat{y_i})时,有\boxed{\hat{y_i}=-y_i} \\ & 又因为 \ \boxed{ \hat{y_i} = \begin{cases} +1, \ \vec{w} \cdot \vec{x_i} + b \ge 0 \\ -1, \ \vec{w} \cdot \vec{x_i} + b \lt 0 \end{cases} } \\ & 所以\ \boxed{\hat{y_i}(\vec{w} \cdot \vec{x_i} + b) = -y_i(\vec{w} \cdot \vec{x_i} + b) \ge 0} \\ & 所以\ \boxed{|\vec{w} \cdot \vec{x_i} + b| = -y_i(\vec{w} \cdot \vec{x_i} + b)} \\ & 所以\ 误分类的样本点(x_i, \hat{y_i})到分离超平面S的距离为:\\ & \boxed{-\frac{1}{||\vec{w}||}y_i(\vec{w}\ \cdot \vec{x_i} + b)} \\ & 最后,忽略\vec{w}的L_2范数,假设模型的误分类样本点的集合为M,那么所有的 \\ & 误分类点到超平面S的总距离即最终的损失函数为:\\ & \boxed{L(\vec{w}, b)=-\sum_{(x_i, y_i) \in M}y_i(\vec{w}\ \cdot \vec{x_i} + b)} \\ \end{aligned}

1.2.3 感知机学习算法的原始形式

输入:训练集T={(x1,y1),(x2,y2),,(xn,yn)},其中xiRn             yiY={1,+1}i[1,n],学习率η[0,1]输出:损失函数L(w,b)取极小值时的wb            以及感知机模型f(x)=sign(wx+b)(1)随机选取w=w0b=b0(也可以粗暴地设置为0);(2)在训练集中随机选取一个样本(xi,yi)(3)计算yi^=sign(wxi+b)(4)如果yi^yi     使用如下梯度计算公式计算损失函数在当前样本点的梯度:     {Lw(xi,yi)=yixiLb(xi,yi)=yi     然后使用梯度更新参数:     {wwηLw(xi,yi)=w+ηyixibbηLb(xi,yi)=b+ηyi(5)跳转到(2),直到训练集中没有误分类的样本点为止。\begin{aligned} & 输入:训练集T=\{(\vec{x_1}, y_1), (\vec{x_2}, y_2), \dots, (\vec{x_n}, y_n)\},其中\vec{x_i} \in R^n,\\ & \ \ \ \ \ \ \ \ \ \ \ \ \ y_i \in Y=\{-1, +1\},i \in [1, n],学习率\eta \in [0, 1]\\ & 输出:损失函数L(\vec{w}, b)取极小值时的\vec{w}和b,\\ & \ \ \ \ \ \ \ \ \ \ \ \ 以及感知机模型f(x)=sign(\vec{w} \cdot \vec{x} + b) \\ & (1) 随机选取\vec{w} = \vec{w}_0和b = b_0(也可以粗暴地设置为0);\\ & (2) 在训练集中随机选取一个样本(\vec{x_i}, y_i);\\ & (3) 计算\hat{y_i}=sign(\vec{w} \cdot \vec{x_i} + b);\\ & (4) 如果\hat{y_i} \neq y_i:\\ & \ \ \ \ \ 使用如下梯度计算公式计算损失函数在当前样本点的梯度:\\ & \ \ \ \ \ \boxed{ \begin{cases} \frac{\partial L}{\partial w}|_(x_i, y_i)=-y_ix_i \\ \frac{\partial L}{\partial b}|_(x_i, y_i)=-y_i \end{cases} } \\ & \ \ \ \ \ 然后使用梯度更新参数:\\ & \ \ \ \ \ \boxed{ \begin{cases} \vec{w} \gets \vec{w} - \eta \frac{\partial L}{\partial w}|_(x_i, y_i) = \vec{w} + \eta y_i x_i \\ b \gets b - \eta \frac{\partial L}{\partial b}|_(x_i, y_i) = b + \eta y_i \end{cases} }\\ & (5) 跳转到(2),直到训练集中没有误分类的样本点为止。 \end{aligned}

1.2.4 感知机学习算法的对偶形式

我们知道,在原始形式里样本点(x,y)是随机抽取出来的,那么就有可能说某个样本点的特征向量被重复多次抽取出来,同时,也有可能说模型在这个特征向量上多次误分类。对偶形式的关键思路就是,它使用一个向量t=(t1,t2,,tn)Tn为样本点的个数)来记录每个特征向量x被误分类的次数。\begin{aligned} & 我们知道,在原始形式里样本点(\vec{x}, y)是随机抽取出来的,那么就有可能说 \\ & 某个样本点的特征向量被重复多次抽取出来,同时,也有可能说模型在这个 \\ & 特征向量上多次误分类。\\ & 对偶形式的关键思路就是,它使用一个向量\vec{t}=(t_1, t_2, \dots, t_n)^T(n为样本点 \\ & 的个数)来记录每个特征向量\vec{x}被误分类的次数。 \end{aligned}

1.2.4.1 从原始形式到对偶形式

原始形式的学习算法使用如下式子更新参数:

{ww+ηyixibb+η\begin{aligned} & \boxed{ \begin{cases} \vec{w} \gets \vec{w} + \eta y_i x_i \\ b \gets b + \eta \end{cases} } \end{aligned}

现在,假设

w=0, b=0,以及某个样本点(xi,yi)被误分类了ti\begin{aligned} \boxed{\vec{w}=0,\ b=0},以及 某个样本点(\vec{x_i}, y_i)被误分类了t_i次 \\ \end{aligned}

那么,模型参数可以写成如下形式:

{w=i=1ntiηyixib=i=1ntiηyi\begin{aligned} & \boxed{ \begin{cases} \vec{w} = \sum_{i=1}^{n} t_i \eta y_i x_i \\ b = \sum_{i=1}^{n} t_i \eta y_i \end{cases} } \end{aligned}
最终,需要学习的模型参数就从wb变成元素是ti(i[1,n])的向量t\begin{aligned} & 最终,需要学习的模型参数就从\vec{w}和b变成元素是t_i(i \in [1, n])的向量\vec{t}。 \end{aligned}

1.2.4.2 对偶形式的学习算法

输入:训练集T={(x1,y1),(x2,y2),,(xn,yn)},其中xiRn             yiY={1,+1}i[1,n],学习率η[0,1]输出:损失函数L(w,b)取极小值时的t,以及感知机模型             f(x)=sign(j=1ntjηyjxjx+j=1ntjηyj)(1)初始化t=0(2)随机选取一个样本点(xi,yi)(3)yi^=sign(j=1ntjηyjxjx+j=1ntjηyj)(4)如果yi^yi     更新参数:titi+1(5)跳转到(2),直到没有误分类的样本点为止。\begin{aligned} & 输入:训练集T=\{(\vec{x_1}, y_1), (\vec{x_2}, y_2), \dots, (\vec{x_n}, y_n)\},其中\vec{x_i} \in R^n,\\ & \ \ \ \ \ \ \ \ \ \ \ \ \ y_i \in Y=\{-1, +1\},i \in [1, n],学习率\eta \in [0, 1]\\ & 输出:损失函数L(\vec{w}, b)取极小值时的\vec{t},以及感知机模型 \\ & \ \ \ \ \ \ \ \ \ \ \ \ \ f(\vec{x})=sign(\sum_{j=1}^{n} t_j \eta y_j \vec{x_j} \vec{x} + \sum_{j=1}^{n} t_j \eta y_j) \\ & (1) 初始化\vec{t} = 0;\\ & (2) 随机选取一个样本点(\vec{x_i}, y_i);\\ & (3) \hat{y_i} = sign(\sum_{j=1}^{n} t_j \eta y_j \vec{x_j} \vec{x} + \sum_{j=1}^{n} t_j \eta y_j);\\ & (4) 如果\hat{y_i} \neq {y_i}:\\ & \ \ \ \ \ 更新参数:t_i \gets t_i + 1 \\ & (5) 跳转到(2),直到没有误分类的样本点为止。 \end{aligned}

1.3. 感知机的训练为什么能够收敛

收敛的证明过程请参考《统计学习方法》(第二版)2.3.2小节,书上给出的结论是:

  • 当训练集线性可分时,在迭代训练中的误分类次数K是有上界的,经过有限次搜索可以找到将训练集完全正确分开的分离超平面;
  • 当训练集线性不可分时,训练算法不能收敛,迭代结果会发生振荡。

1.4. 示例

未完待续,敬请期待

2. 感知机的变体

  • 投票感知机(voted Perceptron)
  • 平均感知机(Averaged Perceptron)
  • 结构化感知机(Structured Perceptron)

3. 投票感知机

如上所述,感知机在每次迭代训练时都会更新参数(权重和偏置)一次,也就是说,在每次迭代中都会产生一个新的模型,如果想知道哪个模型更好,一种简单的办法就是让新模型和旧模型在一个新的数据集上进行比较,如果新模型的准确率更高,那就用新模型替代旧模型。一般来说,新模型都比旧模型好,所以,另一种更好的办法就是,每次迭代的模型和在新的数据集上的准确率都保留下来,在预测时,每个模型都给出自己的预测结果,同时以各自的准确率作为权重,乘上各自的预测结果作为加权平均结果,最后算一下那个模型的最终结果最高,以最高的作为最终的预测结果,这样操作的感知机称为投票感知机

4. 平均感知机

由于投票感知机需要保存每一轮迭代的参数以及对应的准确率,同时在预测时需要进行额外的加权平均计算,在时间复杂度和空间复杂度上都不够优雅,所以,人们提出一种更优的平均感知机:在迭代前先初始化一个参数总和,在每一轮迭代中将参数的更新值累加到这个参数总和,在迭代完成之后再将这个参数总和除以迭代次数,就得到最终的模型。

4.1 定义

平均感知机的定义和普通感知机一样,只是训练算法有所不同。

4.2 训练算法

输入:训练集T={(x1,y1),(x2,y2),,(xn,yn)},其中xiRn             yiY={1,+1}i[1,n],学习率η[0,1]输出:迭代N轮后wb各自的平均值,以及感知机模型             f(x)=sign(wx+b)(1)初始化w的累积量sw以及b的累积量sb(2)随机选取w=w0b=b0(也可以粗暴地设置为0);(3)在训练集中随机选取一个样本(xi,yi)(4)计算yi^=sign(wxi+b)(5)如果yi^yi     使用如下梯度计算公式计算损失函数在当前样本点的梯度:     {Lw(xi,yi)=yixiLb(xi,yi)=yi     接着使用梯度更新参数:     {wwηLw(xi,yi)=w+ηyixibbηLb(xi,yi)=b+ηyi     然后累加两个累积量:{swsw+wsbsb+b(6)跳转到(2),直到训练集中没有误分类的样本点为止;(7)计算wb的平均值:{w=swNb=sbN\begin{aligned} & 输入:训练集T=\{(\vec{x_1}, y_1), (\vec{x_2}, y_2), \dots, (\vec{x_n}, y_n)\},其中x_i \in R^n,\\ & \ \ \ \ \ \ \ \ \ \ \ \ \ y_i \in Y=\{-1, +1\},i \in [1, n],学习率\eta \in [0, 1]\\ & 输出:迭代N轮后\vec{w}和b各自的平均值,以及感知机模型 \\ & \ \ \ \ \ \ \ \ \ \ \ \ \ f(\vec{x})=sign(\vec{w} \cdot \vec{x} + b) \\ & (1) 初始化\vec{w}的累积量\vec{s_w}以及b的累积量s_b;\\ & (2) 随机选取\vec{w} = \vec{w}_0和b = b_0(也可以粗暴地设置为0);\\ & (3) 在训练集中随机选取一个样本(x_i, y_i);\\ & (4) 计算\hat{y_i}=sign(\vec{w} \cdot \vec{x_i} + b);\\ & (5) 如果\hat{y_i} \neq y_i:\\ & \ \ \ \ \ 使用如下梯度计算公式计算损失函数在当前样本点的梯度:\\ & \ \ \ \ \ \boxed{ \begin{cases} \frac{\partial L}{\partial w}|_(x_i, y_i)=-y_ix_i \\ \frac{\partial L}{\partial b}|_(x_i, y_i)=-y_i \end{cases} } \\ & \ \ \ \ \ 接着使用梯度更新参数:\\ & \ \ \ \ \ \boxed{ \begin{cases} \vec{w} \gets \vec{w} - \eta \frac{\partial L}{\partial w}|_(x_i, y_i) = \vec{w} + \eta y_i x_i \\ b \gets b - \eta \frac{\partial L}{\partial b}|_(x_i, y_i) = b + \eta y_i \end{cases} }\\ & \ \ \ \ \ 然后累加两个累积量: \boxed{ \begin{cases} \vec{s_w} \gets \vec{s_w} + \vec{w} \\ s_b \gets s_b + b \end{cases} } \\ & (6) 跳转到(2),直到训练集中没有误分类的样本点为止;\\ & (7) 计算\vec{w}和b的平均值: \boxed{ \begin{cases} \overline{\vec{w}} = \frac{\vec{s_w}}{N} \\ \overline b = \frac{s_b}{N} \end{cases} } \end{aligned}

5. 结构化感知机

结构化感知机是一种为了实现结构化学习(Structured Learning)而基于感知机来改进的线性模型。

接下来,先简单介绍有关结构化学习的背景知识,然后再给出结构化感知机的定义和训练算法。

5.1 结构化学习

我们知道,用于回归问题的模型会输出一个或多个连续型的标量值,用于分类问题的模型则会输出一个或多个离散的代表类别或标签的离散值,而用于结构化学习的模型则会输出一组服从某种关系或者某种结构的数据集合。

在NLP中,词性标注和句法分析都可以看做是结构化学习的例子,前者的模型会输出对应句子每个单词的词性序列,后者的模型则会输出一个句法树。我们知道,在数据结构里,序列代表一组满足一对一线性关系的数据集合,而树则是一组满足一对多或者多对一关系的集合,因此,结构化的意思可以理解成模型的输出是某种数据结构。

5.1.1 结构化学习的定义

结构化学习的目标就是在给定输入的特征向量x以及对应的输出结构y的情况下,找到一个可以衡量xy匹配度的打分函数f(x,y),使得在预测时打分函数可以返回分数最高的那个y^作为输出。\begin{aligned} & 结构化学习的目标就是在给定输入的特征向量\vec{x}以及对应的输出结构y的情况下,\\ & 找到一个可以衡量\vec{x}和y匹配度的打分函数f(\vec{x}, y),使得在预测时打分函数可以返回分数最高的那个\hat{y}作为输出。 \end{aligned}

5.1.1.1 通用处理框架

结构化学习包含训练(training)、预测(prediction)或推断(inference两个环节,其中,在训练阶段,需要根据训练集(X,Y)找到一个能作为打分函数的映射f(x,y)而在预测阶段,需要在给定输入特征x的条件下,找到分数最高的那个结构y^总的来说,可以用一下这组式子来表示这两个阶段:{f(x,y):X×YRy^=argmaxyYf(x,y)\begin{aligned} & 结构化学习包含训练(training)、预测(prediction)或推断(inference)\\ & 两个环节,其中,在训练阶段,需要根据训练集(X, Y)找到一个能作为打分\\ & 函数的映射f(x, y),\\ & 而在预测阶段,需要在给定输入特征\vec{x}的条件下,找到分数最高的那个结构\hat{y}。\\ & 总的来说,可以用一下这组式子来表示这两个阶段:\\ & \boxed{ \begin{cases} f(x, y): X \times Y \to R \\ \hat{y} = argmax_{y \in Y}f(x, y) \end{cases} } \end{aligned}

5.1.1.2 通用框架的概率解释

上述两个阶段如果从概率的角度来描述的话,有如下近似解释:{P(X,Y)[0,1]y^=argmaxyYP(YX)=argmaxyYP(X,Y)P(X)argmaxyYP(X,Y)在训练集(X,Y)中,P(X)可以看作常数,所以有上面第二条式子的近似。\begin{aligned} & 上述两个阶段如果从概率的角度来描述的话,有如下近似解释:\\ & \boxed{ \begin{cases} P(X, Y) \to [0, 1] \\ \hat{y} = argmax_{y \in Y}P(Y|X) = argmax_{y \in Y} \frac{P(X, Y)}{P(X)} \approx argmax_{y \in Y}P(X, Y) \end{cases} } \\ & 在训练集(X, Y)中,P(X)可以看作常数,所以有上面第二条式子的近似。 \end{aligned}

5.1.2 结构化学习要解决的三个问题

  • 打分函数f(X, Y)的形式
  • 如何计算最高分
  • 给定训练集(X, Y),如何确定f(X, Y)

5.2 结构化感知机

5.2.1 结构化感知机的定义

我们知道,感知机是一种线性模型,那么,要让线性模型支持结构化学习,首先得先确定打分函数的形式。从上述可以知道,打分函数f(x,y)需要两个参数:输入的特征向量x和输出的结构y但是,之前的感知机的打分函数只需要一个参数xwx+b,那么,结构y如何考虑进去呢?答案是定义新的特征函数:ϕ(x,y),把结构y也当做一种特征,与原来的特征向量x一起组合成结构化特征向量。为了使打分函数服从线性关系,可以如下定义打分函数:f(x,y)=wϕ(x,y),其中,ϕ是一组特征函数ϕi组成的向量于是,预测时有:y^=argmaxyY[(wϕ(x,y)]\begin{aligned} & 我们知道,感知机是一种线性模型,那么,要让线性模型支持结构化学习,\\ & 首先得先确定打分函数的形式。从上述可以知道,打分函数f(x, y)需要两个 \\ & 参数:输入的特征向量\vec{x}和输出的结构y。\\ & \\ & 但是,之前的感知机的打分函数只需要一个参数\vec{x}:\vec{w} \cdot \vec{x} + b,那么,结构y \\ & 如何考虑进去呢?答案是定义新的特征函数:\phi(\vec{x}, y),把结构y也当做一种 \\ & 特征,与原来的特征向量\vec{x}一起组合成结构化特征向量。\\ & \\ & 为了使打分函数服从线性关系,可以如下定义打分函数:\\ & \boxed{ f(\vec{x}, y) = \vec{w} \cdot \vec{\phi}(\vec{x}, y),其中,\vec{\phi}是一组特征函数\phi_i组成的向量 } \\ & 于是,预测时有:\\ & \boxed{ \hat{y} = argmax_{y \in Y} [(\vec{w} \cdot \vec{\phi}(\vec{x}, y)] } \end{aligned}

5.2.2 结构化感知机的训练

5.2.2.1 结构化感知机的训练策略

结构化感知机的训练目标就是找到打分函数f(x,y),这个打分函数能够在给定特征向量xi的条件下从结构集合Y中选取一个跟xi最匹配的yi那么打分函数怎样才能找到最匹配的y呢?一种简单粗暴的办法就是在结构集合中穷举所有的y,将这个y与给定的x一起组合成一对(x,y),接着让打分函数给每一对这样的组合打分,然后从中选取最高分作为输出。然而幸运的是,在训练阶段,对于训练集(X,Y)中的任意一个xiX,跟它最匹配的y其实是已经确定好了的,那就是yi所以,在训练时,我们可以让打分函数在样本点(xi,yi)上打最高分,在其余的穷举组合(xi,yj)(ij)上打较低分,这样就可以确保打分函数在预测时能输出正确的yi如果要使用数学语言来表达上面这段文字的话,有以下叙述:已知打分函数f(x,y)=wϕ(x,y)给定样本点(xi,yi)以及其余的穷举组合(xi,yj)(ij)求出能使不等式w^ϕ(xi,yi)w^ϕ(xi,yj)成立的w^现在,不等式两边都是两个向量做内积运算的形式,然后根据向量内积的几何意义,不等式左边的式子可以看作是样本点(xi,yi)代表的特征向量在向量w^上的投影长度,同样地,不等式右边的式子则是其余穷举组合(xi,yj)代表的特征向量在w^上的投影长度。那么,在迭代训练时,如何让左边的投影长度大于右边的呢?答案是旋转向量w^,让它更靠近特征向量ϕ(xi,yi),同时远离ϕ(xi,yj)ww+ϕ^(xi,yi)ϕ^(x,yj)(ij)\begin{aligned} & 结构化感知机的训练目标就是找到打分函数f(x, y),这个打分函数能够在 \\ & 给定特征向量\vec{x_i}的条件下从结构集合Y中选取一个跟\vec{x_i}最匹配的y_i。\\ & 那么打分函数怎样才能找到最匹配的y呢?一种简单粗暴的办法就是在结构 \\ & 集合中穷举所有的y,将这个y与给定的\vec{x}一起组合成一对(\vec{x}, y),接着让打分 \\ & 函数给每一对这样的组合打分,然后从中选取最高分作为输出。\\ & \\ & 然而幸运的是,在训练阶段,对于训练集(X, Y)中的任意一个x_i \in X,跟它 \\ & 最匹配的y其实是已经确定好了的,那就是y_i。\\ & 所以,在训练时,我们可以让打分函数在样本点(\vec{x_i}, y_i)上打最高分,在其余 \\ & 的穷举组合(\vec{x_i}, y_j)(i \neq j)上打较低分,这样就可以确保打分函数在预测时能 \\ & 输出正确的y_i。\\ & \\ & 如果要使用数学语言来表达上面这段文字的话,有以下叙述:\\ & 已知打分函数f(\vec{x}, y) = \vec{w} \cdot \vec{\phi}(\vec{x}, y),\\ & 给定样本点(\vec{x_i}, y_i)以及其余的穷举组合(\vec{x_i}, y_j)(i \neq j),\\ & 求出能使不等式 \\ & \boxed{ \hat{\vec{w}} \cdot \vec{\phi}(\vec{x_i}, y_i)\ge \hat{\vec{w}} \cdot \vec{\phi}(\vec{x_i}, y_j) } \\ & 成立的\hat{\vec{w}}。\\ & 现在,不等式两边都是两个向量做内积运算的形式,然后根据向量内积的几 \\ & 何意义,不等式左边的式子可以看作是样本点(\vec{x_i}, y_i)代表的特征向量在向量 \\ & \hat{\vec{w}}上的投影长度,同样地,不等式右边的式子则是其余穷举组合(\vec{x_i}, y_j)代表 \\ & 的特征向量在\hat{\vec{w}}上的投影长度。\\ & 那么,在迭代训练时,如何让左边的投影长度大于右边的呢?\\ & 答案是旋转向量\hat{\vec{w}},让它更靠近特征向量\vec{\phi}(\vec{x_i}, y_i),同时远离\vec{\phi}(\vec{x_i}, y_j):\\ & \boxed{ \vec{w} \gets \vec{w} + \hat{\phi}(\vec{x_i}, y_i) - \hat{\phi}(\vec{x}, y_j)(i \neq j) } \end{aligned}

5.2.2.2 结构化感知机的训练算法

输入:训练集(X,Y)={(x1,y1),(x2,y2),,(xn,yn)}输出:权重w(1)随机初始化w=w0(也可以直接设置为0);(2)随机选取一个样本点(xi,yi)(3)在结构集合Y中寻找跟xi最匹配的yi^(4)如果yi^yi     更新参数:ww+ϕ^(xi,yi)ϕ^(x,yj)(yiY,yjY,ij)(5)跳转到(2),直到参数w不再更新为止。\begin{aligned} & 输入:训练集(X, Y) = \{(\vec{x_1}, y_1), (\vec{x_2}, y_2), \dots, (\vec{x_n}, y_n)\} \\ & 输出:权重\vec{w} \\ & (1) 随机初始化\vec{w}=w_0(也可以直接设置为0);\\ & (2) 随机选取一个样本点(\vec{x_i}, y_i);\\ & (3) 在结构集合Y中寻找跟\vec{x_i}最匹配的\hat{y_i};\\ & (4) 如果\hat{y_i} \neq y_i:\\ & \ \ \ \ \ 更新参数:\vec{w} \gets \vec{w} + \hat{\phi}(\vec{x_i}, y_i) - \hat{\phi}(\vec{x}, y_j)(y_i \in Y, y_j \in Y, i \neq j) \\ & (5) 跳转到(2),直到参数\vec{w}不再更新为止。 \end{aligned}

6. 参考资料

[1].《自然语言处理入门》,何晗著

[2].《统计学习方法》(第二版),李航著

[3]. Introduction of Structured Learning, Hung-yi Lee

[4]. Structured Linear Model, Hung-yi Lee

[5]. Understanding the Averaged Perceptron Machine Learning Technique

[6]. 如何理解感知机学习算法的对偶形式?