吴教授的CNN课堂:基础篇 | 卷积和池化

下篇传送门:
吴教授的CNN课堂:进阶 | 从LeNet到残差网络(ResNet)和Inception Net

等了一个月,吴教授的Deeplearning.ai的第四部分,也就是关于卷积神经网络(Convolutional Neural Network,简写CNN)的课。

作为吴教授的忠实门徒(自封),除了在课堂上受到吴教授秀恩爱暴击外,当然也要好好做笔记。虽然之前也有过一些CNN基础,但这次收益还是挺多的。

CNN目前主要用于?

CNN目前主要用于CV领域,也就是计算机视觉领域。

很多当前最先进的计算机视觉方面的应用,如图片识别,物体检测,神经风格转换等等,都大量使用到了CNN。

而且不光是CV领域,很多CNN在CV领域应用的很多技巧,其他领域也可以从其中借鉴到很多,如自然语言处理。

为什么要用CNN

首先,假如我们要进行一个图像识别任务?这里就不用已经都快被玩烂了的的MNIST,用吴教授课上的SIGNS数据集(包含了用手势表示的从0到5的图片)。目标任务就是,给一个手势,识别出代表数字几。

如果是上过之前吴教授机器学习的同学的话,那么可能会问,为什么要用CNN呢?

何不直接像机器学习课里面一样,将图片拍扁(flatten),也就是直接将(高 x 宽 x 通道(如RGB))的图片展成一个一维向量呢。如SIGNS,本来是64x64x3的图片,我们将它拍成1x12288的向量。

之后直接输入全连接网络(即一般我们认为的神经网络),中间加点隐层,最后一层用softmax压一下直接输出结果就好了。

我们可以这样设计网络结构,第一层12288个单元,然后中间三个隐层,分别是1028个单元、256个单元、64个单元,最后一层6个单元,也就是我们的分类数。

搭建好网络后,然后训练。这样子确实也可以得到还过得去的结果,大概70~80%。但是相信大家也发现了,这样子搭建的网络需要很多很多参数,如这个例子里面

也就是大约一千三百万个参数。

而这个例子还只是很小的图片,因为只有64x64大小,而现在随意用手机拍张照片就比这大很多。处理这些图片时,用全连接网络搭建出来的网络的参数个数,将会是一个天文数字,不光优化困难,而且性能也不怎么样。

而这时候,就是CNN大展神威的时候了。只需要多少参数呢?之后再揭晓揭晓。

CNN基础:卷积层

卷积 Convolution

CNN网络最主要的计算部分就是首字母C,卷积(Convolutional)。

如下图,这里的一次卷积运算指的是,当我们有一个过滤器(filter),即下图移动的方块,将这个方块对应要处理的输入数据的一部分,然后位置一一对应相乘,然后把结果再相加得到一个数。

一个过滤器对一张图片进行卷积运算时,往往要进行多次卷积运算,对一部分进行计算完之后,然后移动一点距离再计算,继续移动,计算... 直到处理完整张图片。

为什么叫做过滤器呢(也有叫做kernel(核)的)?

因为我们可以把每个过滤器,当做是设定了一定条件的特征检测器,把不属于检测条件的都过滤掉。只有当前卷积的区域符合这个过滤器设置的条件时,卷积计算结果才会得到一个比较大的数。

举个栗子,如用于检测垂直和水平边线的过滤器。

可以试着自己计算一下。如下图,如果用灰度表示的话,黑的地方是255,白的地方是0。用上面的Gx来卷积下面这张图的话,就会在中间黑白边界获得比较大的值。

而CNN中会有很多个过滤器,每个过滤器对图片进行卷积后,会得到下一个结果的一个通道。CNN厉害的地方在于,过滤器的特征并不是人为设定的,而是通过大量图片自己训练出来的

这样也就增加了它的灵活性,而且因为视觉底层特征的兼容特性,因此也保证了迁移学习的可能。

步长(Stride)与填充(Padding)

上面说了卷积计算,但还有一些小的细节没提。

如果用(f, f)的过滤器来卷积一张$(h, w)$大小的图片,每次移动一个像素的话,那么得出的结果就是(h-f+1, w-f+1)的输出结果。f是过滤器大小,h和w分别是图片的高宽。

如果每次不止移动一个像素,而是两个像素,或者是s个像素会怎么样呢。

那么结果就会变为


这个s被称为步长。

但是如果每次这样子进行卷积的话,会出现一个问题。只要是$f$和$s$的值比1要大的话,那么每次卷积之后结果的长宽,要比卷积前小一些

因为这样子的卷积,实际上每次都丢弃了一些图片边缘的信息。一直这样卷积的话,一旦卷积层过多,就会有很多信息丢失。为了防止这种情况的发生,我们就需要对原来的图片四周进行填充(padding)。

一般都会用“0”值来填充,填充1就代表对周围填充一圈,如上图。填充2就填充两圈,填充为p就是p圈,长宽各增加2p。

有了填充之后,每次卷积后的大小会变为

此时假设卷积后高不变

那么我们可以获得

假设s步长为1,那么

也就是如果过滤器的高h=5的话,那么为了保持输出高宽不变,那么就需要p=2。

上面这种保持卷积前后高宽不变的填充方式叫做"Same(相同)填充"。

分数情况

之后来讨论一下分数情况吧。

万一f是4或者6这样的数呢,那么得到的p岂不是分数,怎么填充。答案是,那f就不要取偶数嘛。这就是为什么一般默认的过滤器大小都是5、7、11这样的单数。

好的,解决了填充的情况,那么如果输出的

是分数怎么办。如h=6,f=3,p=0,s=2的情况下,按照公式计算会得到2.5。一般的处理是,只取整数部分。

而这种p=0,然后结果取整数部分的处理方式,叫做"Valid(有效)填充"。

CNN基础:池化(Pooling)层

除了上面的卷积层,CNN里面还有一个很重要的部分,池化层。

一般会跟在卷积层之后,主要用到的Pooling层主要由有Max PoolingAverage Pooling, 也就是最大池化和平均池化。

其实概念很简单,最大池化就如下图。假设有一个2x2的窗口,每次移动步长也为2,每次对窗口里的数取最大值,然后输出。

同样的平均池化,则就把取最大值这个操作换成取平均值就行了。

除了上面两种池化方式,当然还有一些其他的池化方法,如k-Max Pooling之类的,但是应用很少。在最大和平均两个里面,也是最大池化比较常用

池化层输出大小的转换也和卷积层比较类似,用

来计算,一般池化层不用填充。而且池化层没有要需要训练的参数。

CNN基础:组合

有了卷积层和池化层两大部件之后,就只剩下组合了。下图是吴教授手绘LeNet-5网络。

结构很简单大概是这样子Input -> Conv1 -> Pool1 -> Conv2 -> Pool2 -> (Flatten) -> FC3 -> FC4 -> Output

Conv是卷积层,Pool是池化层,FC指的是全连接网络层(Full-Connected)。其中Flatten指的是,因为卷积网络输出的数据形状(3维),和紧接着的全连接网络的输入形状(1维)不吻合,所以需要进行一些处理。

就是之前在直接用全连接网络提到的,把卷积网络的输出拍扁(flatten),把三维的拍成一维,之后再输入全连接网络。

建议大家可以按照前面提到的形状变换公式,还有吴教授的手绘图,亲自把LeNet-5过一遍,对之后编程CNN很有帮助的。

关于前面的参数个数的问题,用上面这个LeNet-5来处理的话

也就是大概114万。

一下子就缩小了一个数量级,当然对于越大的图片这个差还会更加大。

结尾

这就是吴教授CNN课堂的第一周上的内容了。这次在通道这个概念有了很多新的看法。

如果想要自己修的话,直接Coursera Deeplearning ai就能搜索到课程。

Coursera小技巧,点击注册,不想付钱的话,点左下角的那个小小的旁听就好了。之后想拿证的时候再充值。

习题很简单,这里是我的练习解答,如有困难可以参考。 repo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容