深度学习笔记 (一) 卷积神经网络基础 (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
讲授卷积神经网络面临的挑战包括梯度消失.退化问题,和改进方法包括卷积层.池化层的改进.激活函数.损失函数.网络结构的改 进.残差网络.全卷机网络.多尺度融合.批量归一化等 大纲: 面临的挑战梯度消失问 ...
随机推荐
- Adnroid studio 无法 Build APK(s)
报错 Error:java.nio.file.AccessDeniedException: C:\Program Files\Android\android-sdk-windows\.android\ ...
- Drbd双机环境安装配置
一.环境准备 1) 操作系统:ubuntu-14.04.1 x64 2) Ubuntu1 192.168.5.179 /dev/sdb1 主节点 Ubuntu2 192.168.5.178 /dev/ ...
- React Native开发中自动打包脚本
React Native开发中自动打包脚本 在日常的RN开发中,我们避免不了需要将我们编写的代码编译成安装包,然后生成二维码,供需要测试的人员扫描下载.但是对于非原生的开发人员来说,可能不知如何使用X ...
- Swift_下标
Swift_下标 点击查看源码 func testSubscripts() { //下标关键字subscript //array测试 struct TestArray { //内部数组 var arr ...
- python开发的学生管理系统
python开发的学生管理系统(基础版) #定义一个函数,显示可以使用的功能列表给用户 def showInfo(): print("-"*30) print(" 学生管 ...
- 安装 vue-devtools
1. github下载 vue-devtools: git clone https://github.com/vuejs/vue-devtools 2. node install 安装包 3. vi ...
- mysql 多主多从配置,自增id解决方案
MySQL两主(多主)多从架构配置 一.角色划分 1.MySQL数据库规划 我现在的环境是:zhdy04和zhdy05已经做好了主主架构配置,现在需要的是把两台或者多台从服务器与主一一同步. 主机名 ...
- HBase学习(一):认识HBase
一.大数据发展背景 现今是数据飞速膨胀的大数据时代,大数据强调3V特征,即Volume(量级).Varity(种类)和Velocity(速度). ·Volume(量级):TB到ZB. ·Varity( ...
- python学习笔记~INI、REG文件读取函数(自动修复)
引入configparser,直接read整个INI文件,再调用get即可.但需要注意的是,如果INI文件本身不太规范,就会报各种错,而这又常常不可避免的.本文自定义函数通过try...except. ...
- 北京优步UBER司机B组最新奖励政策、高峰翻倍奖励、行程奖励、金牌司机奖励【每周更新】
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...