CNN整体过程
1.整体架构
- 卷积操作(convolution):可以进行卷积操作是因为对于图像而言,有些部分区域要比整个图像更加重要。并且相同的部分会出现在不同的区域,我们使用卷积操作可以降低成本。比如,我们识别鸟,鸟嘴部分的信息很重要,通过这个鸟嘴,我们就可以识别出这个是一只鸟。鸟不止一种类型,用很多种类,但鸟嘴都是大同小异的,所以对于鸟嘴的这个特征,我们就可以使用相同的函数进行识别,从而降低了成本。
- Max Pooling操作。可以进行池化操作的原因是我们对图像进行subsampling处理,不影响整个图像的处理。比如,我们对像素进行子取样。比如只取原来图像奇数位置的像素,从而得到了一张更小的图片,但是这种处理对描述整个图像是没有什么大影响的,但是却可以大大的减少了参数。
- Flatten.这个平坦化的处理就是将我们经过卷积和池化的最终进行进行处理,也就是把矩阵形式拉直变成一个向量进行处理,然后将这个向量作为输入,输入到全连接的网络中去。
卷积
1.首先定义一个卷积核,也就是过滤矩阵。这个卷积核里的值不是人为设定的,是机器学习出来的。我们根据卷积核的大小与输入矩阵对应大小位置进行点乘操作,根据步长移动卷积核,一次进行点乘,得到feature map。
在feature map中,值比较大并且相同的我们认为在原始图像中他们表示的是同一个特征。以下图为例:
这个我们的输入矩阵是66的。卷积核是33的,步长为1。有两个卷积核。
两个卷积核所以feature map是两层。可以看出,现在的feature map比原来的图像矩阵要小(44<66).我们上面的例子是对于灰度图像。下面我们看一个对于彩色图像的。
彩色图像有RGB三个通道。所以原始输入图像有三层,每个通道一层。而对应的卷积核也是三层,相当于一个立方体。
Max pooling
Max pool的思路很简单,就是对feature map进行分组,然后在每组中选出一个最大的值作为代表。
根据第一幅图用红色方框圈出的最大值,可以对应的第二幅的矩阵的每个元素。比如第一组在filter2下最大值为-1.这样一来,原来6 * 6 的矩阵变成了2 * 2的矩阵。
Flatten
我们将矩阵拉直,输入到全连接网络。
CNN 与全连接网络
其实就是输入矩阵拉直成向量,然后filter矩阵的元素作为相应连接到的边的权重。也就是只连接部分边的全连接网络。
我们可以发现,由于filter是共同的,所以权重是共享的,这样一来,计算参数就会少很多。
CNN学习的过程(存在疑问)
对于输入的图像,经过卷积操作,得到feature map。
对于第k个卷积核、11*11大小的feature map而言,我们首先可以求解
a k a^{k}