【机器学习】卷积和反向传播

一、说明

        自从 AlexNet 在 2012 年赢得 ImageNet 竞赛以来,卷积神经网络 (CNN) 就变得无处不在。从不起眼的 LeNet 到 ResNets 再到 DenseNets,CNN 无处不在。

        您是否想知道 CNN 的反向传播中会发生什么,特别是反向传播在 CNN 中的工作原理。如果您读过反向传播,您就会了解它是如何在具有全连接层的简单神经网络中实现的。 (Andrew Ng 在 Coursera 上的课程对此做了很好的解释)。但是,对于我的一生,我无法理解反向传播如何与卷积层一起工作。

我知道,您不必了解反向传播的数学复杂性即可实现 CNN。您不必手动实现它们。因此,大多数深度学习书籍也没有涵盖它。

 

        这篇文章最重要的是向您展示这一点:

我们都知道卷积层的前向传递使用卷积。但是,反向传播期间的反向传递也使用了卷积!

        但如果您已经了解反向传播中的链式法则,那么您可以跳到下一节。

二、了解反向传播中的链式法则 

        考虑这个方程

f(x,y,z) = (x + y)z

        为了让它更简单,让我们把它分成两个方程。

        现在,让我们为其绘制一个计算图,其中 x、y、z 的值为x = -2、y = 5、z = 4。

        f = q*z 的计算图,其中 q = x + y

        当我们求解方程时,当我们从左向右移动时(“前向传递”),我们得到的输出为f = -12

        现在让我们进行向后传递。比如说,就像在反向传播中一样,我们在每个阶段导出从右到左移动的梯度。因此,最后,我们必须得到输入 x、y 和 z 的梯度值 — ∂f/∂x ∂f/∂y∂f/∂z用 x 来区分函数 f, y 和 z)

        从右到左,在乘法门处,我们可以对f进行微分以获得qz处的梯度— ∂f/∂q∂f/∂z。在加法门,我们可以对q进行微分以获得xy处的梯度— ∂q/∂x∂q/∂y。

计算计算图中的梯度及其值

       

我们必须找到∂f/∂x∂f/∂y ,但我们只得到∂q/∂x和∂q/∂y的值那么,我们该怎么做呢?

我们如何找到 ∂f/∂x∂f/∂y

        这可以使用微分链式法则来完成。根据链式法则,我们可以求出∂f/∂x

微分链式法则

        我们可以将∂f/∂x∂f/∂y计算为:

具有所有梯度的计算图的向后传递

三、卷积层中的链式法则

        现在我们已经完成了一个简单的计算图,我们可以将 CNN 想象成一个巨大的计算图。假设计算图中有一个门f,输入为x 和 y,输出为z。

一个简单的函数 f,将 x 和 y 作为输入并输出 z

       

        我们可以轻松计算局部梯度——将 z 相对于 x 和 y 微分∂z/∂x∂z/∂y

        对于前向传播,我们穿过 CNN,遍历其各层,最后使用损失函数获得损失。当我们开始逐层向后计算损失时,我们从前一层得到损失的梯度为∂L/∂z为了将损失传播到其他门,我们需要找到∂L/∂x∂L/∂y

局部梯度可以使用函数 f 计算。我们需要找到 𝛛  L/ 𝛛  x 𝛛  L/ 𝛛  y,因为它需要传播到其他层。

        链式法则对我们有帮助。使用链式法则,我们可以计算∂L/∂x∂L/∂y,这将馈送到扩展计算图中的其他门

求 x 和 y 的损失梯度

        那么,这与 CNN 卷积层中的反向传播有什么关系呢?

        现在,假设函数f 是输入 X 和滤波器 F之间的卷积。输入 X 是 3x3 矩阵,滤波器 F 是 2x2 矩阵,如下所示:

具有输入 X 和滤波器 F 的简单卷积层示例

        输入 X 和滤波器 F 之间的卷积得到输出 O。这可以表示为:

X 和 F 之间的卷积函数,给出输出 O

卷积运算给出输出 O 的值

        这给了我们前向传球!让我们来看看向后传递。如前所述,在向后传递期间,我们得到相对于下一层输出 O 的损失梯度为∂L/∂O。结合我们之前使用链式法则和反向传播的知识,我们得到:

向后传递期间的函数 f

        如上所示,我们可以找到相对于输出 O 的局部梯度∂O/∂X∂O/∂F 。利用前几层的损失梯度 — ∂L/∂O并使用链式法则,我们可以计算∂L /∂X∂L/∂F

好吧,但是为什么我们需要找到∂L/∂X∂L/∂F呢?

为什么我们需要找到 ∂L/∂X 和 ∂L/∂F

四、所以我们来求 X 和 F 的梯度 — ∂L/∂X∂L/∂F

4.1 求 ∂L/∂F

        正如我们之前所做的那样,这有两个步骤。

  • 求局部​​梯度∂O/∂F
  • 使用链式法则求∂L/∂F

        步骤 1:求局部梯度 — ∂O/∂F:

        这意味着我们必须区分输出矩阵 O 和滤波器 F。通过我们的卷积运算,我们知道这些值。因此,让我们开始区分 O- O11 的第一个元素与 F — F11 、 F12、F21 和 F22 的元素

步骤 2:使用链式法则:

        正如我们之前的例子中所描述的,我们需要找到∂L/∂F

        OF是矩阵。并且∂O/∂F将是矩阵O对于矩阵F的偏导数!最重要的是我们必须使用链式法则。这看起来确实很复杂,但幸运的是我们可以使用下面的公式来扩展它。

使用链式法则导出矩阵相对于矩阵的偏导数的公式

       

展开,我们得到..

∂L/∂F的导数

        将方程 A 中的局部梯度值 — ∂O/∂F 代入,我们得到

使用方程 A 中的局部梯度值

        如果你仔细观察的话,这就是我们非常熟悉的操作。我们可以将其表示为输入 X和损失梯度∂L/∂O 之间的卷积运算,如下所示:

∂L/∂F = 输入矩阵 X 与损失梯度 ∂L/∂O 的卷积

∂L/∂F 只不过是输入 X 和下一层的损失梯度 ∂L/∂O 之间的卷积

4.2 求 ∂L/∂X:

        步骤 1:求局部梯度 — ∂O/∂X:

        与我们之前找到局部梯度的方式类似,我们可以找到∂O/∂X

局部梯度 ∂O/∂X

        步骤 2:使用链式法则:

        将其展开并代入方程 B,我们得到

使用方程中的局部梯度计算 ∂L/∂X的导数

        好的。现在我们有了 ∂L/∂X 的值不管你相信与否,这甚至可以表示为卷积运算。

∂L/∂X 可以表示为 180 度旋转滤波器 F 和损失梯度 ∂L/∂O 之间的“完全”卷积

首先,让我们将滤镜 F 旋转 180 度。这是通过先垂直翻转然后水平翻转来完成的。

将滤镜 F 翻转 180 度 — 垂直和水平翻转

        现在,让我们在这个翻转的滤波器 F 和 ∂L/∂O 之间进行“完全”卷积,如下所示:(这就像将一个矩阵从右到左、从下到上滑动到另一个矩阵上)

180 度翻转滤波器 F 和损失梯度 ∂L/∂O 之间的全卷积运算可视化

        上面的全卷积生成 ∂L/∂X 的值,因此我们可以将 ∂L/∂X 表示为

∂L/∂X 可以表示为 180 度旋转滤波器 F 和损失梯度 ∂L/∂O 之间的“完全”卷积

好了,现在我们已经找到了∂L/∂X 和 ∂L/∂F,我们现在可以得出这个结论

卷积层的前向传播和反向传播都是卷积

总结一下:

如何计算 ∂L/∂X 和 ∂L/∂F

五、结束语

        希望这有助于解释反向传播在 CNN 卷积层中的工作原理。如果您想了解更多相关信息,请查看下面的链接。并通过为这篇文章鼓掌来表达一些爱。

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

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

相关文章

Stream流学习笔记

Stream流 创建流中间操作1、filter2、map3、distinct4、sorted5、limit6、skip7、flatMap 终结操作1、forEach2、count3、max&min4、collect5、查找与匹配 创建流 单例集合&#xff1a;集合对象.stream() List<Integer> list new ArrayList<>(); Stream<…

C语言:详解操作符(下)

上一篇链接&#xff1a;C语言&#xff1a;详解操作符&#xff08;上&#xff09;摘要&#xff1a; 在上篇文章中&#xff0c;我们已经讲过位操作符等涉及二进制的操作符&#xff0c;这些有助于帮助我们后期理解数据如何在计算机中运算并存储&#xff0c;接下来本篇将更多的讲述…

mac docker 宿主机和容器间网络打通

动因 是这样&#xff0c;笔者最近满怀欣喜入手Docker&#xff0c;看着各种文章命令都是不断点头称道&#xff1a;“嗯嗯&#xff0c;不错不错”,在接下来终于准备大干一场的时候碰壁了&#xff0c;主要情况是说在Mac中跑了第一把的时候发现碰到&#xff0c;虚拟机和宿主机居然…

CentOS7下如何安装Nginx

一、Ngxin是什么 Nginx是一个开源的 Web 服务器&#xff0c;具有反向代理、负载均衡、缓存等功能。它可以作为 HTTP 服务器&#xff0c;将服务器上的静态文件&#xff08;如 HTML、图片&#xff09;通过 HTTP 协议展现给客户端&#xff0c;也可以实现动静分离&#xff0c;把动态…

【后端高频面试题--Nginx篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;后端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 后端高频面试题--Nginx篇 什么是Nginx&#xff1f;为什么要用Nginx&#xff1f;为什么Nginx性能…

FAST角点检测算法

FAST&#xff08;Features from Accelerated Segment Test&#xff09;角点检测算法是一种快速且高效的角点检测方法。它通过检测每个像素周围的连续像素集合&#xff0c;确定是否为角点。以下是 FAST 角点检测算法的基本流程&#xff1a; FAST 角点检测算法的基本过程主要包括…

精读《Web Components 的困境》

本期精读的文章是&#xff1a;The broken promise of Web Components 以及对这篇文章的回应: Regarding the broken promise of Web Components 1 引言 我为什么要选这篇文章呢&#xff1f; 就在前几天的 Google I/O 2017 上, Polymer 正式发布了 Polymer 2.0 版本. 来看…

HTTP基本概念-HTTP 是什么?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTP 是什么? HTTP 是超文本传输协议&#xff0c;也就是HyperText Transfer Protocol。 能否详细解释「超文本传输协议」? HTTP 的名字「超文本协议传输」&#xff0c;它可以拆成三个部分: 超文本传输…

pycharm控制STM32F103ZET6拍照并上位机接收显示(OV7670、照相机、STM32、TFTLCD)

基于STM32的照相机 准备工作最终效果一、下位机1、主函数2、OV7670初始化 二、上位机1、控制拍照2、接收图片数据 三、资源获取 准备工作 一、硬件及片上资源: 1,串口1(波特率:921600,PA9/PA10通过usb转ttl连接电脑&#xff0c;或者其他方法)上传图片数据至上位机 2,串口2(波特…

Java语法学习反射

Java语法学习反射 大纲 基本介绍class的介绍 具体案例 1. 基本介绍 流程图&#xff08;程序在计算机的阶段&#xff09; 反射的主要的类 这个提高效率不大 2. class的介绍 对于第三点&#xff1a;首先类只会加载一次&#xff0c;得到的class的对象&#xff0c;也只有一…

Linux第52步_移植ST公司的linux内核第4步_关闭内核模块验证和log信息时间戳_编译_并通过tftp下载测试

1、采用程序配置关闭“内核模块验证” 默认配置文件“stm32mp1_atk_defconfig”路径为“arch/arm/configs”; 使用VSCode打开默认配置文件“stm32mp1_atk_defconfg”&#xff0c;然后将下面的4条语句屏蔽掉&#xff0c;如下&#xff1a; CONFIG_MODULE_SIGy CONFIG_MODULE_…

【C语言】实现双向链表

目录 &#xff08;一&#xff09;头文件 &#xff08;二&#xff09; 功能实现 &#xff08;1&#xff09;初始化 &#xff08;2&#xff09;打印链表 &#xff08;3&#xff09; 头插与头删 &#xff08;4&#xff09;尾插与尾删 &#xff08;5&#xff09;指定位置之后…

STM32 + ESP8266,连接阿里云 上报/订阅数据

&#xff08;文章正在编辑中&#xff0c;一点点地截图操作过程&#xff0c;估计要拖拉两三天&#xff09; 一、烧录MQTT固件 ESP8266出厂时&#xff0c;默认是AT固件。连接阿里云&#xff0c;需要使用MQTT固件。 1、独立EPS8266模块的烧录方法 2、魔女开发板&#xff0c;板载…

‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序

遇到 vue-cli-service 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 的错误时&#xff0c;通常意味着Vue CLI没有被正确安装或配置在项目中。这可能是因为node_modules目录缺失了必要的包&#xff0c;或者局部安装的Vue CLI没有被正确设置到系统的PATH环境…

洛谷: P1308 [NOIP2011 普及组] 统计单词数

前言: 这道题没理解清题目表达意思&#xff0c;我开始想的是用map来记录个数&#xff0c;然后一个变量记录一开始出现的单词位置&#xff0c;不挺简单的吗&#xff0c;然后....就AC了2个..从错误提示能看到个数没啥问题&#xff0c;但是第一个单词位置不对&#xff0c;看了新样…

【51单片机】AT24C02(江科大、爱上半导体)

一、AT24C02 1.AT24C02介绍 AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息 存储介质:E2PROM 通讯接口:12C总线 容量:256字节 2.引脚即应用电路 本开发板AT24C02原理图 12C地址全接地,即全为0 WE接地,没有写使能 SCL接P21 S…

Microsoft Excel 加载数据分析工具

Microsoft Excel 加载数据分析工具 1. 打开 Excel&#xff0c;文件 -> 选项2. 加载项 -> 转到…3. 分析工具库、分析工具库 - VBA4. 打开 Excel&#xff0c;数据 -> 数据分析References 1. 打开 Excel&#xff0c;文件 -> 选项 2. 加载项 -> 转到… ​​​ 3…

不安全的 HTTP请求 漏洞原理以及修复方法

漏洞名称&#xff1a;不安全的HTTP方法、危险的HTTP方法 漏洞描述&#xff1a;不安全的HTTP方法一般包括&#xff1a;TRACE、PUT、DELETE、COPY 等。其中最常见的为TRACE方法可以回显服务器收到的请求&#xff0c;主要用于测试或诊断&#xff0c;恶意攻击者可以利用该方法进行…

【Java程序设计】【C00270】基于Springboot的moba类游戏攻略分享平台(有论文)

基于Springboot的moba类游戏攻略分享平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的游戏攻略分享平台 本系统分为系统功能模块、管理员功能模块、以及用户后台功能模块。 系统功能模块&#xff1a;在平台首…

【开源】基于JAVA+Vue+SpringBoot的房屋出售出租系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 房屋销售模块2.2 房屋出租模块2.3 预定意向模块2.4 交易订单模块 三、系统展示四、核心代码4.1 查询房屋求租单4.2 查询卖家的房屋求购单4.3 出租意向预定4.4 出租单支付4.5 查询买家房屋销售交易单 五、免责说明 一、摘…