深度学习笔记(4):由浅入深,计算图与神经网络,前向传播与反向传播的剖析

深度学习——反向传播 本指南将带您穿越这扇门,从宏观的蓝图出发,深入其自动学习的循环过程,用显微镜剖析其最核心的反向传播机制,并最终掌握其背后关于“创造”的深刻法则。回到我们的AI学生,它之所以能从“菜鸟”成长为“大师”,不仅因为它拥有不知疲倦的学习循环(The Process),更因为它遵循了一套高效的学习方法论(The Rules),而这套方法论的核心,就是能够深刻反思、精准归因的“神经系统”——我们将以一个“AI学生”的成长之旅作为贯穿全文的主线,见证它如何从一个一无所知的模型,通过学习,最终成为解决复杂问题的专家。 阅读详情

前言

本文所列举的简单的例子可能用神经网络解释显得有点大材小用(overkill),不过,这样讲解是很简单的,也是更加易于消化理解的。所以既然只是为了体会思想,请尽量跟着思路就好。

简单的神经网络的图解作为引入(Introduction)

比如这个简单的式子J=3×(a+bc)J=3×(a+bc)J=3×(a+bc)
通过拆解成三层结构u=bc,v=a+u,J=3vu=bc,v=a+u,J=3vu=bc,v=a+u,J=3v,我们可以认为这是一个简单的的神经网络。
在这里插入图片描述

前向传播(forward propagation)

那么当我们指定a,b,ca,b,ca,b,c的数值的之后如图所示,比如我们把a,b,ca,b,ca,b,c分别赋值为5,3,2,我们怎么得到JJJ呢,用前向传播的观点就是,我们一步步的向前计算并且传播。第一步实现u=bcu=bcu=bc,计算出u的数值是6,然后v=a+uv=a+uv=a+u计算出v为11,之后再J=3vJ=3vJ=3v算得J为33。
也就是说,前向传播的过程,实际上是在做一个数值的计算过程。传播完成后,我们会得到每一个节点位置的运算数据。我们来看看这会如何被我们利用到。

反向传播(back propagation)

之后我们再来看在这个简单的模型上做一下暂时看来没有什么意义的事情,解释一下反向传播。
比如我们现在需要知道JJJ关于a,b,ca,b,ca,b,c的导数,那么我们一种想法是,我们可以通过一层层求导,从JJJ传递回来。
从JJJ到v,就是一个J=3vJ=3vJ=3v对于vvv求导的过程,得到dJdu\frac{dJ}{du}dudJ​为3;然后对于v=a+uv=a+uv=a+u再求导,得到dvda\frac{dv}{da}dadv​、dvdu\frac{dv}{du}dudv​值为1,进而dvda\frac{dv}{da}dadv​=dJdv\frac{dJ}{dv}dvdJ​×dvda\frac{dv}{da}dadv​等于3(其实反向传播的同时体现的就是求导的链式法则),以此类推…有些小伙伴可能会问,
那么我为什么还要前向传播一点点算出中间每一个节点的值呢?
其实我们继续往下反向传播就会发现,当我们传递到u=bcu=bcu=bc的时候,再次求导就会发现,当我们对于b求导的时候,得到的数值和a有关,当我们对于a求导时,这个数值便与b有关。也就是说,当我们进行反向传播求得导函数的时候,这个函数的变量是可能与上一层,(更靠近输入层的紧挨着的那一段有关的)。我们可以想到,如果在更加复杂的神经网络中,既然这个情况可能会发生在居中的位置,那么如果我们不进行提前的正向传播,让每一个位置都有数值,那么在求导的反向传播时就会遇到困难,使得效率降低。这也就是我理解要进行正向传播的原因之一。

在这里插入图片描述

我们为什么要了解这些,我们要干什么

我们想要使用梯度下降法,将每个参数做迭代的变化,我们需要得到代价函数JJJ对于每一个参数的导数表达式。而提前了解清楚概念,对于我们理解后面的知识是大有帮助的。

一些更加实际的例子

我们再次回到logistic回归当中来。
我们现在要做的是:
使用神经网络模型,使用梯度下降法,搞定参数。当然这里面做了简化,xxx是二维的只有两个属性,进而www也是二维的。
既然确定了梯度下降法,那么我们要做的事情,其实更简要地说就是再搞清楚JJJ对于www1、www2、bbb的导数dwdwdw1、dwdwdw2、dbdbdb,然后我们便可以使用梯度下降法对于www1、www2、bbb做www=www-a×dwa×dwa×dw的迭代,得到最优的解。
在这里插入图片描述那如图所示,我们将其表达为上图的神经网络模型,试图去得到两个www的导数。
我们先正向传播,再反向传播,反向传播的过程中,我们看到了一些很好的事情发生了。
在这里插入图片描述我们可以看到,dLda\frac{dL}{da}dadL​算出来的结果是 -ya+1−y1−a\frac{y}{a}+\frac{1-y}{1-a}ay​+1−a1−y​
然后我们再计算dadz\frac{da}{dz}dzda​得到结果是a(1−a)a(1-a)a(1−a)这是sigmod函数非常好的一个性质。然后和传播的上一次的导数值链乘,得到dz=a−ydz=a-ydz=a−y
在之后计算dzdw1\frac{dz}{dw1}dw1dz​、dzdw2\frac{dz}{dw2}dw2dz​和dzdb\frac{dz}{db}dbdz​,再与传播的上一次的导数值链乘,得到dwdwdw1、dwdwdw2和dbdbdb。至此任务完成,接下来梯度下降循环迭代即可。

小结

1)神经网络本质是一种函数的复合+组合。我们要一层层看待
2)前向传播和反向传播的存在是为了更高效的计算出导数。因为有时候某一层的导数值和函数值存在依赖。
3)sigmod函数的求导之后的结果可以用其自身来表示。可香了(a′=a(1−a)a'=a(1-a)a′=a(1−a))

智能体在车联网中的应用:第13天 深度学习入门:前向传播与反向传播的数学本质与PyTorch/TensorFlow实践 本文深入解析多层感知机(MLP)的核心计算过程——前向传播与反向传播。前向传播通过输入数据的逐层加权计算和激活函数变换得到预测结果,反向传播则利用链式法则逆向计算参数梯度以优化网络。文章详细推导了单隐藏层MLP的数学原理,并通过PyTorch和TensorFlow/Keras双框架实践演示:使用PyTorch手动构建训练流程,展示梯度计算与参数更新;利用Keras高阶API快速实现模型定义与训练。两种实现方式均以Fashion-MNIST数据集为例,完整呈现了MLP从理论到实践的开发过程,为深度学习入门提供 阅读详情

相关推荐

【机器学习入门】189.[第15章 深度学习基础与训练技巧] 前馈神经网络从零实现:反向传播不再神秘

这篇文章通过数学推导和Python代码实现,深入解析了神经网络的核心机制——反向传播。主要内容包括: 从矩阵视角构建神经网络结构,避免手动管理大量参数 前向传播过程的数学本质与激活函数选择技巧 损失函数的正确实现方法及数值稳定性处理 反向传播的链式法则应用与工程实现优化 梯度下降算法的学习率调节策略 文章采用"理论推导+代码实践"的方式,通过纯Python实现3层神经网络,完整展示了从结构搭建到训练优化的全流程。重点解决了新手常见问题如维度管理、梯度消失、数值不稳定等痛点,并提供了反向传

1201

神经网络的前向传播和反向传播公式及代码实现

1.前向传播: 以三层神经网络为例,图中input为0.9,0.1,0.8,我们不用数字,用字母代替,设输入为x1,x2,x3,隐藏层的第一个神经元输出Ohidden1=S[(w11x1+b1)+(w21x2+b2)+(w31*x1+b3)](原文中未考虑偏置,这里我们加上偏置),S为激活函数sigmoid函数,其他神经元也是如此,用归纳的公式写出第l层第j个神经元的输出为: 也可以用矩阵表示...

xin1996_的博客 4216

【AI 赋能:Python 人工智能应用实战】2. 深度学习基石:从感知机到反向传播,NumPy实现神经网络框架

摘要:本文系统解析深度学习的核心基础,从生物启发的神经元模型到神经网络的数学原理,构建完整知识体系。理论部分阐释麦卡洛克-皮茨神经元模型的工作机制,通过NumPy实现AND/OR逻辑门并可视化决策边界,揭示神经网络的布尔逻辑表达能力。深入剖析前向传播的矩阵运算本质,用维度校验表明确Y=σ(W·X+b)的维度匹配规则;拆解反向传播四步流程,结合链式法则解释梯度从输出层到隐藏层的传播机制。实战模块基于NumPy手写双层神经网络框架,实现激活函数对比实验,演示Sigmoid的梯度消失问题,通过梯度检查验证反向传播

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1076

深度学习神经网络基础知识(三)前向传播,反向传播和计算图

本文讲述神经网络基础知识,具体细节讲述前向传播,反向传播和计算图,同时讲解神经网络优化方法:权重衰减,Dropout等方法,最后进行Kaggle实战,具体用一个预测房价的例子使用上述方法。

qq_51957239的博客 1万+

第1章 实践基础——算子

算子(operator)是构建复杂机器学习模型的基础组件,包含一个函数的前向函数和反向函数,即函数在机器学习代码中定义为一个算子。有了算子,我们就可以很方便地通过算子来搭建复杂的神经网络模型,而不需要手工计算梯度...

qq_62640789的博客 2603

PowerBuilder 9 遗留系统逆向实战:3款反编译工具对比与关键DLL破解

本文深入探讨了PowerBuilder 9遗留系统的逆向工程实战,对比分析了PBKiller、PB DeCompiler和Shudepb三款反编译工具的核心功能与适用场景,并详细解析了关键DLL破解技术。通过IDA和OllyDbg等工具的应用,提供了从静态解构到动态追踪的完整逆向方法论,帮助开发者有效维护老旧PB系统。

cucanqi9387的博客 726

深度学习深入浅出

深度学习中最常用的神经网络结构是多层感知机(Multilayer Perceptron,MLP),它是由多层神经元组成的网络,每层之间相互连接,其中输入层接收数据,输出层输出结果,中间的隐藏层则对输入数据进行非线性变换和特征提取。深度学习的模型需要大量的数据进行训练,而且数据的质量也需要较高。如果数据的质量不高,比如包含较多的噪声或错误,那么深度学习的效果将会受到很大的影响。深度学习中最基本的模型是神经网络(Neural Network),它的结构模仿了人类的神经系统,包含多个层级(Layer)。

夏沫の梦的博客 724

golang 线上事故

golang 线上事故 最近公司要做大促的一些活动。并且单量,qps持续上涨。之前使用的是django python 语言做的一个服务端。目前已经部署的国家里面最多的国家会有300+个实例。大促期间还可能会增加一个实例数。这么多的实例部署,回滚的时间都会特变长,除了问题也不好定位。并且如此多的一个机器,连接数* 实例数也会导致DB等其他服务扛不住这么大的并发。所以决定上go服务解决性能问题。 ...

lcf枫的博客 867

【动手学深度学习】前向传播、反向传播和计算图

【动手学深度学习】前向传播、反向传播和计算图

weixin_45057858的博客 1173

04.7. 前向传播、反向传播和计算图

在自动微分之前,即使是对复杂模型的微小调整也需要手工重新计算复杂的导数, 学术论文也不得不分配大量页面来推导更新规则。然而当实现该算法时,我们只考虑了通过前向传播(forward propagation)所涉及的计算。前向传播(forward propagation或forward pass) 指的是:按顺序(从输入层到输出层)计算和存储神经网络中每层的结果。在本节中,我们将通过一些基本的数学和计算图, 深入探讨反向传播的细节。对于前向传播,我们沿着依赖的方向遍历计算图并计算其路径上的所有变量。

weixin_45063703的博客 928

Speedtree学习笔记(案例)——拥有多种材质的植物如何导入使用(以草为例)

注:Speedtree无论保存还是导入模型其存储路径不可有中文。 第一步拆分草的模型 根据所需的材质去拆分(例:假若草的果实,茎秆和叶子是不同的材质那么就需拆分为三份;假若画的全部颜色及材质一样就没有必要去拆分模型) 第二步导入草的模型 在Mesh面板中依次导入草的模型——Do nothing additional right now 第三步扩大草的生长区域范围(可省略)...

L人青的博客 5078

DL之BP: BP神经网络的简介、基础知识(优化目标/梯度下降/链式法则)、反向传播算法原理的各种可视化案例解读之详细攻略

​ DL之BP: BP神经网络的简介、基础知识(优化目标/梯度下降/链式法则)、反向传播算法原理的各种可视化案例解读之详细攻略 目录 BP神经网络的简介 BP神经网络的原理 BP神经网络的简介 深度学习(Deep Learning, DL)或阶层学习(hierarchical learning)是机器学习的技术和研究领域之一,通过建立具有阶层结构的人工神经网络(Artifitial Neural Networks, ANNs),在计算系

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 1万+

Xilinx SDK工程编译、链接、调试注意事项

1、添加工程 启动SDK时选取workspace,如下图所示: 对应的workpace文件夹中会生成如下几个文件: 如果当前workspace是首次加载工程,SDK会进入启动界面 点击Import Project,导入已有工程 点击Browse,添加工程路径,一个完整的工程包含一个bsp文件夹,一个HW文件夹,和一个src文件夹(添加C功能函数) 点击Fini...

Autumn_He的博客 1万+

【深度学习-Day 17】神经网络的心脏:反向传播算法全解析

在上一篇文章【深度学习-Day 16】中,我们了解了梯度下降法——这个引领我们寻找损失函数最小值的强大工具。我们知道了,只要能计算出损失函数关于模型参数(权重 $w$ 和偏置 $b$)的梯度,我们就能通过不断迭代来更新参数,让模型变得越来越好。但是,对于一个拥有成千上万甚至数百万参数的深度神经网络来说,如何高效地计算这些梯度呢?手动推导显然是不现实的。这时,神经网络的“心脏”——**反向传播算法(Backpropagation, BP)**——就登场了。

吴师兄大模型的博客 1381

深度学习中的反向传播:原理、类型、应用与历史

在深度学习的领域中,反向传播(Backpropagation)是神经网络的重要组成部分,自21世纪初以来,它的发展极大地推动了深度学习算法的广泛应用。本文将深入探讨反向传播的核心概念、应用场景以及发展历程。

2501_90323865的博客 1048

UE4_SpeedTree Shader源码分析

目录 1.UMaterialExpressionSpeedTree::Compile 2.Compiler->SpeedTree 3.GetSpeedTreeVertexOffset 4.Scene中的SpeedTree应用 (Scene->UpdateSpeedTreeWind) 5.GetSpeedTreeVertexOffsetInner 由于之后做风场,也需要在S...

zzgyy123的专栏 2143

扒开动态计算图的“外衣”:Autograd源码剖析与自定义反向传播实战

动态计算图和Autograd是深度学习中的核心技术,分别负责模型的计算流程和自动求导。动态计算图在运行时根据输入数据动态生成计算流程,相比静态计算图具有更高的灵活性,尤其适用于处理可变长度序列和不同分辨率图像等复杂数据。Autograd则通过自动跟踪张量操作,构建计算图并在反向传播时自动计算梯度,极大简化了模型训练过程。深入理解这些技术的原理和实现细节,有助于优化模型性能,解决复杂问题。例如,动态计算图在处理大规模数据时能显著提高效率,而掌握Autograd的工作原理则能有效避免梯度消失或爆炸等问题。此外,

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 799

MiniOSD DIY记

最近迷上了航模,研究了很多东西,感觉路走的长了还是适当要停下脚步休息下总结下。 这次DIY的是一块OSD设备,主要用于航模图传的叠加显示,原理也很简单就是atmel atmega328p+MAX7456芯片,网上卖的成品基本上都是一个原理图。 原理图 我按照我自己的需要做了适当的更改,去掉了DC-DC电路,直接用5V输入,因为摄像头都是5V的,所以DC-DC不是很有必要,体积上更加小了点, 打...

memoff的博客 7584

人工智能入门-深度学习前向传播与反向传播理论公式剖析与实战代码案例详解,从公式到代码实战

前向传播(forward propagation或forward pass) 指的是:按顺序(从输入层到输出层)计算和存储神经网络中每层的结果。假设输入样本是 x∈Rd, 并且我们的隐藏层不包括偏置项。zW1x其中W(1)∈Rh×d 是隐藏层的权重参数。hϕz隐藏变量h也是一个中间变量。假设输出层的参数只有权重W(2)∈Rq×h, 我们可以得到输出层变量,它是一个长度为q的向量oW2h假设损失函数为l,样本标签为y,我们可以计算单个数据样本的损失项,Lloy。

Elias_white的博客 1046

深度学习核心机制:计算图与反向传播的工程实现详解

自动微分是现代深度学习框架的核心技术,它通过构建计算图来自动计算梯度,从而高效地优化神经网络参数。其原理基于链式法则,将复杂的函数求导分解为一系列基本操作的局部梯度计算,并在有向无环图中反向传播。这项技术的价值在于解放了开发者,使其无需手动推导繁琐的梯度公式,能够专注于模型结构设计,极大地加速了模型研发与迭代。在工程实践中,PyTorch和TensorFlow等框架的autograd机制正是基于此原理,广泛应用于计算机视觉、自然语言处理等场景。理解计算图与反向传播,是掌握深度学习框架工作原理、进行模型调试和

weixin_30875157的博客 363

瑞萨CS+仿真器高级配置指南:从原理到实战优化RX系列MCU调试

在嵌入式系统开发中,仿真器是进行早期验证和深度调试的核心工具。它通过精确模拟目标微控制器的指令集、内存和外设行为,构建了一个虚拟的硬件沙盒环境。其工作原理在于对CPU核心、时钟系统和外设接口的软件模拟,使开发者能在无物理硬件时进行代码逻辑验证、内存布局规划和时序分析。这项技术的核心价值在于大幅降低开发成本、加速问题定位,并支持复杂场景的复现与测试。在瑞萨RX系列MCU开发中,CS+集成开发环境内置的仿真器功能尤为强大。本文聚焦于**指令解码缓存**和**外设时钟比率**等关键配置的深度解析,阐述如何通过优化

cmff98425的博客 607

纯NumPy手写神经网络:从计算图到梯度反向传播的底层原理

神经网络本质是张量空间中的可微分计算图,其核心在于前向传播构建数据流、反向传播依据链式法则计算梯度。NumPy作为零封装的数值计算基石,强制暴露矩阵乘法、广播机制与维度对齐等底层细节,使学习率调控、梯度消失、权重初始化等关键问题从抽象概念变为可调试的数组操作。通过手写线性层、Sigmoid激活与均方误差损失,开发者能直观理解dW = dZ @ X.T的维度逻辑、σ'(z) = σ(z)(1-σ(z))的高效复用,以及批量平均对梯度缩放的数学必要性。这种基于NumPy的‘解剖式’实践,是掌握PyTorch/T

weixin_30667831的博客 230

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

计算图与反向传播:从工程视角理解深度学习训练核心机制

很多人第一次接触反向传播时,都会陷入一个误区:以为它只是一个用来计算梯度的数学公式。于是,他们花大量时间去推导链式法则,记忆复杂的偏导公式,试图理解每一个符号的含义。然而,当你真正开始构建一个神经网络,或者尝试修改一个现有模型时,你会发现,真正决定你能否顺利工作的,往往不是那些公式,而是对“计算图”和“梯度流动”的直观理解。 我见过不少开发者,他们能熟练地调用 model.backward() ,却说不清楚梯度在每一层是如何累积和传递的;他们能复现论文里的模型,但当模型不收敛、梯度爆炸或消失时,却无从下手。

weixin_29053577的博客 236

深度学习反向传播原理与实现详解

反向传播是深度学习的核心算法,通过链式法则高效计算神经网络参数的梯度。该技术解决了多层感知机(MLP)等模型的参数优化问题,是训练卷积神经网络(CNN)和现代深度学习模型的基础。从数学本质看,反向传播是多元微积分中链式法则的工程实现,能够将输出层误差逐层回传至各网络层。典型应用场景包括图像分类、语音识别等领域,其中LeNet等经典网络都依赖这一机制进行参数更新。实践中需要注意梯度消失和梯度爆炸问题,可通过ReLU激活函数、Batch Normalization等技术进行优化。理解反向传播的底层原理,有助于开

weixin_29043895的博客 253

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

深度学习训练核心:计算图与反向传播原理详解

在深度学习中,梯度是指导模型参数优化的核心向量,它通过反向传播算法高效计算。反向传播本质上是链式法则在计算图上的系统化应用,计算图作为描述运算过程的有向无环图,将复杂模型分解为基本操作,清晰展示了数据与梯度的流动路径。理解这一机制对于调试模型、实现自定义层以及优化训练过程至关重要,它能帮助开发者从根本上分析梯度消失、梯度爆炸等常见问题的根源。掌握计算图与反向传播,意味着从框架使用者迈向模型设计者,是深入理解现代深度学习框架(如PyTorch、TensorFlow)底层原理的关键一步。

cuiji1279的博客 461

cisco any connect 4.4 windows

cisco any connect 4.4 windows 客户端 ''''

上一篇: 深度学习笔记(2):sigmoid函数
下一篇: 深度学习笔记(5):第一课第二周的作业题第一部分详解与代码
Timothyxxx
博客等级 码龄8年 79粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值