机器学习算法六:多层感知机(MLP)

  1. 感知机模型:将线性可分的数据,利用一个线性超平面将其分类;(感知机只有输出层神经元进行激活函数处理,即只有一层功能神经元)其模型公式为:y=sign(\theta*x)其中

感知机模型损失定义:

其中M表示误分类结点的集合;

  1. 多层感知机就是含有至少一个隐藏层的由全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换。(最简单的MLP只有一个隐含层如下图。)

  • 隐藏层与输入层是全连接的,假设输入层用向量X表示,则隐藏层的输出就是 f (W1X+b1),W1是权重(也叫连接系数),b1是偏置,函数f可以是常用的sigmoid 函数或者tanh函数;
  • 多层感知机是一种多层前馈神经网络 ,常用的快速训练算法有共轭梯度法、拟牛顿法。

由于多层感知机算法的局限性,提出了误差逆传播算法即BP算法;(其不仅被用于多层前馈神经网络,也可用于其他神经网络。)

BP算法实现过程

  1. BP算法基于梯度下降策略,以目标的负梯度的方向对参数调整,给定学习率,控制着算法每一轮迭代中更新步长,若太大则容易振荡;若太小则收敛速度太慢)。
  2. 在BP算法训练的过程:
  • 将输入示例提供给输入神经元;
  • 对输入数据进行计算,并逐层向前传播,产生输出结果;
  • 计算输出结果的误差;
  • 将误差逆向传播至隐层神经元;
  • 根据误差,调整参数(包括连接权和阈值),从②开始反复迭代,直到满足条件。

★解决BP算法中过拟合问题:

  1. 早停:将数据划分为训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低,但是验证集的误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
  2. 正则化:在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和;其误差目标函数
  3. 其中Ek表示第K个训练样例上的误差,ωi表示连接权和阈值;用于经验误差与网络复杂度的折中,通过交叉验证来估计。

★全局最小与局部极小

●跳出局部极小方法:(1)以多组不同参数初始化多个神经网络,训练后取其中误差最小的解作为最终参数;即从局部极小选择更可能接近全局最小的结果。(2)使用“模拟退火”技术,在每一步都以一定概率接受比当前结果更差的结果,从而跳出局部极小。(3)随机梯度下降,与标准梯度下降法精确计算梯度不同,随机梯度下降法在计算梯度时加入了随机因素。于是,即便陷入局部极小点,它计算出的梯度仍可能不为零,这样就有机会跳出局部极小继续搜索。

 

基于Sklearn框架的MLP算法实现:

 

 

名称

原理

网络核心

训练过程

其他

RBF(Radial Basis Fuction--径向基函数)网络

一种单隐层前馈神经网络,使用径向基函数作为隐层神经元激活函数,输出层是对隐藏层的线性组合。

c,w分别为隐层神经元对应的中心和权重

1)确定神经元中心c,常用随机采用、聚类等;

2)利用BP算法确定参数w,b;

RBF神经网络具有“局部映射”特性。BP神经网络是对非线性映射的全局逼近 。

ART(Adaptive Resonance Theory)自适应谐振网络

包含比较层、识别层、识别阈值和重置模块,以竞争学习的方式进行学习;是一种无监督学习过程;

  1. 比较层接受输入样本,并将其传递给识别层神经元;
  2. 识别层每个神经元对应一个模式类,神经元数目可在训练过程中动态增长以增加新的模式类;识别层收到输入数据,利用识别层的竞争学习产生获胜神经元;(竞争机制例如:输入神经元识别的类别与标签类别之间的距离,距离小的获胜)
  3. 获胜神经元发送信号抑制其他神经元的激活,通过输入数据与获胜神经元所对应的得向量间的相似度大于识别阈值,更新网络权重,使输入数据与神经元的模式相似度更大

SOM(Self-Organizing Map)自组织映射网络

一种竞争学习型的无监督神经网络,将高维输入数据映射到低维空间,保持输入数据在高位空间的拓扑(高维空间的相似样本点映射到低维空间中邻近的神经元),将距离小的个体集合划分为同一类别,而将距离大的个体集合划分为不同的类别。

1)接受输入:首先计算本次迭代的学习率和学习半径,并且从训练集中随机选取一个样本。

2)寻找获胜节点:计算数据集中其他样本与此样本的距离,从中找到点积最小的获胜节点。

3)计算优胜领域:根据这两个节点计算出聚类的领域,并找出此领域中的所有节点。

4)调整权值:根据学习率、样本数据调整权重。

5)根据计算结果,为数据集分配类别和标签。

6)评估结果:SOM网络属于无监督聚类,输出的结果就是聚类后的标签。如果训练集已经被分好类,即具有分类标签,那么通过新旧标签的比较就可以反映聚类结果的准确度。

级联相关网络

级联相关神经网络是从一个小网络开始,自动训练和添加隐含单元,最终形成一个多层的结构。

1)候选神经元连结到所有的输入和隐含神经元(图中的虚线),并且候选神经元的输出不连结到网络上;

2)固定住图中的实线部分,只训练候选神经元的权重(也就是图中的虚线);

3)当权重训练好之后,就将候选神经元安装到图中空白的层上,也就是第四个区域,这时候选项的连接权就不能再改变了;

4)将候选神经元连结到网络的输出上,这时候选神经元被激活,开始训练网络的所有输出连接权;

Elman网络

Elman是一种动态递归神经网络,包括输入层、隐藏层、承接层和输出层。

  1. 输入层输入信号,并将其传入隐藏层;
  2. 隐藏层采用激活函数,对t时刻的输入信号进行计算,并将其分别传递到输出层和承接层;
  3. 承接层接收信号并将其与下一时刻的输入信号结合,重新输入到隐藏层;(因此,Elman网络使t时刻的输出状态不仅与t时刻的输入有关,还与t-1时刻的网络状态有关,可以处理与时间有关的动态变化)

Boltzmann(玻尔兹曼机)机

是一种基于能量的模型;包括两层:显层和隐层,显层为数据的输入输出,隐层为数据的内在表达;

通过调整网络权值使训练集中的模式在网络状态中以相同的概率再现。

1)正向学习阶段或输入期:即向网络输入一对输入输出模式,将网络输入输出节点的状态钳制到期望的状态,而让隐节点自由活动以捕捉模式对之间的对应规律;

2)反向学习阶段或自由活动期:对于异联想学习,钳制住输入节点而然隐含节点和输出节点自由活动;对于自联想学习,可以让其可见节点和隐节点都自由活动,已体现网络对输入输出对应规律的模拟情况。输入输出的对应规律表现为网络到达热平衡时,相连节点状态同时为一的平均概率。期望对应规律与模拟对应规律之间的差别就表现为两个学习阶段对应的平均概率的差值,此差值做为权值调整的依据。

不同神经网络对比参考文献:

ART:https://blog.csdn.net/u013468614/article/details/94751690

SOM:  https://blog.csdn.net/jyh_AI/article/details/82024431

级联相关网络: https://blog.csdn.net/xc_xc_xc/article/details/53163478

Elman:  https://blog.csdn.net/fengzhimohan/article/details/80847979

Boltzmann机:https://www.cnblogs.com/pythonlearing/p/9978246.html

  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scikit-learn(sklearn)是一个常用的机器学习库,它提供了多种算法和工具来简化机器学习任务的实现。在sklearn中,多层感知器算法(Multilayer Perceptron)是一种基于人工神经网络的分类方法。 多层感知器(MLP)是一种前向人工神经网络,由多个神经元层组成,每层之间都是全连接的。MLP可以用于分类和回归任务,并且在许多实际应用中表现出色。 在sklearn中,使用MLP算法可以通过MLPClassifier(用于分类任务)和MLPRegressor(用于回归任务)这两个类来实现。你可以通过设置不同的参数来调整模型的性能和行为,例如隐藏层的数量和大小、激活函数、优化算法等。 下面是一个使用sklearn中MLPClassifier的示例代码: ```python from sklearn.neural_network import MLPClassifier from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split # 创建示例数据 X, y = make_classification(n_samples=100, random_state=1) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=1) # 创建多层感知器模型 model = MLPClassifier(hidden_layer_sizes=(10, 10), activation='relu', solver='adam', random_state=1) # 拟合模型 model.fit(X_train, y_train) # 在测试集上进行预测 y_pred = model.predict(X_test) ``` 这里的示例代码演示了如何使用sklearn中的MLPClassifier来构建一个多层感知器模型,并在训练集上进行拟合,然后在测试集上进行预测。你可以根据实际情况调整模型的参数和数据预处理方法来获得更好的性能和准确度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值