反向传播 — 简单解释

news2025/1/15 17:40:28

一、说明

     关于反向传播,我有一个精雕细刻的案例计划,但是实现了一半,目前没有顾得上继续充实,就拿论文的叙述这里先起个头,我后面将修改和促进此文的表述质量。

    

二、生物神经元

        大脑是一个由大约100亿个神经元组成的复杂网络。每个神经元都有输入通道(树突)和一个输出通道(轴突),将其连接到大约 10,000 个其他神经元。神经元通过电化学信号进行交流。如果这些电输入的总和高于某个阈值,则神经元会激活或放电,这意味着它会沿着轴突将电化学信号传输到其他神经元,这些神经元的树突附着在其任何轴突上。如果总和低于阈值,则神经元不会触发。

        人工神经网络(ANN)是一种大致基于大脑架构的机器学习算法。它通过人工神经元对生物神经元进行建模。人工神经网络是人工神经元的网络(逐层连接)。

        上面有时简明扼要地表示为:

        人工神经元从数据集接收一个或多个数字输入,每个输入乘以一个权重。这些权重就像重要因素一样,影响每个输入的整体影响。然后神经元执行两个步骤:

  1. 加权总和:它计算加权输入的总和。
  2. 激活:它将非线性激活函数应用于此总和。此函数根据神经元输入的组合强度确定神经元是否“触发”(输出非零值)。

        然后,生成的输出被传递到网络中的下一个神经元或成为最终结果。

        最初,每个神经元的每个输入的权重是随机分配的,或者使用一些启发式或迁移学习。除了与每个输入相关的权重外,还为每个神经元分配了一个额外的权重。该权重称为偏差项,与偏差项相关的输入值为 -1。这是一个偏置节点。在训练过程中,所有权重都会反复更新,直到神经元输出与输出实际值之间的差异最小化。神经元输出与实际输出之间的这种差异称为误差。

        通过加权和和非线性激活函数,人工神经网络对数据执行一系列数学运算。这个过程允许他们根据他们在数据中发现的模式进行学习和预测。

        深层和浅层神经网络

        除了输入层和输出层外,神经网络还可以具有一个或多个中间层的神经元。这些层称为隐藏层。浅层神经网络只有一个隐藏层。具有多个隐藏层的网络称为深度神经网络。

        因此,在人工神经网络中,随着每层神经元数和神经元层数的增加,权重的数量也会增加。人工神经网络的训练或拟合包括从训练数据中迭代学习其权重的最佳值。使用技术优化权重

        错误

        包括神经网络在内的所有 ML 模型都会学习输入数据(称为训练数据)中的模式(模型或数学方程),并使用这些模式来预测看不见的数据(测试数据)的目标值。预测值与实际值不匹配将计为误差。

        神经网络(就像线性回归一样)从他们的错误或错误中学习。

        对于给定的数据集,通常使用量化网络所犯错误的数学函数。这种函数称为成本函数或损失函数。成本函数量化给定数据点的 DNN 输出与实际输出的接近程度。

        常见的损失函数是回归任务的均方损失,分类任务的交叉熵损失。损失函数必须是可微的。

        均方误差 (MSE):

三、人工神经网络的训练

        该错误仅在网络的输出层变得明显。成本函数相对于网络中每个权重的梯度(偏导数)用于根据梯度下降算法指定的权重更新规则或其变体更新网络的特定权重。

        函数的导数是函数值(输出)的变化与其输入(数据)的变化之比。正导数意味着函数输出随着输入的增加而增加,反之亦然。

        梯度下降是一种函数最小化算法。它用于最小化网络的成本函数/损失/错误。也就是说,梯度下降计算 epoch 之后网络权重的更新(epoch 是训练数据集的传递),直到我们得到一组误差函数梯度最小(理想情况下为零)的权重。我们在这里使用的原理是,当函数处于最小值或最大值时,函数的梯度为零。

        让我们将其可视化为其中一个权重 wi、相应的成本函数 J 和一个称为学习率的参数 η。

        

梯度下降

在梯度下降中更新权重(参数)的公式为:

        梯度下降权重更新规则

        高学习率(大η)会导致权重的大幅更新,可能会超过最小值并卡在局部最小值。相反,低学习率(小η)会导致收敛缓慢,甚至卡在起点附近。正确选择学习率对于高效培训很重要。

四、微积分的链式法则

        如何计算损失函数的偏导数是直截了当的,因为权重定向连接到输出层或输出神经元,但是我们如何计算其偏导数,而不是直接连接到输出层的权重,即隐藏层中输入的权重。

        链式法则是计算复合函数(如神经网络)导数的强大工具。

        正如我们所看到的,神经网络是一个复合函数(即使是单个神经元也是权重和输入相乘的复合函数,将这些乘积相加,应用激活函数),其中每一层都获取前一层的输出并应用转换。然后将最终输出与所需结果进行比较,从而得出成本函数值。

        链式法则指出,复合函数 f(g(x)) 的导数等于 f′(g(x)∗g′(x)。 即,复合函数 f(g(x)) 的导数等于函数 f 相对于 g(x) 的导数和函数 g 相对于 x 的导数的乘积。

        反向传播递归应用链式法则来计算网络中每个权重的成本函数梯度,然后根据梯度下降算法的规则更新该权重。

        让我们以一个非常小的神经网络为例,它只有一个输入神经元 x、一个隐藏神经元和一个输出神经元。净输出为 y′,实际输出为 y,因此误差 J(w) 为 1/n*(y−y′)^2(假设 MSE 为成本函数)。

        小型神经网络

        现在要找到 J wrt y′ 的导数,链式法则说我们需要找到 y′ wrt 的导数,它自己的输入参数,即 w2 和 z,(从网络中可以看出,y′ 是应用于 w2 和 z 乘积的 SoftMax 的组合),而 z 反过来是一个复合函数,由 sigmoid 组成,应用于 w1 和 x 的函数积。因此,我们需要计算以下导数,

        因此,链式法则的递归应用允许我们训练非常深入的神经网络,其中包含数十亿层和数十亿(数万亿)参数。一个深度(层数)和宽度(每层神经元数)足够大的深度神经网络,在足够的数据上训练足够多的纪元,可以近似任何函数。这就是为什么今天的生成式人工智能模型已经学习了英语或印地语等自然语言的模型,或者他们已经学会了生成逼真的艺术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1513796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HD_VG_130M数据集预处理

数据集介绍 HD_VG_130M是文生视频常用数据集,其视频来源于油管,可通过该谷歌云盘链接下载官方文件,如下所示,其中metafiles中包含20个json文件,请先将其全部下载到本地,假设保存地址为"E:/HD_VG_130M…

Android Gradle 开发与应用 (六) : 创建buildSrc插件和使用命令行创建Gradle插件

1. 前言 前文中,我们介绍了在Android中,如何基于Gradle 8.2,创建Gradle插件。这篇文章,我们以buildSrc的方式来创建Gradle插件。此外,还介绍一种用Cmd命令行的方式,来创建独立的Gradle插件的方式。 1.1 本…

开源大数据集群部署(十五)Zookeeper集群部署

作者:櫰木 1、集群规划 主机版本角色系统用户hd1.dtstack.com3.7.1followerzookeeperhd2.dtstack.com3.7.1leaderzookeeperhd3.dtstack.com3.7.1followerzookeeper 2、zookeeper kerberos主体创建 在生产中zk服务端和客户端票据可以设置成不通名称或相同名称&am…

钉钉与实在智能达成战略合作,实在Agent助力钉钉AI助理成为“新质生产力”

3月12日,浙江实在智能科技有限公司(简称“实在智能”)与钉钉(中国)信息技术有限公司(简称“钉钉”)签署战略合作协议,达成战略合作伙伴关系。 未来,基于双方创新领先的技…

普乐蛙VR航天体验馆设备VR体验带你登陆月球

周末节假日这款设备人流量chao多!景区?游乐场?电玩城爆滿,小编去了一次可是天天惦记着,学习/竞速/休闲/末日/kongbu,各种题材好过瘾! 亲测不踩雷设备推荐!华夏方舟——VR小白必玩的大…

学习Java的第九天

本章将学习什么是类的无参、带参方法又是什么 一、什么是类的无参方法 类是由一组具有相同属性和共同行为的实体抽象而来。对象执行的操作是通过编写类的方法实现的。显而易见,类的方法是一个功能模块,其作用是“做一件事情”。 1、类的方法必须包括以…

吴恩达机器学习笔记 十七 通过偏差与方差诊断性能 正则化 偏差 方差

高偏差(欠拟合):在训练集上表现得也不好 高方差(过拟合):J_cv要远大于J_train 刚刚好:J_cv和J_train都小 J_cv和J_train与拟合多项式阶数的关系 从一阶到四阶,训练集的误差越来越小…

走进AI新时代:织信低代码的实践与启示

最近 AIGC 很火,在各个领域都玩出了一些新花样。 比如在“低代码”领域,可以通过 AI 自动生成一个网站门户。 但这会带来开发效率的提升吗?如果 AI 能快速开发网站、APP等业务应用,那么 AI 生成能否完全取代低代码的可视化配置&a…

Java学习笔记------常用API

Math类 常用方法: 1. publicb static int abs(int a) 获取参数绝对值 2. publicb static double ceil(double a) 向上取整 3. publicb static floor(double a) 向下取整 4.public static int round(float a) 四舍五入 5. publicb static int max…

慎投!又新增1区SCI期刊被“On Hold”,共15本期刊正在调查中!

【SciencePub学术】近日,经小编查询,又新增一本SCI期刊被“暂停调查”!该期刊隶属于TAYLOR & FRANCIS旗下,是一本JCR1区中科院4区的预警期刊。期刊详情如下: 01 新增“On Hold”期刊详情 BIOENGINEERED ISSN&…

【系统架构设计师】系统工程与信息系统基础 01

系统架构设计师 - 系列文章目录 01 系统工程与信息系统基础 文章目录 系列文章目录 前言 一、系统工程 ★ 二、信息系统生命周期 ★ 信息系统建设原则 三、信息系统开发方法 ★★ 四、信息系统的分类 ★★★ 1.业务处理系统【TPS】 2.管理信息系统【MIS】 3.决策支持系统…

java算法第22天 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 思路: 之前做过普通二叉树求共工作祖先的问题,有两种情况, 第一种是:如果一个节点的左孩子和右孩子分别包含p,q节点,那么这个节点是p和q的最近公共祖先。第二种是&#xff…

C++17中引入STL算法执行策略

C算法是一组预定义函数,可以对容器(例如数组、向量和列表)执行各种操作。这些算法具有定义的执行策略(have a defined execution policy),决定它们如何执行以及如何与底层硬件交互。STL算法执行策略首先在C17标准中引入。 C17标准引入了三种新的执…

07 数据结构之图

# Makefile CCgcc CFLAGS -g -Wall SRCStest.c graph.c link_queue.c OBJS$(SRCS:.c.o) #variable replace APPtestall:$(OBJS) #指定一个目标, 不然默认目标不会检查依赖文件的时间戳$(CC) $(SRCS) -o $(APP) .PH…

Docker安装Prometheus监控

环境初始化 关闭防火墙 setenforce 0 vim /etc/selinux/config ##################内部代码################### SELINUXdisabled #关闭防火墙 ############################################ 安装docker #卸载yum源之前的docker安装包 sudo yum remove docker docker-clie…

如果你准备进入安全行业,入门应该做的

教育阶段 网络安全是一门高级学科。网络安全人员通常来自三个领域:系统管理、网络、开发。 假设你没有任何这些方面的背景,并且你需要从零开始。如果你在学生阶段的年龄? 这时有三种方法可选:大学、职业学校、资质证书 建议读计…

意大利数据监管机构对Sora展开调查

意大利数据保护监管机构 Garante3月8日宣布,将对 OpenAI 新推出的视频人工智能模型 Sora 展开隐私调查。 监管机构虽然没有对 OpenAI 提出任何具体指控,但表示正在研究 Sora 对意大利(包括欧盟)个人数据使用可能产生的潜在影响&am…

OceanBase中binlog service 功能的试用

OBLogProxy简介 OBLogProxy即OceanBase的增量日志代理服务,它可与OceanBase建立连接并读取增量日志,从而为下游服务提供了变更数据捕获(CDC)的功能。 关于OBLogProxy的详尽介绍与具体的安装指引,您可以参考这篇官方OB…

【C++那些事儿】深入理解C++类与对象:从概念到实践(下)| 再谈构造函数(初始化列表)| explicit关键字 | static成员 | 友元

📷 江池俊:个人主页 🔥 个人专栏:✅C那些事儿 ✅Linux技术宝典 🌅 此去关山万里,定不负云起之望 文章目录 1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit 关键字 2. static成员2.1 概念…

unicloud delete 删除

delete 删除 unicloud 删除大概分为两种 一种是 通过指定文档ID删除 语法如下 collection.doc(_id).remove()还有一种是条件查找文档然后直接批量删除 语法如下 collection.where().remove()反正总归是先查找到指定数据,然后使用remove()函数删除 示例如下 collection.doc(…