为什么三层感知器能够解决任意区域组合的分类问题(不同隐层数的感知器的分类能力) categories: - ML

单层感知器的迭代学习算法(包含代码)

两层感知器解决异或问题

解释两层感知器分类能力有限的问题

解释为什么三层感知器能够解决任意区域组合分类问题

访问我的博客符说八道(三层感知器能够解决任意区域组合的分类问题) 有更好的展示效果。
最近在准备模式识别考试,关于三层感知器能够解决任意区域组合的分类问题解释甚是有趣,这两天考完试了在此对这些内容做个总结。

单层感知器的迭代算法

感知器算法属于线性分类器,单层感知器在给定数据线性可分的情况下,可以经过有限次迭代使得算法收敛
我曾经写过关于感知器迭代计算学习的代码,是找到一个平面,将三维空间的两类线性可分的点分隔开来。

感知器算法的更新过程(2类问题)如下:
N个属于\(w_1 ,\ w_2\)类的模式样本构成训练样本集\(\{X_{1},X_{2},....X_{N}\}\)

将原始数据写成增广向量形式,并规范化
构成增广向量形式是指添加一个维度为1的向量,如三维的样本的话,我们将会这样设置:
\(X = [x_{1},x_{2},x_{3},1]^{T}\)
写成增广向量形式是为了让我们的运算能够执行矩阵乘法,便于编程实现。
规范化是指将\(w_2\)类样本\(\times \ -1\)
接下来任取权向量初始值\(W(1)\),开始迭代

2.用全部训练样本进行一轮迭代,计算\(W^T (k)X_i\)的值,并修正权向量。
分两种情况,更新权向量的值:

\(W^T (k) X_i \leq 0\)
表明分类器对第i个模式做了错误分类,我们将进行校正,权向量校正为:
\(W(k+1)=W(k)+cX_i \ , \quad c>0\)

\(W^T (k) X_i > 0\)
表明分类正确,权向量不变。
\(W(k+1)=W(k)\)

因此我们可以将权向量的更新规则统一写为:

\(W(k+1) = \left\{\begin{matrix} W(k) \quad if \ W^{T}(k)X_i > 0 \\ W(k) + cX_i \quad if \ W^{T}(k)X_i \leq 0 \end{matrix}\right.\)

3.分析分类结果:只要有一个错误分类,回到2,直至对所有样本正确分类。
感知器算法可以证明是收敛的(在线性可分的前提下),经过算法的有限次迭代运算后,求出了一个使所有样本都能正确分类的\(W\)

关于为什么是用\(W(k+1)=W(k)+cX_i \ , \quad c>0\)这个公式更新,实际上这可以从梯度下降法推导出来:
当我们的准则函数为:
\(J(W,X)=1/2 (|W^T X|-W^T X)\)
使用梯度下降更新权值:
\(W(k+1)=W(k)-c∇J=W(k)-c[\frac{∂J(W,X)}{∂W}]_{(W=W(k))}\)
就可以解得
\(W(k+1) = \left\{\begin{matrix} W(k) \quad if \ W^{T}(k)X_i > 0 \\ W(k) + cX_i \quad if \ W^{T}(k)X_i \leq 0 \end{matrix}\right.\)

下面是老师上课布置的编程练习:

编写感知器算法程序,求下列模式分类的解向量:
\(ω_1: \{(0,0,0)^T ,(1,0,0)^T,(1,0,1)^T,(1,1,0)^T\}\)
\(ω2: \{(0,0,1)^T,(0,1,1)^T,(0,1,0)^T,(1,1,1)^T\}\)
\(w(1)=(-1,-2,-2,0)^T\)

使用上面的流程并用\(c=1\)求得的解向量:
\(W=(3,-2,-3,1)\)
下面是我画出的决策平面(具体代码在本文最后)

为什么三层感知器能够解决任意区域组合的分类问题(不同隐层数的感知器的分类能力) categories: - ML

实际上,感知器就是这样的单元:

为什么三层感知器能够解决任意区域组合的分类问题(不同隐层数的感知器的分类能力) categories: - ML

典型的f为硬限幅函数(hard limiter)
下面讨论的f都为阶跃函数
也就是 输入大于0时f为1,输入小于0时f为0

两层感知器解决异或问题

感知器算法可以解决and or这种线性可分的问题,但是对于异或问题,就无力了,而两层感知器就可以做到:
如下图所示,xor线性不可分

为什么三层感知器能够解决任意区域组合的分类问题(不同隐层数的感知器的分类能力) categories: - ML

那么两层感知器是如何解决异或线性不可分的问题呢?
它首先通过两条直线,先用g1直线将(0,0)点与其他三个点(0,1),(1,0),(1,1)分开,再用g2直线将(1,1)与(0,0),(0,1),(1,0)分开
就像下图所示:

通过两条直线的划分(在直线下方为0,在直线上方为1),我们将四个点输入,可以得到下面的数据:

x g1 g2 y
0 0   0   0   0  
0 1   1   0   1  
1 0   1   0   1  
1 1   1   1   0  

当我们得到g1,g2时,我们就将(0,0)映射到了(0,0),将(0,1)和(1,0)映射到了(1,0),(1,1)映射到了(1,1)
如下图所示,我们再用图里的直线即可分开:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyfgj.html