数据挖掘系列(9)——BP神经网络算法与实践

bp神经网络 BP神经网络(Backpropagation Neural Network)是一种多层前馈神经网络,其通过反向传播算法进行训练。这种网络结构由输入层、一个或多个隐藏层以及输出层组成,具有强大的非线性映射能力。非线性映射:BP神经网络能够学习和模拟复杂的非线性关系。自学习能力:网络能够通过学习大量数据来自动调整内部参数。泛化能力:经过训练的网络能够对未见过的数据进行预测和分类。 阅读详情

 神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因继续火起来了。神经网络有很多种:前向传输网络、反向传输网络、递归神经网络、卷积神经网络等。本文介绍基本的反向传输神经网络(Backpropagation 简称BP),主要讲述算法的基本流程和自己在训练BP神经网络的一些经验。

BP神经网络的结构
  神经网络就是模拟人的大脑的神经单元的工作方式,但进行了很大的简化,神经网络由很多神经网络层构成,而每一层又由许多单元组成,第一层叫输入层,最后一层叫输出层,中间的各层叫隐藏层,在BP神经网络中,只有相邻的神经层的各个单元之间有联系,除了输出层外,每一层都有一个偏置结点:

  虽然图中隐藏层只画了一层,但其层数并没有限制,传统的神经网络学习经验认为一层就足够好,而最近的深度学习不这么认为。偏置结点是为了描述训练数据中没有的特征,偏置结点对于下一层的每一个结点的权重的不同而生产不同的偏置,于是可以认为偏置是每一个结点(除输入层外)的属性。我们偏置结点在图中省略掉:

  在描述BP神经网络的训练之前,我们先来看看神经网络各层都有哪些属性:

  1. 每一个神经单元都有一定量的能量,我们定义其能量值为该结点j的输出值 Oj ;
  2. 相邻层之间结点的连接有一个权重 Wij ,其值在[-1,1]之间;
  3. 除输入层外,每一层的各个结点都有一个输入值,其值为上一层所有结点按权重传递过来的能量之和加上偏置;
  4. 除输入层外,每一层都有一个偏置值,其值在[0,1]之间;
  5. 除输入层外,每个结点的输出值等该结点的输入值作非线性变换;
  6. 我们认为输入层没有输入值,其输出值即为训练数据的属性,比如一条记录 X=<(1,2,3),类别1> ,那么输入层的三个结点的输出值分别为1,2,3. 因此输入层的结点个数一般等于训练数据的属性个数。

  训练一个BP神经网络,实际上就是调整网络的权重和偏置这两个参数,BP神经网络的训练过程分两部分:

  1. 前向传输,逐层波浪式的传递输出值;
  2. 逆向反馈,反向逐层调整权重和偏置;

  我们先来看前向传输。

前向传输(Feed-Forward前向反馈)

  在训练网络之前,我们需要随机初始化权重和偏置,对每一个权重取[-1,1]的一个随机实数,每一个偏置取[0,1]的一个随机实数,之后就开始进行前向传输。

  神经网络的训练是由多趟迭代完成的,每一趟迭代都使用训练集的所有记录,而每一次训练网络只使用一条记录,抽象的描述如下:

while 终止条件未满足:
    for record:dataset:
        trainModel(record)    

   首先设置输入层的输出值,假设属性的个数为100,那我们就设置输入层的神经单元个数为100,输入层的结点 Ni 为记录第i维上的属性值 xi 。对输入层的操作就这么简单,之后的每层就要复杂一些了,除输入层外,其他各层的输入值是上一层输入值按权重累加的结果值加上偏置,每个结点的输出值等该结点的输入值作变换 

  

   前向传输的输出层的计算过程公式如下:

   Ij=∑iWijOi+θj

       Oj=11+e−Il

  对隐藏层和输出层的每一个结点都按照如上图的方式计算输出值,就完成前向传播的过程,紧接着是进行逆向反馈。

逆向反馈(Backpropagation)

  逆向反馈从最后一层即输出层开始,我们训练神经网络作分类的目的往往是希望最后一层的输出能够描述数据记录的类别,比如对于一个二分类的问题,我们常常用两个神经单元作为输出层,如果输出层的第一个神经单元的输出值比第二个神经单元大,我们认为这个数据记录属于第一类,否则属于第二类。

  还记得我们第一次前向反馈时,整个网络的权重和偏置都是我们随机取,因此网络的输出肯定还不能描述记录的类别,因此需要调整网络的参数,即权重值和偏置值,而调整的依据就是网络的输出层的输出值与类别之间的差异,通过调整参数来缩小这个差异,这就是神经网络的优化目标。对于输出层:

   Ej=Oj(1−Oj)(Tj−Oj)

  其中 Ej 表示第j个结点的误差值, Oj 表示第j个结点的输出值, Tj 记录输出值,比如对于2分类问题,我们用01表示类标1,10表示类别2,如果一个记录属于类别1,那么其 T1=0 , T2=1 。

  中间的隐藏层并不直接与数据记录的类别打交道,而是通过下一层的所有结点误差按权重累加,计算公式如下:

   Ej=Oj(1−Oj)∑kEkWjk

  其中 Wjk 表示当前层的结点j到下一层的结点k的权重值, Ek 下一层的结点k的误差率。

  计算完误差率后,就可以利用误差率对权重和偏置进行更新,首先看权重的更新:

   ΔWij=λEjOi

   Wij=Wij+ΔWij

  其中 λ 表示表示学习速率,取值为0到1,学习速率设置得大,训练收敛更快,但容易陷入局部最优解,学习速率设置得比较小的话,收敛速度较慢,但能一步步逼近全局最优解。

  更新完权重后,还有最后一项参数需要更新,即偏置:

   Δθj=λEj

   θj=θj+Δθj

   至此,我们完成了一次神经网络的训练过程,通过不断的使用所有数据记录进行训练,从而得到一个分类模型。不断地迭代,不可能无休止的下去,总归有个终止条件

训练终止条件

  每一轮训练都使用数据集的所有记录,但什么时候停止,停止条件有下面两种:

  1. 设置最大迭代次数,比如使用数据集迭代100次后停止训练
  2. 计算训练集在网络上的预测准确率,达到一定门限值后停止训练

使用BP神经网络分类

  我自己写了一个BP神经网络,在数字手写体识别数据集MINIST上测试了一下,MINIST数据集中训练图片有12000个,测试图片20000个,每张图片是28*28的灰度图像,我对图像进行了二值化处理,神经网络的参数设置如下:

  1. 输入层设置28*28=784个输入单元;
  2. 输出层设置10个,对应10个数字的类别;
  3. 学习速率设置为0.05;

  训练经过约50次左右迭代,在训练集上已经能达到99%的正确率,在测试集上的正确率为90.03%,单纯的BP神经网络能够提升的空间不大了,但kaggle上已经有人有卷积神经网络在测试集达到了99.3%的准确率。代码是去年用C++写的,浓浓的JAVA的味道,代码价值不大,但注释比较详细,可以查看这里,最近写了一个Java多线程的BP神经网络,但现在还不方便拿出来,如果项目黄了,再放上来吧。

训练BP神经网络的一些经验

  讲一下自己训练神经网络的一点经验:

  1. 学习速率不宜设置过大,一般小于0.1,开始我设置了0.85,准确率一直提不上去,很明显是陷入了局部最优解;
  2. 输入数据应该归一化,开始使用0-255的灰度值测试,效果不好,转成01二值后,效果提升显著;
  3. 尽量是数据记录随机分布,不要将数据集按记录排序,假设数据集有10个类别,我们把数据集按类别排序,一条一条记录地训练神经网络,训练到后面,模型将只记得最近训练的类别而忘记了之前训练的类别;
  4. 对于多分类问题,比如汉字识别问题,常用汉字就有7000多个,也就是说有7000个类别,如果我们将输出层设置为7000个结点,那计算量将非常大,并且参数过多而不容易收敛,这时候我们应该对类别进行编码,7000个汉字只需要13个二进制位即可表示,因此我们的输出成只需要设置13个结点即可。

参考文献:

  Jiawei Han. 《Data Mning Concepts and Techniques》

 转载请注明出处:http://www.cnblogs.com/fengfenggirl/

【转载】BP神经网络 原文地址:http://blog.youkuaiyun.com/acdreamers/article/details/44657439 今天来讲BP神经网络,神经网络在机器学习中应用比较广泛,比如函数逼近,模式识别,分类,数据压缩,数据 挖掘等领域。接下来介绍BP神经网络的原理及实现。 Contents 1. BP神经网络的认识 2. 隐含层的选取 3. 正... 阅读详情

相关推荐

智能计算之神经网络(BP)介绍

1. 神经网络流行原因 2. 人工神经网络定义 3. 人工神经网络的学习能力 4.人工神经网络的基本原理 5. 神经网络的研究进展 6.神经网络的典型结构 6.1 单层感知器网络 6.2 前馈型网络 6.3 前馈内层互联网络 6.4 反馈型网络 6.5 全互联网络 7. 神经网络的学习算法 7.1 学习方法 7.2 学习规则 8. BP神经网络 8.1 基本思想 8.2 算法流程 8.3 举例...

PY洋洋 9703

BP神经网络

1.概念: BP(back propagation)即为反向传播,意为反向传播神经网络。

程小白的博客 4万+

【BP分类】基于matlab淘金算法优化BP神经网络GRO-BP故障识别数据分类【含Matlab源码 5025期】

淘金算法优化BP神经网络GRO-BP故障识别数据分类 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 760

基于遗传算法的 BP 神经网络优化算法

BP 网络是一类多层的前馈神经网络,其名字源于在网络训练过程中调整网络权值的算法是误差的反向传播学习算法(BP 学习算法)。该算法由 Rumelhart 等人在 1986 年提出,具有结构简单、可调整参数多、训练算法多、可操作性好等优点,被广泛应用于各个领域。然而,BP 神经网络也存在一些缺陷,如学习收敛速度慢、不能保证收敛到全局最小点、网络结构不易确定等。

qq_57128262的博客 2039

Windows 11/10系统盘被BitLocker锁了别慌!手把手教你用manage-bde命令找回密钥并解锁

本文详细介绍了当Windows 11/10系统盘被BitLocker锁定后的恢复方法,重点讲解了如何使用manage-bde命令行工具找回密钥并解锁加密驱动器。通过进入Windows恢复环境、诊断锁定状态、提取恢复密钥ID以及执行解锁操作等步骤,帮助用户有效解决BitLocker锁定问题,同时提供了后续防护优化建议和高级故障排除技巧。

weixin_42542669的博客 1461

EPS+ArcGIS+CASS三剑客:等高线裁剪的完整工作流与避坑指南

本文详细介绍了EPS、ArcGIS和CASS三款软件在等高线裁剪中的协同工作流程与避坑指南。通过发挥各软件优势,解决数据完整性、拓扑准确性和流程可靠性等核心挑战,提升40%以上的工作效率。特别适合大型测绘项目中复杂地形的处理,涵盖数据准备、核心处理到后期优化的全流程。

weixin_30352645的博客 618

数据挖掘-理论与算法 公开课笔记

数据挖掘-理论与算法 公开课笔记

咸鱼咸的博客 1万+

详细了解sklearn中的CountVectorizer

CountVectorizer 是 scikit-learn(一个流行的 Python 机器学习库)中的一个文本特征提取类,其核心功能是将一系列原始文本(如句子、文档)转换为基于词频(word count)的数值矩阵。它基于词袋模型(Bag of Words, BoW)思想,忽略文本的语法结构和词序,仅关注词汇在文本中出现的频率,从而将文本转化为机器可理解的数字形式。文本 1:"I love machine learning"

2302_76568160的博客 1119

深度学习——神经网络之DNN全连接神经网络、BP算法原理

【神经网络之BP算法原理】深度学习——神经网络之BP算法原理

sinat_42247418的博客 4452

Depth Anything 3实战:如何用DINOv2 Transformer一键生成3D高斯点云?

本文详细介绍了Depth Anything 3(DA3)模型如何利用DINOv2 Transformer架构,实现从单张或多视角图像一键生成高质量3D高斯点云。DA3通过统一的深度-射线表示和自适应注意力机制,简化了传统复杂的3D重建流程,并可直接微调用于3D高斯渲染,为图形学、CV和内容创作领域提供了高效的端到端解决方案。

postgres8guard的博客 722

MATLAB实战:手把手教你用三频四步相移法搞定结构光三维重建(附完整代码)

本文详细介绍了如何使用MATLAB实现三频四步相移法进行高精度结构光三维重建。通过光栅图像预处理、相位计算、多频外差与相位解包裹等步骤,结合完整代码示例,帮助读者掌握从二维图像到三维点云的关键技术。该方法在工业检测和逆向工程中具有抗干扰能力强、高分辨率和鲁棒性等优势。

weixin_29201933的博客 338

零碎知识点——多层前馈神经网络及BP算法(两层分类全过程)

转载:https://blog.youkuaiyun.com/ssw_1990/article/details/79138931 1.多层前馈神经网络 首先说下多层前馈神经网络,BP算法,BP神经网络之间的关系。多层前馈(multilayer feed-forward)神经网络由一个输入层、一个或多个隐藏层和一个输出层组成,后向传播(BP)算法在多层前馈神经网络上面进行学习,采用BP算法的(多层)前馈神经网...

温瞳 8811

Arduino ESP32S3开发环境搭建 ------ 在线下载安装包Failed解决方案

本文介绍了Arduino ESP32 S3开发环境搭建的离线解决方案。

张一西的博客 1018

数据挖掘(9):BP神经网络算法与实践

出处:fengfenggirl(@也爱数据挖掘)  网址:http://www.cnblogs.com/fengfenggirl/p/classification_evaluate.html 本系列: 数据挖掘(1):关联规则挖掘基本概念与Aprior算法 数据挖掘(2):关联规则FpGrowth算法 数据挖掘(3):关联规则评价

科大浪子的专栏 3467

基于FPGA的时间数字转换(TDC)设计(五:基于Carry4的高精度TDC设计)

基于FPGA的时间数字转换(TDC)设计,此为第五篇:基于Carry4的高精度TDC设计。提供工程文件及MATLAB测试分析代码

sdau2005的博客 8803

前沿探索:基于强化学习的目标检测与跟踪技术及论文解析

前沿探索:基于强化学习的目标检测与跟踪技术及论文解析 ,人工智能,计算机视觉,大模型,AI,本文聚焦基于强化学习的目标检测与跟踪技术,先介绍相关技术基础,包括目标检测、跟踪及强化学习的算法等。接着阐述强化学习在目标检测与跟踪中的应用思路、框架及典型算法,解析三篇相关论文的背景、方法、实验结果。还探讨了该技术面临的样本效率、奖励函数设计等挑战,以及结合迁移学习等的未来发展方向,为该领域研究提供参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 11万+

【scau数据挖掘·总复习】博客汇总||第一章~第九章+密度聚类||华农期末复习

step by step. 目录 第二章 第三章 第四章 第五章 第六章 第七章 第八章、第九章、补充知识 第二章 【数据挖掘·总复习】第二章-数据预处理||详细整理||知识点+例题||考点有_半段烟y9的博客-优快云博客详细复习资料https://blog.youkuaiyun.com/weixin_51159944/article/details/120444098 第三章 【数据挖掘·总复习】第三章-关联规则挖掘||Apriori||详细整理||知识点+例题||考点有_半段烟y9的博

weixin_51159944的博客 1935

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Ng机器学习系列补充:7、神经网络反向传播BP算法(Back Propagation)

机器学习补充系列国际权威的学术组织the IEEE International Conference on Data Mining (ICDM,国际数据哇局会议) 2006年12月评选出了数据挖掘领域的十大经典算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART,它们在数据挖掘领域都产生

mmc2015的专栏 2592

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【数据挖掘·总复习】第六章||BP神经网络简单整理

step by step. 目录 1. 人工神经元模型 2. BP神经网络算法原理 (1) Delta学习规则 (2)BP网络结构 (3)算法原理 (4) 例题 1. 人工神经元模型 权值:人工神经元有许多输入信号,针对每个输入都有一个加权系数Wij称为权值。 式子中的从其它神经元传来的输入信号;是该神经元的阈值;表示从神经元i到神经元j的连接权值;为激活函数或挤压函数。 多输入,单输出。 2. BP神经网络算法原理 (1) Delta学习规则 F()函...

weixin_51159944的博客 667

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Bp神经网络+C++实现

0 前言  神经网络在我印象中一直比较神秘,正好最近学习了神经网络,特别是对Bp神经网络有了比较深入的了解,因此,总结以下心得,希望对后来者有所帮助。   神经网络在机器学习中应用比较广泛,比如函数逼近,模式识别,分类,数据压缩,数据挖掘等领域。神经网络本身是一个比较庞大的概念,从网络结构类别来划分,大概有:多层前馈神经网络、径向基函数网络(RBF)、自适应谐振理论网络(ART)、自组织映射

MasterQKK 1万+

基于极限学习机和BP神经网络的半监督分类算法

基于极限学习机(Extreme Learning Machine, ELM)和反向传播(Backpropagation, BP)神经网络的半监督分类算法,旨在结合两者的优势:​和,同时利用少量标注数据和大量未标注数据提升分类性能。

yugi987838的博客 793

matlab新版bp神经网络,Matlab实现BP神经网络

该实现为《数据挖掘》课程的一次作业。数据在http://www.kaggle.com/网站上,所以数据为CSV格式。但BP神经网络算法为最一般的实现,所以有参考价值。close all %关闭打开的文件clear %清除内存中的数据echo on %显示执行的每一条命令clc %清除命令行窗口pause %敲任意键开始%定义训练样本%P为输入矢量,注意最后...

weixin_39548541的博客 578
上一篇: 数据挖掘系列(8)朴素贝叶斯分类算法原理与实践
下一篇: 数据挖掘系列(10)——卷积神经网络算法的一个实现
youbo_sun
博客等级 码龄12年 20粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值