标签(空格分隔): 监督学习
@ author : [email protected]
@ time : 2016-07-04
前面一篇文章是关于LR回归的,其中提到LR回归是一个判别式模型。这里再研究一个判别式模型:感知机。感知机模型在机器学习中有举足轻重的地位,它是SVM和神经网络的基础。
之前的线性回归的概率解释中,假设样本的概率密度函数的参数形式是已知的,然后需要基于样本,使用参数估计的方法来估计概率密度函数的参数值;这里的感知机算法和前一篇文章《LR回归》,都是直接假设判别函数的参数形式是已知的,然后基于训练样本,来估计判别函数的参数值,被称为判别式方法。感知机所得到的是一个线性判别函数。而一般来说,寻找线性判别函数的问题,会被形式化为极小化准则函数的问题,以分类为目的的准则函数可以是样本的风险函数,或者是训练误差。
感知机模型是一个二分类模型,和线性回归模型一样,感知机模型一般会使用一些特征函数 ϕ(x) ,将输入空间映射到新的特征空间中,再进行计算。感知机模型对应于特征空间中将实例划分为正负两类的分离超平面,故而是判别式模型。感知机模型的数学表达式如下:
这里 f(⋅) 叫做激活函数:
在LR模型中,输出的取值为 t∈{1,0} ,在感知机模型中,输出的取值为 t∈{+1,−1} 。
感知机算法相对来说,十分的简单,其分可以分为原始形式和对偶形式。
模型有了,现在要考虑其损失函数的形式,由于感知机模型的输出是0和1两个离散的值,如果使用基于分类错误的平方误差,会使得损失函数不连续,更别说是否可导了。所以这里使用下面这个损失函数,在后面将 SVM 的时候就可以知道,这个损失函数其实就是 SVM 中的函数间隔:
其中, M 是分类错误的样本子集的下标; ϕ(x) 是输入变量 x 的特征提取函数,一般来说,我们用 x 指代输入空间,但是,在实际的问题中,输入空间的变量很难直接用于模型学习,需要在输入空间的基础上再做一个特征变换的操作 ϕ(x) ,将输入空间变换到特征空间,然后用特征空间进行模型的学习。
对于上面的损失函数而言:
当 tn=+1 的时候,由于样本被分类错误, wTϕ(xn)<0 ,所以 −wTϕ(xn)tn>0
当 tn=−1 的时候,由于样本被分类错误, wTϕ(xn)>0 ,所以 −wTϕ(xn)tn>0
故而这里 E 始终为正值,当 E 取其最小值0的时候,感知机模型就可以将输入样本完全的分开。
当然,这里需要注意一个特殊情况: 如果样本点刚好落在了决策超平面上,那么 wTϕ(xn)=0 ,这种情况,无论将这个样本点判给哪个类,都无所谓,可以不予考虑。
然后对其求梯度:
和线性回归模型一样,有了梯度之后,就可以使用梯度下降法来求解模型的参数了:
这种算法也叫作批处理算法,使用“批处理”这个术语,猪獒是因为每次在修正权值向量的时候,都需要计算成批的样本。与之相对的就是下面的随机梯度下降法,这是一种但样本方法,或者叫做在线学习算法。
或者使用随机梯度下降法,这里的 n 是在 M 中随机选择的一个:
上式中的 ηt 需要满足:
最常见的一个满足上述两个条件的函数为: ηk=1k 。在很多的教科书上,都会将 ηk 取为一个定值,这个是可行的,不过需要你给出一个合适的值,否则的话,算法的性能会比较的差,甚至无法收敛。
以上就是广义线性模型下的感知机模型,这个是感知机模型的原始形式,感知机模型最重要的并不是它的原始形式,而是他的对偶形式,这个里的对偶形式就是 SVM 求解中对偶形式的原型,很好的理解了感知机的对偶形式,那么 SVM 的对偶形式就可以很好的理解了。
每一个线性规划问题,我们称之为原始问题,都有一个与之对应的线性规划问题我们称之为对偶问题。原始问题与对偶问题的解是对应的,得出一个问题的解,另一个问题的解也就得到了。并且原始问题与对偶问题在形式上存在很简单的对应关系:
- 目标函数对原始问题是极大化,对偶问题则是极小化
- 原始问题目标函数中的系数,是对偶问题约束不等式中的右端常数,而原始问题约束不等式中的右端常数,则是对偶问题中目标函数的系数
- 原始问题和对偶问题的约束不等式的符号方向相反
- 原始问题约束不等式系数矩阵转置后,即为对偶问题的约束不等式的系数矩阵
- 原始问题的约束方程数对应于对偶问题的变量数,而原始问题的变量数对应于对偶问题的约束方程数
- 对偶问题的对偶问题是原始问题
这里为了和后面的 SVM 已经神经网络在公式上相对应,对上面感知机的原始形式做一个重写:
给定一个数据集: T={(x1,y1),(x2,y2),...,(xN,yN)} ,其中 yi∈{+1,−1} ,将广义线性模型下的损失函数:
重写为:
其中 b 一般被称为偏置。
那么损失函数的梯度就可以写为:
其对应的梯度下降法的参数更新方法为:
其对应的随机梯度下降法的参数更新方法为:
其中 xi∈M , ηt 需要满足的限制条件和前面的一样:
感知机随机梯度下降法的直观解释:对于感知机而言,当一个样本点被误分类之后,被误分类的样本点会位于决策超平面的错误的一侧,这时感知机会调整 w,b 的值,使决策超平面向该误分类点的一侧移动,移动的尺度由 ηt 决定,每一次移动,都可以减少误分类点和决策超平面之间的距离,直到决策超平面越过该误分类点,使其被正确分类为止。
对于一个线性可分的数据集而言,感知机经过有限次搜索之后,一定可以找到将训练数据完全正确分开的决策超平面。也就是说,但训练数据集是线性可分的时候,感知机学习算法的原始形式一定是迭代收敛的。
但是,同时需要注意:感知机学习算法存在许多的解,这些解即和感知机初值的选择有关,同时也依赖于迭代过程中随机选择的错误点的选择方法。
为了使得感知机可以有一个确定的最优解,就需要为感知机加上一些约束条件,这就是后面要讲的 SVM 的基本思想。
当训练的数据集线性不可分时,一般的感知机学习算法并不能迭代收敛,其结果会不断的震荡,这个问题在 SVM 中使用软间隔最大化来解决的。
感知机算法的对偶式,是针对感知机随机梯度下降法来设计的。其基本思想是:感知机的原始式中, x 是自变量, y 是因变量, w,b 是模型的参数,通俗点说,在感知机的原始算法中,是用参数 w,b 来表示 y 和 x 的。对偶式就是要把这这个关系反过来,用样本 x 和 y 的线性组合来表示参数 w 和 b 。
感知机随机梯度下降法的参数更新方式为:
对于第 i 个样本,每次其被分类错误,都会有一次基于 xi,yi 的权值跟新,那么假设,到最后,整个感知机算法更新结束时,第 i 个样本点总共更新了 ni 次。这样就不难得到,最后学习到的 w,b 分别为:
在感知机原始形式中, ηt 和迭代次数 t 相关,在对偶形式中, ηni 是和对应的样本点的权值更新次数 ni 相关。当然,这里的 ηni 也必须满足:
很容易知道, ni 越大,说明对应的第 i 个样本点更细你的次数就越多,也就意味着这个样本点距离分类超平面越近,其正确分类的难度也就越大,那么,这个点对于模型的影响也就越大。在 SVM 中,这种点,很有可能就是支持向量。
故而,感知机模型的对偶形式的模型为:
这里 f(⋅) 叫做激活函数:
注意,上式中,为了和样本点 (xi,yi) 的下标 i 相区别开来,这里选用的下标是 j 。
其训练过程为:
在训练集中选取一个样本点 (xi,yi) ,如果该点分类错误,那么该点的权值更新加一次:
那么,更新公式为( 注意,这里的下标是 i ):
这个其实就是想说,在 N 个训练样本依次循环的输入到算法中,如果对于某个样本分类错误,那么算法就对该样本点做一次更新。循环上面这个过程,直到所有的样本点都能够分类正确。
在感知机对偶式的训练过程中,也就是下面这个公式中:
上面这个式子可以写成下面这个形式:
这里 (xj∗xi) 表明,样本点的特征向量是以內积的形式存在于感知机对偶形式的训练算法中。为了简化计算过程,可以将训练集合之间的內积提前求出来,然后在训练过程中直接调用,样本点间的內积矩阵也就是所谓的Gram举证。
这里的內积,是 SVM 算法中核方法的原型,也是 SVM 之所以强大的根本原因。
感知机算法收敛的一个基本条件就是:样本是线性可分的。如果这个条件不成立的话,那么感知机算法就无法收敛。为了在样本线性不可分的情况下,感知机也可以收敛于一个相对理想的解,这里提出感知机袋式算法(Pocket algorithm)。
这个算法分为两个步骤:
1. 随机的初始化权值向量 w0 , 定义一个存储权值向量的袋子 P ,并为这个袋子设计一个计数器 Pc ,计数器初始化为0。
2. 在第 t 次迭代的时候,根据感知机算法计算出其更新的权值 wt+1 。用更新后的权值 wt+1 测试分类的效果,分类正确的样本数为 h ,如果 h>Pc ,那么用 wt+1 代替 wt ,并更新 Pc=h 。否则放弃当前更新。