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

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

深度学习与神经网络:单层感知机_第1张图片

一个传统的单层感知机如上图所示,其实理解起来很简单,我们可以直接理解为输入节点接受信号之后直接传输到输出节点,然后得到结果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,此时我们要对权值进行调整:

深度学习与神经网络:单层感知机_第2张图片

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

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

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

深度学习与神经网络:单层感知机_第3张图片

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

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

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

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

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

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

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

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

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

深度学习与神经网络:单层感知机_第4张图片
深度学习与神经网络:单层感知机_第5张图片

训练后我们输入测试集:

深度学习与神经网络:单层感知机_第6张图片
深度学习与神经网络:单层感知机_第7张图片

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

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

我们在命令行输入nntool.

深度学习与神经网络:单层感知机_第8张图片

注意选择上边的参数.

深度学习与神经网络:单层感知机_第9张图片

选择好输入的数据集

深度学习与神经网络:单层感知机_第10张图片

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

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


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

你可能感兴趣的:(深度学习与神经网络:单层感知机)