0%

Convolutional Neural Network

卷积神经网络

CNN做了什么

如果只用Fully Connected Neural Network,会导致参数数量巨大;CNN所做的就是通过考虑图像特征(先验知识)来简化网络。复杂又简单

为什么可以用较少的参数完成图像识别

  1. 某个神经元是为了检测某种特征,所以它不需要看完整张图,而只需要看图像的一小部分。所以每个神经元只需要和一个小区域形成联系。(Convolution Layer 实现)
  2. 同样的特征可能出现在不同的区域,这个“位置”信息是冗余的,所以在不同位置的相同特征可以共享同一组参数。(Convolution Layer 实现)
  3. 对图像作降采样不会影响图像识别的结果,通过降低图片大小可以减少网络所需要的参数。(Max Pooling Layer 实现)

CNN架构

Input Image —> repeat (Convolution + Max Pooling) for several times —> Flatten —> FCN (Fully Connected Network) —> result

Convolution

一个卷积层可以有很多个filter,相当于很多个神经元,每个filter提取一种局部特征。

由这些filter分别和原图作卷积,输出图像叠起来就是 Feature Map

卷积和全连接的联系

把卷积的输入图像拉成一个一维向量,filter的移动相当于表示每次选取哪些维度作计算,filter中的每个数值相当于weight,由于filter是固定的,所以每次计算输出时所用的weight是相同的,即Shared Weights,这样就可以实现用较少的参数实现特征提取的结果。

Max Pooling

作下采样。把输出的 Feature Map 中每一层2$\times$2的value取平均/取最大保留下来,从而实现降维

输出深度(channel)由filter总数决定,几个filter就有几个输出channel

Flatten+FCN

把输出的 Feature Map 拉直成一个一维向量扔到FCN里

怎么分析CNN学到了什么?

卷积层

设某个卷积层的第k个filter的输出是一个11$\times$11的矩阵

定义第k个filter的激活度,激活度越高,这一部分的特征越接近第k个filter所表示的特征:

所以,要想知道第k个filter学习到的是什么特征,也就是找一个输入图像 $x^*$ ,使得:

找最大值用 Gradient Ascent

FCN层

设FCN的每个神经元的输出是 $a^j$ ,现在要做的事找一个图像去最大化这个输出,也就是:

对输出层也是如此。但稍微不同的是,会根据先前的输入输出先验限制条件为它加条件:

这只是个举例