深度学习与神经网络:单层感知机

作者: 云时之间 | 来源:发表于2018-03-28 22:12 被阅读70次

    今天这个文章让我们一起来学习下感知机:

    一个传统的单层感知机如上图所示,其实理解起来很简单,我们可以直接理解为输入节点接受信号之后直接传输到输出节点,然后得到结果y.

    就和上图一样,我们给出了权向量W=[W1,W2,W3]=[0.3,0.3,0.3],这时候我们输入[X1,X2,X3],并且于输出节点的t相结合,这样就可以得到方程式:

    y = 0.3X1+0.3X2+0.3X3+0.4

    在我们给定训练数据集之后,第一次给定的权值基本不会是适合的,因此我们需要使用给定的训练数据集进行迭代学习,规则如下:

    给定的测试样例为(X,Y),而如今现在的模型输出为y,此时我们要对权值进行调整:

    而这里边的η被称为学习率,这个学习率∈(0,1),并且很大程度上这个学习率是根据我们的经验得到的.如果我们选择的学习率过大,容易造成权值计算的不稳定.如果选择的学习率太小,不能够充分体现出对于权值的修正,迭代次数太多.就跟我们显微镜对焦一样,左调调,右调调就会看的越来越清楚.

    从上边的式子来看,如果输出的实际值y和训练集中的Y一致,则Wi就不会发生变化,从而感知机就不会发生变化,否则感知机就会根据错误的大小进行权值的处理.

    所以从上述来看,本质上感知机只能够对输出层进行处理,学习能力是很有限的,泛化能力很差.我们不妨分析下:对于与,或,非这样的问题,如图所示:

    是可以形成一个线性超平面,从而进行分类划分.

    如果是异或这样的问题,是无法形成一个线性超平面进行划分的.

    在这里我们总结一下单层感知器的局限:

    1:单层感知器没有泛化的能力

    2:结构简单,激活函数只能是符号函数

    3:只对于线性可分问题进行收敛,如果非线性可分问题,不会产生超平面,无法收敛.

    4:如果存在离群点,则需要花费太多的训练时间.

    下面我们用MATLAB来实际操作搭建一个单层感知器:

    首先我们在MATLAB中输入P,T,p,t,P和T是训练集和训练集结果,p,t则是模型的参数,这里我们在nevp()中使用hardlims,这个参数是单层感知机的激活函数名称.

    训练后我们输入测试集:

    因此我们输入之后,可以得到一个正确的结果.

    而MATLAB中也有一个nntool,可以使用图形化界面进行操作:

    我们在命令行输入nntool.

    注意选择上边的参数.

    选择好输入的数据集

    进行训练,训练后输入测试集:

    输入结果,是-1,跟之前我们的测试集是一致的.

    我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan

    相关文章

      网友评论

        本文标题:深度学习与神经网络:单层感知机

        本文链接:https://www.haomeiwen.com/subject/ayqpcftx.html