Reference:【机器学习】感知机原理详解_感知机算法原理-CSDN博客
感知机(perceptron)是二分类的线性分类模型,属于监督学习算法
- 输入为实例的特征向量,输出为实例的类别(取+1和-1)。
- 感知机旨在求出将输入空间中的实例划分为两类的分离超平面,属于判别模型。
- 为求得超平面,感知机导入了基于误分类的损失函数,利用梯度下降法对损失函数进行最优化求解。
- 如果训练数据集是线性可分的,则感知机一定能求得分离超平面。如果是非线性可分的数据,则无法获得超平面。
- 感知机具有简单而易于实现的优点,分为原始形式和对偶形式
- 感知机是神经网络和支持向量机的基础。
- 输入数据 x 是一个 p 维的实数向量
- w和b称为感知机模型参数
- 其中 \( \mathbf{w} \) 是超平面的法向量,\( b \) 是超平面的截距。这个超平面将样本点分为正负两类。即对所有 \( y_i = +1 \) 的样本,都有 \( \mathbf{w} \cdot \mathbf{x}_i + b > 0 \);对所有 \( y_i = -1 \) 的样本,都有 \( \mathbf{w} \cdot \mathbf{x}_i + b < 0 \)。
思想:错误驱动,通过不断修正错误,逐步完善分类规则。
超平面Hyperplane
在 \( n \) 维空间中,超平面是一个 \( n – 1 \) 维的线性子空间,其方程为: \[ \mathbf{w}^T \mathbf{x} + b = 0 \]
- w是法向量(垂直于超平面的向量),决定了超平面的方向。
- b是截距,决定了超平面到原点的距离。
- x是空间中的任意点
- 在二维空间(平面):超平面是一条直线,方程为 w1x1+w2x2+b=0。
- 在三维空间:超平面是一个平面,例如 w1x1+w2x2+w3x3+b=0。
- 更高维度:超平面是 n−1维的“平面”,用于分割 n维空间。
Q1:超平面和普通平面有什么区别?
A1:超平面是 nn 维空间中 n−1n−1 维的子空间,而“平面”通常特指三维空间中的二维平面。
Q2:如何找到最优超平面?
A2:通过优化算法(如梯度下降、SMO)最小化损失函数或最大化间隔。
感知机损失函数
假设训练数据集是线性可分的,为了找出一个能够将训练数据集正实例点和负实例点完全正确分开的超平面,即确定感知机模型参数w、b,需要确定一个学习策略,即定义(经验)损失函数,并将损失函数极小化。
损失函数的一个自然选择是误分类点的总数,但是这样的函数不是连续可导函数,不易优化。因此感知机采用的损失函数是误分类点到超平面的总距离。
假设直线方程为 \( Ax + By + C = 0 \),点 \( P \) 的坐标为 \((x_0, y_0)\)。点到直线的距离公式为: \[ d = \frac{|A x_0 + B y_0 + C|}{\sqrt{A^2 + B^2}} \] 我们假设超平面是 \( h = \mathbf{w} \cdot \mathbf{x} + b \),样本点 \( \mathbf{x}’ \) 到超平面的距离如下: \[ d = \frac{|\mathbf{w} \cdot \mathbf{x}’ + b|}{\|\mathbf{w}\|} \]
感知机学习算法
至此,感知机学习问题就转化为了求解损失函数L(w,b)的最优化问题。
由于感知机学习算法是误分类驱动的,这里基于随机梯度下降法(SGD)进行优化求解。即任意选取一个超平面w 0 b0,然后用梯度下降法不断地极小化损失函数。极小化过程中不是一次使M中的所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。
这里不能使用基于所有样本的批量梯度下降(BGD)进行优化。这是因为我们的损失函数里面有限定,只有误分类的M集合里面的样本才能参与损失函数的优化。所以我们不能用最普通的批量梯度下降,只能采用随机梯度下降(SGD)或者小批量梯度下降(MBGD)
注意w此处并不是常数,而是向量
正实例点还是负实例点,并不是代入公式计算得出的,而是在取样时人为设定的
例题:
对偶形式
前面介绍了感知机算法的原始形式,下面要介绍的对偶形式是对算法执行速度的优化。对偶形式的核心思想是将权重向量 w 和偏置 b表示为样本的线性组合,从而减少计算量
对于从来都没有误分类过的样本,它选择参与w和b迭代修改的次数是0,对于被多次误分类而更新的样本,它参与w和b迭代修改的次数假设为\(n_i\)
每次梯度的迭代都是选择的一个样本来更新 \(\mathbf{w}\) 和 \(b\) 向量。最终经过若干次的迭代得到最终的结果。对于从来都没有误分类过的样本,它选择参与 \(\mathbf{w}\) 和 \(b\) 迭代修改的次数是0,对于被多次误分类而更新的样本,它参与 \(\mathbf{w}\) 和 \(b\) 迭代修改的次数假设为 \(n_i\)。
则 \(\mathbf{w}\) 和 \(b\) 关于 \((\mathbf{x}_i, y_i)\) 的增量分别为 \(\alpha_i y_i \mathbf{x}_i\) 和 \(\alpha_i y_i\),这里 \(\alpha_i = n_i \eta\)。如果令 \(\mathbf{w}\) 向量初始值为 \(\mathbf{0}\) 向量,这样我们最后学习到的 \(\mathbf{w}\) 和 \(b\) 可以分别表示为:
\[
\mathbf{w} = \sum_{\mathbf{x}_i \in M} \eta y_i \mathbf{x}_i = \sum_{i=1}^n \alpha_i y_i \mathbf{x}_i
\]
\[
b = \sum_{\mathbf{x}_i \in M} \eta y_i = \sum_{i=1}^n \alpha_i y_i
\]
则对偶形式模型为:
\[
f(\mathbf{x}) = \mathrm{sign} \left( \sum_{j=1}^{N} \alpha_j y_j \mathbf{x}_j \cdot \mathbf{x} + \sum_{j=1}^{N} \alpha_j y_j \right)
\]
这样的话,在每一步判断误分类条件的地方,我们用 \(y_i (\mathbf{w} \cdot \mathbf{x}_i + b) \leq 0\) 的变种 \(y_i \left( \sum_{j=1}^n \alpha_j y_j \mathbf{x}_j \cdot \mathbf{x}_i + b \right) \leq 0\) 来判断误分类。
这个判断误分类的形式里面是计算两个样本 \(\mathbf{x}_i\) 和 \(\mathbf{x}_j\) 的内积,而且这个内积计算的结果在下面的迭代次数中可以重用。如果我们事先用矩阵运算计算出所有的样本之间的内积,那么在算法运行时,仅仅一次的矩阵内积运算比多次的循环计算省时。计算量最大的判断误分类这儿就省下了很多的时间,这也是对偶形式的感知机模型比原始形式优的原因。
对偶形式中训练实例仅以内积的形式出现,为了减少计算量,我们可以预先将训练集样本间的内积计算出来,也就是Gram矩阵: