DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

一、 为什么使用CNN处理图片

  • 在图片中有一些比整张图片要小的pattern(比如鸟的图片中鸟的喙就是一个小的pattern),识别这些pattern并不需要看整张图片。
  • 这些小的pattern会出现在图片的不同位置,例如鸟图片中鸟的喙可能出现在左上角也可能出现在中间。
  • 对图片进行降采样(池化)不会改变图片的特征,因此神经网络处理图片所需的参数就会更少。

二、 卷积 v.s. 全连接

  可以将卷积网络看作一种特殊的的全连接网络,每一个卷积核卷积后得到的feature map可以看做一个隐藏层的输出,feature map中的每一个数可以看做这个隐藏层的一个神经元。在这个特殊的全连接网络中隐藏层的每个神经元只会接收上一层的部分输入,而且隐藏层的神经元对应的权重是共享的,在反向传播过程中只需要按照一般的过程进行反向传播,然后再将对应的共享参数取均值即可。具体的过程如下图所示:

DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

 

 

卷积 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进行卷积操作。

  DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

 

 

RGB图片的卷积

  接下来,进行卷积操作,卷积核中的27个数字与分别与样本对应相乘后,再进行求和,得到第一个结果。依次进行,最终得到4×4的结果。

 DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

 

 

RGB图片的卷积

  上面步骤完成后,由于只有一个卷积核,所以最终得到的结果为 4×4×1 , out_channels 为 1 。在实际应用中,都会使用多个卷积核。这里如果再加一个卷积核,就会得到 4×4×2 的结果,因此卷积核的数量也就是out_channels,即该卷积层输出的feature map的channel数。

 DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

 

 

  多卷积核

  总结一下,上面提到的 channels 可以分为三种:
  (1)最初输入的图片样本的 channels ,取决于图片类型,比如RGB;
  (2)卷积操作完成后输出的 out_channels ,取决于卷积核的数量。此时的 out_channels 也会作为下一次卷积时的卷积核的 in_channels;
  (3)卷积核中的 in_channels ,刚刚(2)中已经说了,就是上一次卷积的 out_channels ,如果是第一次做卷积,就是(1)中样本图片channels。

四、卷积网络学到了什么(可视化)

  以下图网络结构为例:

 DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

 

 

  网络结构

4.1 卷积核学到了什么

  定义第k个卷积核的激活度:

  DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

 

 

卷积核的激活度

  每个卷积核负责侦测图像中的一种pattern,激活度越高说明图像中出现越多的这种pattern。在训练模型完成以后,将激活度看做因变量,图像看做自变量,通过极大化激活度而得到的图像即是该卷积核所侦测的pattern,也就实现了一个可视化的过程。具体过程如下所示:

 DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

 

 

可视化

  这里列出12个卷积核求解得到的结果,可以看到每个卷积核都会侦测一种pattern。

4.2 全连接隐藏层神经元学到了什么

 DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

 

 

全连接隐藏层

  将神经元的输出看做因变量做同样的最优化过程得到结果,从上图中可以看出与卷积核只侦测小的pattern不同,全连接隐藏层的神经元会看到整张图像的特征。

4.3 输出层神经元学到了什么

 DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

 

 

输出层

  上图为使用CNN对手写体数字识别数据集训练出来的网络结构的输出层可视化的结果,可以看到得到的结果并非类似数字的图像,可见机器和人识别图像的方式是不一样的。将输出层节点的值进行L1正则化然后再看求解得到的结果就可以隐约看出数字的特征了:

  DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

 

 

正则化

五、卷积网络应用

5.1 Deep Dream

  Deep Dream不修改参数,而是修改输入图像,生成一些奇特的图像。

  DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

 

 

Deep Dream效果

5.2 Deep Style

  DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

 

 

Deep Style效果

  其实现的大体原理如下:

  DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

 

 

Deep Style

  保留左边图片卷积核的输出值,输出值代表了图片的内容;保留右边图片卷积核之间的相关性(corelation),相关性代表了图片的风格,然后进行最优化(maximum),最终就会得到右图风格的左图,效果如下:

  DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

 

 

效果

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的实际应用中要根据实际情况选择卷积核的移动方式。

 

上一篇:@Pattern


下一篇:设计模式——设计模式解决的问题