这篇学习笔记强调几何直觉,同时也注重感知机算法内部的动机。限于篇幅,这里仅仅讨论了感知机的一般情形、损失函数的引入、工作原理。关于感知机的对偶形式和核感知机,会专门写另外一篇文章。关于感知机的实现代码,亦不会在这里出现,会有一篇专门的文章介绍如何编写代码实现感知机,那里会有几个使用感知机做分类的小案例。
感知机算法是经典的神经网络模型,虽然只有一层神经网络,但前向传播的思想已经具备。究其本质,感知机指这样一个映射函数:sign(wixi+b),将数据带进去计算可以得到输出值,通过比较输出值和数据原本对应的标签值是否正负号相同从而推断出模型训练的结果。
1. 何为感知机?
下面是一副经典的感知机模型图:
最左边的表示输入一个样本点的特征向量,通过各自的权重前向传播到神经元,在神经元有一个加法器,最后通过一个激活函数来决定是否激活。最下面的0是bias项,一般文献中记为b。
2. 感知机可以解决什么问题?
这里我们可以看一个经典的例子,利用感知机模型来解决经典的OR问题。
3. 感知机不能解决什么问题?
这里有一段经典的公案,《感知机》是这本书的出现,直接让神经网络这一流派的研究停止了二十年。因为书中在详尽介绍感知机原理的同时,还指出了感知机的致命缺陷:无法解决XOR问题。
XOR又称为异或,它的逻辑如下:
变量1 | 变量2 | 逻辑运算结果 |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
这是个比较奇怪的逻辑,变量之间当且仅当不相等时为真。
凭着几何直觉,我们很快就能发现,不可能有这样的超平面,能准确的分开红色和蓝色两类样本。
这里小结一下:
感知机可以解决完全线性可分的问题。
这似乎是一句废话,但是感知机背后强大的思想确衍生出了支持向量机这个传统机器学习的巅峰。而对于线性不可分的样本,可以使用多层神经网络(Multi Layer Network )或者使用核感知机,事实上两层的感知机就可以解决XOR问题
4. 感知机是如何工作的?
在上面这个略显啰嗦的例子,我们看到了感知机的工作方法。它的算法流程可以概括如下:
- 选取初始值w0,b00,0
- 在训练集中选取一个数据点(xi,yi)(,)
- 检查在这个样本点上,模型是否会错误分类,如果错误分类,则更新wi,bi,
- 回到第2步,直到整个训练集中没有误分类点
从上面的算法,我们至少能读出这么几层意思:
- 初始值是随机给的,赋值为0是一个简便的做法,但通常设置为一个很小的随机值,后面会详细讨论
- 每次训练其实只用到一个样本点,即使训练集中有很多数据点亦是如此。这和 wixi这个表达式的计算方式有关,详见上面的数值例子。
- 算法的重点在误分类这里,那么如何定义误分类就非常要紧了。
- 算法是一个迭代的过程,且要满足所有样本点都分类正确才停机。反过来理解,就是感知机算法只能运用于完全线性可分的数据集。如果数据集是不能完全线性可分的,感知机永远不会停机,除非训练之前先设置好停机条件,常见的比如设置训练次数或者误差上界(一旦误差小于$ \varepsilon $ 即可停机)。
显然,如何定义错误是感知机算法里的头等大事。
5. 该如何定义错误?
- 找到描述样本点到超平面距离的计算式
- 正确分类的样本点的距离和丢弃不看
- 定义误分类的距离和,对它求最小值
6. 知错后如何改错?
回顾微分学知识,我们知道一个全局的凸函数取得最小值是在导数为0处。但是,放在多元函数的观点来看,一元函数的导数本质上也是梯度。当一个函数沿着负梯度的方向运动是,函数值的减少是最快的;沿着正梯度方向运动时,函数值增加啊是最快的。下面我们就来求其梯度。
7. Novikoff 定理
先叙述一下这个定理。定理来自李航老师的《统计学习方法》第二版Page42。
先从直觉上理解下这个定理表述的意思。大意是对于可以找出线性超平面做分类的数据集,存在一个下界$ \gamma $,所有样本点到超平面的距离都至少大于这个 $ \gamma $,同时错误分类的次数有一个上界,第 k+1 次之后,分类都是正确的,算法最终是收敛的。
证明
这里R其实只是一个记号而已,它代表的意思是从所有误分类中找到模长最大的,而这个记号其实是从证明过程中产生的。
作为介绍感知机原理的文章,已经写得非常长啦,可以就此打住~
如果有任何纰漏差错,欢迎评论互动。