前记:20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时,发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络(Convolutional Neural Networks-简称CNN)。现在,CNN已经成为众多科学领域的研究热点之一,特别是在模式分类领域,由于避免了对图像复杂的前期预处理操作,可以直接输入原始图像,因而得到了更为广泛的应用。

卷积神经网络(CNNs / ConvNets):

卷积神经网络和之前学的普通神经网络很相似:它们都是由神经元组成和具有学习能力的权重和偏差。每个神经元给与输入数据,进行内积运算及激活函数运算等;整个网络同样有一个可导的评分函数,输入是原始的图像像素,输出是不同类别的评分;在最后一层(全连接层),有一个损失函数(比如 SVM 或 Softmax),之前介绍的神经网络的各种技巧仍旧适用于卷积神经网络。
所不同的是,卷积神经网络的输入数据是图像,所以它具备一些特有的性质,使得前向传播函数的实现更加高效,并且大幅度降低神经网络中的参数数量。

卷积神经网络结构:

在CIFAR-10中,图像的尺寸是32x32x3(宽,高均为32像素,3个颜色通道),所以对应的的普通神经网络的第一个隐层中,每一个单独的全连接神经元有:32x32x3=3072个权重。当面对更大尺寸的图像时,例如一个尺寸为200x200x3的图像,权重数量变为:200x200x3=120,000。而网络中不止一个神经元,此时参数的数量就会快速增加,这种全连接方式效率很低,而且大量的参数也很快会导致网络过拟合。
卷积神经网络针对这一点做了改进:
(1)它不采用全连接,而是采用局部连接。卷积神经网络中会选择一个局部区域,用这个局部区域去扫描整张图片,然后将该局部区域内的节点连接到下一层的一个节点上,参见下图(以下附图多选自参考5)。该连接的空间大小叫做神经元的感受野(receptive field),它的尺寸是一个超参数(就是滤波器的空间尺寸)。
  图1.
上图中红色方框叫做 filter 或 kernel 或 feature detector,表示为: 
filter的范围叫做filter size,上图用的是2x2的filter size。
(2)空间共享。即将卷积kernel看做提取特征的方式,它与位置无关。也即图像一部分的统计特性与其他部分是一样的,在这一部分学习的特征也能用在另一部分上,所以对于图像上的所有位置,都能使用同样的学习特征。
  图2.
ps:通过一个合理的假设:如果在图像某些地方探测到一个水平的边界很重要,那么在其他地方也同样如此。此时使用参数共享则可以大大减少权重参数的数量。 当然,参数共享有时却是不合理的,特别是当卷积神经网络的输入图像具有明确中心结构的时候,这时候如果期望在图片的其他不同位置可以学习到和中心结构完全不同的特征,则应该放松参数共享的限制。例如当输入图像是人脸,人脸一般都处于图片的中心位置,如果期望在图像的其他位置可以学习到不同的特征,比如眼睛或者头发特征,那么就应该放松参数共享的限制。
(3)输出表达和神经元的多维排列。卷积后的输出若用图2的排列方式则丢失了平面结构信息,卷积神经输入是图像,所以可以采用矩阵方式排列,见下图3;图像可以是彩色三维图像,所以与常规神经网络不同,卷积神经网络的各层神经元也可以3维排列:宽度、高度和深度(这里的深度是指激活数据的第三个维度,而不是网络的深度,网络的深度是指网络的层数),见下图4。
  图3.
注意:三个维度的权重并不共享,不同维度可以使用各自的权重。 
  图4.
(4)多filter。每个filter可以抓取特定的形状,只有一种特征的提取很可能是不充分的,所以可以添加多个卷积核。 例如下图5:

  图5.

对同一图片,经过两个(红色、绿色)不同的filters扫描后,得到不同特点的Feature Maps。此时卷积层的输出是和输入一样多depths的长方。如下图6所示,当增加一个filter(紫色)后,就新得到一个Feature Map。 将不同filters卷积得到的Feature Maps按顺序堆叠后,就得到了一个卷积层的最终输出。
  图6

构建网络的层:

一个简单的卷积神经网络是由各种层按照顺序排列组成的,网络中的每层使用可微分函数将激活数据在层间传递。卷积神经网络主要由三种类型的层构成:卷积层,汇聚(Pooling)层和全连接层(和普通神经网络一样)。
课中给出了一个用于CIFAR-10图像数据分类的卷积神经网络的结构:[输入层--卷积层--ReLU层--汇聚层--全连接层],具体为:
  • 输入[32x32x3]大小的图像原始像素值,其中:32*32为图像宽高,3个颜色通道。
  • 卷积层中,神经元与输入层中的一个局部区域相连,每个神经元都计算与输入层相连的区域与权重的内积。卷积层计算出所有神经元的输出。如果使用12个滤波器,得到的输出数据维度为[32x32x12]。
  • ReLU层将每个元素送入激活函数,比如将作为激活函数。该层不改变数据尺寸,还是[32x32x12]。
  • 汇聚层在在空间维度(宽度和高度)上进行降采样操作,数据尺寸变为[16x16x12]。
  • 全连接层计算分类评分,数据尺寸变为[1x1x10],其中10表示CIFAR-10中10个类别的分类评分值。

经过逐层操作,将图像从原始像素值变换成最终的分类评分值。上面各层中并非都含有参数,有的含有参数,有的没有。

  图7.

(一)卷积层

卷积层是如上面用filter进行卷积操作的层,它是卷积神经网络的核心层。另外补充一下课中提到的空间分布的知识点:输出数据中神经元的数量及其排列方式。
(1)输出数据的深度是一个超参数:它和所用滤波器的数量相同。如果第一个卷积层的输入是原始图像,那么在深度维度上的不同神经元可能被不同方向的边界,或颜色斑点所激活。这些沿着深度方向排列、感受野相同的神经元集合称为深度列(depth column)或纤维(fibre)。
(2)在滑动滤波器的时候,必须指定步长。步长为1表示滤波器每次移动1个像素,步长为2则滤波器滑动时每次移动2个像素。这会让输出数据体在空间上变小。
(3)零填充。零填充可以控制输出数据体的空间尺寸(保持输入数据体和输出有相同的尺寸)。
ps: 输出数据在空间上的尺寸可以通过输入数据的尺寸(W),卷积层中神经元感受野的尺寸(F),指定步长(S)和边界零填充的数量(P)计算出来。公式为:
例如:输入尺寸是7x7,滤波器尺寸是3x3,指定步长为1,填充为0,那么输出尺寸为:(7-3+1)*(7-3+1)=5x5。如果步长为2,输出就是3x3。
上面例子中神经元的权重是[1,0,-1],见图的右上角,这些权重被黄色的神经元共享;偏差值为0。下面的输入数据进行零填充,尺寸变为7,输出得到和填充前输入数据一样的尺寸。
上述空间排列的超参数是相互限制的。例如,当输入尺寸为:W=10,如果不使用零填充,即P=0,滤波器尺寸为:F=3,这时步长S=2便行不通,因为(W-F+2P)/S+1=(10-3+0)/2+1=4.5,结果不是整数,此时神经元不能整齐对称地滑过输入数据体。这时需要修改零填充量,或者输入数据体尺寸等手段使神经网络正确运行而不报错。

(二)汇聚层

如上图7中,在连续的卷积层之间会周期性地插入汇聚层,它的作用是逐渐降低数据的空间尺寸,减少网络中参数的数量,这可以减少计算资源的耗费,同时可以有效控制过拟合。汇聚层一般使用MAX操作(当然也可以使用其他操作,如取平均或L-2范数汇聚等方式,但实践证明,最大汇聚的效果要更好),它对输入数据的每一个深度切片都是独立进行的。汇聚层最常见的形式是使用尺寸为:2x2的滤波器,设置步长为2对每个深度切片进行降采样。每个MAX操作从4个数字中取一个最大值,这可以将75%的激活信息丢掉。对于汇聚层,一般由:
  • 接受尺寸为:的输入数据;
  • 有两个超参数:空间大小、步长
  • 输出数据尺寸为:,其中:

  • 对输入数据进行固定函数计算,所以该层没有引入参数;
  • 在汇聚层中一般不使用零填充。

图9.

ps: 汇聚层并不是一定需要存在的,比如在Striving for Simplicity: The All Convolutional Net一文中,作者提出一种只使用重复的卷积层组成的结构,通过在卷积层中使用更大的步长来降低数据的尺寸,而不再使用汇聚层。在训练一个良好的生成模型时,弃用汇聚层是很重要的,比如变化自编码器(VAEs:variational autoencoders)和生成性对抗网络(GANs:generative adversarial networks)。
汇合层的引入是仿照人的视觉系统对视觉输入对象进行降维(降采样)和抽象。普遍认为汇合层有如下三种功效:
(1)特征不变性。汇合操作使模型更关注是否存在某些特征而不是特征具体的位置,可看作是一种很强的先验,特征学习包含某种程度的自由度,容忍一些特征微小的位移。
(2)特征降维。由于汇合操作的降采样作用,结果中的一个元素对应于原输入数据的一个子区域,相当于在空间范围内做了维度约减,使模型可以抽取更广范围的特征,并减小计算量和参数个数。
(3)在一定程度防止过拟合,方便优化。

(三)归一化层

在卷积神经网络结构中,曾提出了很多不同种类的归一化层,有时候是为了实现在生物大脑中观测到的抑制机制。但是实践证明它们的效果极其有限和不显著,所以现在不再流行。

(四)全连接层

和普通神经网络一样,全连接层中的神经元与前一层中所有的激活数据都是连接的。全连接层和卷积层的不同点在于卷积层中的神经元只与输入数据中的局部区域相连,并且卷积列中的神经元共享参数。但是这两种层的神经元都是计算点积,它们的函数形式是一样的,所以这两种层是可以相互转化的,并且将全连接层转化为卷积层在实际运用中是很有用的一种操作。

卷积神经网络的结构:

由于归一化层并不常用,所以一般的卷积神经网络的结构模型为:卷积层,汇聚层(一般为最大值汇聚)和全连接层(简称FC),ReLU激活函数也算是一层。
卷积神经网络最常见的形式是将一些卷积层和ReLU层放在一起,然后是汇聚层,重复上述结构,直到图像被缩小到一个足够小的尺寸,或在某个地方过渡成全连接层,最后由全连接层得到输出结果。

ps:几个小滤波器卷积层的组合比一个大滤波器卷积层效果要好。几个小滤波器卷积层的组合方式可以从输入数据中提取出更多,更强的特征,同事使用更少的参数;缺点是在进行反向传播时,中间的卷积层可能会占用更多的内存。

层的尺寸设置规律:

(1)输入层尺寸应能被2多次整除,即2的n次幂,例如:32(CIFAR-10),64,96(STL-10),224(ImageNet),384和512。
(2)卷积层应使用小尺寸滤波器(比如3x3,最多5x5),步长S=1。还有就是对输入数据进行零填充,这样卷积层就不会改变输入数据在的尺寸。如果必须使用更大的滤波器尺寸(比如7x7等),通常只用面对原始图像的第一个卷积层上。
(3)汇聚层对输入数据进行空间上的降采样。最常用的设置是2x2感受野(F=2)的最大值汇聚,步长为2(S=2)。不常用的设置有使用3x3的感受野,步长为2。最大值汇聚的感受野尺寸很少超过3,因为尺寸过大会使得汇聚操作过于激烈,造成数据信息丢失严重,从而导致算法性能变差。

卷积神经网络领域中比较有名的几种结构:

  • LeNet: 第一个成功的卷积神经网络应用,最著名是被应用在识别数字和邮政编码等的LeNet结构。
  • AlexNet:AlexNet卷积神经网络在计算机视觉领域中受到欢迎,2012年AlexNet在ImageNet ILSVRC 竞赛中夺冠,并且性能远超第二名。其结构和LeNet类似,但是比之更深,更大,并使用层叠的卷积层来获取特征(之前通常只用一个卷积层,在其后跟着一个汇聚层)。
  • ZF Net:它在ILSVRC 2013比赛中夺冠,它被称为 ZFNet。它对AlexNet的改良操作是:增加中间卷积层的尺寸,让第一层的步长和滤波器尺寸更小。
  • GoogLeNet:它由谷歌的Szeged等实现,在ILSVRC 2014夺冠。它主要的贡献是实现了一个奠基模块,显著地减少了网络中参数的数量(AlexNet有60M,该网络只有4M)。
  • VGGNet:ILSVRC 2014的第二名是Karen Simonyan和 Andrew Zisserman实现的VGGNet,它展示出网络深度是算法优良性能的关键。他们最好的网络包含16个卷积层/全连接层,从头到尾全部使用的是3x3的卷积和2x2的汇聚。
  • ResNet:残差网络(Residual Network)是ILSVRC2015的胜利者,作者何恺明等人(视频,PPT)。它使用了特殊的跳跃链接,大量使用了批量归一化(batch normalization)。何开明等后来对原始结构做过一些优化,参看论文Identity Mappings in Deep Residual Networks。

后记:感觉CNN这块知识点挺多的,cs231n也只是尽量讲解了重要的概念点,后面再认真看下参考6。

参考:

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

https://zhuanlan.zhihu.com/p/22038289?refer=intelligentunit

《技术向:一文读懂卷积神经网络CNN》

《机器视角:长文揭秘图像处理和卷积神经网络架构》

《YJango的卷积神经网络——介绍》

《解析卷积神经网络——深度学习实践手册》

斯坦福大学深度学习公开课cs231n学习笔记(10)卷积神经网络相关推荐

  1. 斯坦福大学 iOS 开发公开课总结

     斯坦福大学 iOS 开发公开课总结 前言 iPhone 开发相关的教程中最有名的,当数斯坦福大学发布的 "iPhone 开发公开课 " 了.此公开课在以前叫做<iPhone ...

  2. ios专题 - 斯坦福大学iOS开发公开课总结

    转自:http://blog.devtang.com/blog/2012/02/05/mvc-in-ios-develop/ 前言 iphone开发相关的教程中最有名的,当数斯坦福大学发布的" ...

  3. 斯坦福大学iOS开发公开课总结

    前言 iphone开发相关的教程中最有名的,当数斯坦福大学发布的"iphone开发公开课"了.此公开课在以前叫做<iphone开发教程>,今年由于平板电脑的流行,所以也 ...

  4. 《TensorFlow深度学习》学习笔记--10.卷积神经网络--1.LeNet-5实战

    1. LeNet-5 实战 1. 导入相关的包 import tensorflow as tf from tensorflow.keras import Sequential, layers, los ...

  5. 转:深度学习课程及深度学习公开课资源整理

    http://www.52nlp.cn/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E8%AF%BE%E7%A8%8B%E6%B7%B1%E5%BA%A6%E5%AD%A ...

  6. 学习:深度学习公开课

    [转] http://www.leiphone.com/news/201701/0milWCyQO4ZbBvuW.html 导语:入门机器学习不知道从哪着手?看这篇就够了. 在当下的机器学习热潮,人才 ...

  7. 复旦大学python教学视频_B站资源推荐:复旦大学机器学习、深度学习公开课,附PDF课件下载...

    点击"机器学习算法与Python实战","置顶"公众号 重磅干货,第一时间送达 推荐语 向大家推荐两个复旦大学的公开课,分为机器学习篇和深度学习篇.这套课程在中 ...

  8. Deep Learning 9_深度学习UFLDL教程:linear decoder_exercise(斯坦福大学深度学习教程)...

    前言 实验内容:Exercise:Learning color features with Sparse Autoencoders.即:利用线性解码器,从100000张8*8的RGB图像块中提取颜色特 ...

  9. 谷歌深度学习公开课任务 5: Word2VecCBOW

    为什么80%的码农都做不了架构师?>>>    本文由码农场同步,最新版本请查看原文:http://www.hankcs.com/ml/cbow-word2vec.html 课上讲的 ...

最新文章

  1. 初识JavaScript(二)
  2. 名为 cursor_jinserted 的游标不存在_质量工程师必须了解的测量常识,你不知道怎么行...
  3. PWN-PRACTICE-BUUCTF-13
  4. RocketMQ学习
  5. Log4j2使用总结
  6. Python爬虫入门教程 15-100 石家庄政民互动数据爬取
  7. servletcheckbox选中和未选中判断_【微课堂】2020【1期】如何判断牛市启动,春季布局思路! 2020.1.4...
  8. 单片机定时器之改良版:时间轮定时器
  9. Myeclipse性能优化
  10. python曲线和直线的交点_求直线与分段线性曲线的交点
  11. ThinkPHP 漏洞利用工具
  12. Lottie动画的使用
  13. pythonobject转int_object怎么转换成float数据
  14. traceroute不通linux,能ping通traceroute不通
  15. directx 11 64位
  16. Unity(四十五):光照烘焙
  17. DTAS 3D在车身公差分析中的应用案例
  18. BFS解决一般性的泊松分酒问题
  19. SqLite 文件查看编辑工具
  20. 信息系统安全策略的概念与内容

热门文章

  1. 《精彩网址大全——工商经济科学教育卷》内容简介
  2. 目标检测——数据获取和标注(一)
  3. riak数据库php7,Riak (Engine)
  4. 期货接盘(期货接盘什么意思)
  5. 十进制转k进制 k进制转十进制
  6. define的边缘效应
  7. To the MAX(蓝书刷题记录)
  8. 高等教师资格证考试复习笔记-高等教育学-(6)-高等学校的教师和学生
  9. es filter中使用should
  10. java 静态区在jvm哪里,JDKJREJVM这三者的联系与区别///java跨平台///堆栈常量区静态区...