深度学习——神经网络中前向传播、反向传播与梯度计算原理

news2025/1/3 6:44:42

一、前向传播

1.1 概念

神经网络的前向传播(Forward Propagation)就像是一个数据处理的流水线。从输入层开始,按照网络的层次结构,每一层的神经元接收上一层神经元的输出作为自己的输入,经过线性变换(加权求和)和非线性变换(激活函数)后,将处理后的结果传递给下一层神经元。这个过程一直持续,直到输出层产生最终的输出结果。它是神经网络进行预测的主要步骤,数据按照正向的方向在网络中流动。

主要作用是根据给定的输入和当前神经网络的参数(权重和偏置),生成模型对该输入的预测输出。这个输出可以用于判断模型对输入数据的分类结果(如在分类任务中)或预测的数值(如在回归任务中)。

1.2 计算过程

以一个简单的全连接神经网络为例。

(1)输入层处理:将原始数据输入到神经网络的输入层。假设输入层有 n 个神经元,隐藏层有 m 个神经元,输出层有 p 神经元。输入数据为 x = ( x 1 , x 2 , … , x n ) x= (x_1, x_2, \ldots, x_n) x=(x1,x2,,xn)

(2)隐藏层计算:数据从输入层进入隐藏层后,通过线性组合和激活函数进行处理。对于输入层到隐藏层的连接,设权重矩阵为 W 1 W_1 W1 维度为(m x n),偏置向量为 b 1 b_1 b1 维度为(m x 1)。隐藏层的输入为 z 1 = W 1 x + b 1 z_1=W_1x+b_1 z1=W1x+b1 ,然后通过激活函数 f f f (如 ReLU( f ( z ) = m a x ( 0 , z ) f(z)=max(0,z) f(z)=max(0,z))、Sigmoid ( f ( z ) = 1 1 + e − z f(z)=\frac{1}{1+e^{-z}} f(z)=1+ez1)等)得到隐藏层的输出 a 1 = f ( z 1 ) a_1=f(z_1) a1=f(z1)

(3)输出层生成结果:隐藏层的输出作为输出层的输入,经过类似隐藏层的计算过程得到最终的输出。从隐藏层到输出层,设权重矩阵为 W 2 W_2 W2 维度为(p x m),偏置向量为 b 2 b_2 b2 维度为(p x 1)。输出层的输入为 z 2 = W 2 a 1 + b 2 z_2=W_2a_1+b_2 z2=W2a1+b2 ,再通过激活函数(如果需要)得到最终的输出 y = f ( z 2 ) y=f(z_2) y=f(z2)。例如,在一个多分类任务中,输出层可能使用 Softmax 激活函数将输出转化为各个类别上的概率分布。
在这里插入图片描述

二、反向传播

2.1 概念

反向传播(Backward Propagation)是一种用于计算神经网络中梯度的有效算法。它是基于链式法则,从输出层开始,反向计算损失函数关于网络中每个参数(权重和偏置)的梯度,以便在训练过程中更新参数,使得模型的预测输出与真实标签之间的损失函数值最小化。

主要作用是为神经网络的训练提供梯度信息。在训练过程中,通过使用梯度下降等优化算法,根据反向传播计算得到的梯度来更新网络的参数,使得神经网络能够逐渐学习到输入数据和输出标签之间的复杂关系,从而提高模型的预测准确性。

2.2 计算过程

首先,需要定义一个损失函数 L ,用于衡量模型的预测输出 y ^ \hat{y} y^ 与真实标签 y y y 之间的差异。

常见的损失函数有均方误差(MSE)(用于回归问题)
L = 1 n ∑ i = 1 n ( y ^ i − y i ) 2 L = \frac{1}{n} \sum_{i=1}^{n} (\hat{y}_i - y_i)^2 L=n1i=1n(y^iyi)2
交叉熵损失(Cross Entropy Loss) ( 用于分类问题)
L = − ∑ i = 1 n y i log ⁡ ( y ^ i ) L = -\sum_{i=1}^{n} y_{i} \log (\hat{y}_{i}) L=i=1nyilog(y^i)

交叉熵损失适用于多分类任务,也常结合 Softmax 使用。二元交叉熵损失(Binary Cross Entropy Loss)适用于二分类任务,也常结合 Sigmoid 使用。
L = − [ y log ⁡ ( y ^ ) + ( 1 − y ) log ⁡ ( 1 − y ^ ) ] L = -\left[ y \log(\hat{y}) + (1 - y) \log(1 - \hat{y}) \right] L=[ylog(y^)+(1y)log(1y^)]

在这里假设损失函数选用MSE,激活函数选用线性激活函数( f ( x ) = x f(x)=x f(x)=x)。

(1)以计算损失函数关于权重 W 2 W_2 W2 的梯度为例,根据链式法则 ∂ L ∂ W 2 = ∂ L ∂ z 2 ∂ z 2 ∂ W 2 \frac{\partial L}{\partial {W}_2} = \frac{\partial L}{\partial {z}_2} \frac{\partial {z}_2}{\partial {W}_2} W2L=z2LW2z2

  • 先计算 ∂ L ∂ z 2 \frac{\partial L}{\partial {z}_2} z2L ,它取决于损失函数的形式和激活函数的导数。由于 z 2 z_2 z2经过激活函数 f 得到 y ,即 y = f ( z 2 ) y=f(z_2) y=f(z2) 。所以 ∂ L ∂ z 2 = ∂ L ∂ y ⋅ ∂ y ∂ z 2 \frac{\partial L}{\partial z_2} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z_2} z2L=yLz2y

    • 对于 ∂ L ∂ y \frac{\partial L}{\partial y} yL,这取决于损失函数。

      • 对于 MSE 损失函数 L = 1 n ∑ i = 1 n ( y ^ i − y i ) 2 L = \frac{1}{n} \sum_{i=1}^{n} (\hat{y}_i - y_i)^2 L=n1i=1n(y^iyi)2 ,对 y 求偏导, ∂ L ∂ y = 2 n ∑ i = 1 n ( y ^ i − y i ) \frac{\partial L}{\partial y} = \frac{2}{n} \sum_{i=1}^{n} (\hat{y}_i - y_i) yL=n2i=1n(y^iyi)
    • 对于 ∂ y ∂ z 2 \frac{\partial y}{\partial z_2} z2y ,这取决于激活函数 f 的导数。

      • 例如,如果激活函数是线性函数 y = z 2 y=z_2 y=z2 (即( f ( z 2 ) = z 2 f(z_2)=z_2 f(z2)=z2)),那么 ∂ y ∂ z 2 = 1 \frac{\partial y}{\partial z_2}=1 z2y=1
      • 如果激活函数是 Sigmoid 函数 y = 1 1 + e − z 2 y = \frac{1}{1 + e^{-z_2}} y=1+ez21 ,那么 ∂ y ∂ z 2 = y ( 1 − y ) \frac{\partial y}{\partial z_2}=y(1-y) z2y=y(1y)
      • 如果激活函数是 ReLU 函数 y = max ⁡ ( 0 , z 2 ) y = \max(0, z_2) y=max(0,z2) ,当 z 2 > 0 z_2>0 z2>0 时, ∂ y ∂ z 2 = 1 \frac{\partial y}{\partial z_2}=1 z2y=1 ,当 z 2 ≤ 0 z_{2} \leq 0 z20 时, ∂ y ∂ z 2 = 0 \frac{\partial y}{\partial z_2}=0 z2y=0
    • ∂ L ∂ y \frac{\partial L}{\partial y} yL ∂ y ∂ z 2 \frac{\partial y}{\partial z_2} z2y相乘得到 ∂ L ∂ z 2 \frac{\partial L}{\partial {z}_2} z2L

  • 接着计算 ∂ L ∂ W 2 \frac{\partial L}{\partial {W}_2} W2L 。由前向传播得到的 z 2 = W 2 a 1 + b 2 z_2=W_2a_1+b_2 z2=W2a1+b2 ,可知 ∂ z 2 ∂ W 2 = a 1 \frac{\partial \mathbf{z}_2}{\partial {W}_2}=a_1 W2z2=a1 。所以可求出 ∂ L ∂ W 2 \frac{\partial L}{\partial {W}_2} W2L

(2)计算损失函数关于偏置 b 2 b_2 b2 的梯度。根据链式法则 ∂ L ∂ b 2 = ∂ L ∂ z 2 ⋅ ∂ z 2 ∂ b 2 \frac{\partial L}{\partial b_2} = \frac{\partial L}{\partial z_2} \cdot \frac{\partial z_2}{\partial b_2} b2L=z2Lb2z2 ∂ z 2 ∂ b 2 = 1 \frac{\partial z_2}{\partial{b}_2}=1 b2z2=1 ,可求出 ∂ L ∂ b 2 \frac{\partial L}{\partial b_2} b2L

(3)类似地,可以计算出关于其他权重和偏置的梯度,如 ∂ L ∂ W 1 \frac{\partial L}{\partial {W}_1} W1L ∂ L ∂ b 1 \frac{\partial L}{\partial b_1} b1L 等。
在这里插入图片描述

三、梯度下降

3.1 梯度下降

梯度下降(Gradient Descent)是一种常用的优化算法,广泛应用于神经网络以及众多机器学习模型的训练过程中,目的是通过迭代的方式来最小化目标函数(比如神经网络中的损失函数)的值。它的基本思想是沿着目标函数梯度(导数)的反方向更新模型参数,以逐步降低目标函数的值,直到找到一个局部最小值(在非凸函数情况下)或全局最小值(在凸函数情况下)。
在这里插入图片描述

对于一个损失函数(可微函数) L ( θ ) L(\theta) L(θ) (其中 θ \theta θ 表示模型的参数,如神经网络中的权重和偏置),函数在某一点的梯度 ∇ L ( θ ) \nabla L(\theta) L(θ) 表示函数在该点上升最快的方向。那么,梯度下降算法就是朝着与梯度相反的方向,即 − ∇ L ( θ ) -\nabla L(\theta) L(θ) 来更新参数。

具体的更新公式为 θ new = θ old − α ∇ L ( θ old ) \theta_{\text{new}} = \theta_{\text{old}} - \alpha \nabla L(\theta_{\text{old}}) θnew=θoldαL(θold)

其中 α \alpha α 是学习率(Learning Rate),它决定了每次更新参数的步长大小。如果学习率过大,可能会导致算法无法收敛,甚至发散;如果学习率过小,算法收敛速度会非常慢。
在这里插入图片描述
下面介绍一下常用的随机梯度下降(Stochastic Gradient Descent,SGD)。

每次迭代只使用一个随机选择的样本 ( x i , y i ) (x_i,y_i) (xi,yi) 来计算梯度并更新参数。即计算 ∇ L ( f ( x i ; θ ) , y i ) \nabla L(f(x_i; \theta), y_i) L(f(xi;θ),yi) ,然后 θ new = θ old − α ∇ L ( f ( x i ; θ ) , y i ) \theta_{\text{new}} = \theta_{\text{old}} - \alpha \nabla L(f(x_i; \theta), y_i) θnew=θoldαL(f(xi;θ),yi)

优点:计算速度快,因为每次只需要处理一个样本,能够快速地对参数进行更新,在处理大规模数据集时优势明显。

缺点:由于每次使用一个样本,梯度的估计会有很大的噪声,导致更新过程比较不稳定,可能会在最小值附近出现震荡,收敛速度可能会比较慢。

3.2 梯度爆炸

梯度爆炸(Gradient Explosion)是在训练神经网络时可能出现的一种不良现象。简单来说,就是在计算神经网络中参数的梯度时,梯度的值变得异常大,这会导致在使用基于梯度的优化算法(比如常见的随机梯度下降及其变种)去更新网络参数时,参数会以一种极不稳定且不合理的方式进行大幅度变化,进而使得网络难以收敛,甚至无法正常训练下去。

主要产生的原因有:

  • 深层网络的链式求导法则影响:在深度神经网络中,反向传播算法依据链式求导法则来计算梯度。对于一个有很多层的网络,每一层的误差对前面各层参数的梯度是通过层层相乘的方式来传递的。如果每一层的局部梯度都稍大于 1,那么经过多层传递后,梯度就会呈指数级增长,最终导致梯度爆炸。
  • 不合适的初始化参数:如果神经网络的权重初始化不当,比如将权重初始化为较大的值,那么在一开始进行反向传播计算梯度时,就很容易产生较大的梯度,后续随着训练迭代,这种较大梯度可能不断累积,引发梯度爆炸。
  • 激活函数选择问题:部分激活函数(如 Sigmoid 函数在输入值较大或较小时),其导数趋近于 0 或者非常大,当网络中较多神经元的激活函数处于这样的区间时,会导致梯度计算出现异常大的值,进而可能引发梯度爆炸情况。

3.3 梯度消失

梯度消失(Gradient Vanishing)同样是在神经网络训练过程中出现的棘手问题。它指的是在反向传播计算参数梯度时,梯度的值变得极小,近乎趋近于零,使得在利用基于梯度的优化算法更新网络参数时,参数几乎无法得到有效调整,进而影响网络的学习和收敛能力,导致网络难以训练出理想的性能表现。

主要产生的原因有:

  • 深层网络的链式求导法则影响:当网络层数较多时,如果每一层的局部导数都小于 1,经过多层相乘传递后,梯度就会呈指数级衰减。
  • 权重初始化不合理:如果权重初始值设置得太小,在开始反向传播计算梯度时,得到的梯度值本身就比较小,随着训练迭代,在经过多层网络的传递过程中,小梯度不断相乘累积,就容易造成梯度越来越小,直至出现梯度消失状况。
  • 激活函数特性:像 Sigmoid 函数,其导数在输入值较大或较小时趋近于 0。对于较深的神经网络,经过若干层后,神经元的输入很容易落入导数接近 0 的区间,这样后续反向传播计算梯度时,每层传递过来的梯度都会乘上这个极小的导数,从而使得梯度不断变小,最终出现梯度消失现象。Tanh 函数也存在类似的情况,在两端极限位置导数接近 0,同样可能引发梯度消失问题。

左边:梯度消失现象。右边:梯度爆炸现象。
在这里插入图片描述

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

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

相关文章

秒鲨后端之MyBatis【2】默认的类型别名、MyBatis的增删改查、idea中设置文件的配置模板、MyBatis获取参数值的两种方式、特殊SQL的执行

别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01;! ! ! 下篇更新&#xff1a; 秒鲨后端之MyBatis【3】自定义映射resultMap、动态SQL、MyBatis的缓存、MyBatis的逆向工程、分页插件。 默认的类型别名 MyBatis的增删改查 添加 <!--int insertUs…

瑞芯微全新芯片平台RK3506优势详解,高集成低功耗,为工业而生 触觉智能测评

RK3506是瑞芯微Rockchip在2024年第四季度全新推出的Arm嵌入式芯片平台&#xff0c;三核Cortex-A7单核Cortex-M0多核异构设计&#xff0c;CPU频率达1.5Ghz, M0 MCU为200Mhz。 而RK3506芯片平台下的工业级芯片型号RK3506J&#xff0c;具备-40-85℃的工业宽温性能、发热量小&#…

AIOps平台的功能对比:如何选择适合的解决方案?

定义与概念 AIOps&#xff0c;即人工智能运维&#xff08;Artificial Intelligence for IT Operations&#xff09;&#xff0c;是将人工智能技术应用于 IT 运维领域&#xff0c;以实现自动化、智能化的运维管理。它通过整合大数据、机器学习等先进技术&#xff0c;对海量运维数…

Python + 深度学习从 0 到 1(03 / 99)

希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持&#xff01; ⭐ 神经网络的数据表示 – 张量 你可能对矩阵很熟悉&a…

Lumos学习王佩丰Excel第二十三讲:饼图美化与PPT图表

一、双坐标柱形图的补充知识 1、主次坐标设置 2、主次坐标柱形避让&#xff08;通过增加两个系列&#xff0c;挤压使得两个柱形挨在一起&#xff09; 增加两个系列 将一个系列设置成主坐标轴&#xff0c;另一个设成次坐标轴 调整系列位置 二、饼图美化 1、饼图美化常见设置 …

基于Vue+SSM+SpringCloudAlibaba书籍管理系统

功能要求 一、登录功能&#xff08;http://localhost:8080/#/login&#xff09; 输入账号和密码(admin/admin)进行登录&#xff1a; 如果密码错误&#xff0c;给出提示信息 如果密码正确&#xff0c;跳转到主页 账号或密码错误&#xff1a; 账号密码正确&#xff1a;跳转到…

【优先算法】滑动窗口 --(结合例题讲解解题思路)(C++)

目录 ​编辑 1.什么是滑动窗口&#xff1f; 2. 滑动窗口例题 2.1 例题1&#xff1a;长度最小的子数组 2.1.1 解题思路 2.1.2 方法一&#xff1a;暴力枚举出所有的子数组的和 2.1.3 方法二&#xff1a;使用 “同向双指针” 也就是滑动窗口来进行优化 2.2 例题2&#xff1a;无重…

VS Code 从命令行启动

在 VS Code 中&#xff0c;code 命令允许你在命令行中快速打开文件、文件夹或新窗口。 安装 原本地址&#xff1a;https://code.visualstudio.com/docs/setup/mac 使用 使用 code 命令 打开文件&#xff1a;你可以通过在命令行输入 code 文件名 来直接打开一个文件。 打开文…

微服务-配置管理

文章目录 1.什么是配置管理2.配置共享添加共享配置拉取共享配置 3.配置热更新添加配置到Nacos配置热更新 4.动态路由监听Nacos配置变更 1.什么是配置管理 到目前为止我们已经解决了微服务相关的几个问题&#xff1a; 微服务远程调用微服务注册、发现微服务请求路由、负载均衡…

ArrayList 和LinkedList的区别比较

前言 ‌ArrayList和LinkedList的主要区别在于它们的底层数据结构、性能特点以及适用场景。‌ArrayList和LinkedList从名字分析&#xff0c;他们一个是Array&#xff08;动态数组&#xff09;的数据结构&#xff0c;一个是Linked&#xff08;链表&#xff09;的数据结构&#x…

MySQL--》如何在SQL中巧妙运用函数与约束,优化数据处理与验证?

目录 函数使用 字符串函数 数值函数 日期函数 流程函数 约束 外键约束 约束规则 函数使用 函数是指一段可以直接被另一段程序调用的程序或代码&#xff0c;在mysql当中有许多常见的内置函数&#xff0c;接下来开始对这些内置函数及其作用进行简单的讲解和使用&#xf…

一文大白话讲清楚CSS盒子模型和块级格式化上下文(BFC)

一文大白话讲清楚CSS盒子模型和块级格式化上下文&#xff08;BFC&#xff09; 1.啥是个CSS盒子 鞋盒你家总有吧&#xff0c;方方正正&#xff0c;有长度有高度。css盒子跟这个八九不离十当我们编写html页面时&#xff0c;写了很多的元素&#xff0c;比如"div",&quo…

Docker 快速搭建 GBase 8s数据库服务

1.查看Gbase 8s镜像版本 可以去到docker hub网站搜索&#xff1a;gbase8s liaosnet/gbase8s如果无法访问到该网站&#xff0c;可以通过docker search搜索 docker search gbase8s2.拉取Gbase 8s镜像 以下演示的版本是目前官网最新版本Gbase8sV8.8_3.5.1 docker pull liaosn…

密钥登录服务器

1. 生成 SSH 密钥对 如果您还没有生成密钥对&#xff0c;可以使用以下命令生成&#xff1a; ssh-keygen 在 root 用户的家目录中生成了一个 .ssh 的隐藏目录&#xff0c;内含两个密钥文件&#xff1a;id_rsa 为私钥&#xff0c;id_rsa.pub 为公钥。 在提示时&#xff0c;您可…

王佩丰24节Excel学习笔记——第二十讲:图表基础

【以 Excel2010 系列学习&#xff0c;用 Office LTSC 专业增强版 2021 实践】 【本章技巧】 课件图片有问题&#xff0c;不能随隐藏熟悉各个图表小部件的功能&#xff0c;需要修改都是选中右键进行更改。 一、认识图表中的元素 图表标题&#xff1a;主坐标&#xff08;横坐标&…

华为交换机配置本地端口流量镜像

端口镜像&#xff08;Port Mirroring&#xff09;是网络监控的一种重要技术&#xff0c;通过复制流经特定端口的报文&#xff0c;并将其传送到指定的观察端口&#xff0c;以便对网络流量进行分析和监控。下面将详细介绍如何在华为交换机上配置本地端口镜像&#xff0c;以N:1镜像…

IDEA设置作者信息 日期等

file -> setting 或 ctrl alt s找到如下 然后添加注释即可 可以直接编辑5处的文字&#xff0c;在 author 后放自己的名字即可 /*** author 你的名字* date ${DATE} ${TIME})*/当然 整体不止这些 &#xff0c;看下面的描述中&#xff0c;还有很多其他选项 也可以 4 这…

【stm32can】

can时钟 can波特率计算&#xff08;位同步内容&#xff09; ss是固定的1tq&#xff0c; pts&#xff0c;pbs1&#xff0c;pbs2是用户设定值 同步时间段的理解有误&#xff1f; 原文出处 数据帧 遥控帧

【论文笔记】Contrastive Learning for Sign Language Recognition and Translation

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Contrastive Learning for…

springboot514基于SpringBoot的家电销售展示平台(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装家电销售展示平台软件来发挥其高效地信息处理的作用&#x…