卷积神经网络学习笔记
(台湾大学李宏毅机器学习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. 卷积层其实是全连接层的一个简化。
展开之后,相当于上层只有一部分节点与下层的节点相连。
这里也是一部分节点与下层相连,而且这里的权重(kernel里的数值)是一样的。
所以总结来说,CNN对全连接层的简化就体现在以下两方面:
1. 两层之间节点的节点并不是全连接的;
2. 不同的节点之间会共享相同的权重
这样的话CNN的优势就在于:大大减少了参数量,加快训练过程。
池化层
把feature map里的值按一个范围内选出一个代表值就是池化。
max pooling: 选最大值
average pooling:选平均值
两种方法没有绝对的优劣,都可以使用。pooling后出来的结果就当做是一个缩小版的image.
Flatten
当经过了多次的卷积和池化之后,输出已经很小了,就可以把它拉直,连接到全连接层,输出结果。
对CNN的理解
1. 往往第一次卷积后的feature map可视化之后是有一定的含义的,比如条纹,颜色等。
2. 把feature map里的值加在一起当做上一个卷积核的activate degree, 最大化这个评价标准来求最好的输入图像,可以用来衡量此卷积核对于提取什么样的feature(或者说pattern)是最有用的。
3. 同样的理解方法可以应用于全连接层。选取其中一个节点,最大化节点的值来求最好的输入图片,其对应的pattern就是这个节点所对应的作用。同理,想当然地,应用的输出成,最大化每个节点,那么输入就是我们想要分类正确的图片。其实求出来很多看起来没有理解意义,但这就是CNN学到的知识,所以,CNN也是很容易欺骗的。如下图左。那么为了增强其可理解性,可以在求最优化问题时加一些限制,比如所有像素的和也要最大(即少一些白点),那么就会呈现一些轨迹出来(如下图右),虽然还是不够直观,但可以进一步加一些处理,来增进人们对其的理解。
有RGB三维的图效果更加直观:
4. 求输出的y对每个pixel的微分,如果大于某个值,令其为白色,否则为黑色,可以看出CNN对于y类物体识别更看重哪一块区域。
参考: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的理解
黑子:1 白子:-1 没有棋子:0
为什么CNN对于围棋效果也很好?
1. 5*5的格子就可以代表一个围棋的单元,比如下图,黑子就可以把白子吃掉。所以Alpha Go的第一层卷积核就是5*5
2. 上图的情况可以出现在棋盘的任何角落。
3. Alpha Go并没有使用max pooling.因为对于棋盘来说,池化后会信息缺失(丢失棋子情况),会扭曲棋盘的意义。