CNN中的梯度的求法和反向传播过程_cnn 的梯度回传过程公式推导-程序员宅基地

技术标签: 机器学习  神经网络  

写这个起因是前段时间面试的时候被问到了CNN中反向传播该怎么求,我说直接算就好了呀,面试官让我下来再看看。之后问了下舍友,舍友说需要去把卷积核旋转180°来反向传播,然后我就赶紧查了下相关资料,发现还是非常interesting的。【不过这种本质上还是链式法则直接求的结果,只是形式上会比较tricky】

卷积神经网络(Convolutional Neural Network)

关于卷积神经网络的相关介绍也太多了,所以这里就简要提一下。CNN中主要有3种layer形式:

卷积层(Convolutional)

卷积层自不必我多说啊,太多关于这个的介绍了。

xij=a=0m1b=0m1ωaby1(i+a)(j+b).

上式中 xij 表示第 层的坐标为 i,j 的点是如何计算出来的。

不过一个有意思的地方在于,在一些外文资料中,卷积层是按照卷积真正的计算顺序倒着乘的,比如参考资料3中的写法,有些是按照正常的顺序来乘的。这个顺序倒是无所谓的,正着乘的话只是相当于把卷积核倒转了180°之后倒着乘的。
但是这个地方也确实解释了,我之前的一个疑惑,就是卷积明明是倒着乘的呀,为啥CNN中是正着的。看来它只是为了方便计算而已。
像CNN用matlab写的话,其自带的conv函数就是倒着乘的。这点要注意。

池化层(Pooling也叫sub-sampling)

池化主要是在一个长方形区域内,选取特征的最大值(或者平均值)。
这样的好处有:因为经过原来卷积训练之后,可能特征维度依然很大,还是会容易很出现过拟合,而通过池化大大较少特征的维度,减少过拟合的出现。【注意这里也说明了,只要能够降低计算的维度和参数个数,就能够减少过拟合】

池化层最主要的好处就是提供了一种不变性

如果人们选择图像中的连续范围作为池化区域,并且只是池化相同(重复)的隐藏单元产生的特征,那么,这些池化单元就具有平移不变性 (translation invariant)。这就意味着即使图像经历了一个小的平移之后,依然会产生相同的 (池化的) 特征。在很多任务中 (例如物体检测、声音识别),我们都更希望得到具有平移不变性的特征,因为即使图像经过了平移,样例(图像)的标记仍然保持不变。例如,如果你处理一个MNIST数据集的数字,把它向左侧或右侧平移,那么不论最终的位置在哪里,你都会期望你的分类器仍然能够精确地将其分类为相同的数字。

以上节选自UFLDL里面的说明。

全连接层(Fully-Connected)

经过几层的卷积和池化层之后,需要经过若干层的全连接层,为了达到分类用的softmax函数,所以必须经过一个全连接层(也可以是几个,像AlexNet的就是3层全连接层,可能是因为3层全连接就能表示任意函数了吧)。

另外全连接层也就意味着破坏了其空间结构,所以全连接层之后不能再有卷积层了。

卷积神经网络上的求导和反向传播

卷积层

对于卷积层的反向传播,只要记得下面这两个公式就好:

Exij=E</
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/haolexiao/article/details/72628083

智能推荐

整理适配Seata0.9.0+mysql8.0.26+java8_seata xa mysql版本-程序员宅基地

文章浏览阅读733次,点赞7次,收藏5次。网上找的版本关系:1.解决seata不能使用mysql8版本的问题(1) driver-class-name = "com.mysql.cj.jdbc.Driver" url = "jdbc:mysql://127.0.0.1:3306/seata" user = "root" password = "root"(2)因为默认不支持8,所以替换mysql的驱动jar包,我的数据库是8.0.26,所以替换为了这个,在lib文件夹下。注意:替换驱动要将之前的mysql-c_seata xa mysql版本

php 中文字符串截取,PHP中文字符串截取函数一例-程序员宅基地

文章浏览阅读179次。中文字符串的截取如果处理不好会很麻烦。以下是一段PHP中文字符串截取函数代码。&_php 中文截取

记一次mariadb安装后无法启动的解决方法_mariadb.service: main process exited, code=exited,-程序员宅基地

文章浏览阅读3.6k次。配置mariadb.service后,通过systemctl start mariadb,提示异常。操作系统:CentOS Linux release 7.6.1810 (Core)1、检查/usr/local/mysql/bin/mariadbd 权限。执行 journalctl -xe 后提示 没有权限。发现/opt/ 下 soft 目录没有其他人的权限。若提示没有mysql,检查下mysql环境变量。给 /opt/soft添加 其他人权限。查看mariadb的服务状态已正常。mariadb安装目录。_mariadb.service: main process exited, code=exited, status=1/failure

时间序列预测 | Matlab基于麻雀算法(SSA)优化门控循环单元(SSA-GRU)的时间序列预测-程序员宅基地

文章浏览阅读27次。时间序列预测 | Matlab基于麻雀算法(SSA)优化门控循环单元(SSA-GRU)的时间序列预测

CWDM、DWDM、FWDM、MWDM、LWDM概述讲解_tdm cwdm lwdm mwdm-程序员宅基地

文章浏览阅读274次。与CWDM类似,它也是一种基于波分复用技术的光纤传输技术,但它的通道数更多、信道间隔更小,可以实现更高的传输容量。它是一种基于波分复用技术的光纤传输技术,可将来自不同来源的多个光信号,按照不同的波长,通过同一根光纤进行传输。顾名思义,它是一种基于滤波器的波分复用技术,通过精细的滤波器设计,将不同波长的光信号分离出来进行传输。它与CWDM和DWDM类似,但波长范围更偏向于长波长光信号的传输,适用于某些特定的光纤传输应用场景。_tdm cwdm lwdm mwdm

线上打包和本地打包的区别_vue项目 linux打包和本地打包有区别嘛-程序员宅基地

文章浏览阅读3.3k次。本地打的包对依赖的jar包是从本地仓库中取,所以如果多模块项目中自己写的被依赖的模块要保证私服中始终是最新的代码,及时安装到本地。线上使用jenkins打的包是从私服上拉代码,所以要保证本地修改在打包前一定要提交到私服上。jenkins打的包和本地不一样是,考虑以下方面,看看服务器时间是否不一样,或者在jenkins的代码拉取是加上@head。..._vue项目 linux打包和本地打包有区别嘛

随便推点

markdown-it-vue 一个 Markdown 的 Vue 组件库-程序员宅基地

文章浏览阅读9.6k次,点赞2次,收藏17次。项目地址: https://github.com/ravenq/markdown-it-vueMarkdonw Vue 组件库.markdown-it-vue 是一个丰富的 markdown Vue 组件,markdown-it-vue 使用 markdown-it 作为 Markdown 数据解析引擎,整合多种 markdown-it 插件,并内置了一些自己的功能性插件,支持 GFM ..._markdown-it-vue

使用linux的工具keepalived实现ip虚拟,监控端口状态,实现数据库故障切换_虚拟ip管理工具-程序员宅基地

文章浏览阅读1.2k次。一、keepalived工具简介1.Keepalived高可用软件Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。keepalived软件主要是通过VRRP协议实现高可用功能的..._虚拟ip管理工具

VUE 富文本编辑器 tinymce - - - - 对懒人 非常友好 一看就懂_vue富文本编辑器-程序员宅基地

文章浏览阅读9.8k次,点赞19次,收藏89次。vue 富文本 编辑器 tinymce 对懒人 及其友好,五分钟使用 功能齐全,可自定义性高,尤其是美观_vue富文本编辑器

snownlp:自定义训练样本与模型保存_snownlp如何加载训练模型-程序员宅基地

文章浏览阅读1.5w次,点赞32次,收藏193次。本文介绍了snownlp包的情感分析模型训练、保存以及如何使用自己训练的模型,从文件结构、源码设置等角度进行了描述。按照此方法,可以轻松玩转snownlp的情感分析。_snownlp如何加载训练模型

python 通用文件_python 创建通用文档-程序员宅基地

文章浏览阅读165次。from numpy.random import randnimport numpy as npnp.random.seed(123)import osimport matplotlib.pyplot as pltimport pandas as pdplt.rc('figure', figsize=(10, 6))np.set_printoptions(precision=4)pd.option..._python 创建通用文档

c语言 求特殊方程的正整数解_求特殊方程的正整数解c语言-程序员宅基地

文章浏览阅读3.3k次,点赞4次,收藏11次。*题目:  要求对任意给定的正整数 N,求方程 X2+Y2=NX2+Y2=NX2+Y2=N 的全部正整数解。输入格式:  输入在一行中给出正整数 N(≤10000)。输出格式:  输出方程 X2+Y2=NX2+Y2=NX2+Y2=N 的全部正整数解,其中 X≤Y。每组解占 1 行,两数字间以 1 空格分隔,按 X 的递增顺序输出。如果没有解,则输出 No Solution..._求特殊方程的正整数解c语言

推荐文章

热门文章

相关标签