当前位置: 首页 > article >正文

卷积神经网络 - 梯度和反向传播算法

在卷积网络中,参数为卷积核中权重以及偏置。和全连接前馈网络类似,卷积网络也可以通过误差反向传播算法来进行参数学习。本文我们从数学角度,来学习卷积神经网络梯度的推导和其反向传播算法的原理。

一、梯度:损失函数 L 关于第 𝑙 层的卷积核𝑾 和 偏置B的偏导数

在全连接前馈神经网络中,梯度主要通过每一层的误差项 𝛿 进行反向传播, 并进一步计算每层参数的梯度。

在卷积神经网络中,主要有两种不同功能的神经层:卷积层和汇聚层。而参数为卷积核以及偏置,因此只需要计算卷积层中参数的梯度。

不失一般性,对第 𝑙 层为卷积层,第 𝑙 − 1 层的输入特征映射为 𝒳^(𝑙−1) ∈ R^(𝑀×𝑁×𝐷),通过卷积计算得到第𝑙层的特征映射净输入𝒵^(𝑙) ∈R^(𝑀′×𝑁′×𝑃)。第𝑙层的第𝑝(1 ≤ 𝑝 ≤ 𝑃)个特征映射净输入:

其中 𝑾 ^(𝑙,𝑝,𝑑) 和 𝑏^(𝑙,𝑝) 为卷积核以及偏置。第 𝑙 层中共有 𝑃 × 𝐷 个卷积核和 𝑃 个偏 置,可以分别使用链式法则来计算其梯度。

根据卷积的导数计算公式,可以参考:

卷积神经网络 - 卷积的变种、数学性质-CSDN博客

损失函数 L 关于第 𝑙 层的卷积核 𝑾 ^(𝑙,𝑝,𝑑) 的偏导数为:

其中,

为损失函数关于第 𝑙 层的第 𝑝 个特征映射净输入 𝒁(𝑙,𝑝) 的偏导数。

同理可得,损失函数关于第 𝑙 层的第 𝑝 个偏置 𝑏^(𝑙,𝑝) 的偏导数为:

在卷积网络中,每层参数的梯度依赖其所在层的误差项 𝛿^(𝑙,𝑝)。

二、卷积神经网络的反向传播算法

卷积层和汇聚层中误差项的计算有所不同,因此我们分别计算其误差项。

1、汇聚层

当第 𝑙 + 1 层为汇聚层时,因为汇聚层是下采样操作,𝑙 + 1 层的每个神经元的误差项 𝛿 对应于第 𝑙 层的相应特征映射的一个区域。𝑙 层的第 𝑝 个特征映射中的每个神经元都有一条边和 𝑙 + 1 层的第 𝑝 个特征映射中的一个神经元相连。

根据链式法则,第 𝑙 层的一个特征映射的误差项 𝛿^(𝑙,𝑝),只需要将 𝑙 + 1 层对应特征映射的误差项 𝛿^(𝑙+1,𝑝) 进行上采样操作(和第 𝑙 层的大小一样),再和 𝑙 层特征映射 的激活值偏导数逐元素相乘,就得到了 𝛿^(𝑙,𝑝)。

这段话比较抽象,大家可以慢慢理解,着重理解前后层之间误差项的关系:

第 𝑙 层的第 𝑝 个特征映射的误差项 𝛿^(𝑙,𝑝) 的具体推导过程如下:

其中 为第 𝑙 层使用的激活函数导数,up 为上采样函数(up sampling),与汇聚层中使用的下采样操作刚好相反。

如果下采样是最大汇聚,误差项 𝛿^(𝑙+1,𝑝) 中每个值会直接传递到前一层对应区域中的最大值所对应的神经元,该区域中其他神经元的误差项都设为 0。

如果下采样是平均汇聚,误差项 𝛿^(𝑙+1,𝑝) 中每个值会被平均分配到前一层对应区域中的所有神经元上。

2、卷积层

当𝑙 + 1层为卷积层时,假设特征映射净输入𝒵^(𝑙+1) ∈ R^(𝑀′×𝑁′×𝑃),其中第𝑝(1 ≤ 𝑝 ≤ 𝑃)个特征映射净输入:

其中𝑾^(𝑙+1,𝑝,𝑑) 和𝑏^(𝑙+1,𝑝) 为第𝑙+1层的卷积核以及偏置。第𝑙+1层中共有𝑃×𝐷 个卷积核和 𝑃 个偏置。

第 𝑙 层的第 𝑑 个特征映射的误差项 𝛿^(𝑙,𝑑) 的具体推导过程如下:

可以看到,第l层的误差项,还是可以通过第l+1层的误差项推导而来,就是所谓的反向传播算法。和前馈全连接神经网络的反向传播算法有所不同,但是思路是类似的,理解这一点很关键。

三、附:卷积神经网络中的上采样和下采样

在卷积神经网络(CNN)中,上采样和下采样是两个关键操作,用于调整特征图的空间尺寸,从而达到提取有用特征和恢复空间分辨率的目的。下面详细解释这两个概念,并举例说明:

1. 下采样(Downsampling)

定义与目的
下采样主要用于减少特征图的空间尺寸。常见方法有最大池化平均池化

  • 最大池化:在一个预定义区域内(如2×2),取最大值。
  • 平均池化:在该区域内取平均值。

作用

  • 降维和降低计算量:减小后续层输入的尺寸,从而减少参数量和计算量。
  • 增强局部不变性:对小幅平移、旋转和尺度变化不敏感,提高特征的鲁棒性。

例子
假设我们有一张特征图尺寸为 28×28×64(64个通道),使用 2×2 最大池化,步幅为 2。池化操作会把每个2×2区域中的最大值选出,从而将尺寸缩小到 14×14×64。这一步骤使得网络更关注局部最显著的特征,同时降低计算资源消耗。

2. 上采样(Upsampling)

定义与目的
上采样用于增大特征图的空间尺寸,常见方法包括最近邻插值双线性插值以及转置卷积(反卷积)

  • 最近邻插值:简单地复制最近的像素值。
  • 双线性插值:根据周围像素的线性关系计算新像素值。
  • 转置卷积:通过可学习的卷积核将低分辨率特征图“反向”映射到高分辨率空间,同时恢复部分细节信息。

作用

  • 恢复空间细节:例如在语义分割或图像生成任务中,需要将经过下采样后的特征图恢复到与输入图像相同的分辨率,以便对每个像素做出预测或生成高分辨率图像。

例子
在语义分割任务中,一个常见的网络(如U-Net)首先对输入图像(例如 224×224)经过多层卷积和池化操作进行下采样,最终得到较小的特征图(比如 28×28)。接着,通过上采样(例如转置卷积)将这些特征图逐步恢复到原始尺寸224×224,以便为每个像素分配一个类别标签。上采样过程中,网络不仅简单放大图像,还通过学习对细节进行重建,从而生成更精细的分割结果。

3. 综合说明

  • 下采样
    将输入特征图通过池化操作等方式缩小尺寸,提取局部最重要的特征,同时降低计算量。
    例子:从 28×28×64 的特征图通过2×2最大池化变为 14×14×64。

  • 上采样
    将下采样后的特征图通过插值或转置卷积等方法放大,还原出细节和空间信息。
    例子:在语义分割中,将 28×28×F 的特征图逐步上采样到 224×224,最终得到与原图大小一致的分割图。

这两个操作在网络中通常处于对称结构中(例如编码器-解码器结构):编码器部分通过下采样提取抽象特征,解码器部分通过上采样恢复空间分辨率,最终实现像素级的预测或图像生成。

相关文章:

卷积神经网络 - 梯度和反向传播算法

在卷积网络中,参数为卷积核中权重以及偏置。和全连接前馈网络类似,卷积网络也可以通过误差反向传播算法来进行参数学习。本文我们从数学角度,来学习卷积神经网络梯度的推导和其反向传播算法的原理。 一、梯度:损失函数 L 关于第 …...

MATLAB—从入门到精通的第四天:函数、绘图与数学魔法

MATLAB—从入门到精通的第四天:函数、绘图与数学魔法 欢迎来到第四天的 MATLAB 奇幻之旅!今天的内容将包含 函数编写、数据搬运(导入/导出)、让数据跳舞(绘图),以及 数学咒语(代数、…...

人工智能:企业RAG方案

一、LangChain FAISS、Milvus / Weaviate介绍 在企业 RAG (Retrieval-Augmented Generation)方案中,LangChain FAISS 和 Milvus / Weaviate 都是用于向量检索(Vector Search)的核心工具。两者的核心区别在于 存储方…...

【leetcode hot 100 39】组合总和

错误解法一&#xff1a;每一次回溯都遍历提供的数组 class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {List<List<Integer>> result new ArrayList<List<Integer>>();List<Integer> te…...

基于 Java 和深度学习的图像分类应用实践

前言 随着人工智能技术的飞速发展,深度学习在图像处理、自然语言处理等领域展现出强大的能力。然而,许多开发者认为深度学习只能依赖 Python 的框架(如 TensorFlow 或 PyTorch)。事实上,Java 生态也有成熟的深度学习库,如 Deeplearning4j(DL4J),适合企业级应用场景。…...

SpringMVC全局异常处理机制

异常处理机制 异常处理的两种方式&#xff1a; 编程式异常处理&#xff1a;是指在代码中显式地编写处理异常的逻辑。它通常涉及到对异常类型的检测及其处理&#xff0c;例如使用 try-catch 块来捕获异常&#xff0c;然后在 catch 块中编写特定的处理代码&#xff0c;或者在 f…...

基于32单片机的无人机直流电机闭环调速系统设计

标题:基于32单片机的无人机直流电机闭环调速系统设计 内容:1.摘要 本文针对无人机直流电机调速需求&#xff0c;设计了基于32单片机的无人机直流电机闭环调速系统。背景在于无人机应用场景不断拓展&#xff0c;对电机调速精度和稳定性要求日益提高。目的是开发一套高精度、响应…...

如何实现园区零碳管理?安科瑞EMS3.0推动园区低碳转型

当工业园区电费年耗超千万、碳排数据成监管红线&#xff0c;传统“拉闸限电”式管理已无法应对双碳倒计时——如何让光伏、储能、充电桩“听懂指令”&#xff0c;让每一度电创造3倍价值&#xff1f;187*210*98*782 一、零碳园区管理的三大痛点 1. 能源错配严重&#xff1a;风…...

Python Django入门(创建其他网页)

在本章中&#xff0c;你将学习如何使用 Django&#xff08;http://djangoproject.com/ &#xff09;来开发一个名为“学习笔记”&#xff08;Learning Log&#xff09;的项目&#xff0c;这是一个在线日志系统&#xff0c;让你能够记录所学习的有关特定主题的知识。 我们将为这…...

Error: The resource name must start with a letter

Error: The resource name must start with a letter 这个错误通常是由于资源名称&#xff08;如布局文件、字符串资源、ID 等&#xff09;不符合命名规则导致的。Android 资源名称必须遵循以下规则&#xff1a; 必须以字母开头&#xff08;不能以数字或下划线开头&#xff09…...

2025年- G23-Lc97-104.二叉树的最大深度-java版(递归调用左右子树)

1.题目描述 2.思路 要用到max函数&#xff0c;返回的时候返回左右子树的最大值。其次要递归调用左右子树&#xff0c;寻找最大深度。 在每个递归返回时&#xff0c;我们 必须把当前节点的深度算进去&#xff0c;否则我们只计算了子树的深度&#xff0c;而没有包括当前节点。 …...

Powershell WSL Windows系统复制数据到ubuntu子系统系统

从本地D盘下拷贝数据到ubuntu子系统下 Powershell 管理员打开执行 /mnt/d 此处是本地Windows系统的路径表示/opt ubutu 子系统目录 wsl -d Ubuntu-22.04 -u root -- bash -c cp -rf /mnt/d/nginx.conf /opt/从ubuntu子系统中拷贝数据到本地D盘下 Powershell 管理员打开执行…...

零基础上手Python数据分析 (7):Python 面向对象编程初步

写在前面 回顾一下,我们已经学习了 Python 的基本语法、数据类型、常用数据结构和文件操作、异常处理等。 到目前为止,我们主要采用的是 面向过程 (Procedural Programming) 的编程方式,即按照步骤一步一步地编写代码,解决问题。 这种方式对于简单的任务已经足够,但当程序…...

到底爱不爱我

L2-3 到底爱不爱我 古代少女有了心上人时&#xff0c;会悄悄折一条树枝&#xff0c;揪那枝上的叶子&#xff0c;揪一片叶子念一句“爱我”&#xff0c;再揪一片念一句“不爱我”…… 这样揪落最后一片叶子的时候&#xff0c;看看是停在“爱”还是“不爱”。 但聪明的慧娘一眼洞…...

Python 3.13.2安装教程(安装包)Python 3.13.2 快速安装指南

文章目录 前言一 、Python 3.13.2下载二、Python 3.13.2安装教程1.运行安装程序2.选择安装方式3.自定义安装选项4.开始安装5.安装完成6.打开程序7.验证安装 前言 Python 作为一门通用编程语言&#xff0c;在全球拥有庞大的用户群体。其简洁易读的语法和丰富的库&#xff0c;使…...

CentOS 7 64位安装Docker

以下是在已有的 CentOS 7 64 位虚拟机上安装 Docker 并配置华为镜像源的详细步骤&#xff1a; 1. 备份原有 Yum 源&#xff08;可选&#xff0c;建议操作&#xff09; # 备份原有仓库文件 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backu…...

Linux驱动学习笔记(六)

平台总线 1.平台总线模型也叫platform总线模型&#xff0c;平台总线是Linux系统虚拟出来的总线, 引入总线的概念可以对驱动代码和设备信息进行分离。平台总线模型将一个驱动分成了两个部分&#xff1a;platform_device和platform_driver&#xff0c;例如可使用文件device.c和d…...

35、deque 容器的扩容机制

1. deque 的底层数据结构 deque&#xff08;双端队列&#xff09;的底层实现通常由分块连续内存和中央控制结构组成。具体结构如下&#xff1a; 分块存储&#xff1a;元素被存储在多个固定大小的内存块&#xff08;称为缓冲区&#xff09;中&#xff0c;每个缓冲区可容纳多个…...

透析Vue的nextTick原理

nextTick 是 Vue.js 中的一个核心机制&#xff0c;用于在 下一次 DOM 更新周期后 执行回调函数。它的核心原理是 利用 JavaScript 的事件循环机制&#xff08;Event Loop&#xff09;&#xff0c;结合微任务&#xff08;Microtask&#xff09;或宏任务&#xff08;Macrotask&am…...

windows单节点验证victoriametrics结合AlertManger实现告警推送webhook

安装victoriametrics https://docs.victoriametrics.com/single-server-victoriametrics/下载地址 https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.113.0找到​​victoria-metrics-windows-amd64-v1.113.0.zip​​ https://github.com/VictoriaMetric…...

鸿蒙保姆级教学

鸿蒙&#xff08;HarmonyOS&#xff09;是华为推出的一款面向全场景的分布式操作系统&#xff0c;支持手机、平板、智能穿戴、智能家居、车载设备等多种设备。鸿蒙系统的核心特点是分布式架构、一次开发多端部署和高性能。以下是从入门到大神级别的鸿蒙开发深度分析&#xff0c…...

w264民族婚纱预定系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…...

Compose 实践与探索十五 —— 自定义触摸

1、自定义触摸与一维滑动监测 之前我们在讲 Modifier 时讲过如下与手势检测相关的 Modifier&#xff1a; Modifier.clickable { } Modifier.combinedClickable { } Modifier.pointerInput {detectTapGestures { } }这里对以上内容就不再赘述了&#xff0c;直接去讲解更复杂的…...

炫酷的3D按钮效果实现 - CSS3高级特性应用

炫酷的3D按钮效果实现 - CSS3高级特性应用 这里写目录标题 炫酷的3D按钮效果实现 - CSS3高级特性应用项目介绍核心技术实现1. 基础结构设计2. 视觉效果实现2.1 背景渐变2.2 立体感营造 3. 交互动效设计3.1 悬停效果3.2 按压效果 技术要点分析1. 深度层次感2. 动画过渡3. 性能优…...

Flutter小白零基础入门到高级项目实战全集

Flutter零基础入门到高级项目实战全集内容如下&#xff1a; Dart入门基础教程16讲、Null safety 、late 关键字、空类型声明符&#xff1f;、非空断言&#xff01;、required 、Flutter入门基础、Flutter瀑布流布局、Flutter动画、Flutter异步流、GlobalKey 、Flutter国际化、…...

teaming技术

一.介绍 在CentOS 6与RHEL 6系统中&#xff0c;双网卡绑定采用的是bonding技术。到了CentOS 7&#xff0c;不仅能继续沿用bonding&#xff0c;还新增了teaming技术。在此推荐使用teaming&#xff0c;因其在查看与监控方面更为便捷 。 二.原理 这里介绍两种最常见的双网卡绑定…...

前端开发:Vue以及Vue的路由

Vue是什么 警告&#xff1a;本文作者是底层程序员&#xff0c;对Vue只是偶尔用到&#xff0c;研究并不深入&#xff0c;对Vue的理解可能非常肤浅甚至存在错误&#xff0c;请多包含。以下文字只为外行记录分享&#xff0c;专业前端朋友可以略过。 作为一个底层老程序员&#x…...

【JavaEE进阶】Linux常用命令

目录 &#x1f343;前言 &#x1f334;pwd 与 ls &#x1f6a9;pwd &#x1f6a9;ls &#x1f38d;cd &#x1f332;mkdir与touch &#x1f6a9;mkdir &#x1f6a9;touch &#x1f340;cat与rm &#x1f6a9;cat &#x1f6a9;rm &#x1f38b;vim &#x1f6a9;…...

【FastGPT】利用知识库创建AI智能助手

【FastGPT】利用知识库创建AI智能助手 摘要创建知识库上传文档创建应用准备提示词准备开场白关联知识库AI回答效果 摘要 关于FastGPT的部署&#xff0c;官方提供了docker-compose方式的部署文档&#xff0c;如果使用的是podman和podman-compose的同学&#xff0c;可以参考这篇…...

【DeepSeek 学c++】dynamic_cast 原理

用于向下转化。 父类引用指向指类对象 假设父亲是a, 子类是b. B* pb new B; 子类对象 A* pa 父类引用指向子类对象&#xff0c; 那么向上转化 Apa pb 这个是自动完成的&#xff0c;隐式转化&#xff0c;不需要dynamic_cast 向下转化指的是 A pa new B。 这个是指向子类对象…...