感知机分类器 理论推导

感知机其实也是一个线性分类模型,但是同逻辑回归不同,主要是损失函数建立的思路同时不从概率角度出发。

(一)假设函数

数据集(样本):
GAN网络中的感知损失pytorch实现_算法增广形式:GAN网络中的感知损失pytorch实现_数据集_02
解释一下,f这个函数是典型线性模型函数。其中GAN网络中的感知损失pytorch实现_机器学习_03是N维的权重向量,b是偏置。当解决线性回归问题时,我们直接用GAN网络中的感知损失pytorch实现_机器学习_04即可预测输出目标。
但是在感知机中,我们使用符号函数GAN网络中的感知损失pytorch实现_数据集_05作为激活函数。对于二分类问题:
GAN网络中的感知损失pytorch实现_机器学习_06
则我们的假设函数函数定义如下:
GAN网络中的感知损失pytorch实现_数据集_07

线性可分的概念

对于两类线性可分模型中有:
GAN网络中的感知损失pytorch实现_机器学习_08中任意一个样本都满足
GAN网络中的感知损失pytorch实现_数据集_09
即说明是线性可分的 。其实蛮好理解的,h(x;w)就是(wTx+b)是我们的预测函数,如果它大于0,我们输出y=1,表示一种分类。如果小于0,说明是另一种分类。那么一个在数据集中的样本GAN网络中的感知损失pytorch实现_线性回归_10对于的GAN网络中的感知损失pytorch实现_机器学习_11要么是1要么是-1,则要是与假设函数乘积大于0,说明是同号的,即是一个分类。
则感知机的最终目标就是要找到一个n维参数GAN网络中的感知损失pytorch实现_感知机_12,使得对于样本中每一个样本都有:
GAN网络中的感知损失pytorch实现_数据集_09

(二)损失函数

策略一:
现在我们以出错的角度出发,去建立一个损失函数。
说白了就是用分类分错的个数作为损失函数。损失函数的目的就是损失函数越小对于我们的假设函数模型越好。那对于一个线性分类模型,是不是分得越准越好。那么我们以分类分错的个数作为损失函数从目的上来说是没毛病的。
GAN网络中的感知损失pytorch实现_数据集_14
就是说,我们把样本GAN网络中的感知损失pytorch实现_线性回归_10带入假设函数中,算出的值要是和原来数据集对应的分类GAN网络中的感知损失pytorch实现_机器学习_11异号,则说明不是同类。
I(·)是指示函数,如果括号中的表达式成立,则函数值为1,反之为0。配合求和符号能很方便的表示个数。

我们期望的是loss函数越小越好,最好是能求出它的极值情况。但是请注意,按照常规操作应该是要求导,但是这个函数啊,它不能求导。因为它是离散的,不是连续函数这咋导。所以这个方法不行。

策略二:

引入超平面距离:

在n维空间中,超平面表示n-1维的一个空间模型。比如在二维坐标系(平面)中,超平面就是一维的一根直线。在3维空间中,超平面就可以用一个曲面方程来表示。超平面可以有效分类高一个维度的模型。

超平面在分类问题中,也称为决策边界。那在现在感知机模型中,超平面是什么呢。

其实就是两个类别之间的那个分界线。现在回归一下假设函数:GAN网络中的感知损失pytorch实现_数据集_07
那,分类之间的边界不就是GAN网络中的感知损失pytorch实现_线性回归_18这条直线么。但是在高维就不是直线了,可能是一个二维平面等等。

现在回归主题,我们怎么选择一个更优质,连续可导的函数。这里可以用距离!!如果我分类分错了,那么这个点到决策边界的距离(超平面的距离)我先假设为 GAN网络中的感知损失pytorch实现_算法_19 那么是不是 GAN网络中的感知损失pytorch实现_算法_19 越小越好呢。就是说我分错了,但是越离我的分类界限越近越好。
举个例子,我现在要从牛奶和咖啡中分类一杯咖啡,但是现在拿到了一杯特浓高钙牛奶。这个损失就很大,也就是说它距离我分类平面的距离越远 GAN网络中的感知损失pytorch实现_算法_19越大,然后拿到了一杯淡淡的牛奶,现在相比之前的特浓牛奶,我的 GAN网络中的感知损失pytorch实现_算法_19 变小了。之后又拿到了一杯含有咖啡因的牛奶, GAN网络中的感知损失pytorch实现_算法_19 更小了。然后拿到了一杯混有一点点咖啡的牛奶,那这个样本非常接近决策边界了,所以 GAN网络中的感知损失pytorch实现_算法_19

针对于每个分错类的点:
GAN网络中的感知损失pytorch实现_机器学习_25
它到决策边界(超平面)的距离GAN网络中的感知损失pytorch实现_算法_19为:
GAN网络中的感知损失pytorch实现_算法_27
联合分错点的不等式,有:
GAN网络中的感知损失pytorch实现_感知机_28
能去掉绝对值乘一个-y,是因为y不是取1就是-1,而且它与假设函数的乘积是一个负值,在补上一个负号就可以了。

那现在我们求的是一个分错点的,总的来看,这个模型要好。肯定是对于每一个出错的样本点,它距离决策边界越近越好,那就是GAN网络中的感知损失pytorch实现_机器学习_29GAN网络中的感知损失pytorch实现_线性回归_30GAN网络中的感知损失pytorch实现_线性回归_31的总和越小越好。则有:
GAN网络中的感知损失pytorch实现_线性回归_32
注意,这里的n是出错的样本个数。
这个函数是一个连续的可导。它可以作为我们的损失函数:
GAN网络中的感知损失pytorch实现_线性回归_33
分别对GAN网络中的感知损失pytorch实现_感知机_12GAN网络中的感知损失pytorch实现_算法_35求偏微分:
(如果是增广形式,默认GAN网络中的感知损失pytorch实现_数据集_36=1,GAN网络中的感知损失pytorch实现_线性回归_37=b 参数b可以省略)
GAN网络中的感知损失pytorch实现_数据集_38

(三)优化算法

1.梯度下降法 GD

梯度下降法详细推导

GAN网络中的感知损失pytorch实现_机器学习_39
GAN网络中的感知损失pytorch实现_感知机_40
同理
GAN网络中的感知损失pytorch实现_线性回归_41
2.随机梯度下降法 SGD
GAN网络中的感知损失pytorch实现_算法_42
GAN网络中的感知损失pytorch实现_机器学习_43
只用当前点来更新

3.牛顿法
GAN网络中的感知损失pytorch实现_线性回归_44
GAN网络中的感知损失pytorch实现_算法_45是Hessian矩阵的逆

3.拟牛顿法
后续再更新拟牛顿ba
GAN网络中的感知损失pytorch实现_机器学习_46

(四)感知机收敛性证明

1.由于数据集线性可分有:
GAN网络中的感知损失pytorch实现_数据集_47
GAN网络中的感知损失pytorch实现_数据集_48
GAN网络中的感知损失pytorch实现_算法_49是一个很小的正数。设GAN网络中的感知损失pytorch实现_感知机_50是最终最优的参数。是一个能很准确分类的参数。
GAN网络中的感知损失pytorch实现_机器学习_51
2.第k次误分类时:
GAN网络中的感知损失pytorch实现_机器学习_52
GAN网络中的感知损失pytorch实现_机器学习_53
GAN网络中的感知损失pytorch实现_机器学习_54
GAN网络中的感知损失pytorch实现_机器学习_55
GAN网络中的感知损失pytorch实现_线性回归_56
GAN网络中的感知损失pytorch实现_感知机_57
3.令R为最大的样本值

GAN网络中的感知损失pytorch实现_数据集_58
由SGD:
GAN网络中的感知损失pytorch实现_数据集_59
GAN网络中的感知损失pytorch实现_线性回归_60这一项是小于0的,因为是误分点,详情看之前的推导。故有:
GAN网络中的感知损失pytorch实现_机器学习_61
现在把刚刚GAN网络中的感知损失pytorch实现_机器学习_62的定义拿过来用
GAN网络中的感知损失pytorch实现_机器学习_63
GAN网络中的感知损失pytorch实现_算法_64
GAN网络中的感知损失pytorch实现_线性回归_56
GAN网络中的感知损失pytorch实现_数据集_66

综上所述:

由上面三个结果可以得到:
由2可知:
GAN网络中的感知损失pytorch实现_算法_67
这里有个很难理解的地方,我们假设 GAN网络中的感知损失pytorch实现_感知机_68。为什么可以这样操作呢,我的理解是,GAN网络中的感知损失pytorch实现_感知机_50是最终优化的权重参数,它是会完全正确把所有样本分开的。GAN网络中的感知损失pytorch实现_感知机_50作为平面的法向量,是可以任意指定模长的,所以在证明之初,就可以假设它的模长=1方便计算。

故得到:
GAN网络中的感知损失pytorch实现_线性回归_71
由3可得:
GAN网络中的感知损失pytorch实现_算法_72
GAN网络中的感知损失pytorch实现_感知机_73
这就说明了,k不是发散的,它总会小于某个值。我们的感知机算法在迭代k次后会收敛。收敛的次数和GAN网络中的感知损失pytorch实现_算法_74 有关,样本x最大值有关,还和一个参数GAN网络中的感知损失pytorch实现_算法_49有关。
反正总之我们是证明了它的收敛性了。