在之前的文章中我们已经讲过了逻辑回归分类器,现在趁热打铁总结一下与逻辑回归非常相似的感知机模型。感知机模型是一个非常古老的分类算法,现在很少会单独使用它,但是它的原理简单有效,很值得学习和理解,从原理上来说,感知机模型是神经网络和支持向量机的基础,理解了感知机有利于理解支持向量机和神经网络的原理。
1 感知机的原理
在广义线性模型(4)逻辑回归中我们说逻辑回归可以视为包含一个线性回归和一个值域映射两个过程,如果拿逻辑回归与感知机作比较的话,可以说感知机也同样包括这两个过程,只不过它的值域映射比逻辑回归简单很多,感知机直接将线性模型的输出映射为+1和-1,即需要预测的两个类别上,正可谓简单粗暴。所以说,感知机也是线性模型,用来处理线性可分的二分类问题,同样属于判别模型。
感知机假设数据线性可分的,希望通过学习得到一个线性的决策边界,将训练数据集正样本点和负样本点完全正确分开的分离,在决策边界一侧为正样本,另一侧为负样本,这个思路跟逻辑回归是一样的。
感知机模型可以表示为下式,其中函数将线性模型的输出映射为预测类别:
2 感知机的损失函数
由点到超平面的距离计算方法可知:代表了样本点到决策边界的距离(文章没有用的形式,抛弃了常数项的问题,其实是不准确的,若有看官,还请不要介意);
同时我们可知,的样本类别输出值取为1,满足的样本类别输出值取为-1,因此正确分类的样本满足 ,而错误分类的样本满足,表示了错误分类的样本到决策超平面的距离,感知机损失函数的优化目标,就是期望使错误分类的所有样本到超平面的距离之和最小(正样本+1,负样本-1这样的定义方式使得定义损失函数变得很方便),损失函数为:
式中,M为样本中所有错误分类样本点的集合。实际上,我们会把损失函数中参数的L2正则项扔掉,认为它不会影响优化结果,即得到损失函数:
为什么可以不考虑呢?搜索解空间的时候,会一直在变化啊?我觉得这个挺难理解的,根据资料及猜测,我觉得勉强能接受的原因为:
- 不影响感知机学习算法的最终结果。因为数据集线性可分,则最终一定会找到超平面,感知机学习算法最终的终止条件是所有的输入都被正确分类,即不存在误分类的点,则此时损失函数为0, 所以对最终结果也无影响;
- 忽略,即是没有真的达到损失函数为0,可能产生了一点误差,但大大的减小了加上的计算复杂度,还是划算的,提高了算法效率。
3 感知机的学习算法
确定了损失函数的形式,接下来就要进行损失函数的优化,还是使用梯度下降,由于损失函数中只有错误分类的样本点才参与计算,所以不需要使用普通的批量梯度下降了,我们选择使用随机梯度下降,每次迭代只使用一个错误分类的样本来对参数进行更新。
3.1 原始形式
感知机的学习算法的原始形式即直接使用梯度下降,其学习过程为:
输入:训练数据集,学习率;
输出:,其中对应的,感知机模型;
- 赋初值 ;
- 选取数据点;
- 如果,即点为错误分类点,则:
- 转到2,直到训练集中没有错误分类点。
可以发现,在原始形式中,每一轮迭代都需要判断各个样本点是不是错误分类点,既对于每个样本点都需要计算,向量内积的时间复杂度为,因此总的时间复杂度为,其中N为样本点数量,k为迭代次数(虽然每次迭代不需要全部遍历N个样本,不过表达时间复杂度时可以去掉因子保留变量,表示成),这个时间复杂度还是比较高的,有没有更快捷的计算方法呢?我们来看看感知机的学习算法的对偶形式。
3.2 对偶形式
什么叫对偶形式?这里的对偶可不是“三尺剑,六钧弓”的意思,优化理论中的对偶问题是指每一个线性规划问题(称为原始问题)有一个与它对应的对偶线性规划问题(称为对偶问题),原始问题与对偶问题的解是对应的,得出一个问题的解,另一个问题的解也就得到了,可以简单的理解为从不同角度看待同一个问题,通过改变这个问题的形式使得我们更好求解。
根据感知机学习算法的原始形式可知,只有错误分类的样本点才会用于梯度下降计算,对于被次误分类而更新的样本,它参与迭代的次数同样为。如果令参数初始值为, 这样我们的的表达式可以写为:
表示对全部样本中的每个个样本点进行次梯度下降,其中没被错误分类过的样本点。引用知乎上一个答案对的理解:
这样参数的学习问题就转变成了样本错误分类次数的学习问题,此之谓“对偶”也。这样做的好处是什么呢?原始形式的痛点在于中的内积运算,在对偶问题中转变为:
由内积转变为内积,区别是是已知的,可以提前通过矩阵运算得到Gram矩阵保存下来重用,样本循环和迭代的时间复杂度不变,个维向量的内积计算提前,所以时间复杂度大概可以表示为,与倒不太好比较,不过这里按矩阵运算的时间复杂度完全没有优化来计算的,实际肯定比这小得多,并且工程上矩阵运算都是高度优化过的,非常快,所以对偶形式在使用效率上是很有优势的。
Gram矩阵对偶形式的学习过程为:
输入:训练数据集,学习率;
输出:,感知机模型
- 赋初值;
- 计算所有样本内积形成的Gram矩阵G。
- 选取数据点;
- 判断该数据点是否为当前模型的误分类点,即判断若则:
- 转到3,直到训练集中没有误分类点
4 总结
感知机算法原理很简单,但其中很多思路很棒,所以由它发展出了神经网络、支持向量机这样的更复杂、更准确的算法,搞懂了感知机模型的基本原理,接下来我们就来写一写跟它很相似的支持向量机~
主要参考
《统计学习方法》 李航
感知机的损失函数为什么可以采用函数间隔(忽略1/||w||)?
如何理解感知机学习算法的对偶形式?
网友评论