基于灰狼算法优化的多层感知器(GWO-MLP)实现多特征输入分类任务——附代码

目录

摘要:

MLP研究背景:

MLP的原理:

MLP主要面临的问题与解决方式:

灰狼优化算法:

Matlab代码运行结果:

代码+数据分享:


摘要:

灰狼优化算法(GWO)是一种新的基于灰狼捕食行为的元启发式算法,被证明是一种具有高水平的探索和开发能力的算法。本文采用GWO对多层感知器(MLP)进行优化,使用GWO-MLP对多特征输入的分类任务进行分类预测。实验结果表明,本文所提GWO-MLP能够达到相当高的分类准确度。

本代码为智能算法优化的神经网络方向,代码结构完整清晰,同时附带对应的数据集,适合初学者学习,也适合用于各种数学建模中。

MLP研究背景:

近年来,前馈神经网络,尤其是双层前馈神经网络在实际应用中十分广泛,双层前馈神经网络即只有一个隐含层的前馈神经网络,又被称为多层感知器(Multi-LayerPerceptrons,MLPs)多层感知器适用于对非线性可分模式的分类和函数逼近从经验中获得学习的能力对神经网络来说至关重要,对前馈神经网络也是如此。

在前馈神经网络中,用于学习的方法被称为训练器。训练器是用来寻找最佳的连接权重和偏差以保证输出误差最小。反向传播学习算法和基于梯度的方法是两类经典的训练器。对于前馈神经网络而言,研究人员往往偏向于使用标准或改进的反向传播学习算法作为学习训练器,而基于梯度的方法由于其较慢的收敛速度和容易陷入局部最优的缺陷而受到应用制约。

MLP的原理:

本文搭建了一个简单的多层感知机(MLP)。

因为一个全连接层代表的是线性,而线性意味着单调性。但我们应该意识到,现实中的问题大多都不是线性的,或者说,大多都是极为复杂的。因此,线性模型的局限性是不可避免的。

自然的,多层全连接层是可以解决一部分线性模型的局限性问题的,但是,一个很重要的点是:多层的线性层叠加在一起仍是线性的。

因此,我们考虑引入非线性的激活函数,来增强模型的非线性性。激活函数tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。与sigmod的区别是 tanh 是0 的均值,因此在实际应用中tanh会比sigmod更好。在具体应用中,tanh函数相比于Sigmoid函数往往更具有优越性,这主要是因为Sigmoid函数在输入处于[-1,1]之间时,函数值变 化敏感,一旦接近或者超出区间就失去敏感性,处于饱和状态。

最后就是输出层,输出层与隐藏层是什么关系?其实隐藏层到输出层可以看成是一个多类别的逻辑回归,也即softmax回归,所以输出层的输出就是softmax(W2X1+b2),X1表示隐藏层的输出f(W1X+b1)。

MLP整个模型就是这样子的,上面说的这个三层的MLP用公式总结起来就是,函数G是softmax。

因此,MLP所有的参数就是各个层之间的连接权重以及偏置,包括W1、b1、W2、b2。对于一个具体的问题,怎么确定这些参数?求解最佳的参数是一个最优化问题,解决最优化问题,最简单的就是梯度下降法了(SGD):首先随机初始化所有参数,然后迭代地训练,不断地计算梯度和更新参数,直到满足某个条件为止(比如误差足够小、迭代次数足够多时)。这个过程涉及到代价函数、规则化(Regularization)、学习速率(learning rate)、梯度计算等。

MLP主要面临的问题与解决方式:

在多层感知器的学习训练过程中,其主要目的就是为了找到最佳的连接权重和偏差使得输出误差最小。然而,大多数情况下多层感知器收敛到的是局部最优解而不是全局最优解。也就是说,用于训练多层感知器的学习算法容易陷入局部最优而很难获得全局最优,所以很难找到多层感知器的最佳连接权重和偏差。

群智能算法(SI)是一类随机优化算法,它具有较好的全局最优收敛性能。因此,越来越多的研究将群智能算法作为MLPs的学习算法,本文拟采用灰狼优化算法(GWO)对MLP进行性能优化。

灰狼优化算法:

灰狼优化算法(GWO),由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法。灵感来自于灰狼群体捕食行为。

优点:较强的收敛性能,结构简单、需要调节的参数少,容易实现,存在能够自适应调整的收敛因子以及信息反馈机制,能够在局部寻优与全局搜索之间实现平衡,因此在对问题的求解精度和收敛速度方面都有良好的性能。

对于MLP而言,由于数据样本空间大多是高维、多模态、被噪声污染和数据缺失的情形,MLP的权值和偏差训练被认为是一个极具挑战性的优化问题。GWO算法是一种启发式算法,而采用启发式算法作为MLP的训练器进行训练最重要步骤就是选择合适的编码策略。选择编码策略是为了把MLP的权重和偏差表示为进化算法的迭代计算粒子变量。编码策略被划分为3种不同的类型,即:向量编码、矩阵编码和二进制编码。矩阵编码非常适合用来对神经网络进行训练,因为编码策略使得神经网络解码变得比较容易。

Matlab代码运行结果:

可以看到分类的准确率还是相当高的。

代码+数据分享:

猜你喜欢

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