2022年2022年卷积神经网络ConvolutionalNeuralNetworks .pdf
-
资源ID:27216235
资源大小:1.52MB
全文页数:9页
- 资源格式: PDF
下载积分:4.3金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
2022年2022年卷积神经网络ConvolutionalNeuralNetworks .pdf
卷积神经网络 Convolutional Neural Networks (CNN)一、什么是卷积首先回顾一下,数字图像处理中我们用卷积模板和原始图像的像素卷积。过程如下:Step 1、先将模板旋转180 度(又称折叠)Step 2、然后让模板依次和原始图像重叠,并且计算重叠部分的数值乘积之和以 2D 为例先对模板K 做折叠,然后依次覆盖图像I,并且计算重叠部分的数值乘积之和依次进行到最后,会多出一圈,得到最后的卷积结果名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 卷积的意义(图像处理而言);对图像使用不同的卷积模板,对图像做不同的处理。比如平滑模板可以使图像模糊,并且可以减少噪声、锐化模板可以使图像的轮廓变得清晰。二、卷积网络的结构2.1 从 BP 网络到卷积网络回想一下BP 神经网络。 BP 网络每一层节点是一个线性的一维排列状态,层与层的网络节点之间是全连接的。这样设想一下,如果BP 网络中层与层之间的节点连接不再是全连接,而是局部连接的。这样,就是一种最简单的一维卷积网络。如果我们把上述这个思路扩展到二维,这就是我们在大多数参考资料上看到的卷积神经网络。具体参看下图:图 1:全连接的2D 网络( BP 网络)图 2:局部连接的2D 网络(卷积网络)现在我们考虑单隐层结构,上图左:全连接网络。如果我们有1000 x1000 像素的图像,有1 百万个隐层神经元,每个隐层神经元都连接图像的每一个像素点,就有 1000 x1000 x1000000=1012 个连接, 也就是 1012 个权值参数。上图右:局部连接网络,每一个节点与上层节点同位置附近10 x10 的窗口相连接,则1 百万个隐层神经元就只有100w 乘以 100,即 108 个参数。其权值连接个数比原来减少了四个数量级。因此,卷积网络降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - 2.2 卷积网络的结构卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成。卷积神经网络中的每一个特征提取层(C-层)都紧跟着一个用来求局部平均与二次提取的下采样层(S-层) , 这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。图 3 经典的卷积神经网络结构图原始图像的大小决定了输入向量的尺寸,隐层由C-层(特征提取层)和S-层(下采样层)组成,每层均包含多个平面。 C1 层神经元提取图像的局部特征,因此每个神经元都与前一层的局部感受野(也就是局部输入窗口)相连。C1 层中各平面(由神经元构成)提取图像中不同的局部特征,如边缘特征,上下左右方向特征等,C1 层中的输入是有由上一层局部窗口的数值和连接的权值的加权和(也就是卷积, 后面会具体解释为什么是卷积),然后通过一个激活函数(如 sigmoid 函数, 反正切函数)得到 C1 层的输出,接下来S2层是下采样层,简单来书,由4 个点下采样为1 个点,也就是4 个数的加权平均。换句话说,就是我们把2*2 的像素缩小成为一个像素,某种意义上来说可以认识是图像处理中的模糊。然后按照这个CS的结构继续构成隐层,当然这些隐层的连接都是局部相连的。同时有人会问了,例如S2和 C3 层具体要怎么连接呢,为什么会从6 张变成 16 张特征图呢。 C3 层的特征图是由S2 层图像的感受野和对应权值的卷积后,通过随机的组合而形成的,也就意味着S2层和 C3 层并不像 C1 层和 S2 层那样是一一对应的。但当我们感受野的大小和图像一样时,我们经过特征提取后就变成一个像素了,这里我们开始使用全连接(这样才能完整的把特征保留)。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - 2.3 为什么给这种局部连接命名为卷积网络卷积网络第一个特点是连接权值远远小于BP 网络的权值。卷积神经网络另外一个特性是权值共享。这样一来就更进一步减少了对网络权值的训练(毕竟权值是共享的,也就意味着有一些全是是相同的)。权值共享是指同一平面层的神经元权值相同。如何理解呢!看下图2,假设红色的点和黑色的点是C1 层第一个特征图的2 个不同神经元, 感受窗口的大小是5*5 的 (意味着有25 个连接),这 2 个神经元连接的权值是共享的(相同的)。这样一来,C1 层中的每个神经元的输入值,都有由原始图像和这个相同的连接权值的加权和构成的,想想看,这个过程是不是和卷积的过程很像呢!没错,就是由这个得名的。同时这样一来,我们需要训练的权值就更少了,因为有很多都是相同的。还没理解的话,接着看 C1 层是一个卷积层(也就是上面说的特征提取层),由 6 个特征图Feature Map 构成。特征图中每个神经元与输入中5*5 的邻域相连。特征图的大小为28*28 。C1 层有 156 个可训练参数(每个滤波器 5*5=25个 unit 参数和一个bias偏置 参数,一共6 个滤波器,共 (5*5+1)*6=156个参数),共156*(28*28)=122,304个连接。S2 层是一个下采样层,有6 个 14*14 的特征图。特征图中的每个单元与C1 中相对应特征图的2*2 邻域相连接。 S2 层每个单元的4 个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid 函数计算。每个单元的2*2 感受野并不重叠,因此S2 中每个特征图的大小是C1中特征图大小的1/4(行和列各1/2) 。S2 层有 12 个可训练参数和5880 个连接。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 三、卷积网络的训练我们想想卷积网络到底有什么那些参数需要训练呢。第一、卷积层中的卷积模板的权值。第二、下采样层的2 个参数(每个单元的4 个输入相加,乘以一个可训练参数,再加上一个可训练偏置),第三、学习特征的组合(例如S2 到 C3 的组合方式)3.1 我们先回顾一下BP 的反向传播算法3.1.1、 Feedforward Pass 前向传播在下面的推导中,我们采用平方误差代价函数。我们讨论的是多类问题,共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,可以在梯度下降的过程中增加收敛性。对于归一化的数据集来说,双曲线正切函数也是不错的选择。3.1.2、 Backpropagation Pass 反向传播反向传播回来的误差可以看做是每个神经元的基的灵敏度sensitivities(灵敏度的意思就是我们的基 b 变化多少,误差会变化多少,也就是误差对基的变化率,也就是导数了),定义如下:(第二个等号是根据求导的链式法则得到的)因为 ?u/?b=1,所以 ?E/?b=?E/?u=,也就是说bias 基的灵敏度 ?E/?b= 和误差 E 对一个节点全部输入 u 的导数 ?E/?u 是相等的。 这个导数就是让高层误差反向传播到底层的神来之笔。反向传播就是用下面这条关系式: (下面这条式子表达的就是第l 层的灵敏度,就是)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - 公式( 1)这里的 “ ?”表示每个元素相乘。输出层的神经元的灵敏度是不一样的:最后,对每个神经元运用delta(即 )规则进行权值更新。具体来说就是,对一个给定的神经元,得到它的输入,然后用这个神经元的delta(即 )来进行缩放。用向量的形式表述就是,对于第 l 层,误差对于该层每一个权值(组合为矩阵)的导数是该层的输入(等于上一层的输出)与该层的灵敏度(该层每个神经元的组合成一个向量的形式)的叉乘。然后得到的偏导数乘以一个负学习率就是该层的神经元的权值的更新了:公式( 2)对于 bias 基的更新表达式差不多。实际上,对于每一个权值(W)ij都有一个特定的学习率Ij。3.2 卷积神经网络3.2.1、 Convolution Layers 卷积层我们现在关注网络中卷积层的BP 更新。 在一个卷积层, 上一层的特征maps 被一个可学习的卷积核进行卷积,然后通过一个激活函数,就可以得到输出特征map。每一个输出map 可能是组合卷积多个输入maps 的值:这里 Mj表示选择的输入maps 的集合,那么到底选择哪些输入maps 呢?有选择一对的或者三个的。但下面我们会讨论如何去自动选择需要组合的特征maps。每一个输出map 会给一个额外的偏置 b,但是对于一个特定的输出map,卷积每个输入maps 的卷积核是不一样的。也就是说,如果输出特征 map j 和输出特征map k 都是从输入map i 中卷积求和得到,那么对应的卷积核是不一样的。Computing the Gradients 梯度计算我们假定每个卷积层l 都会接一个下采样层l+1 。对于 BP 来说, 根据上文我们知道,要想求得层 l 的每个神经元对应的权值的权值更新,就需要先求层l 的每一个神经节点的灵敏度 (也就是权值更新的公式(2) ) 。为了求这个灵敏度我们就需要先对下一层的节点(连接到当前层l 的感兴趣节点的第l+1 层的节点)的灵敏度求和(得到l+1) ,然后乘以这些连接对应的权值(连接第l 层感兴趣节点和第l+1 层节点的权值) W。再乘以当前层l 的该神经元节点的输入u 的激活函数 f 的导数值(也就是那个灵敏度反向传播的公式(1)的 l的求解),这样就可以得到当前层l 每个神经节点对应的灵敏度l了。然而,因为下采样的存在,采样层的一个像素(神经元节点)对应的灵敏度对应于卷积层(上一层)的输出map 的一块像素(采样窗口大小)。因此,层 l 中的一个 map 的每个节点只与l+1 层中名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - 相应 map 的一个节点连接。为了有效计算层l 的灵敏度,我们需要上采样upsample 这个下采样downsample 层对应的灵敏度map(特征map 中每个像素对应一个灵敏度,所以也组成一个map) ,这样才使得这个灵敏度map大小与卷积层的map 大小一致,然后再将层l 的 map 的激活值的偏导数与从第l+1 层的上采样得到的灵敏度map 逐元素相乘(也就是公式(1) ) 。在下采样层map 的权值都取一个相同值 ,而且是一个常数。所以我们只需要将上一个步骤得到的结果乘以一个就可以完成第l 层灵敏度 的计算。我们可以对卷积层中每一个特征map j 重复相同的计算过程。但很明显需要匹配相应的子采样层的 map(参考公式( 1) ) :up(.)表示一个上采样操作。如果下采样的采样因子是n 的话,它简单的将每个像素水平和垂直方向上拷贝n 次。这样就可以恢复原来的大小了。实际上,这个函数可以用Kronecker 乘积来实现:好,到这里,对于一个给定的map,我们就可以计算得到其灵敏度map 了。然后我们就可以通过简单的对层l 中的灵敏度map 中所有节点进行求和快速的计算bias 基的梯度了:公式( 3)最后,对卷积核的权值的梯度就可以用BP 算法来计算了(公式(2) ) 。另外,很多连接的权值是共享的,因此,对于一个给定的权值,我们需要对所有与该权值有联系(权值共享的连接)的连接对该点求梯度,然后对这些梯度进行求和,就像上面对bias 基的梯度计算一样:这里,是中的在卷积的时候与逐元素相乘的patch,输出卷积 map的(u, v)位置的值是由上一层的(u, v) 位置的 patch 与卷积核 k_ij 逐元素相乘的结果。咋一看,好像我们需要煞费苦心地记住输出map(和对应的灵敏度map)每个像素对应于输入map 的哪个 patch。但实际上,在Matlab 中,可以通过一个代码就实现。对于上面的公式,可以用Matlab 的卷积函数来实现:我们先对 delta 灵敏度 map 进行旋转, 这样就可以进行互相关计算,而不是卷积 (在卷积的数学定义中,特征矩阵(卷积核)在传递给conv2 时需要先翻转(flipped )一下。也就是颠倒下特征矩阵的行和列) 。然后把输出反旋转回来,这样我们在前向传播进行卷积的时候,卷积核才是我们想要的方向。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - 3.2.2、 Sub-sampling Layers 子采样层对于子采样层来说,有N 个输入 maps,就有 N 个输出 maps,只是每个输出map 都变小了。down(.)表示一个下采样函数。典型的操作一般是对输入图像的不同nxn 的块的所有像素进行求和。这样输出图像在两个维度上都缩小了n 倍。每个输出map 都对应一个属于自己的乘性偏置和一个加性偏置b。Computing the Gradients 梯度计算这里最困难的是计算灵敏度map。一旦我们得到这个了,那我们唯一需要更新的偏置参数和b 就可以轻而易举了(公式(3) ) 。如果下一个卷积层与这个子采样层是全连接的,那么就可以通过BP 来计算子采样层的灵敏度maps。我们需要计算卷积核的梯度,所以我们必须找到输入map 中哪个 patch 对应输出 map 的哪个像素。这里,就是必须找到当前层的灵敏度map 中哪个 patch 对应与下一层的灵敏度map 的给定像素,这样才可以利用公式(1)那样的递推,也就是灵敏度反向传播回来。另外,需要乘以输入patch与输出像素之间连接的权值,这个权值实际上就是卷积核的权值(已旋转的)。在这之前,我们需要先将核旋转一下,让卷积函数可以实施互相关计算。另外,我们需要对卷积边界进行处理,但在Matlab 里面,就比较容易处理。Matlab 中全卷积会对缺少的输入像素补0 。到这里,我们就可以对b 和 计算梯度了。首先,加性基b 的计算和上面卷积层的一样,对灵敏度 map 中所有元素加起来就可以了:而对于乘性偏置 ,因为涉及到了在前向传播过程中下采样map 的计算,所以我们最好在前向的过程中保存好这些maps,这样在反向的计算中就不用重新计算了。我们定义:这样,对的梯度就可以用下面的方式计算:3.2.3、 Learning Combinations of Feature Maps 学习特征 map 的组合大部分时候, 通过卷积多个输入maps,然后再对这些卷积值求和得到一个输出map,这样的效果往往是比较好的。在一些文献中, 一般是人工选择哪些输入maps 去组合得到一个输出map。但我们这里尝试去让CNN 在训练的过程中学习这些组合,也就是让网络自己学习挑选哪些输入maps 来计算得到输出map 才是最好的。我们用ij表示在得到第j 个输出 map 的其中第i 个输入 map 的权名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 值或者贡献。这样,第j 个输出 map 可以表示为:需要满足约束:这些对变量 ij 的约束可以通过将变量 ij表示为一个组无约束的隐含权值cij的 softmax 函数来加强。 (因为 softmax 的因变量是自变量的指数函数,他们的变化率会不同)。因为对于一个固定的j 来说,每组权值cij都是和其他组的权值独立的,所以为了方面描述,我们把下标j 去掉,只考虑一个map 的更新,其他map 的更新是一样的过程,只是map 的索引 j 不同而已。Softmax 函数的导数表示为:这里的 是 Kronecker delta。对于误差对于第l 层变量 i 的导数为:最后就可以通过链式规则去求得代价函数关于权值ci的偏导数了:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -