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

相关文章

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python处理大量Excel文件的十个技巧分享

《Python处理大量Excel文件的十个技巧分享》每天被大量Excel文件折磨的你看过来!这是一份Python程序员整理的实用技巧,不说废话,直接上干货,文章通过代码示例讲解的非常详细,需要的朋友可... 目录一、批量读取多个Excel文件二、选择性读取工作表和列三、自动调整格式和样式四、智能数据清洗五、

JDK9到JDK21中值得掌握的29个实用特性分享

《JDK9到JDK21中值得掌握的29个实用特性分享》Java的演进节奏从JDK9开始显著加快,每半年一个新版本的发布节奏为Java带来了大量的新特性,本文整理了29个JDK9到JDK21中值得掌握的... 目录JDK 9 模块化与API增强1. 集合工厂方法:一行代码创建不可变集合2. 私有接口方法:接口

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

Spring Boot 事务详解(事务传播行为、事务属性)

《SpringBoot事务详解(事务传播行为、事务属性)》SpringBoot提供了强大的事务管理功能,通过@Transactional注解可以方便地配置事务的传播行为和属性,本文将详细介绍Spr... 目录Spring Boot 事务详解引言声明式事务管理示例编程式事务管理示例事务传播行为1. REQUI

Java如何将文件内容转换为MD5哈希值

《Java如何将文件内容转换为MD5哈希值》:本文主要介绍Java如何将文件内容转换为MD5哈希值的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java文件内容转换为MD5哈希值一个完整的Java示例代码代码解释注意事项总结Java文件内容转换为MD5

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到