Wish you a happy day~(❁´◡`❁)

[NNDesign]第二篇:感知器与学习规则

[ 读书笔记 ] zoey 668次浏览 0个评论

前言

    书中第四章介绍了神经网络中一种最简单的结构,感知器(perceptron),据说是机器学习历史上的一个里程碑。然而我有点儿纳闷为什么起这么个名,明明做的是决策/分类的工作,叫决策器似乎更妥帖一点。在1950年代后期,Frank Rosenblatt和其他几个研究人员开发了一类称为感知器的神经网络。 Rosenblatt的主要贡献是引入了一个学习规则来训练感知器网络来解决模式识别问题[Rose58]。 他证明了他的学习规则将总是收敛到正确的网络权重,如果权重存在,解决问题。 给网络喂一些合适的数据,让网络通过一次次迭代根据计算得到的误差来不断调整参数从而得出正确结论。

感知器结构

    感知器网络示意图:

    看起来贼眼熟哦。
    为了方便表示,书中将权值矩阵W做了一些小小的转化。原本的权值矩阵长着个样子,比较臃肿

    使用iW来表示第i行的权值向量(左图转置了一下,没看懂的话把脖子往右扭90°),然后权值矩阵就可以表示如下右图:

 

 

 

确实简洁了不少。那么每一个输出值ai呢就可以表示为:
ai= hardlim(ni) = hardlim( iwTp + bi)

    还记得hardlim激活函数吗,它的定义是:

    因此,如果权重矩阵的第i行(即iW)与输入向量的内积大于或等于-bi,则输出将为1,否则输出为0(其实就是看 iwTp + bi的正负啦)。由此可见每个神经元将输入空间分成了2个部分,这是很明显的~感知器的任务就是找出分割这两部分的边界。

单神经元感知器实例

    说再多不如举个栗子来的方便。看如下图这样一个感知器:

    这是一个两个输入值的单神经元感知器,网络的输出结果公式是:
    a = hardlim(n) = hardlim(Wp + b)= hardlim (1wTp + b) = hardlim (w1,1p1 + w1 ,2p2 + b)
    这边要带出一个概念:决策边界(Decision Boundary),决策边界就是上面说的将输入空间一分为二的一道直线,那么显而易见,在这个感知器中决策边界是由中间值n=0的那些参数确定的。n≥0,a=1;n<0,a=0.即:
     n=1wTp + b=w1,1p1 + w1 ,2p2 + b=0
    很好理解对吧,如果代入值w1,1 = 1,w1,2 = 1,b = –1,可以计算出
    n=p1+p2-1=0
    这看起来很像初中数学呀,这条直线怎么求应该很熟悉了,令一个未知数为0就可以求出来另一个。直观反映在坐标系上就是:

    图中蓝色的实线就是决策边界,在这个边界上的所有点代入n都为0.那a在哪边是0哪边是1呢,随便取一个点试试即可,假如选取p=[2 0]T,那么a的值为:
    a = hardlim(1wT p+b) = hardlim ( [1 1][2 0]T –1) = 1. 即图像上方a的值为1。

    通过上图可以发现一个问题,1W是与决策边界垂直的,即权值向量与决策边界正交(orthogonal)而且这个规律总是成立的,涉及到了一些线代知识,下一次会记录下来。

AND门实例

    下面举了一个简单的栗子,如何求偏差b。AND门的输出输出为:

    反映在图上,决策边界一目了然,然后根据正交法则直接可以求出一个权值向量W。

    取 1W为[2 2]T,然后随意在决策边界上取一个点,代入公式,直接求出b的值:

    如此便得到了完整的感知器,如果感兴趣的话可以把上面四个点代入试试,看看目标输出与实际输出有没有差别。

多神经元感知器

    多神经元感知器的公式与单神经元是一毛一样的。细想一下,1个神经元将输入空间分为2部分,那么2个神经元可以分割为4部分,即,S个神经元最多可以将输入空间分为2s个部分。原因很简单,n个神经元就有n个输出,那么n个输出的组合方式共有2n种。

构建学习法则

    下面就来逐步构建感知器的学习法则。“学习”的含义就是使用一组预定输入,经过多次迭代将结果与预定输出进行比较,根据误差来调整权值矩阵与偏差的过程,而“调整”过程的依据就是学习法则。
    举一个栗子,给定一组输入输出:

 

 

 

反映在坐标系内:

 

 

 

 

 

 

    虽然看起来决策边界一目了然,但是我们还是要按部就班。

1.初始化权值向量是可以随便选取的,我们选择 1wT =[ 1.0 -0.8 ]

2.首先代入p1点,计算a值:

3.输出不符合预期,这个时候要调整权值向量

    该怎么调整呢?有两种方法。第一种,就是直接使1w等于p1,这种情况下保证p1永远分类正确(因为决策边界总是与权值向量正交)但是有个缺陷,对于下图这种情况,网络权重将会来回震荡,永远找不出一个正确结论。可以想象一下w像钟摆一样在黑点白点之间摇来摇去。

    另一种方案是将p1加到1w上,这会使得1w的方向渐进的接近p1的方向。为什么会接近呢?想一想向量加法,两个向量相加的和是平行四边形的对角线。(记录到这里我突然想起了前几天考科目四的时候有复习到,车子发生侧滑的时候要缓慢修正方向,切忌猛打方向…ojz)
    这种可行的方案可以用一个公式概括:

4.应用学习法则,修正权值向量,继续测试下一个用例


    修正权值向量的方向之后,测试下一个点p2,发现输出是1,与预期不符。


    这次跟上次的情况相反啊,照着葫芦画个瓢不难,果断用减法。那么这次可以用公式概括为:

5.修正权值向量,继续测试下一个用例,循环测试。

    p3又不符合要求啊,继续应用法则修正:

6.循环测试,直到符合预期的连续迭代次数==用例个数的时候,停止迭代。

    这个也比较好理解,类似于回归测试,因为一个用例修改权值向量之后可能会对之前的用例产生影响,因此有必要将之前的用例都测试一遍。即:

总结

    黄色背景的公式就是感知器的学习法则,看起来似乎有些不简洁明了,我们可以用一个公式来表示它们。
    令误差e=t-a。
    上面的三行公式就可以缩写为:

    而对于误差b,记得我之前记录过,b也可以看做是一个特殊的权值,只不过对应的输入永远是1,以此类推,b的学习法则是:

    训练多神经元与单神经元大同小异,就不举栗子了。

    感知器最大的局限性就是只能解决线性可分问题,线性不可分问题就束手无策,例如下图。怎么画直线都是不可能把这些点分成两部分的。

习题

1.首先,输出要有4个类型,那么理所当然的想到应该使用两个神经元。既然题目没有规定输出,那我们就自己取值好了。

2.根据图像随机选取权值向量,然后在决策边界随机选取一个点计算偏差b

权值向量如图:

    根据图像,随便选两个点计算出两个b值:

3.得到最终结果:

    当然这题的决策边界是可以直接用眼睛瞅出来的,如果分类多了,例如达到上百个类型,那就要进行迭代训练调整权重才可以了。


喜欢 (0)or分享 (0)