使用单层/多层感知机(MLP)进行数据拟合回归——附代码

目录

摘要:

单层感知机(逻辑回归):

多层感知机(MLP):

本文Matlab运行结果:

本文Matlab代码分享:


摘要:

MLP是一种常用的前馈神经网络,使用了BP算法的MLP可以被称为BP神经网络。MLP的隐节点采用输入向量与权向量的内积作为激活函数的自变量,激活函数采用Relu函数。各参数对网络的输出具有同等地位的影响,因此MLP是对非线性映射的全局逼近。本代码使用单层感知机和多层感知机运行同样的数据回归拟合任务,并对比了两者的性能,从结果中可以看出,多层感知机的效果明显好于单层感知机。本文数据为Matlab自带,已多输入单输出的形式构建本文的两个网络模型,使用60%数据进行训练,20%数据进行验证,20%数据进行测试。本文代码注释详细,适合初学者进行学习模仿。

单层感知机(逻辑回归):

单层感知机和多层感知机(MLP)是最基础的神经网络结构。将卷积操作创新的加入到神经网络结构形成了卷积神经网络,卷积神经网络给现代人工智能注入了活力。感知机网络和卷积网络(CNN)都属于前馈型网络(FeedForward Network)。

单层感知机是二分类的线性分类模型,输入是被感知数据集的特征向量,输出时数据集的类别{+1,-1}。单层感知机的函数近似非常有限,其决策边界必须是一个超平面,严格要求数据是线性可分的。支持向量机,用核函数修正了感知器的不足,将特征向量有效的映射到更高维的空间使得样本成为线性可分的数据集。

本节尝试揭开单层感知机的神秘面纱,尝试用数据给出模型和解释。

1 单层感知机的模型

单层感知机目标是将被感知数据集划分为两类的分离超平面,并计算出该超平面。

单层感知机是二分类的线性分类模型,输入是被感知数据集的特征向量,输出时数据集的类别{+1,-1}。感知器的模型可以简单表示为:

该函数称为单层感知机,其中w是网络的N维权重向量,b是网络的N维偏置向量, w.x是w和x的内积,w和b的N维向量取值要求在实数域。

sign函数是感知机的早期激活函数,后面又演化出一系列的激活函数。激活函数一般采用非线性激活函数,以增强网络的表达能力。常见的激活函数有:sign, sigmoid,tanh,ReLU等。

本文选取的为单层感知机与逻辑回归的差别就是感知机激活函数是sign,逻辑回归的激活函数是sigmoid。sign(x)将大于0的分为1,小于0的分为-1;sigmoid将大于0.5的分为1,小于0.5的分为0。因此sign又被称为单位阶跃函数,逻辑回归也被看作是一种概率估计。

多层感知机(MLP):

神经网络的变种目前有很多,如误差反向传播(Back Propagation,BP)神经网路、概率神经网络、卷积神经网络(Convolutional Neural Network ,CNN-适用于图像识别)、时间递归神经网络(Long short-term Memory Network ,LSTM-适用于语音识别)等。

但最简单且经典的神经网络则是多层感知器(Multi-Layer Perception,MLP),只有理解经典的原版,才能更好地去理解功能更加强大的现代变种。

由前面单层神经网络的学习可知,神经网络主要有三个基本要素:权重、偏置和激活函数

权重:神经元之间的连接强度由权重表示,权重的大小表示可能性的大小

偏置:偏置的设置是为了正确分类样本,是模型中一个重要的参数,即保证通过输入算出的输出值不能随便激活。

激活函数:起非线性映射的作用,其可将神经元的输出幅度限制在一定范围内,一般限制在(-1~1)或(0~1)之间。最常用的激活函数是Sigmoid函数,其可将(-∞,+∞)的数映射到(0~1)的范围内

多层感知机(MLP)是一种前向结构的人工神经网络,包含输入层、输出层及多个隐藏层,3层感知机的神经网络图如下所示:

其相邻神经元节点全连接,同层的神经元节点无连接。样本训练数据由输入层输入,通过一层或多层全连接层对数据进行拟合,最后由输出层输出。利用输出层与样本标签构建损失函数,通过各种优化算法降低损失函数并更新模型参数,直至损失函数达到最小。图3为只有一层隐含层的MLP,其中f(x)代表激活函数,激活函数为非线性函数,通过计算加权和并加上偏置来确定神经元是否应该被激活,主要包括Sigmoid、Tanh和ReLu。目前使用最广泛的是Relu激活函数

多层感知机的工作原理如式(15)所示,式中yj代表输出层第j个分量;k-1ix为第k-1个隐藏层第i个神经元的输入;wi,j,k为第k-1个隐含层上第i个分量与第k个隐含层上第j个神经元的连接权重。

权重w和偏置b是模型中需要确定的参数,深度学习通过大量的监督数据训练,计算损失函数的最小值从而得出最符合现状的权重与偏移量。但当输入数据的特征很多时,损失函数的计算会十分复杂,为了简化计算过程提高运算速度,利用梯度计算损失函数的最小值。

本文Matlab运行结果:

MLP结构:

训练过程: 

回归拟测试 

可以看到MLP很好的拟合了曲线的变化形式 

本文Matlab代码分享:

猜你喜欢

转载自blog.csdn.net/widhdbjf/article/details/129437958