这篇学习笔记强调几何直觉,同时也注重感知机算法内部的动机。限于篇幅,这里仅仅讨论了感知机的一般情形、损失函数的引入、工作原理。关于感知机的对偶形式和核感知机,会专门写另外一篇文章。关于感知机的实现代码,亦不会在这里出现,会有一篇专门的文章介绍如何编写代码实现感知机,那里会有几个使用感知机做分类的小案例。
感知机算法是经典的神经网络模型,虽然只有一层神经网络,但前向传播的思想已经具备。究其本质,感知机指这样一个映射函数:\(sign(w_ix_i + b)\),将数据带进去计算可以得到输出值,通过比较输出值和数据原本对应的标签值是否正负号相同从而推断出模型训练的结果。
1. 何为感知机?接上面的叙述,感知机的数学模型为\(sign(w_ix_i + b)\),其中\(w = (w_1,w_2,...,w_n)\)是权重向量,\(x_i = (x_i^{1},x_i^{2},...,x_i^{n})\)是一个样本点,从符号很容易理解,它们都是定义在\(R^n\)空间的(如果难以理解,可以简单的理解为样本点有\(n\)个维度,相应的权重向量也须有\(n\)个维度和它相匹配).
下面是一副经典的感知机模型图:
最左边的表示输入一个样本点的特征向量,通过各自的权重前向传播到神经元,在神经元有一个加法器,最后通过一个激活函数来决定是否激活。最下面的\(x_0\)是bias项,一般文献中记为\(b\)。
2. 感知机可以解决什么问题?这里我们可以看一个经典的例子,利用感知机模型来解决经典的\(OR问题\)。
【例1】设有4个样本点,\((0,0),(0,1),(1,0),(1,1)\),根据\(OR\)的逻辑,必须至少有一个不为\(0\)才能判定为真,翻译成机器学习的表达即标签为\((-1,1,1,1)\),这里负数表示负样本,正数表示正样本。
我们希望的是能找到一条直线(分类器),将正负样本点准确分开。根据\(\S1\)中的叙述,样本点是定义在\(R^2\)空间的,显然权重向量为\(w = (w_1,w_2)\),考虑偏置项\(b\),一般添补一个\(x_i^{0}\)为\(-1\)以便把式子\(\sum\limits_{1}^{n} w_ix_i + b\)直接写成\(\sum\limits_{0}^{n}w_ix_i\)。先给出权重更新公式$ w_{ij} ← w_{ij} − η(y_{j} − t_{j} ) · x_i $, 稍后会给出解释。
设置权重初值为\(w = (0,0)\)。并且约定当且仅当\(sign(x=0)=0\),算作误分类。依次代入样本点:
代入\((0,0)\)点,\(sign(wx + b) = sign(0 * 0 + 0 * 0 + 0*(-1)) = 0\),无法判定是否为负类,错误。
更新权重
\(b = 0 - 1 * (1-0) * (-1)=1\)
\(w_1 = 0 - 1 * (1-0) * 0=0\)
\(w_2 = 0 - 1 * (1-0) * 0=0\)
代入\((0,1)\)点,\(sign(wx + b) = sign(0 * 0 + 0 * 1 +1 *(-1)) = -1\),判定为负类,错误。
更新权重
\(b = 1 - 1 * (1 - (-1)) * (-1) = -1\)
\(w_1 = 0 - 1 * (1 - (-1))*0 = 0\)
\(w_2 = 0 - 1*(1-(-1))*1 = 2\)
代入\((1,0)\)点,\(sign(wx+b)=sign(0 * 1 + 2 * 0 + (-1) * (-1))= 1\),判定为正类,正确。
代入\((1,1)\)点,\(sign(wx + b)=sign(0 * 1 + 2 * 1 + (-1)* -1)=3\),判定为正类,正确。
第二轮遍历,代入\((0,0)\),\(sign(0*0 + 2*0 + (-1)*-1)=1\),无法判定是否为负类,错误。
更新权重
\(b = -1 - 1*(1-(-1))*(-1)=1\)
\(w_1 = 0 - 1*(1-(-1))*0=0\)
\(w_2 = 2 - 1*(1-(-1))*0 = 2\)
代入\((0,1)\),\(sign(0 * 0 + 2 * 1 + 1 * (-1))=1\),判定为正类,正确。
后面的步骤就省略不写了,读者可以自行验算。根据代码计算的结果,如果初始权重设为[0,0,0]这样比较极端的值,学习速率为1时,且按照顺序选择样本点时,需要完整的走完两轮迭代才能得到稳定的权重。最后解得分类函数为: \(sign(2x^{(1)} + 2x^{(2)} - 1)\),读者可以带数据进去验算。
3. 感知机不能解决什么问题?这里有一段经典的公案,《感知机》是这本书的出现,直接让神经网络这一流派的研究停止了二十年。因为书中在详尽介绍感知机原理的同时,还指出了感知机的致命缺陷:无法解决\(XOR\)问题。