感知机——深度学习的雏形 | 第34期
当我们试图了解传统的机器学习方法时,感知机(Perceptron)是一个浅显易懂的模型。或许在处理实际问题时很少使用感知机,但其设计原理和参数求解思路却是算法选择和设计时常用的参照。此外,熟知感知机的算法特点也能辅助了解深度学习(Deep Learning)模型的优缺点,并为进一步改进深度学习模型提供一些方向。
1. 感知机模型
对于一个普通的二分类(Binary Classification)问题,我们试图构建一个函数对输入的特征 进行作用,输出正确的类别 。如果将正样本的类别标记为 “1”,负样本的类别标记为 “-1”,那么对于一个简单二分类问题的线性模型可以设计为:
其中, 和 是参数, 为符号函数,即将非负的输入作用为 1,将负的输入作用为 -1,以上方程就是感知机模型的数学描述。
感知机模型可以处理高维的线性分类问题,即输入的特征 是大于 2 维的向量。但是高维的数据不利于可视化,也不利于熟悉算法流程,以下就使用二维数据来演示感知机的所有要点。比如,采集一些样本点数据,表示为
二维的特征数据可以很方便地在平面坐标系中表示出来,如下图中的左上图就是训练集(Trainset)中的数据样本点(Data Point),右上图就是测试集中的数据样本点。训练集用于求解参数,测试集(Testset)用于评估模型的精度。通常,样本数据存在一些数值上的偏移,这些偏移本身并不携带信息,但是会导致在训练集上求解的模型在测试集上表现不佳,也就是泛化能力不足。为了解决这个问题,我们一般会对数据进行归一化(Normalization)操作,也就是下图中的左下图和右下图所示。
建立感知机模型也就是求解参数 和 ,在坐标系上的表述就是寻找一条直线将两个类别的样本点区分开。
2. 学习策略
学习策略就是参数调整的方式,即设计一种方法可以调整模型中的参数,以达到正确划分训练样本中的正负样本的目的。感知机的学习策略将重点放在“误分类”的样本点上。在当前模型参数的情况下,对分类预测错误的样本点构建损失函数,然后通过优化损失函数到最小值来调整模型参数。假设“误分类”样本点的集合为 ,则在 上构建如下损失函数
由于该函数构建在“误分类”样本点上,则预测值 与 的符号必定不相同,因此函数值为非负数。通过优化损失函数,使得“分类点”越来越少,最终没有“误分类”样本点,则表示优化完成。
3. 算法描述
对于“误分类”样本点集合M而言,损失函数 是关于 和 的线性函数,其梯度也就可以表示为
随机选取一个误分类点,则参数更新的表达式可以表示为
其中, 为学习率,数值在 0 到 1 之间。逐个选取“误分类”样本点来调整模型参数 和 ,最终就可以达到没有“误分类”的情况。在实际操作时,要选择“误分类”点是一件比较麻烦的事情,我们可以将参数更新方程改造成如下
对于分类正确的样本点,,则该调整无效,即这种参数调整虽然是在所有的样本点上进行,但是只对“误分类”的样本点有效。
按照这种方式优化得到最终的参数就可以建立一个感知机模型,模型的“分类超平面”在平面坐标系中表现为一条直线如下图所示。
4. 问题讨论
随机选取一个样本点,使用梯度下降的方式进行参数求解的方法称为“随机梯度下降法”,这也是深度学习参数求解的一个基本方法。从感知机“分类平面”在训练集和测试集的几何位置可以看出,模型的泛化能力还不错。但是从学习策略的算法描述中可以发现,当没有“误分类”样本点时,参数调整就结束了,那么这样得到的参数仅仅是对训练集没有“误分类”,而不是最优化的参数。在这样的二分类问题中,“分类超平面”或者“分类直线”在距离最近的两个不同类别样本正中间则是最优的,感知机的学习策略显然是大概率无法达到最优化的要求。同样地,深度学习也是基本无法达到最优化,但是由于深度学习的参数空间极大,在一些局部极小处就能获得一个不错的精度和泛化能力。对于感知机而言,这样的非最优化结果会导致在应用时泛化能力不足。能够获得最优化参数的是支持向量机(SVM),所以在实际应用时很少使用感知机,而是使用SVM代替。
从模型的数学形式可以看出,感知机只适用于线性可分的二分类问题,这一点对于具有这种形式的所有线性分类器都是适用的。如果需要处理非线性的问题,可以引入非线性的“核函数”来解决。这是传统机器学习中常用的策略。
【资源分享】
github链接:https://github.com/cnbluegeek/notebook/tree/master
更多编程书籍,请发送关键字“书籍”到【青衣极客】公众号获取下载链接。
添加“cnbluegeek”微信号为好友,获得邀请加入“python交流群”,编程问题迎刃而解。