【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络

TensorFlow直接以官方手册作为切入点,在趣味性和快速性上优势很大,但是对于学习深入理论的理解产生了巨大的阻碍。

在“深入MNIST”这一节中,遇到了卷积神经网络的构建,涉及到了“卷积”、“池化”等一些操作,不明就里,这里我们先压压心,了解一下什么是卷积神经网络,其中卷积、池化操作究竟是什么。

这篇博客是《【翻译】神经网络的直观解释》的学习笔记,原作者用浅显易懂的方式介绍了卷积神经网络,还是避开了晦涩难懂的数学公式。温馨提示:阅读本篇之前请先佐以我的这篇译文,对MLP有个了解,可以让本文食用口感更佳!(¯﹃¯)

一直在使用cmd,今天更新完windows发现cmd变成powershell了!

申明:本文中MLP(你问是啥?先看译文!就不告诉你)我们称作“全连接层”

-------------------割------------------------------------

首先说说为何要使用卷积神经网络(Convolutional Neural Network,CNN)?卷积神经网络在图像识别领域表现优异,可以识别人脸、交通信号等,为自动驾驶和机器人导航提供了极大的帮助,同时在语义识别方面也很突出,所以学习CNN很重要。

贴一张自己跑demo的图:

【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络

(不知道马儿为啥瞪我,但是我还是要学习CNN)

作者表示CNN入门很痛苦,于是写了这样一篇对新手及其友好的文章(为作者点赞(๑•̀ㅂ•́)و✧)!

LeNet构架(1990s)为切入点

LeNet是最早的卷积神经网络,作者是杨立昆(你猜猜哪国人?XD),他在发明出LeNet后发愤图强,不断迭代,最终做出了LeNet5,然后用老五做字符识别的任务。LeNet5论文在这里

我们以下图的结构来了解LeNet。(为了方便,我们叫它图A)

【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络

图A

我们先看最右,这个网络的终极目的就是图像分类。分类结果中目前有四类:狗、猫、船和鸟。看过《简介神经网络》的你,一定已经知道,输出结果的数字就是可能性的大小,细心的你肯定也发现,所有的可能性之和为1。恍然大悟?softmax函数?多层感知机?是不是一个个词都蹦了出来,别急,我们接着往下说。

图A从左往右,都做了什么呢?(我们先罗列名词,接下来一一介绍)

1.首先,输入了一副照片,风和日丽,小船轻轻摇的美景。

2.Convolution,就是卷积。

3.卷积的同时进行了ReLU(是的,就是矫正线性单元)

4.池化

5.再次卷积、ReLU

6.再次池化(mmp……)

7.引入全连接层

8.输出分类结果

在明白了所有的操作后,我们开始具体介绍。

让我们了解图像

看过学习笔记三的话,你已经对计算机中的存储的图像有了了解,它们是一个个的数字组成的矩阵。

【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络例如,数字8,在计算机中长那样。

图片有彩色图片和黑色图片,彩色图片是由R(red)G(green)B(blue)三种颜色(通道)组成的,因此在计算机中是三个叠加在一起的矩阵(P.S 对于通道可以用Photoshop打开一幅图片看看,你立刻明白)。譬如:

【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络

(图片来自吴恩达老师的深度学习入门课程PPT)

而黑白图片(准确来说是灰度图片)它仅由一个通道组成,每个数字介于0~255之间,数字0代表黑色(最暗),255代表白色(最亮)。

卷积(Convolution)

卷积神经网络,就是以卷积命名(废话)。而卷积的目的就是为了从输入图像中(小船儿)提取特征。

那么卷积如何操作呢?我们假设有这么一个特殊矩阵(图片)。

【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络它是一张5x5的图。

我们再引入一个3x3的矩阵,like this:

【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络

然后,我们进行如下的运算方式:

【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络(这里感叹一下国外作者的严谨,每一张图片都是命名的)

这个运算是如何进行的呢?通过动画我们发现,橙色的矩阵在原始图像上移动,每次移动一格,也就是一个像素,这里叫做步长(stride)。每次移动,都用橙色矩阵覆盖的绿色矩阵与橙色矩阵对应元素相乘(注意!不同于线性代数中的矩阵乘法),然后再将结果相加。

比如,初始位置,绿色矩阵为:【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络,橙色矩阵为:【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络,对应相乘,得到:

【1   0   1】

【0   1   0】

【0   0   1】这样一个矩阵,我们将每个数字相加,得到4。移动一次,重复上述操作,得到3……以此类推。

这样我们就得到了最终的粉色3x3矩阵。  

我们不能每次都用颜色来表示不同矩阵,因此我们给小橙一个名字:滤波器(filter)或者核(kernel)或者特征检测器(feature detector)。

小粉叫做:卷积特征(Convolved Feature)、**图(Activation Map)或者特征图(Feature Map)。

哈?你问小绿?我打你哦,它叫输入图!原始图!

总结:滤波器的作用就是在原始图像上进行特征检测。(小橙的作用就是发现小绿与众不同白里透红的地方)

而对于不同的图片,使用不同的滤波器我们提取到的特征图也不一样。比如:

【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络这样一幅图,我们使用不同的滤波器,可以实现边缘检测、锐化和模糊等操作。

【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络

不过瘾?这里还有更多例子。

再来一副动图,让我们更好的理解卷积操作。

【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络

我们先用红色滤波器在图片上扫一遍(卷积),生成特征图1。然后再用另一个绿色滤波器在图片上再扫一遍(卷积again),得到特征图2。作者说,卷积操作从原图上获得了局部依赖信息(这里不太懂??)。而两个不同的滤波器卷积获得了不同的特征图,别忘了我们滤波器就是一个数字矩阵就好。

(待续)