形象描述感知机
感知机(Perception)是神经网络和 SVM(支持向量机)的基础,是一种二分类的线性分类模型。
为了形象地说明一下感知机的工作机理,可以用神经网络中的感知机模型来描述一下,下图是维基百科 中描述感知机的模型图。

图中, n 维向量[a1,a2,...,an]的转置作为感知机的输入,[w1,w2,...,wn]的转置为输入分量连接到感知机的权重(weifht),b 为偏置(bias),f(.)为激活函数,t 为感知机的输出。t 的数学表示为:

另外,这里的 f(.) 用的是符号函数:

下面是符号函数的函数图像:

可以看出,符号函数是非连续的,不光滑的,这只是激活函数的一种,以后会单独拿出一节来说一下几种常见的激活函数。
分离超平面
感知机的作用就是找到一个分离超平面,使数据能够正确分为两类。记得)在我18岁(去年)之前就学过平面方程的知识,在三维的直角坐标系中,平面(一般坐标空间维数 n 大于3时,才用超平面概念)方程一般表示为:Ax+By+Cz+D = 0(里边的A、B、C、...、N 为不全为 0 的实数),直角坐标系上的点到该平面的距离为 (Ax1+By1+Cz1+D) / (√A^2 + B^2 + C^2),这是三维空间,如果推广到 n 维空间,超平面的表达式为 Ax+By+Cz+...+Nn +D = 0,那么空间中的一点到超平面的距离为(Ax1+By1+Cz1+...+Nn1+D) / (√A^2 + B^2 + C2+...+N2)(可能不准确,只是为了便于理解)。
在感知机中,一般把超平面方程写为:wx+b=0. w 为超平面的法向量,b 是超平面的截距,超平面把数据分为两类,如下图。

损失函数(cost function)
感知机能够自动地把 w 和 b 求解出来,求解过程中有个重点,就是损失函数的引入,损失函数也叫代价函数,是样本分类预测结果和样本实际类别差异的度量,正是通过最小化损失函数,感知机才能不断地修正 w 和 b 的值,找到一个最优的超平面。
感知机中的损失函数是所有误分类点到分离超平面的距离,其中,某一个误分类点到超平面的距离表示为:

这里边的 ||w||是 w 的 L2 范数,这个L2范数乍听有点高大上,实际上就是 w 中每个元素去平方,然后相加开根号,即 ||w|| = √w1^2 + w2^2 +...+ wn^2 。
对于一个误分类数据 (xi,yi),当 w xi + b > 0 时,yi < 0;当 w xi + b < 0 时,yi > 0;所以 yi*(w xi + b) >0,所有误分类点到分离超平面的距离为:

不考虑 1/||w||,损失函数写成这样:

我们的目标就是最小化损失函数 L(w,b),这里用 随机梯度下降(SGD)的方法来做最小化。
梯度下降和随机梯度下降
函数在某一点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值。以山为例,就是坡度最陡的地方,梯度值就是描述坡度有多陡。
研究梯度,就要知道导数、偏导数、方向导数的知识,[机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent) 中讲得非常通俗易懂(原文链接放在参考资料里边),这里就不再造轮子了。
梯度下降方向就是梯度的反方向,最小化损失函数 L(w,b) 就是先求函数在 w 和 b 两个变量轴上的偏导:

上面的式子,每更新一次参数,需要遍历整个数据集,如果数据集非常大的话,显然是不合适的,为了解决这个问题,只随机选取一个误分类点进行参数更新,这就是随机梯度下降(SGD),如下图。

这里的 η 指的是学习率,相当于控制下山的步幅,η 太小,函数拟合(收敛)过程会很慢,η 太大,容易在最低点方向震荡,进入死循环。
当没有误分类点的时候,停止参数更新,所得的参数就是感知机学习的结果,这就是感知机的原始形式。下面总结一下参数更新的过程:
(1)预先设定一个 w0 和 b0,即 w 和 b 的初值。
(2)在训练集中选取数据(xi,yi)。
(3)当 yi*(w xi +b) <= 0时,利用随机梯度下降算法进行参数更新。
感知机还有对偶形式,基本想法是,将 w 和 b 表示为实例 x1 和标记 y1 线性组合的形式,通过求解系数来求解 w 和 b,前面提到过这个式子:

这里先假设 w 和 b 的初值为 0,那么通过对偶形式能表示为什么?从上面式子可以看出来,每次迭代,w 会增加一个 ηyixi,b 会增加一个 ηyi,到最后参数更新完之后,w 和 b 一共增加了这些:

这里的 αi = ni*η,ni 就是某个点被误分类的次数,η 还是学习率,下面是对偶形式的参数更新过程:

异或问题
什么是异或?就是,假如这里有两件事,一真一假,异或为真;两件事都为假或者两件事都为真,异或为假,就像这样:
0⊕0=0,0⊕1=1
1⊕0=1,1⊕1=0
下面是异或的函数图像:

通过图像可以看出,找不到一个超平面能将这四个点分隔开,所以感知机无法处理异或问题,不仅仅是感知机,其他线性模型也无法处理这种问题。
小结
这一节学习了感知机相关的知识,包括感知机模型的描述、损失函数、梯度下降、感知机的原始形式和对偶形式、异或问题。这些理论知识的学习还是感觉有些抽象,为了更深入理解感知机,在机器学习系列下一节,用代码实现一下。
参考资料
周志华 《机器学习》
李航《统计学方法》
https://blog.csdn.net/walilk/article/details/50978864
网友评论