一、 为什么使用CNN处理图片
- 在图片中有一些比整张图片要小的pattern(比如鸟的图片中鸟的喙就是一个小的pattern),识别这些pattern并不需要看整张图片。
- 这些小的pattern会出现在图片的不同位置,例如鸟图片中鸟的喙可能出现在左上角也可能出现在中间。
- 对图片进行降采样(池化)不会改变图片的特征,因此神经网络处理图片所需的参数就会更少。
二、 卷积 v.s. 全连接
可以将卷积网络看作一种特殊的的全连接网络,每一个卷积核卷积后得到的feature map可以看做一个隐藏层的输出,feature map中的每一个数可以看做这个隐藏层的一个神经元。在这个特殊的全连接网络中隐藏层的每个神经元只会接收上一层的部分输入,而且隐藏层的神经元对应的权重是共享的,在反向传播过程中只需要按照一般的过程进行反向传播,然后再将对应的共享参数取均值即可。具体的过程如下图所示:
卷积 v.s. 全连接三、 卷积网络中的channel(通道)
对于输入样本中 channels 的含义。一般的RGB图片,channels 数量是 3 (红、绿、蓝);而monochrome(单色)图片,channels 数量是 1 。
举个例子,如下图,假设现有一个为 6×6×3 的图片样本,使用 3×3×3 的卷积核(filter)进行卷积操作。此时输入图片的 channels 为 3 ,而卷积核中的 in_channels 与 需要进行卷积操作的数据的 channels 一致(这里就是图片样本,为3),注意每个卷积核的channels(也就是in_channels)一定是与图片的channels一致,因为图片的每一个channel都会分别于卷积核中对应的channel进行卷积操作。
接下来,进行卷积操作,卷积核中的27个数字与分别与样本对应相乘后,再进行求和,得到第一个结果。依次进行,最终得到4×4的结果。
RGB图片的卷积上面步骤完成后,由于只有一个卷积核,所以最终得到的结果为 4×4×1 , out_channels 为 1 。在实际应用中,都会使用多个卷积核。这里如果再加一个卷积核,就会得到 4×4×2 的结果,因此卷积核的数量也就是out_channels,即该卷积层输出的feature map的channel数。
多卷积核 总结一下,上面提到的 channels 可以分为三种:
(1)最初输入的图片样本的 channels ,取决于图片类型,比如RGB;
(2)卷积操作完成后输出的 out_channels ,取决于卷积核的数量。此时的 out_channels 也会作为下一次卷积时的卷积核的 in_channels;
(3)卷积核中的 in_channels ,刚刚(2)中已经说了,就是上一次卷积的 out_channels ,如果是第一次做卷积,就是(1)中样本图片channels。
四、卷积网络学到了什么(可视化)
以下图网络结构为例:
网络结构4.1 卷积核学到了什么
定义第k个卷积核的激活度:
卷积核的激活度每个卷积核负责侦测图像中的一种pattern,激活度越高说明图像中出现越多的这种pattern。在训练模型完成以后,将激活度看做因变量,图像看做自变量,通过极大化激活度而得到的图像即是该卷积核所侦测的pattern,也就实现了一个可视化的过程。具体过程如下所示:
可视化这里列出12个卷积核求解得到的结果,可以看到每个卷积核都会侦测一种pattern。
4.2 全连接隐藏层神经元学到了什么
全连接隐藏层将神经元的输出看做因变量做同样的最优化过程得到结果,从上图中可以看出与卷积核只侦测小的pattern不同,全连接隐藏层的神经元会看到整张图像的特征。
4.3 输出层神经元学到了什么
输出层上图为使用CNN对手写体数字识别数据集训练出来的网络结构的输出层可视化的结果,可以看到得到的结果并非类似数字的图像,可见机器和人识别图像的方式是不一样的。将输出层节点的值进行L1正则化然后再看求解得到的结果就可以隐约看出数字的特征了:
正则化五、卷积网络应用
5.1 Deep Dream
Deep Dream不修改参数,而是修改输入图像,生成一些奇特的图像。
Deep Dream效果5.2 Deep Style
Deep Style效果其实现的大体原理如下:
Deep Style保留左边图片卷积核的输出值,输出值代表了图片的内容;保留右边图片卷积核之间的相关性(corelation),相关性代表了图片的风格,然后进行最优化(maximum),最终就会得到右图风格的左图,效果如下:
效果5.3 下围棋(Alpha Go)
使用神经网络来预测下一步棋的位置时,网络的输入是当前的棋盘的状态(shape:19 * 19,黑子:1,白字:-1,空:0),输出下一步的位置。
解决这个问题既可以使用全连接网络,也可以使用CNN,但是CNN效果更好,这是因为下围棋的问题符合一中介绍的选择CNN的理由:
- 通过围棋的特点可以知道,只需要侦测棋盘上一些小的pattern就可以进行识别。
- 这些小的pattern可能存在于棋盘的不同位置(指可能存在于棋盘的左上角或中间等位置)。
(注:由于棋盘不同于图片,图片进行降采样以后仍然可以识别特征而围棋棋盘不可以,所以Alpha Go所使用的的CNN架构中没有池化层。)
下图为该应用的原理:
5.4 语音辨识
语音辨识卷积核只在Frequency方向上移动,这是因为在时间上移动卷积核意义不大,比如同样说“你好”,男女的声音很可能只是在Frequency上有差别。
5.5 文本识别
文本识别同样的卷积核只横向移动,这是因为每个词向量的不同维度之间是独立的。因此在CNN的实际应用中要根据实际情况选择卷积核的移动方式。
参考资料
ref:理解CNN中的通道 channel
ref:深度卷积神经网络图像风格变换 Deep Photo Style Transfer
网友评论