依赖反向传播改进神经网络数据处理的精确度

2024-04-30 22:18

本文主要是介绍依赖反向传播改进神经网络数据处理的精确度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在前几节,我们一直强调,人工智能运行的一个基本原理是,由人分析具体问题然后抽象出问题与数据间的逻辑关系,这种逻辑关系往往是一个数学模型。计算机的任务是根据大量数据的分析来确定数学模型中的各种参数。前面我们详细讨论过的一个例子就是二维平面上点集的划分。

这里写图片描述

如上图,由人对问题进行抽象分析后得出,两组数据可以用一条通过圆点的直线分割开来。直线所对应的方程就是问题与数据间的逻辑关系,也就是数学模型,模型的参数就是直线的斜率,这条直线与横坐标成多大的夹角才能更好的将两组数据区分开来。计算机的任务就是根据输入的大量点坐标,然后根据给定算法步骤把这个夹角计算出来。计算的办法就是开始先随机设置这个夹角值,然后检测直线区分数据的效果,如果数据集中总共有100个点,其中60个点属于红点,但是当前直线只能将30个点识别为红点,那么误差就是30个点,根据这个误差,算法调节直线夹角,使得调整后能正确识别的红点数量越来越多,这就是人工智能运转的基本原理。

前面说过,神经网络模型中,需要修正的参数是神经元链路之间的权重值,问题在于如何修改,如下图,假定最后神经元输出结果,跟正确结果比对后得到一个误差,那么我们如何根据误差来修正W(1,1) 和 W(2,1)呢?

这里写图片描述

神经网络模型的问题在于,任何一个节点链路权重的改变都会对最终结果产生影响。所以当我们拿到计算结果产生的误差后,不可能仅仅修改其中某一个权重,而是所有权重都要相应修改。接下来问题是,权重参数有多个,而最终误差只有一个,那么如何把误差分配给每个权重进行调整呢?一种做法是把误差平均分配给每个权重,如下图:

这里写图片描述

但这种大锅饭机制不合理,因为W(1,1)权重大,传送给输出节点的信号量就强,因此最终结果的误差来自于这条链路的贡献相对就大,因此要调整的话,这个权重的调整幅度肯定要比下面链路权重的调整幅度要大,因此合理的做法是,根据权重的比值进行相应的调整,因此网络要把误差的四分之三传递给W(1,1), 四分之一传递给W(2,1),于是误差反向传播的模式如下图:

这里写图片描述

这个误差回传机制继续运用到后续节点链路上,这就是所谓的反向传导。当前模型中,输出节点只有一个,如果输出节点有多个怎么办?例如下图:

这里写图片描述

上图网络有两个输出节点,两个节点的输出结果跟正确结果都会产生偏差,其处理方式跟一个节点时一样,每个节点拿到误差后,根据进入其节点的链路权重,等比例的返回给后面节点。如果第一个节点的输出结果为O1, 对应的正确结果为T1, 那么第一个输出节点的误差就是E1 = T1 - O1.从上图可以看出E1会根据W(1,1)和W(2,1)的相互比值,同比例的返回给第一层的节点1和节点2.误差E2的分配也同理。这么算来,用于调整权重W(1,1)的误差比值为:

这里写图片描述

同理用于调整权重W(2,1)的误差比值为:

这里写图片描述

举个实际例子,假定E1= 9, W(1,1) = 6, W(2,1) = 3, 那么用于调整W(1,1)的误差值为 9 * (6 / (6+3)) = 6, 用于调整W(2,1)的误差值为 9 *(3/(3+6)) = 3。同理E2也依据相同原则分配给W(1,2)和W(2,2).

如果网络有三层,那么误差以相同机制反向传播,如下图:

这里写图片描述

误差先从最外层节点开始,根据链路的权重比例返回给中间隐藏层节点1,隐藏层节点1和输入层节点1之间,在根据两者的链接链路比重把中间层节点1接收到的误差同比例分配给权重W(i,h)。如果还有更多的层级,这个反向传播机制就一直进行下去。我们用一个具体实例把误差的反向传播机制走一遍。

这里写图片描述

最外层输出两个输出节点的误差分别为1.5和0.5,中间层节点1与最外层节点1之间的链路权重为2.0,中间层节点1与最外层节点2的链路权重为1.0,中间层节点2与最外层节点1的链路权重为3.0,中间层节点2与最外层节点2的链路权重为4.0,于是最外层节点1反向传导给中间层节点1的误差为 1.5 * (2 / (2+3)) = 1.5 * (2/5) = 0.6, 最外层节点2反向传导给中间层节点1的误差为 0.5 * (1 / (1+4)) = 0.5 *(1/5) = 0.1, 因此中间层节点1接收到的总误差为0.7.

中间层节点1与最外层节点2间链路权重为1.0,因此最外层节点1反向传播给中间层节点2的误差为1.5 * (3.0 / (2.0 + 3.0)) = 1.5 * (3/5) = 0.9,中间层节点2与最外层节点2的链路权重为4.0,因此最外层节点2反向传播给中间层节点2的误差为0.5 * (4.0 / (1.0 + 4.0)) = 0.5 * (4/5) = 0.4, 由此中间层节点2获得的误差为1.3.

我们以同样的方法将误差从中间层传到回最外层,如下图:

这里写图片描述

最外层节点1与中间层节点1的链路权重为3.0,最外层节点2余中间层节点1链路权重为2.0,因此中间层节点1反向传导给最外层节点1的误差为 0.7 * (3.0 / (3.0+2.0) ) = 0.7 * (3/5) = 0.42, 中间层节点1反向传导给最外层节点2的误差为 0.7 * (2.0 / (3.0 + 2.0) ) = 0.28.

最外层节点1与中间层节点2的链路权重为1.0,最外层节点2与中间层节点2的链路权重为7.0,因此中间层节点2反向传导给最外层节点1的误差为 1.3 * (1.0 / (1.0 + 7.0) ) = 1.3 * (1/8) = 0.1625, 中间层节点2反向传导给最外层节点2的误差为1.3 * (7.0 / (7.0 + 1.0) ) = 1.1375.

由此最外层节点1获得的总误差为 0.42 + 0.1625 = 0.5825, 最外层节点2获得的误差为0.28 + 1.1375 = 1.4175.

通过反向传播,我们就能把最外层节点获得的误差传导给神经网络每一层的每个节点,每个节点再根据获得的误差调整它与下一层网络节点的链路权重,这个误差回传过程就是神经网络中经常提到的反向传播机制。

下一节我们看看如何使用矩阵快速实现反向传播误差的计算。

更详细的讲解和代码调试演示过程,请点击链接

更多技术信息,包括操作系统,编译器,面试算法,机器学习,人工智能,请关照我的公众号:
这里写图片描述

这篇关于依赖反向传播改进神经网络数据处理的精确度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

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

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

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

PHP7扩展开发之依赖其他扩展

前言 有的时候,我们的扩展要依赖其他扩展。比如,我们PHP的mysqli扩展就依赖mysqlnd扩展。这中情况下,我们怎么使用其他扩展呢?这个就是本文讲述的内容。 我们新建立一个扩展,名字叫 demo_dep , 依赖之前的say扩展。 在demo_dep扩展中,我们实现demo_say方法。这个方法调用say扩展的say方法。 代码 基础代码 确保say扩展的头文件正确安装到了php

用einsum实现MultiHeadAttention前向传播

einsum教程网站Einstein Summation in Numpy | Olexa Bilaniuk's IFT6266H16 Course Blog 编写训练模型 import tensorflow as tfclass Model(tf.keras.Model):def __init__(self, num_heads, model_dim):super().__init__

Go 依赖注入库dig

简介 今天我们来介绍 Go 语言的一个依赖注入(DI)库——dig。dig 是 uber 开源的库。Java 依赖注入的库有很多,相信即使不是做 Java 开发的童鞋也听过大名鼎鼎的 Spring。相比庞大的 Spring,dig 很小巧,实现和使用都比较简洁。 快速使用 第三方库需要先安装,由于我们的示例中使用了前面介绍的go-ini和go-flags,这两个库也需要安装: $ go g

机器学习之监督学习(三)神经网络

机器学习之监督学习(三)神经网络基础 0. 文章传送1. 深度学习 Deep Learning深度学习的关键特点深度学习VS传统机器学习 2. 生物神经网络 Biological Neural Network3. 神经网络模型基本结构模块一:TensorFlow搭建神经网络 4. 反向传播梯度下降 Back Propagation Gradient Descent模块二:激活函数 activ