本系列文章为深度学习笔记,方便自己回看。

卷积计算概述

对于图像识别来说,卷积神经网络的效果要好于全连接神经网络。我在首次接触卷积时,隐约记得在大一高数课程中曾经提及,但具体已经无法名状。何谓卷积,知乎的这个回答,"如何通俗易懂地解释卷积" ,解释得很详细,摘出部分如下,以方便阅读。

"从数学上看,卷积是一种运算。我们称(f*g)(n)为f,g的卷积,其连续的定义为

其离散的定义为

"

我对于以上定义的理解为,存在两个函数f(x)和g(x), 其卷积运算(f * g)(n)是指,对f(x)g(y)这样的乘积进行求和(连续为积分,离散为求和),其中x与y需要满足条件:只能落在二维坐标系形如y=n-x的直线上,这是一条斜率-1,与y轴、x轴交点均为n的直线。更加形象具体的解释,上面知乎相关的问答有很多不错的解释。

在卷积神经网络中,卷积运算是对两个矩阵进行的。如下图,左侧为输入矩阵M,中间为过滤器F(也叫卷积核),F以一定步长在M上进行移动,进行点积运算,得到右侧的输出矩阵O。这个就是卷积神经网络中卷积层最基础的运算。在实际的操作中,还存在一些额外的操作,下面会详细叙述。

该图出自:Convolutional Neural Networks - Basics

输入层

在使用卷积神经网络进行图像识别时,输入为进行过转换的图片数据,一张宽为w,高为h,深度为d的图片,表示为h*w*d。这里,深度为图像存储每个像素所用的位数,比如彩色图像,其一个像素有RGB三个分量,其深度为3。

从数学的角度来看,h*w*d的图片即为d个h*w的矩阵。例如6x16x3的图片,其对应3个6x16的矩阵。在大部分运用中,输入图片的大小h和w,一般是相等的。

过滤器(卷积核)

在卷积运算时,会给定一个大小为F*F的方阵,称为过滤器,又叫做卷积核,该矩阵的大小又称为感受野。过滤器的深度d和输入层的深度d维持一致,因此可以得到大小为F*F*d的过滤器,从数学的角度出发,其为d个F*F的矩阵。在实际的操作中,不同的模型会确定不同数量的过滤器,其个数记为K,每一个K包含d个F*F的矩阵,并且计算生成一个输出矩阵。

一定大小的输入和一定大小的过滤器,再加上一些额外参数,会生成确定大小的输出矩阵。以下先介绍这些参数。

1)Padding。在进行卷积运算时,输入矩阵的边缘会比矩阵内部的元素计算次数少,且输出矩阵的大小会在卷积运算中相比较于输入变小。因此,可在输入矩阵的四周补零,称为padding,其大小为P。比如当P=1时,原5*5的矩阵如下,蓝色框中为原矩阵,周围使用0作为padding。

2)进行卷积运算时,过滤器在输入矩阵上移动,进行点积运算。移动的步长stride,记为S。当S=2时,过滤器每次移动2个单元。如下图,红色框为第一步计算,蓝色框为S=2时的第二步运算。

有了以上两个参数P和S,再加上参数W(输入矩阵的大小),过滤器的大小F,输出矩阵的大小为

对于5x5的输入矩阵,过滤器大小F=3,P=1,S=1,其输出矩阵的大小为(5-3+2)/1+1=5。可见,在步长S为1,且进行了P=1的padding后,其输出矩阵的大小和输入一致。

现在考虑当输入有多个深度时的情况。当输入为5x5x3,P=1,并且有K个过滤器时,每一个过滤器都为3x3x3。这里,我们把输入的3个7x7矩阵(5x5进行padding后得到7x7)命名为M1,M2,M3,第k个过滤器(0<k<K)的3个3x3矩阵命名为F1,F2,F3,输出的第k个矩阵(0<k<K)命名为Ok。卷积运算中,输入矩阵M1和过滤器F1,M2与F2,M3与F3进行卷积运算。卷积运算详细过程如下

1. 在M1中,从最左上角,取感受野大小F*F的子矩阵,与F1进行点积运算,即对应位置元素相乘,再求和得到结果O11.

2. M2和F2进行同样的运算,得到结果O22;M3和F3得到O33.

3. O11+O22+O33相加,再加上偏移量b0,得到输出矩阵Ok左上角的第一个元素.

4. 按照步长S,从M1,M2,M3中获取另外一个感受野大小的区域,对应F1,F2,F3进行步骤1~3的计算,最终得到完整的输出矩阵Ok

5. 更换过滤器k+1,重复1~4的运算,得到K个输出矩阵。

总结以上过程,输出矩阵的每一个元素,是由对应过滤器不同深度的矩阵,作用于相应深度输入矩阵的不同位置,进行点积运算,再加上偏移量bias所得。

在斯坦福的卷积神经网络课程有,有一个很典型的例子如下。此处分析两个步骤,完整的例子见以下链接。

http://cs231n.github.io/convolutional-networks/

在这个例子中,输入矩阵为5*5*3,即W=5,填充P为1,过滤器有K=2个,每个过滤器的大小为3*3*3,即F=3,同时设定计算步长S=2。这样可得到输出中单个矩阵的大小为(5-3+2*1)/2+1=3,由于K=2,所以输出的3*3矩阵有2个。下面为具体的计算过程

1. 首先从输入矩阵的最左边开始取得3*3的感受野,每一个深度的输入矩阵对应每一个深度的过滤器,进行点积运算,然后加上偏移Bias,得到第一个输出矩阵的第一个元素。详细过程为

输入矩阵1:r1 = 0*0+0*1+0*1+0*(-1)+1*0+0*0+0*1+0*0+1*0=0

输入矩阵2:r2 = 0*0+0*0+0*0+0*1+0*0+0*1+0*0+2*0+0*0 = 0

输入矩阵3:r3 = 0*(-1)+0*(-1)+0*0+0*0+0*0+2*(-1)+0*(-1)+0*0+2*0 = -2

输出矩阵元素(绿框中元素)O11 = r1+r2+r3+b0 = -1

2) 然后将感受野在3个输入矩阵上同时移动2个步长,如蓝框所示,重复1)中描述的运算,得到O12=-1,计算过程此处不再赘述。

3)将感受野在输入矩阵中依次移动,当完成第一个输出矩阵的计算后,使用第二个过滤器再重复一次,得到第二个输出矩阵。卷积计算完成。

在上面的计算中,每一个深度上的输入矩阵,其每一个步长的计算都是用同一个过滤器矩阵,这个现象被称为参数共享(parameter sharing)。其实这是一种简化,在未简化的情况下,同一深度矩阵上每一个步长的卷积计算,都需要使用不同的过滤器,这样会造成神经网络中参数过多,所以在实际操作中,会采取如上所述的参数共享策略,减少参数个数。

到此,卷积神经网络卷积层的计算理论部分已经说完。下面一篇文章将从开发的角度,详细分析下,在实际的计算中,具体的数据结构和计算方法。

参考文献:

1. Convolutional Neural Networks (CNNs / ConvNets)

2. Convolutional Neural Networks - Basics

3. 如何通俗易懂地解释卷积

卷积神经网络详解 - 卷积层逻辑篇相关推荐

  1. 最形象的卷积神经网络详解:从算法思想到编程实现(转载)

    mark一下,感谢作者分享! 原标题:最形象的卷积神经网络详解:从算法思想到编程实现 1 新智元推荐 查看全文 http://www.taodudu.cc/news/show-4611564.html ...

  2. 机器学习Basics-第九期-CNN卷积神经网络详解

    https://www.toutiao.com/a6641017865849799182/ 2019-01-01 22:07:39 背景 本系列已经经过八期,已经涉及到了矩阵运算.神经元.过拟和.激励 ...

  3. CNN卷积神经网络详解

    1.cnn卷积神经网络的概念 卷积神经网络(CNN),这是深度学习算法应用最成功的领域之一,卷积神经网络包括一维卷积神经网络,二维卷积神经网络以及三维卷积神经网络.一维卷积神经网络主要用于序列类的数据 ...

  4. 3D卷积神经网络详解

    1 3d卷积的官方详解 2 2D卷积与3D卷积 1)2D卷积 2D卷积:卷积核在输入图像的二维空间进行滑窗操作. 2D单通道卷积 对于2维卷积,一个3*3的卷积核,在单通道图像上进行卷积,得到输出的动 ...

  5. CNN(卷积神经网络)详解

    Why CNN 首先回答这样一个问题,为什么我们要学CNN,或者说CNN为什么在很多领域收获成功?还是先拿MNIST来当例子说.MNIST数据结构不清楚的话自行百度.. 我自己实验用两个hidden ...

  6. 深度学习之CNN卷积神经网络详解以及猫狗识别实战

    文章目录 CNN 解决了什么问题? 需要处理的数据量太大 图像简单数字化无法保留图像特征 CNN核心思想 局部感知 参数共享 卷积神经网络-CNN 的基本原理 卷积--提取特征 池化层(下采样)--数 ...

  7. 经典卷积神经网络详解(AlexNet、VGG、NiN、GoogLeNet、ResNet、DenseNet、CSPNet、Darknet、EfficientNet、SqueezeNet..)

    文章目录 经典网络 LeNet : 基础图像识别网络 (1998) AlexNet:深度卷积网络 (2012) ZFNet : 大型卷积网络 (2013) VGGNet:使用块的网络 (2014) N ...

  8. 图像特征提取(VGG和Resnet特征提取卷积过程详解)

    图像特征提取(VGG和Resnet算法卷积过程详解) 第一章 图像特征提取认知 1.1常见算法原理和性能 众所周知,计算机不认识图像,只认识数字.为了使计算机能够"理解"图像,从而 ...

  9. 花书+吴恩达深度学习(十)卷积神经网络 CNN 之卷积层

    目录 0. 前言 1. 2D 图像卷积 2. 3D 图像卷积 3. 过滤器(核函数) 4. 过滤器应用于边缘检测 5. padding 填充 6. stride 步长 7. 使用卷积的动机 8. 1乘 ...

最新文章

  1. 助力科研 越海扬波发力高性能计算应用
  2. mysql comment
  3. Linux vim的w,q,!,/
  4. Failed to create the Java Virtual Machine
  5. mysql 表字段信息从一张表迁移到另一张表_MySQL(数据库)笔记
  6. 20191001:String,StringBuffer,StringBuilder类异同辨析
  7. LC3无重复最长字串
  8. 如何安装JAVASE平台
  9. Chrome 扩展程序——FireShot:网页截图工具
  10. LAMP架构超详细搭建步骤
  11. win10隐藏任务栏_推荐我使用的一个任务栏软件:7+ Taskbar Tweaker
  12. Router路由守卫
  13. 每周阅读精选(2013-02-18)
  14. 财务数字大小写转换函数代码
  15. 超级表格的高级使用者都在用视图做些什么?
  16. SpringCloud 微服务工具集v1.1
  17. 太太丘舍去_太丘舍去,去后乃至(离开)——青夏教育精英家教网——
  18. 给文本框添加灰色提示文字
  19. 查看HDFS文件系统数据的三种方法
  20. CSS样式表中的颜色表

热门文章

  1. 随手记——Linux中C语言调用shell指令的三种方式
  2. SAP ERP 的模块
  3. 全球及中国半导体晶圆研磨设备行业商业模式分析及投资风险预测2022年版
  4. 习题7-6 统计大写辅音字母
  5. IDWKKLLDAAKQIL-NH2|872043-01-1
  6. 500并发的服务器要求性能,500个并发服务器要什么配置
  7. 基于ESP32 IDF开发FOC(1)-AS5600角度读取
  8. laravel配置路由会报404 Not Found
  9. Bowtie2 基因组mapping
  10. ADB命令杀死终端应用方法