深度学习笔记 (一) 卷积神经网络基础 (Foundation of Convolutional Neural Networks)
一、卷积
卷积神经网络(Convolutional Neural Networks)是一种在空间上共享参数的神经网络。使用数层卷积,而不是数层的矩阵相乘。在图像的处理过程中,每一张图片都可以看成一张“薄饼”,其中包括了图片的高度、宽度和深度(即颜色,用RGB表示)。
在不改变权重的情况下,把这个上方具有k个输出的小神经网络对应的小块滑遍整个图像,可以得到一个宽度、高度不同,而且深度也不同的新图像。
卷积时有很多种填充图像的方法,以下主要介绍两种,一种是相同填充,一种是有效填充。
如图中紫色方框所示,左边是有效填充,右边是相同填充。在相同填充中,超出边界的部分使用补充0的办法,使得输入输出的图像尺寸相同。而在有效填充中,则不使用补充0的方法,不能超出边界,因此往往输入的尺寸大于输出的尺寸。
下图展示了以3x3的网格在28x28的图像上,使用不同步长、填充方法填充所得到的输出图像的尺寸:
下面借助两个动图来理解一下卷积的过程:
第一种是以3x3的网格在5x5的图像上进行有效填充的卷积过程:
第二种是使用3x3的网格在5x5图像上进行相同填充的卷积过程,动图在:http://cs231n.github.io/convolutional-networks/
回顾整个过程,就是一层一层地增加网络深度,最终得到一个又深又窄的表示,然后把其连接到全连接层,然后训练分类器。
二、局部连接与权重共享
总体而言,局部连接和权重共享都是减少参数的办法,使得特征提取更为有效。
上图中左半部分,是全连接神经网络的示例。图中是一个1000x1000的图像,下一隐藏层有$10^6$个神经元,那么就会有1000x1000x$10^6$=$10^{12}$个参数。
上图右半部分,是局部连接神经网络的示例。图中依然是一个1000x1000的图像,下一隐藏层有$10^6$个神经元,但是使用了一个10x10的卷积核,连接到了10x10的局部图像,那么则会有10x10x$10^6$=$10^8$个参数。
可见局部连接可以很大幅度减少参数的数量。
在实际应用中,有一些情况比较特殊,涉及到了统计不变性的问题。比如我们想识别图像中的动物类别,那么动物在图片中的位置(左上角、中间或是右下角)是不重要的,这叫平移不变性;再比如说,在识别数字的过程中,数字的颜色并不影响结果;又或者说,在语言处理中,一些词汇在句子中的位置并不影响其代表的含义。当两种输入可以获得同样的信息,那么我们就应该共享权重而且利用这些输入来共同训练权重。
在上图中的左半部分,是未使用权重共享的局部连接神经网络的示例。
在上图中的右半部分,则使用了权重共享。图中是一个1000x1000的图像,有100个10x10的卷积核,最终会有100x10x10=10k个参数。使用局部连接和权重共享都大大地减小了参数数量。而共享权重使得统计不变性问题得到了有效解决。
三、池化
通过卷积后,为了引入不变性,同时防止过拟合问题或欠拟合问题、降低计算量,我们常进行池化处理。池化过程如上图所示。因此池化过后,通常图像的宽度和高度会变成原来的1/2。
其中包括了Max pooling 、 Mean pooling和Stochastic pooling三种池化方法。
两种较为常用的是:Max pooling和Mean pooling。Max pooling是选择kernel范围之内的最大值;Mean pooling则是选择kernel范围之内的平均值。
四、LeNet-5中的卷积与池化分析
在LeNet-5中,输入层是32x32的尺寸。
在第一次卷积中,使用了6个卷积核,得到了C1:6张28x28的特征图。
然后进行下采样,得到S2:特征图宽、高变为原来的1/2,即28/2=14,特征图尺寸变为14x14,特征图张数不变。
再进行第二次卷积,使用了16个卷积核,得到了C3:16张10x10的特征图。
然后进行下采样,得到S4:特征图宽、高变为原来的1/2,即10/2=5,特征图尺寸变为5x5,特征图张数不变。
之后进入卷积层C5,120张1x1全连接后的特征图,与S4全连接。
本文图片及内容均参考或来自如下资料:
[1]Udacity的Deep Learning课程:https://cn.udacity.com/course/deep-learning--ud730
[2]Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Neural Networks[J]. Advances in Neural Information Processing Systems, 2012, 25(2):2012.
[3]Lecun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11):2278-2324.
[5]http://www.jeyzhang.com/cnn-learning-notes-1.html
[6]http://blog.csdn.net/stdcoutzyx/article/details/41596663
[7]CS231n: Convolutional Neural Networks for Visual Recognition
[8]http://ibillxia.github.io/blog/2013/04/06/Convolutional-Neural-Networks/
本文是个人的学习笔记,水平有限,如有疏漏,敬请指出,不胜感谢。
深度学习笔记 (一) 卷积神经网络基础 (Foundation of Convolutional Neural Networks)的更多相关文章
- 卷积神经网络用语句子分类---Convolutional Neural Networks for Sentence Classification 学习笔记
读了一篇文章,用到卷积神经网络的方法来进行文本分类,故写下一点自己的学习笔记: 本文在事先进行单词向量的学习的基础上,利用卷积神经网络(CNN)进行句子分类,然后通过微调学习任务特定的向量,提高性能. ...
- CNN学习笔记:卷积神经网络
CNN学习笔记:卷积神经网络 卷积神经网络 基本结构 卷积神经网络是一种层次模型,其输入是原始数据,如RGB图像.音频等.卷积神经网络通过卷积(convolution)操作.汇合(pooling)操作 ...
- 树卷积神经网络Tree-CNN: A Deep Convolutional Neural Network for Lifelong Learning
树卷积神经网络Tree-CNN: A Deep Convolutional Neural Network for Lifelong Learning 2018-04-17 08:32:39 看_这是一 ...
- 动手学习Pytorch(6)--卷积神经网络基础
卷积神经网络基础 本节我们介绍卷积神经网络的基础概念,主要是卷积层和池化层,并解释填充.步幅.输入通道和输出通道的含义. 二维卷积层 本节介绍的是最常见的二维卷积层,常用于处理图像数据. 二维 ...
- [DeeplearningAI笔记]神经网络与深度学习2.11_2.16神经网络基础(向量化)
觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.11向量化 向量化是消除代码中显示for循环语句的艺术,在训练大数据集时,深度学习算法才变得高效,所以代码运行的非常快十分重要.所以在深度学 ...
- 学习笔记TF027:卷积神经网络
卷积神经网络(Convolutional Neural Network,CNN),可以解决图像识别.时间序列信息问题.深度学习之前,借助SIFT.HoG等算法提取特征,集合SVM等机器学习算法识别图像 ...
- 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 【学习笔记】卷积神经网络 (CNN )
前言 对于卷积神经网络(cnn)这一章不打算做数学方面深入了解,所以只是大致熟悉了一下原理和流程,了解了一些基本概念,所以只是做出了一些总结性的笔记. 感谢B站的视频 https://www.bili ...
- SIGAI深度学习第九集 卷积神经网络3
讲授卷积神经网络面临的挑战包括梯度消失.退化问题,和改进方法包括卷积层.池化层的改进.激活函数.损失函数.网络结构的改 进.残差网络.全卷机网络.多尺度融合.批量归一化等 大纲: 面临的挑战梯度消失问 ...
随机推荐
- Android 中Dialog的使用
本文是参考ProAndroid的第10章Working with Dialogs的内容,在合适的地方添加了作者自己的一些见解最终成文. Android 中的对话框是一个展示在当前窗口上的小一号的窗口, ...
- Java中的IO流(三)
上一篇<Java中的IO流(二)>把学习Java的字符流以及转换流作了一下记录,从本篇开始将把IO流中对文件或文件夹操作的对象File类的学习进行一下记录. 一,File类的构造函数及字段 ...
- Linux -- cal/bc/LANGE与帮助文档
cal 显示日历命令 使用cal命令,显示日历 cal [month] [year] 1.显示当前的日历 [root@localhost ~]# cal 一月 日 一 二 三 四 五 六 2.显示指定 ...
- json提取嵌套数据
//数据 string html = "{\"code\":\"0000\",\"desc\":\"\",\& ...
- 『Python基础-11』集合 (set)
# 『Python基础-11』集合 (set) 目录: 集合的基本知识 集合的创建 访问集合里的值 向集合set增加元素 移除集合中的元素 集合set的运算 1. 集合的基本知识 集合(set)是一个 ...
- 对fgets的理解
gets()函数 因为用gets函数输入数组时,只知道数组开始处,不知道数组有多少个元素,输入字符过长,会导致缓冲区溢出,多余字符可能占用未使用的内存,也可能擦掉程序中的其他数据,后续用fgets函数 ...
- 使用Goland同步远程代码
新版本的goland貌似已经有了Deployment功能,故本篇文章描述的方法也不推荐使用了 以前写php时候习惯使用phpstorm这个编译器,除去本身功能强大不说,比较方便的是其自身带的Deplo ...
- HyperLedger Fabric 1.4 Solo模式简介(10.1)
Solo模式指单节点通信模式,该环境中只有一个排序(orderer)服务,从节点(peer)发送来的消息由一个orderer进行排序和产生区块:由于排序(orderer)服务只有一个orderer为所 ...
- ACM数论-卡特兰数Catalan
Catalan 原理: 令h(0)=1,h(1)=1,catalan 数满足递归式: (其中n>=2) 另类递推公式: 该递推关系的解为: (n=1,2,3,...) 卡特兰数的应用实质上都是递 ...
- 安装cuda9.0+cudnn v7+python3.5.3+tensorflow
本机设备 windows10 gtx1060 安装软件及下载地址 python-3.5.3-amd64 链接:https://pan.baidu.com/s/1I3oIDatMgvDLEtaPtvu ...