深度学习笔记 II – 卷积神经网络的直观解释 B - Convolution & Pooling StepsteemCreated with Sketch.

in #cn8 years ago

#1 深度学习笔记 I – 卷积神经网络的直观解释 A - 整体结构

上一篇记录了卷积神经网络的整体结构,这一篇具体记录卷积神经网络中的主要四大步骤中的2个。

卷积 (Convolution Step)

卷积神经网络的名字的由来即是因为这一步卷积的操作。卷积操作在卷积神经网络中最主要的目的是为了获取输入的图片的特征。卷积操作通过使用一个输入的小正方形数据来学习图像特征(Feature),从而保持图像的像素之间的空间关系(spatial relationship),好像有点拗口,这背后的数学原理我不打算学习了,毕竟做工程的是为了学习如何使用卷积神经网络。

用一个很简单的例子就能说明什么叫做Convolution了。之前说了图片就是一个大矩阵,例如一个5X5的灰度图片,假设它的像素值只有0和1(真实值应为0-255)。


微信截图_20171025201935.png

假设还有另外一个小的矩阵,3X3的尺寸。

微信截图_20171025202149.png

这两个5X5和3X3的矩阵按照动图中的方式计算,得到一个新的矩阵,这个新的矩阵就叫做特征图(Feature Map)。橘色小矩阵在大矩阵中滑动,这个滑动的长短,被叫做步幅(Stride)。小矩阵中数值和它在原始矩阵中mapping到的数值元素依次相乘,然后将乘积相加得到的数值写入特征图中。

convolution_schematic.gif
Image source [1]

在CNN中,这个3X3的小矩阵被叫做过滤器(Filter,Feature detector,kernal),既然名字叫做kernal,它的重要程度可想而知。过滤器在原始矩阵上滑动,做乘法和加法的结果就被叫做Convolved Feature , Activation Map 或者Feature Map。

所以同一张图片,如果用的过滤器不同,得到的Feature map也是不相同的。


微信截图_20171025203615.png

不同的过滤器,可以用来检测不同的图片特征。更多的例子这里讲的不错

微信截图_20171025203652.png

这张动图很好的解释了不同的过滤器如何在原始图片上做卷积操作的。

giphy.gif
Image source [2]

重点来了,总说机器学习,学习的到底是什么?学习的就是如何得到过滤器中的数值。在学习过程中总结出的过滤器越多,就意味着神经网络可以得到更多的图片特征,神经网络就更容易识别出那些未事先过目的图片。

关于特征图(Feature map)的大小尺寸是由三个参数来决定的[3]:

Depth(深度):深度意味着在卷积操作中使用了多少个过滤器。下图中的卷积操作使用了三个不同的过滤器分别对原始图片进行卷积操作,所以结果是得到了三个不相同的特征图,我们可以把这三张不同的特征图想象成是叠在一起的二维矩阵,所以层数即是深度(Depth),这个例子的深度就是3。

微信截图_20171025205016.png

Stride(步幅):步幅指的是过滤器在原始图片上滑动的步长,如果步幅是1,那就一次滑动一个像素。如果是2,就滑动两个像素。
Zero-padding(零填充) :如果字边缘的像素怎么办呢?边缘的像素点没有相邻的像素,过滤器怎么才能对它们进行探测呢?方法就是在原始图片的边界外进行零填充。这也引入两个名词,根据有没有零填充将卷积操作划分为宽卷积和窄卷积(wide convolution和narrow convolution)[4]。

未想到好名字不喜欢池化这个名字 (Pooling Step)

Pooling是为了降低了每个特征图的维度,但保留了它最重要的信息。 例如保留最大值,求平均值,求和等。
例如最大值Pooling,和过滤器类似,定义一个小的矩阵窗,例如2X2尺寸的窗。用这个小窗在特征图上mapping,取小窗mapping到的最大值,将这个值计入结果矩阵中的对应位置。求平均值和求和的操作和取最大值类似。


微信截图_20171025211119.pngImage source [3]

图中就是用2X2的小窗在特征图中以自身宽度滑动,通过这种方式减少特征图的维度。Pooling操作跟在卷积操作之后,要对每一个特征图进行Pooling操作,所以深度是多少就有多少个Pooling操作。

微信截图_20171025211338.png

下面的例子说明了不同的Pooling方式产生不同的结果。
微信截图_20171025211520.pngImage source [5]

其实Pooling操作是为了逐步缩小输入信息的空间大小,通过Pooling操作可以使输入信息的特征值更小,更容易操作;减少了神经网络中的整体参数值和计算量,防止overfitting;使神经网络整体变得稳定,即原始数据中的小变化不会影响到Pooling操作后的结果;helps us arrive at an almost scale invariant representation of our image (the exact term is “equivariant”). This is very powerful since we can detect objects in an image no matter where they are located [6].

This post was originally inspired from An Intuitive Explanation of Convolutional Neural Networks by Ujjwalkarn, I got the permission from original author by e-mail let me use it. All images and animations used in this post belong to their respective authors as listed in References section below.

References
[1] http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution
[2] http://cs.nyu.edu/~fergus/tutorials/deep_learning_cvpr12/
[3] http://cs231n.github.io/convolutional-networks/
[4] http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/
[5] http://mlss.tuebingen.mpg.de/2015/slides/fergus/Fergus_1.pdf
[6] https://github.com/rasbt/python-machine-learning-book/blob/master/faq/difference-deep-and-normal-learning.md



谢谢阅读 !

Please feel free to upvote, comment and follow me @victory622


Sort:  

有没有能应用在steemit上的深度学习例子? 生看这个,感觉不好理解

我刚刚学。。连小白都还算不上。cn社区里的 @cqf是这方面的教授。。。

可以用深度学习分析文章去看哪些文章的內容可以让更多人点赞。可是这是Natural Language Processing, 好像要用Recurrent Neural Net

默默点赞,太深奥了!

我也在学习。。

小白一个,看不太懂

我也是小白。。

小白一个,看不太懂

不明觉厉+1

我是小白的在学习。。。咱们cn区里是真的有这方面的大神!

还是吃夜市吧,喝点金门高粱!

高粱好辣啊~~~ 再等等冷點的時候~

Pooling 可以翻译成集中化吧?

这些英语词汇翻译真的是挺难找到准确的对应的词的。。。哈哈,反正那个池化的名字我是不太喜欢。

嗯,pool在这里是集中的意思,像英语里有个说法Car pooling, 就是说几个人集中坐上其中一个人的车去上班。

啊,谢谢,car pooling, 知识点,学习了。

恭喜你!您的这篇文章入选 @justyy 今日榜单 【优秀被错过的文章】, 请再接再厉!

Congratulations! This post has been selected by @justyy as today's 【Good Posts You May Miss】, Steem On!

Coin Marketplace

STEEM 0.13
TRX 0.34
JST 0.035
BTC 108494.49
ETH 4288.86
USDT 1.00
SBD 0.83