百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

卷积神经网络推导-神经网络卷积运算公式

moboyou 2025-04-23 14:11 65 浏览

本文论文来自:

卷积神经网络注释,Jake Bouvrie。

这个主要是一些关于CNN推导和实现的笔记,看这个笔记之前最好先有一些CNN的基础知识,这里也给大家一个可以参考的资源:

[1] 深度学习学习笔记系列(第七部分)

[2]LeNet-5,卷积神经网络

[3] 卷积神经网络

[4]手写数字识别神经网络

[5] 深度学习:三十八(Stacked CNN简单介绍)

[6] 基于梯度的学习应用于文档识别。

[7] 使用深度卷积神经网络进行 Imagenet 分类。

[8]UFLDL中的“卷积特征提取”和“池化”。

[9] 反向传播BP算法

卷积神经网络笔记

1. 简介

本文档讨论了 CNN 的推导和实现。CNN 架构的连接数比权重多得多,这意味着某种形式的正则化。这个特定的网络假设我们想要以数据驱动的方式学习一些过滤器,以此从输入中提取特征。

本文首先描述了训练全连接网络的经典BP算法,然后推导了2D CNN网络的卷积层和下采样层的BP权重更新方法。在推导过程中,我们强调实现的效率,因此会给出一些Matlab代码。最后,我们转而讨论如何自动学习组合前一层的特征图。特别地,我们还学习了特征图的稀疏组合。

2.全连接反向传播算法

在典型的 CNN 中,前几层是交替卷积和下采样,然后最后几层(靠近输出层)都是全连接的一维网络。至此,我们已经将所有二维的 2D 特征图转换为全连接的一维网络的输入。这样,当你准备将最终的 2D 特征图输入到 1D 网络时,一个非常方便的方法就是将所有输出的特征图连接成一个长的输入向量。然后我们回到 BP 算法的讨论。(更详细的基本推导请参考 UFLDL 中的“反向传播算法”)。

2.1 前馈传递

在下面的推导中,我们使用平方误差成本函数。我们正在讨论一个总共有 c 个类和 N 个训练样本的多类问题。

这里

表示第n个样本对应标签的第k维。

表示第n个样本对应的网络输出的第k个输出。对于多分类问题,输出一般以“one-of-c”的形式组织,也就是只有输入对应的类的输出节点是正数,其他类的位或节点都是0或者负数,这取决于你的输出层的激活函数。sigmoid就是0,tanh就是-1。

因为整个训练集上的误差就是每个训练样本的误差之和,所以这里我们先考虑一个样本的BP,第n个样本的误差表示为:

在传统的全连接神经网络中,我们需要按照BP规则计算代价函数E关于网络每个权值的偏导数,我们用l来表示当前层,因此当前层的输出可以表示为:

输出激活函数 f(.) 有很多种,通常是 sigmoid 函数或者双曲正切函数。sigmoid 会将输出压缩到 [0, 1] 之间,所以最终的输出平均值一般会趋向于 0。所以如果我们将训练数据归一化为均值为零、方差为 1,就可以增加梯度下降过程中的收敛性。对于归一化的数据集,双曲正切函数也是一个不错的选择。

2.2 反向传播过程

传播回去的误差可以看成是每个神经元的基的敏感度(敏感度的意思是我们的基b变化多少,误差就会变化多少,也就是误差对于基的变化率,也就是导数),定义如下:(第二个等号是根据链式求导法则得到的)

因为u/b=1,E/b=E/u=δ,这意味着偏差基础E/b=δ的灵敏度等于误差E对某个节点E/u的所有输入u的导数。这个导数就是让高层误差反向传播到底层的魔法。反向传播可以用下面的关系来表达:(下面的公式表达了第l层的灵敏度,即)

公式1)

这里的“o”表示每个元素都相乘。输出层神经元的敏感度不同:

最后,应用delta(或δ)规则更新每个神经元的权重。具体来说,对于给定的神经元,获取其输入,然后使用此神经元的delta(或δ)对其进行缩放。以向量形式表示,对于第l层,该层每个权重(组合成矩阵)的误差的导数是该层的输入(等于前一层的输出)与该层的灵敏度(该层中每个神经元的δ组合成向量)的叉积。然后获得的偏导数乘以负学习率就是该层神经元权重的更新:

公式(2)

偏差基础的更新表达式类似。事实上,每个权重 (W)ij 都有一个特定的学习率 ηIj。

3.卷积神经网络

3.1 卷积层

现在我们重点讨论网络中卷积层的BP更新。在卷积层中,上一层的特征图与一个可学习的卷积核进行卷积,然后经过激活函数得到输出的特征图。每个输出图可能是多个输入图组合的值:

这里 Mj 表示选定的输入图的集合,那么选择哪些输入图呢?有些人会选择一对或者三个。但下面我们将讨论如何自动选择需要组合的特征图。每个输出图都会给出一个额外的偏置 b,但对于特定的输出图,每个输入图的卷积核是不同的。换句话说,如果输出特征图 j 和输出特征图 k 都是由输入图 i 通过卷积求和得到的,那么对应的卷积核是不同的。

3.1.1 计算梯度

我们假设每一个卷积层l都连接着一个下采样层l+1。对于BP来说,根据上述,为了得到l层中每一个神经元对应权重的权重更新,我们需要先计算出l层中每一个神经节点的敏感度δ(即权重更新公式(2))。为了计算这个敏感度,我们需要先把下一层节点(与当前l层感兴趣的节点相连的l+1层节点)的敏感度相加(得到δl+1),然后乘以这些连接对应的权重(连接第l层感兴趣的节点和第l+1层节点的权重)W。然后乘以当前l层神经元节点对输入u的激活函数f的导值(即敏感度反向传播公式(1)的δl的解),这样就可以得到当前l层中每一个神经节点对应的敏感度δl。

但由于下采样的原因,采样层中一个像素(神经元节点)的敏感度δ对应着卷积层(前一层)输出图的一个像素(采样窗口大小),因此第l层中某个图的每个节点只与第l+1层中对应图的一个节点相连。

为了能够有效的计算出第l层的敏感度,我们需要对下采样后的层对应的敏感度图进行一次上采样(特征图中的每一个像素对应一个敏感度,所以也构成了一个图),使得这个敏感度图的大小与卷积层的图大小一致,然后将第l层的图的激活值的偏导数与从第l+1层开始上采样得到的敏感度图逐元素相乘(即公式(1))。

下采样层图的权重均取相同的值β,为一个常数,因此我们只需要将上一步得到的结果乘以β,便可完成第l层敏感度δ的计算。

我们可以对卷积层中的每个特征图j重复同样的计算过程。但显然我们需要匹配相应的子采样层的图(参考公式(1)):

up(.) 表示上采样操作。如果下采样因子为 n,它只是将每个像素水平和垂直复制 n 次。这样就恢复了原始大小。实际上,这个函数可以使用 Kronecker 积来实现:

好了,现在我们可以计算给定图的敏感度图了。然后我们可以通过简单地将第 l 层敏感度图中的所有节点相加来快速计算偏差基础的梯度:

公式(3)

最后,卷积核权重的梯度可以用BP算法计算(公式(2))。另外,很多连接的权重是共享的,所以对于给定的权重,我们需要计算该点所有与该权重相关的连接(权重共享的连接)的梯度,然后对这些梯度求和,就像上面对偏置项的梯度计算一样:

这里,

是的

在卷积中

输出卷积图的(u,v)位置的值是前一层的(u,v)位置上的patch与卷积核k_ij逐元素相乘的结果。

乍一看,似乎我们需要费力地记住输出图(以及对应的敏感度图)的每个像素对应输入图的哪个块。但实际上,在 Matlab 中,这可以用一个代码来实现。对于上面的公式,我们可以使用 Matlab 的卷积函数来实现它:

我们首先旋转增量敏感度图,这样我们就可以进行互相关计算,而不是卷积(在卷积的数学定义中,特征矩阵(卷积核)在传递给 conv2 之前需要翻转。也就是说,特征矩阵的行和列是反转的)。然后我们将输出反旋转回来,这样当我们在前向传播中进行卷积时,卷积核就在我们想要的方向。

3.2. 子采样层

对于子采样层,有 N 个输入图和 N 个输出图,但每个输出图变得更小。

down(.) 表示下采样函数。典型操作是对输入图像的不同 nxn 块的所有像素求和。这样,输出图像在两个维度上都缩小了 n 倍。每个输出图对应其自己的乘性偏差 β 和加性偏差 b。

3.2.1 计算梯度

这里最难的部分是计算敏感度图。一旦我们有了这个,我们需要更新的唯一偏置参数β和b就很容易了(公式(3))。如果下一个卷积层与这个子采样层完全连接,那么子采样层的敏感度图就可以通过BP计算出来。

我们需要计算卷积核的梯度,因此我们必须找到输入图中的哪个patch对应于输出图中的哪个像素。这里,我们必须找到当前层的敏感度图中的哪个patch对应于下一层的敏感度图中的给定像素,这样我们就可以像公式(1)中那样使用delta递归,也就是敏感度反向传播。此外,我们需要乘以输入patch和输出像素之间的连接的权重,这实际上是卷积核(旋转)的权重。

在此之前,我们需要对核进行旋转,以便卷积函数进行互相关计算。另外,我们需要处理卷积边界,不过在Matlab中,这更容易处理。Matlab中的全卷积会用0填充缺失的输入像素。

此时,我们可以计算 b 和 β 的梯度。首先,加法基础 b 的计算与上面的卷积层相同,只需将敏感度图中的所有元素相加即可:

至于乘性偏置β,由于在前向传播过程中涉及到下采样图的计算,所以最好在前向过程中保存这些图,这样在反向计算中就不需要重新计算了。我们定义:

这样β的梯度就可以计算如下:

3.3. 学习特征图的组合

很多时候,通过对多个输入图进行卷积,然后将这些卷积值相加得到一个输出图,效果往往比较好。在一些文献中,一般都是人工来选择将哪些输入图组合起来得到一个输出图。但这里我们尝试让CNN在训练过程中学习这些组合,也就是让网络学会选择哪些输入图来计算最佳的输出图。我们用αij来表示第i个输入图在得到第j个输出图时的权重或者贡献。这样,第j个输出图可以表示为:

需要满足约束:

这些对变量 αij 的约束可以通过将变量 αij 表示为一组不受约束的隐式权重 cij 的 softmax 函数来强制执行(因为 softmax 因变量是自变量的指数函数,所以它们的变化率会有所不同)。

因为对于固定的j,每组权重cij与其他组的权重无关,所以为了描述方便,我们去掉下标j,只考虑一个映射的更新。其他映射的更新也是同样的过程,只是映射索引j不同。

Softmax函数的导数表示为:

这里δ是克罗内克δ。误差关于第l层变量αi的导数为:

最后,可以通过链式法则得到成本函数关于权重ci的偏导数:

3.3.1 强制稀疏组合

为了限制 αi 的稀疏性,即限制一个输出图只与部分输入图相连,而不是与全部输入图相连,我们在总体成本函数中添加了一个稀疏约束项 Ω(α)。对于单个样本,将成本函数重写为:

然后求出这个正则化约束项对权重ci导数的贡献,正则化项Ω(α)对αi的导数为:

然后,根据链式法则,ci 的导数为:

因此,权重ci的最终梯度为:

3.4 使用 MATLAB 加速

CNN的训练主要基于卷积层和下采样层的交互,其主要计算瓶颈是:

1)前向传播过程:对每个卷积层的地图进行下采样;

2)反向传播过程:对高级子采样层的敏感度图进行上采样,以匹配底层卷积层的输出图的大小;

3)S形函数的应用及推导。

针对第一点和第二点问题,我们考虑如何利用Matlab内置的图像处理函数实现上采样和下采样操作。对于上采样,imresize函数可以做到,但是需要很大的开销。一个更快的版本是使用克罗内克积函数kron。通过用全一矩阵ones和我们需要上采样的矩阵做克罗内克积,就能达到上采样的效果。对于前向传播过程中的下采样,imresize并没有提供在缩小图像的同时计算nxn块中像素和的功能,所以不能使用。一个更好更快的方法是用全一的卷积核对图像进行卷积,然后简单地使用标准指数法对最后的卷积结果进行采样。 比如降采样域为2x2,那么我们可以用一个元素全为1的2x2卷积核对图像进行卷积,然后在卷积后的图像中每2个点采集一次数据,y=x(1:2:end,1:2:end),这样既可以得到一倍的降采样,又可以同时起到求和的效果。

对于第三个问题,其实有些人觉得在 Matlab 中内联定义 sigmoid 函数会更快,其实不然,Matlab 不同于 C/C++ 等语言,Matlab 的内联比普通的函数定义更省时,因此我们可以在代码中直接使用真实的代码来计算 sigmoid 函数及其导数。

相关推荐

Excel技巧:SHEETSNA函数一键提取所有工作表名称批量生产目录

首先介绍一下此函数:SHEETSNAME函数用于获取工作表的名称,有三个可选参数。语法:=SHEETSNAME([参照区域],[结果方向],[工作表范围])(参照区域,可选。给出参照,只返回参照单元格...

Excel HOUR函数:“小时”提取器_excel+hour函数提取器怎么用

一、函数概述HOUR函数是Excel中用于提取时间值小时部分的日期时间函数,返回0(12:00AM)到23(11:00PM)之间的整数。该函数在时间数据分析、考勤统计、日程安排等场景中应用广泛。语...

Filter+Search信息管理不再难|多条件|模糊查找|Excel函数应用

原创版权所有介绍一个信息管理系统,要求可以实现:多条件、模糊查找,手动输入的内容能去空格。先看效果,如下图动画演示这样的一个效果要怎样实现呢?本文所用函数有Filter和Search。先用filter...

FILTER函数介绍及经典用法12:FILTER+切片器的应用

EXCEL函数技巧:FILTER经典用法12。FILTER+切片器制作筛选按钮。FILTER的函数的经典用法12是用FILTER的函数和切片器制作一个筛选按钮。像左边的原始数据,右边想要制作一...

office办公应用网站推荐_office办公软件大全

以下是针对Office办公应用(Word/Excel/PPT等)的免费学习网站推荐,涵盖官方教程、综合平台及垂直领域资源,适合不同学习需求:一、官方权威资源1.微软Office官方培训...

WPS/Excel职场办公最常用的60个函数大全(含卡片),效率翻倍!

办公最常用的60个函数大全:从入门到精通,效率翻倍!在职场中,WPS/Excel几乎是每个人都离不开的工具,而函数则是其灵魂。掌握常用的函数,不仅能大幅提升工作效率,还能让你在数据处理、报表分析、自动...

收藏|查找神器Xlookup全集|一篇就够|Excel函数|图解教程

原创版权所有全程图解,方便阅读,内容比较多,请先收藏!Xlookup是Vlookup的升级函数,解决了Vlookup的所有缺点,可以完全取代Vlookup,学完本文后你将可以应对所有的查找难题,内容...

批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数

批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数在电商运营、物流对账等工作中,经常需要统计快递“揽收到签收”的耗时——比如判断某快递公司是否符合“3天内送达”的服务承...

Excel函数公式教程(490个实例详解)

Excel函数公式教程(490个实例详解)管理层的财务人员为什么那么厉害?就是因为他们精通excel技能!财务人员在日常工作中,经常会用到Excel财务函数公式,比如财务报表分析、工资核算、库存管理等...

Excel(WPS表格)Tocol函数应用技巧案例解读,建议收藏备用!

工作中,经常需要从多个单元格区域中提取唯一值,如体育赛事报名信息中提取唯一的参赛者信息等,此时如果复制粘贴然后去重,效率就会很低。如果能合理利用Tocol函数,将会极大地提高工作效率。一、功能及语法结...

Excel中的SCAN函数公式,把计算过程理清,你就会了

Excel新版本里面,除了出现非常好用的xlookup,Filter公式之外,还更新一批自定义函数,可以像写代码一样写公式其中SCAN函数公式,也非常强大,它是一个循环函数,今天来了解这个函数公式的计...

Excel(WPS表格)中多列去重就用Tocol+Unique组合函数,简单高效

在数据的分析和处理中,“去重”一直是绕不开的话题,如果单列去重,可以使用Unique函数完成,如果多列去重,如下图:从数据信息中可以看到,每位参赛者参加了多项运动,如果想知道去重后的参赛者有多少人,该...

Excel(WPS表格)函数Groupby,聚合统计,快速提高效率!

在前期的内容中,我们讲了很多的统计函数,如Sum系列、Average系列、Count系列、Rank系列等等……但如果用一个函数实现类似数据透视表的功能,就必须用Groupby函数,按指定字段进行聚合汇...

Excel新版本,IFS函数公式,太强大了!

我们举一个工作实例,现在需要计算业务员的奖励数据,右边是公司的奖励标准:在新版本的函数公式出来之前,我们需要使用IF函数公式来解决1、IF函数公式IF函数公式由三个参数组成,IF(判断条件,对的时候返...

Excel不用函数公式数据透视表,1秒完成多列项目汇总统计

如何将这里的多组数据进行汇总统计?每组数据当中一列是不同菜品,另一列就是该菜品的销售数量。如何进行汇总统计得到所有的菜品销售数量的求和、技术、平均、最大、最小值等数据?不用函数公式和数据透视表,一秒就...