深度学习笔记(26):卷积神经网络CNN简介

前言

对于海量信息的高清图像,如果我们使用传统的全连接神经网络,会造成所需要训练的参数过多以致于无法训练成功。这时候一种新的网络模型被提出来,即CNN(Cov-Nerual-Network)。我们在下面对于其基本原理和需要注意的细节进行简要介绍。
CNN的创始人是LeCun,三巨头之一,LeNet也是后续所有的CV行业的net致敬的名字。
深度学习笔记(26):卷积神经网络CNN简介

CNN的思想所在

cnn为了减少我们所训练的特征数,其思维是想要仅仅留下图像的轮廓(通过卷积核提取特征),进而使得图像的特点被暴露出来,而不重要的地方就被忽视掉(其实很多cv的理论和这个想法类似),比如以下面的图象举例。这个图片就被弱化成了仅剩下轮廓,也正是我们所关注的。

深度学习笔记(26):卷积神经网络CNN简介
另外,卷积每一个filter只关注一个侧面的特性,和视网膜成像异曲同工。如下图。同时每个filter对于图片参数共享使得需要训练的权重大大减小也使得卷积神经网络十分高效。
深度学习笔记(26):卷积神经网络CNN简介

CNN是什么,怎么实现

那么如何实现这种轮廓的捕捉呢,我找了很多其他博客的很形象的图片帮助理解。实际上就是使用若干个filter(卷积核),通过移动与映射,修改图像的维数,即改变其体积。
下图形象地说明了一个卷积核是如何映射一部分的图像的。实际上就是一个简单的按照filter上的权重,将原始图像的filter位置压缩成一个点。(当然映射最后落实的位置还可以修饰)
深度学习笔记(26):卷积神经网络CNN简介
一维的gif演示
深度学习笔记(26):卷积神经网络CNN简介
多通道的gif演示。filter的通道数和原来的图象的通道数是匹配的,filter的个数决定了之后的通道数。
深度学习笔记(26):卷积神经网络CNN简介
就很清晰了

我们再来看看结构

一般的CNN结构为:

1.INPUT
2.[[CONV -> RELU]N -> POOL?]M
3.[FC -> RELU]*K
4.FC

接下来我们讲一下细节

padding

padding就是将图像扩张,为了使得卷积过程中维数不一直下降。一般的padding都是将周围填充成0.
深度学习笔记(26):卷积神经网络CNN简介
我们往往把padding的“格子数”记作p。步长(filter每次动几步)记作s。filter的大小(几乘几)记作f。

convolution

convolution就是卷积图像。上面的动图说的已经很清楚了。我们这里要清楚filter所确定的是其大小,步长,即几乘几的图片,每次移动多少步,剩下所具有的参数是每个像素上面所具有的权重是我们要去训练的。

pooling

pooling池化分为两种,一种是平均值池化一种是最大值池化,前者是将filter映射的像素点取平均值,后者是将其取最大值。池化很简单,就是类似于filter直接作用了,直接指定是几乘几以及步长就行,并不需要额外的参数。
如下图就是一个f=2,s=2的maxpooling,平均pooling也类似
深度学习笔记(26):卷积神经网络CNN简介

整体结构和超参数设计

这个目前阶段就得参考专业人士的文章了。我们可以参考其卷积层设计与整体的安排。比如LeNet,GoogleNet,VGG之类的