深度学习笔记之卷积神经网络CNN

卷积神经网络学习笔记

(台湾大学李宏毅机器学习2017春)

 

 

注:此笔记主要是用于自己温习之用,一些预备知识可能写的不够详细,仅供大家参考。如果有疑问欢迎留言交流。

来自李老师的主页:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17.html

卷积神经网络其实是深度神经网络根据图片(包括视频,下同)的特性进行的简化。

 

图片的三大特性:

1. Pattern一般都比整张图片小得多。

2. 相同的Pattern可能出现在图片的各个位置。

3. 对图片进行下采样对pattern没有太大的影响。

 

CNN的结构

 

图片→卷积层→池化层→卷积层→池化层...→flatten→全连接层→结果

 

卷积层:处理特性1和特性2

池化层:处理特性3

 

卷积层

 

1. 卷积核(也作filter):是训练出来的结果。

2. 卷积核每次移动的长度是要预先定义的。

3. 卷积出来的结果叫做feature map,这个feature map就表示了卷积核这个特性在图片上的分布。

4. 卷积层其实是全连接层的一个简化。

 

深度学习笔记之卷积神经网络CNN_第1张图片

展开之后,相当于上层只有一部分节点与下层的节点相连。

深度学习笔记之卷积神经网络CNN_第2张图片

这里也是一部分节点与下层相连,而且这里的权重(kernel里的数值)是一样的。

所以总结来说,CNN对全连接层的简化就体现在以下两方面:

1. 两层之间节点的节点并不是全连接的;

2. 不同的节点之间会共享相同的权重

这样的话CNN的优势就在于:大大减少了参数量,加快训练过程。

 

 

池化层

 

把feature map里的值按一个范围内选出一个代表值就是池化。

max pooling: 选最大值

average pooling:选平均值

两种方法没有绝对的优劣,都可以使用。pooling后出来的结果就当做是一个缩小版的image.

 

Flatten

当经过了多次的卷积和池化之后,输出已经很小了,就可以把它拉直,连接到全连接层,输出结果。

 

对CNN的理解

1. 往往第一次卷积后的feature map可视化之后是有一定的含义的,比如条纹,颜色等。

深度学习笔记之卷积神经网络CNN_第3张图片

2. 把feature map里的值加在一起当做上一个卷积核的activate degree, 最大化这个评价标准来求最好的输入图像,可以用来衡量此卷积核对于提取什么样的feature(或者说pattern)是最有用的。

3. 同样的理解方法可以应用于全连接层。选取其中一个节点,最大化节点的值来求最好的输入图片,其对应的pattern就是这个节点所对应的作用。同理,想当然地,应用的输出成,最大化每个节点,那么输入就是我们想要分类正确的图片。其实求出来很多看起来没有理解意义,但这就是CNN学到的知识,所以,CNN也是很容易欺骗的。如下图左。那么为了增强其可理解性,可以在求最优化问题时加一些限制,比如所有像素的和也要最大(即少一些白点),那么就会呈现一些轨迹出来(如下图右),虽然还是不够直观,但可以进一步加一些处理,来增进人们对其的理解。

深度学习笔记之卷积神经网络CNN_第4张图片

有RGB三维的图效果更加直观:

 

4. 求输出的y对每个pixel的微分,如果大于某个值,令其为白色,否则为黑色,可以看出CNN对于y类物体识别更看重哪一块区域。

深度学习笔记之卷积神经网络CNN_第5张图片

参考:Karen Simonyan, Andrea Vedaldi, Andrew Zisserman, “Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps”, ICLR, 2014

此外,每次遮住图片的一小部分,来观察CNN识别的结果影响,可以看出哪部分区域对CNN的结果影响最大。下图中,蓝色的部分说明遮住它之后最图像识别的结果影响最大。

参考:Reference: Zeiler, M. D., & Fergus, R. (2014). Visualizing and understanding convolutional networks. In Computer Vision–ECCV 2014 (pp. 818-833)

 

一个应用:对Playing Go的理解

 

深度学习笔记之卷积神经网络CNN_第6张图片

黑子:1 白子:-1 没有棋子:0

为什么CNN对于围棋效果也很好?

1. 5*5的格子就可以代表一个围棋的单元,比如下图,黑子就可以把白子吃掉。所以Alpha Go的第一层卷积核就是5*5

深度学习笔记之卷积神经网络CNN_第7张图片

 

2. 上图的情况可以出现在棋盘的任何角落。

3. Alpha Go并没有使用max pooling.因为对于棋盘来说,池化后会信息缺失(丢失棋子情况),会扭曲棋盘的意义。

你可能感兴趣的:(Research)