BP神经网络原理

这篇具有很好参考价值的文章主要介绍了BP神经网络原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.基本概念

1.1 简介

BP神经网络(Back Propagation Neural Network)是一种基于误差反向传播算法(Back Propagation Algorithm)的人工神经网络,也是应用最广泛的神经网络之一。它可以用来解决分类、回归、模式识别、数据挖掘等多种问题。

BP神经网络由输入层、隐层和输出层组成,其中隐层可以包含多个神经元,用于处理输入数据的非线性映射关系。BP神经网络的训练过程包括前向传播和反向传播两个步骤。

BP神经网络的优点是可以处理非线性问题,并且具有较高的精度和可扩展性。缺点是容易出现过拟合问题,需要采取一些正则化方法进行控制。此外,BP神经网络的训练过程需要大量的计算和存储资源,训练时间较长。

BP神经网络已经被广泛应用于各种领域,如图像处理、语音识别、自然语言处理、金融风险评估等。

1.2 前向传播

前向传播:将输入数据通过网络的输入层传递到隐层和输出层,计算输出结果。

前向传播是神经网络中的一种计算方式,用于将输入的数据传递到网络中的每个神经元,并计算出网络的输出结果。在前向传播过程中,输入数据会经过一系列的加权和非线性变换,同时经过每个神经元的激活函数,传递到下一层,最终得到网络的输出结果。

具体来说,前向传播可以分为以下几个步骤:

  1. 将输入数据传递到网络的第一层(输入层),每个输入变量对应一个输入神经元;

  1. 将输入数据经过输入层的加权和非线性变换,传递到网络的下一层(隐层或输出层);

  1. 重复第二步,直到数据传递到网络的最后一层(输出层),计算出网络的输出结果;

  1. 将输出结果与实际标签进行比较,计算误差。

在前向传播过程中,每个神经元的输出值都是由上一层的输出值和该神经元的权重以及偏置值共同决定的。通常,神经元的输出值会经过一个激活函数,如sigmoid函数或ReLU函数,将其映射到一定的范围内,以保证输出值的非线性特性。

前向传播是神经网络中的一个基本计算过程,它为后续的反向传播提供了基础。在神经网络的训练过程中,前向传播和反向传播交替进行,以调整网络中各个神经元的权重和偏置,提高网络的精度和性能。

1.3 反向传播

反向传播:根据输出结果和实际标签之间的误差,通过误差反向传播算法,调整网络中每个神经元的权重和偏置,以降低误差值,并提高网络的精度

反向传播(Back Propagation)是神经网络中的一种训练方法,通过反向传播算法来调整网络中每个神经元的权重和偏置,以降低误差值,并提高网络的精度。

反向传播算法的基本思想是利用链式法则(Chain Rule)对网络中每个神经元的权重和偏置进行调整,从而最小化网络输出与实际标签之间的误差。

具体来说,反向传播可以分为以下几个步骤:

  1. 前向传播:将输入数据通过网络的输入层传递到隐层和输出层,计算输出结果;

  1. 计算误差:将输出结果与实际标签之间的误差传递回网络,计算误差值;

  1. 反向传播:根据误差值和链式法则,从输出层向输入层逐层计算每个神经元的梯度,即权重和偏置对误差的偏导数;

  1. 更新权重和偏置:根据计算得到的梯度信息,调整每个神经元的权重和偏置,以降低误差值,并提高网络的精度。

反向传播算法的优点是可以高效地调整神经元的权重和偏置,以提高网络的精度和性能。缺点是容易出现过拟合问题,需要采取一些正则化方法进行控制。此外,反向传播算法的训练过程需要大量的计算和存储资源,训练时间较长。

反向传播算法是神经网络中的核心算法之一,对于神经网络的训练和应用具有重要的意义。

2.BP算法详解

2.1 构成示意图

BP神经网络原理

图2-1 BP神经网络的基本构成

如图2-1所示,这是典型的三层神经网络的基本构成,Layer BP神经网络原理 是输入层(input layer),Layer BP神经网络原理 是隐含层(hidden layer),Layer BP神经网络原理是隐含层(output layer)。其中输入层,输出层一般只有1层,而隐藏层取决于具体实例的学习进程,可以设置多层次。

一组数据BP神经网络原理,经过输入层的加权和非线性变换进入隐藏层,再经过同样的操作最终进入输出层。输出的结果是我们的预测值。此时需要比较预测值与真实值的区别,通过偏导数计算调节权重与偏置,不断迭代得到与真实值近似的预测值。

2.2 举例说明

在本节,将举一个例子带入数值演示反向传播法的过程。该部分的演示过程和数据参考了BP算法详解。

假设存在图2-2这样一个网络结构:

BP神经网络原理

图2-2 BP神经网络示例流程图

表2-1 初始设置和最终目标

输入数据

x1=0.05

x2=0.10

输出数据

o1=0.01

o2=0.99

初始权重

w1=0.15

w2=0.20

w3=0.25

w4=0.30

初始权重

w5=0.40

w6=0.45

w7=0.50

w8=0.55

目标

给出输入数据x1,x2(0.05和0.10),使输出尽可能与原始输出o1,o2(0.01和0.99)接近。

Step 1 前向传播

1. 输入层 BP神经网络原理 隐藏层

计算神经元h1的输入加权和:

BP神经网络原理

神经元h1的输出o1:(此处用到激活函数为sigmoid函数):

BP神经网络原理

同理,可计算出神经元h2的输出o2:

BP神经网络原理

2. 隐藏层 BP神经网络原理 输出层

计算输出层神经元o1和o2的值:

BP神经网络原理

前向传播的过程结束,得到输出值为[0.75136079 , 0.772928465],与实际值[0.01 , 0.99]相差还很远。

现在我们对误差进行反向传播,更新权值,重新计算输出。

Step 2 反向传播

  1. 计算总误差

总误差(Square Error)公式:

BP神经网络原理

所以,两个输出的误差可以分别被计算出来,并得到误差之和:

BP神经网络原理
  1. 隐藏层 BP神经网络原理 输出层的权值更新

以权重参数w5为例,如果我们想知道w5对整体误差产生了多少影响,可以用整体误差对w5求偏导求出(链式法则),图2-3也可以直观的看出误差是如何反向传播的:

BP神经网络原理
BP神经网络原理

图2-3 反向传播: 隐藏层 → 输出层

可以计算求出整体误差 E(total) 对 w5 的偏导值:

BP神经网络原理

最后更新w5的值:

BP神经网络原理

其中,BP神经网络原理 是学习率,这里取0.5。

同理可以更新w6,w7,w8的值。

  1. 输入层 BP神经网络原理 隐藏层的权值更新

在上文计算总误差对w5的偏导时,是从out(o1)—->net(o1)—->w5,但是在输入层和隐藏层之间的权值更新时,是out(h1)—->net(h1)—->w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的误差,所以这个地方两个都要计算。计算流程见图2-4。

BP神经网络原理
BP神经网络原理

图2-4 反向传播: 输入层 → 隐藏层

可以计算求出整体误差 E(total) 对 w1 的偏导值:

BP神经网络原理

最后,更新w1的权值:

BP神经网络原理

同理,也可更新w2,w3,w4的权值。

这样误差反向传播法就完成了,最后我们再把更新的权值重新计算,不停地迭代,在这个例子中第一次迭代之后,总误差E(total)由0.298371109下降至0.291027924。迭代10000次后,总误差为0.000035085,输出为[0.015912196,0.984065734](原始输出为[0.01,0.99]),证明效果还是不错的。

3.代码演示

import torch

# 定义输入数据和标签
X = torch.Tensor([[0, 0], [0, 1], [1, 0], [1, 1]])
y = torch.Tensor([[0], [1], [1], [0]])

# 定义神经网络结构
net = torch.nn.Sequential(
    torch.nn.Linear(2, 4),
    torch.nn.Sigmoid(),
    torch.nn.Linear(4, 1),
    torch.nn.Sigmoid()
)

# 定义损失函数和优化器
criterion = torch.nn.MSELoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.1)

# 训练神经网络
for epoch in range(10000):
    # 前向传播
    y_pred = net(X)
    
    # 计算损失函数
    loss = criterion(y_pred, y)
    
    # 反向传播
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    
    # 每隔1000次迭代输出一次损失函数的值
    if epoch % 1000 == 0:
        print('Epoch:', epoch, 'Loss:', loss.item())

# 测试神经网络
with torch.no_grad():
    y_pred = net(X)
    print('Predict:', y_pred)

在该代码中,我们首先定义了输入数据和标签。然后定义了神经网络结构,包括两个全连接层和一个激活函数(Sigmoid)。接着定义了损失函数和优化器(采用随机梯度下降算法)。最后使用 for 循环训练神经网络,每隔1000次迭代输出一次损失函数的值。在训练完成后,使用 with torch.no_grad() 禁用梯度计算,再次输入训练数据,得到预测结果。

需要注意的是,PyTorch 的神经网络模型需要继承自 torch.nn.Module 类,并实现 forward() 方法。在本例中,我们使用了 Sequential 类来定义神经网络结构,它可以将多个层组合在一起形成一个完整的神经网络。在反向传播时,需要调用 optimizer.zero_grad() 来清空梯度信息,然后调用 loss.backward() 计算梯度,最后调用 optimizer.step() 更新参数。

BP神经网络原理

图2-5 BP算法示例代码运行结果

图2-5展示的是迭代100000次后的运行结果,每10000次迭代输出一次损失函数的值。

最终输出为 [[0.0163], [0.9839], [0.9839], [0.0177]], 与原始输出 [[0], [1], [1], [0]] 相比绝对误差不超过2%,且每万次迭代后Loss都有明显下降。文章来源地址https://www.toymoban.com/news/detail-458925.html

到了这里,关于BP神经网络原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • BP神经网络入门(原理+matlab代码实现)

    对于很多刚入门的小伙伴来说,神经网络可能比较陌生。神经网络其实是对人认知物体的一种仿真。比如幼儿园老师再教小朋友认动物的时候,会让记住一些特征:比如兔子有长长的耳朵,爱吃萝卜和青菜.........,神经网络也是这样通过构建特征值之间的关系来预测一个较为可

    2023年04月23日
    浏览(48)
  • 【MATLAB】PSO_BP神经网络回归预测(多输入多输出)算法原理

    有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ PSO-BP神经网络回归预测(多输入多输出)算法是一种结合粒子群优化算法(PSO)和反向传播(BP)神经网络的混合算法。该算法的原理如下: 数据预处理:在进行PSO-BP神经网络回归预测之前,需要对数据进行

    2024年02月20日
    浏览(38)
  • 神经网络:基本概念、模型与技术

    神经网络:基本概念、模型与技术 引言 在近年来,人工智能领域取得了显著的进步,其中最引人注目的成就之一就是神经网络。神经网络是一种模拟人脑工作机制的算法,以其出色的学习和识别能力,对各个领域的实际问题产生了深远影响。在本篇博客中,我们将深入探讨

    2024年02月09日
    浏览(42)
  • 【神经网络第三期】RBF神经网络基本原理和模型应用

    目录 1. RBF神经网络基本概 2. RBF神经网络结构模型 3.RBF神经网络的学习算法 4. 相关模型应用 径向基函数( Radical Basis Function, RBF)是多维空间插值的传统技术,由Powell 于1985 年提出。1988 年, Broomhead 和Lowe 根据生物神经元具有局部响应这一特点,将RBF 引人神经网络设计中,产

    2024年02月14日
    浏览(37)
  • 基于BP神经网络的定位算法,基于BP神经网络定位预测

    摘要 BP神经网络参数设置及各种函数选择 参数设置 训练函数 传递函数 学习函数 性能函数 显示函数 前向网络创建函数 BP神经网络训练窗口详解 训练窗口例样 训练窗口四部详解 基于BP神经网络的定位算法,基于BP神经网络定位预测 代码下载:基于BP神经网络的定位算法,基

    2024年02月02日
    浏览(48)
  • bp神经网络数学建模论文,关于bp神经网络的论文

    最初是86年,Rumelhart和McCelland领导的科学家小组在《平行分布式处理》一书中,对具有非线性连续变换函数的多层感知器的误差反向传播BP算法进行了详尽的分析,实现了Minsky关于多层网络的设想。 一般引用的话,无需引用第一篇,只需引用介绍BP网络的文献即可。最开始的文

    2024年02月13日
    浏览(47)
  • 基于BP神经网络的火焰识别,基于BP神经网络的火灾识别

    背影 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 代码链接:基于BP神经网络的火焰识别,基于BP神经网络的火灾识别资源-CSDN文库 https://download.csdn.net/download/abc991835105/88215777 神经网络参数 基于

    2024年02月11日
    浏览(44)
  • 深度学习入门——卷积神经网络CNN基本原理+实战

    ​ 卷积神经网络(Convolutional Neural Network,CNN)是深度学习技术中最基础的网络结构,模拟人脑工作,具备强大的特征学习能力。CNN结构主要由两部分组成:特征提取部分和分类部分color{blue}{特征提取部分和分类部分}特征提取部分和分类部分。特征提取部分网络将执行一系列

    2024年01月21日
    浏览(49)
  • BP神经网络优化 | MATLAB基于遗传算法优化BP神经网络(GA-BP)的预测模型(含完整代码)

    文章目录 前言 一、遗传算法描述 二、优化思路 三、完整代码 预测结果  首先需要安装一下遗传算法工具箱,可参考这篇博客 MATLAB遗传算法工具箱安装包及安装方法(图解)_周杰伦今天喝奶茶了吗的博客-CSDN博客_matlab遗传算法工具箱安装 本模型可以结合自己的数据集进行

    2024年02月02日
    浏览(61)
  • Python实现GA遗传算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。 遗传算法(Genetic Algorithm,GA)最早是由美国的 John holland于20世纪70年代提出,该算法是根据大自然中生物体进化规律而设计提出的。是模拟达尔文生

    2024年02月14日
    浏览(227)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包