BP神经网络学习内容分享:前向传播与后向传播

2024-09-01 22:28

本文主要是介绍BP神经网络学习内容分享:前向传播与后向传播,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       在深度学习和神经网络领域,BP(Backpropagation,反向传播)神经网络是一种非常基础且广泛应用的网络结构。它通过前向传播进行预测,并通过反向传播算法调整网络权重以优化预测结果。本文将详细介绍BP神经网络的前向传播和反向传播过程,并展示一个简单的BP神经网络实现。

一、前向传播过程

        1.基本概念

        前向传播是神经网络中信息从输入层经过隐藏层到输出层的传递过程。在这个过程中,每一层的神经元接收前一层神经元的输出作为输入,并通过激活函数处理后输出给下一层。

        2.公式表示

        假设我们有一个简单的三层神经网络(输入层、一个隐藏层、输出层),每层神经元均使用Sigmoid激活函数。如图所示就是前向传播图:          (1)输入层到隐藏层

       其中,xi 是输入层第 i 个神经元的输出,wij 是从输入层第 i 个神经元到隐藏层第 j 个神经元的权重,bj 是隐藏层第 j 个神经元的偏置,zj 是隐藏层第 j 个神经元的线性组合输出,aj 是经过Sigmoid激活函数后的输出。

         (2)隐藏层到输出层

       过程与输入层到隐藏层类似,只是输入变为了隐藏层的输出aj。

           3.前向传播包括以下几个步骤:

         (1)将输入数据送入输入层,每个输入节点接收一个输入数据值。

         (2)将输入数据与输入层与隐藏层之间的连接权重相乘,并将结果加权求和,得到隐藏层神经元的输入值。

         (3)对隐藏层的输入值进行激活函数的处理,将其转化为隐藏层神经元的输出值。

         (4)重复步骤2和3,将隐藏层的输出值与隐藏层与输出层之间的连接权重相乘,并加权求和,得到输出层神经元的输入值。

        (5)对输出层的输入值进行激活函数的处理,将其转化为输出层神经元的输出值。

        (6)输出层的输出值即为BP网络对输入数据的预测结果。

二、反向传播算法

      1.链式法则

      反向传播算法的核心是链式法则,用于计算损失函数关于每个权重的梯度。如图所示反向传播计算:

       2.梯度下降

       梯度下降是一种优化算法,用于最小化损失函数。在BP神经网络中,我们通过反向传播算法计算梯度,然后使用梯度下降法更新权重。

       3.反向传播计算

       (1)计算输出层的误差

       其中,yk 是真实输出,ok 是网络预测输出。

       (2)计算隐藏层的误差

       (3)计算输出层的误差

        其中,η 是学习率。

        4.后向传播包括以下几个步骤:

       (1)计算网络输出层的误差,即预测值与真实值之间的差异。

       (2)根据误差计算输出层神经元的梯度,用于调整输出层与隐藏层之间的连接权重。

       (3)根据输出层梯度和隐藏层的输出值,计算隐藏层神经元的梯度,用于调整隐藏层与输入层之间的连接权重。

       (4)根据梯度和学习率,调整连接权重,使得误差最小化。

       (5)重复以上步骤,直到网络的预测结果达到预期或训练迭代次数达到设定值。

三、BP神经网络代码实现

        下面是一个简单的BP神经网络实现,使用Python编写,并手动计算权重更新。

import numpy as np  def sigmoid(x):  return 1 / (1 + np.exp(-x))  def sigmoid_derivative(x):  return x * (1 - x)  # 初始化参数  
input_size = 3  
hidden_size = 4  
output_size = 2  np.random.seed(1)  
weights_input_hidden = np.random.uniform(-1, 1, (input_size, hidden_size))  
weights_hidden_output = np.random.uniform(-1, 1, (hidden_size, output_size))  
bias_hidden = np.zeros(hidden_size)  
bias_output = np.zeros(output_size)  # 前向传播  
def forward_pass(X):  hidden_layer_input = np.dot(X, weights_input_hidden) + bias_hidden  hidden_layer_output = sigmoid(hidden_layer_input)  final_output_input = np.dot(hidden_layer_output, weights_hidden_output) + bias_output  final_output = sigmoid(final_output_input)  return final_output, hidden_layer_output  # 反向传播和权重更新  
def backward_pass(X, y, output, hidden_output):  # 计算输出层误差  output_error = y - output  d_output = output_error * sigmoid_derivative(output)  # 计算隐藏层误差  hidden_error = d_output.dot(weights_hidden_output.T) * sigmoid_derivative(hidden_output)  # 更新输出层权重和偏置  weights_hidden_output += hidden_output.T.dot(d_output) * 0.1  bias_output += np.sum(d_output, axis=0, keepdims=True) * 0.1  # 更新输入层到隐藏层权重和偏置  weights_input_hidden += X.T.dot(hidden_error) * 0.1  bias_hidden += np.sum(hidden_error, axis=0, keepdims=True) * 0.1  # 示例数据  
X = np.array([[0.1, 0.2, 0.3]])  
y = np.array([[0.9, 0.1]])  # 训练网络  
for _ in range(10000):  output, hidden_output = forward_pass(X)  backward_pass(X, y, output, hidden_output)  # 测试网络  
print("Output after training:", forward_pass(X)[0])

四、总结

        本文详细介绍了BP神经网络的前向传播和反向传播算法,并通过Python代码实现了一个简单的BP神经网络。通过不断迭代训练,网络能够逐渐优化其权重,从而提高预测的准确性。

这篇关于BP神经网络学习内容分享:前向传播与后向传播的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128218

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识