感知机学习笔记

1. 感知机简述

感知机是一种二分类的线性分类模型。目的是学习出一个线性超平面,将正例和负例划分开.
以下对感知机作一具体定义:

假设输入空间(特征空间)是\(\mathcal{X} \subseteq \mathbb{R}^n\),输出空间是\(\mathcal{Y} \in \{+1, -1\}\).输入\(\boldsymbol{x} \in \mathcal{X}\)表示实例的特征向量,对应于输入空间(特征空间)的点;输出\(y \in \mathcal{Y}\)表示实例的类别.由输入空间到输出空间的如下函数:
\[ f(x) = sign(\boldsymbol{w} \centerdot \boldsymbol{x} + b) \tag{1} \]
称为感知机.其中,\(\boldsymbol{w}\)和b为感知机模型参数,\(\boldsymbol{w} \in \mathbb{R}^n\)叫作权值向量,\(b \in \mathbb{R}\)叫作偏置,\(\boldsymbol{w} \centerdot \boldsymbol{x}\)表示二者内积.sign是符号函数,即
\[ \begin{equation} sign(x) = \left\{ \begin{aligned} +1, & x \ge 0 \\ -1, & x < 0 \end{aligned} \right. \end{equation} \tag{2} \]

感知机是一种线性分类模型,所以它不能处理诸如异或这种非线性问题。如果存在一个线性超平面,可以将数据集正确地划分为正例和负例,那么该数据集就是线性可分的,反之则是线性不可分的.以下默认数据集是线性可分的,即总有一个超平面可以将数据集线性划分.

2. 感知机的学习策略

符号约定: \(\boldsymbol{x}^{(i)}_j\)表示第i个样本向量的第j个元素,\(y^{(i)}\)表示第i个样本的输出标签
输入空间中的任一样本\(\boldsymbol{x}^{(i)}\)点到超平面的距离为:
\[ \frac{1}{||\boldsymbol{w}||}|\boldsymbol{w} \centerdot \boldsymbol{x}^{(i)} + b| \tag{3} \]
其中\(||\boldsymbol{w}||\)\(\boldsymbol{w}\)\(L_2\)范数.而对于误分类点\((\boldsymbol{x}^{(i)}, y^{(i)})\)则有:
\[ -y^{(i)}(\boldsymbol{w} \centerdot \boldsymbol{x}^{(i)} + b ) > 0 \tag{4} \]
因为如果被误分类,那么在\(\boldsymbol{w} \centerdot \boldsymbol{x}^{(i)} + b > 0\)时,实际标签其实是\(y^{(i)} = -1\),反之,在\(\boldsymbol{w} \centerdot \boldsymbol{x}^{(i)} + b < 0\)时,实际标签其实是\(y^{(i)} = 1\).所以考虑这一点以及式(3),我们可知对于误分类的点,到超平面的距离为:
\[ \frac{-y^{(i)}(\boldsymbol{w} \centerdot \boldsymbol{x}^{(i)} + b )}{||\boldsymbol{w}||} \tag{5} \]
也就是把式(3)的分子用另外一种方式表达出来,刚好可以消除绝对值符号.再假设被误分类的点的集合记作\(M\),那么这些被误分类的点到超平面的距离总和就可写为:
\[ \sum\limits_{\boldsymbol{x}^{(i)} \in M}\frac{-y^{(i)}(\boldsymbol{w} \centerdot \boldsymbol{x}^{(i)} + b )}{||\boldsymbol{w}||} \tag{6} \]
我们就可以把式(6)作为感知机算法的损失函数,因为这个数值一定是越小越好,在完全没有误分类点的情况下,该式的结果为0.同时分母权值向量的\(L_2\)范数可忽略不计,把损失函数记为:
\[ L(\boldsymbol{w}, b) = -\sum\limits_{\boldsymbol{x}^{(i)} \in M}y^{(i)}(\boldsymbol{w} \centerdot \boldsymbol{x}^{(i)}) + b \tag{7} \]
所以学习的目的就是要求出使损失函数最小的参数\(\boldsymbol{w}\)和b.感知机参数的求解使用随机梯度下降法,即每次只取一个样本来进行参数更新,具体地,如果损失函数直接对\(\boldsymbol{w}\)和b求偏导,可以得到:
\[ \frac{\partial{L}}{\partial{\boldsymbol{w}}} = -\sum\limits_{\boldsymbol{x}^{(i)} \in M}y^{(i)}\boldsymbol{x}^{(i)} \tag{8} \]
\[ \frac{\partial{L}}{\partial{b}} = -\sum\limits_{\boldsymbol{x}^{(i)} \in M}y^{(i)} \tag{9} \]
式(8)-式(9)式考虑了所有的误分类点得出的求偏导结果,如果只选择其中一个误分类点,则有:
\[ \frac{\partial{L}}{\partial{\boldsymbol{w}}} = -y^{(i)}\boldsymbol{x}^{(i)} \tag{10} \]
\[ \frac{\partial{L}}{\partial{b}} = -y^{(i)} \tag{11} \]
所以参数更新的结果是:
\[ \begin{align*} \boldsymbol{w} &= \boldsymbol{w} - \eta \frac{\partial{L}}{\partial{\boldsymbol{w}}} \\ &= \boldsymbol{w} - \eta (-y^{(i)}\boldsymbol{x}^{(i)}) \\ &= \boldsymbol{w} + \eta y^{(i)}\boldsymbol{x}^{(i)} \end{align*} \tag{12} \]
\[ \begin{align*} b &= b - \eta \frac{\partial{L}}{\partial{b}} \\ &= b - \eta (-y^{(i)}) \\ &= b + \eta y^{(i)} \end{align*} \tag{13} \]
其中\(\eta\)为感知机的学习率.

3. 感知机的学习算法

3.1 原始形式

感知机算法的原始形式就是利用式(12)-式(13)进行参数更新,每取一个误分类样本就更新一次参数,参数的初始值\(\boldsymbol{w}_0\)和b均赋为0,即一个元素均为0的向量和一个数值为0的偏置,一直迭代进行到没有误分类点为止,即对于所有样本点,均有\(y^{(i)}(\boldsymbol{w} \centerdot \boldsymbol{x}^{(i)}) > 0\).对于一个线性可分的数据集,那么一定可以正确地分割成正例和负例,所以从直觉上来看,经过有限次迭代,感知机一定会找出分隔超平面的参数\(\boldsymbol{w}\)和b.当然参数并不唯一,如果参数初值设定不同或者每次迭代选取的误分类点不同,最后得出的参数也会不同,从直觉上来看,划分一个线性可分的数据集应当有无数个分隔超平面可满足要求.倘若要求学习到的参数是唯一的,那么必须要添加一些限定条件,这时候就可能衍生成其他的分类算法,例如要求分隔超平面到两边的点距离最大,形成最大间隔,就成了支持向量机模型.
根据Novikoff定理,感知机在线性可分数据集上的误分类次数是有上限的,即经过有限次迭代可以得到一个划分数据集的超平面,具体证明可见《统计学习方法》(李航)\(p_{31}\).

3.2对偶形式

事实上,倘若初始参数均设为0的话,那么从式(12)-式(13)的参数更新过程可见,参数\(\boldsymbol{w}\)就是误分类样本向量及其标签相乘的累加之和,最后再乘以一个学习率\(\eta\),参数b也类似.我们可以令\(n_i\)来表示某个样本\(\boldsymbol{x}^{(i)}\)因为误分而参与迭代的次数,所以我们可以很容易地改写参数更新公式,针对所有样本,有:
\[ \begin{align*} \boldsymbol{w} &= \sum\limits^{N}_{i=1} \eta n_i y_i \boldsymbol{x}^{(i)} \\ &= \sum\limits^{N}_{i=1}{\alpha}_i y_i \boldsymbol{x}^{(i)} \end{align*} \tag{14} \]
\[ \begin{align*} b &= \sum\limits^{N}_{i=1} \eta n_i y_i \\ &= \sum\limits^{N}_{i=1}{\alpha}_i y_i \end{align*} \tag{15} \]
上面两个式子中,\(\alpha_i\)是第i个样本被误分类而参与迭代的次数乘以原学习率\(\eta\)而得到的新的学习率.直觉上,如果某个样本参与迭代的次数越多,那么它被误分类的次数就越多,说明每次迭代计算出的分离超平面很难正确地划分该样本点,那么这样的样本点的影响就越大.所谓感知机的对偶形式就是基于上面的参数更新方式来的.具体地,先给参数\(\boldsymbol{\alpha}\)和b赋值为0,注意这里的\(\boldsymbol{\alpha}\)是一个向量,即数\(\boldsymbol{\alpha} = (\alpha_1, \alpha_2, ..., \alpha_N)^T\),毕竟初始时,所有样本点都没有被误分而参与迭代,所以均为0.然后在样本中选取一个样本点\((\boldsymbol{x}^{(i)}, y^{(i)})\),如果\(y^{(i)}\left(\sum\limits^{N}_{j=1}\alpha_j y^{(j)} \boldsymbol{x}^{(j)} \centerdot \boldsymbol{x}^{(i)} + b\right) \leq 0\),就按照式(14)-式(15)来更新参数,直到所有的样本都被正确分类为止,否则不断地重复选取样本点然后进行参数更新.注意到对偶形式用到了样本点相互间的内积\(\boldsymbol{x}^{(j)} \centerdot \boldsymbol{x}^{(i)}\),因为\(\left(\sum\limits^{N}_{j=1}\alpha_j y^{(j)} \boldsymbol{x}^{(j)} \right) \centerdot \boldsymbol{x}^{(i)}\)\(\sum\limits^{N}_{j=1}\alpha_j y^{(j)} \boldsymbol{x}^{(j)} \centerdot \boldsymbol{x}^{(i)}\)的结果是一样的,一个是先计算向量之和再做内积,一个是做完内积再相加起来,就是结合律.所以可以先把样本之间内积先计算出来,以矩阵的形式存储,即Gram矩阵,方便以后的计算.

参考文献

李航.统计学习方法[M].北京:清华大学出版社,2012 25-34.

猜你喜欢

转载自www.cnblogs.com/excellent-ship/p/9105400.html