CNN入门学习
CNN —— Convolutional Neural Network —— 卷积神经网络
在2012年的ImageNet(类似计算机视觉的奥林匹克比赛),CNN崭露头角,大幅度降低了图片分类的误差。从此之后,各个科技巨头公司开始使用深度学习作为技术战略部署,体现在自己的公司文化上。比如:
- Facebook 运用神经网络用于自动标注算法
- 谷歌 使用 神经网络图片搜索
- 亚马逊使用商品推荐
- Pinterest用于个性化推送
- Instagram 用于搜索框架
当然最经典的还是使用CNN进行图像处理
CNN整体结构
其中:输出信息包括:单独分类的结果或者分类类别的概率,下面会一一介绍CNN
的整体流程
Input ——> Conv ——>Relu ——> Conv ——> ReLu ——> Conv ——>ReLu…——>Pool ——>Fully Connected
CNN来源
CNN(卷积神经网络),这一听不就是数学与生物的结合体吗?卷积(数学)神经网络(生物学)?
事实上,还真是这样的。来源于神经科学/生物学,视觉皮层有小部分视觉区域敏感,且该部分功能一起工作时,特定部分特定任务产生反应。
CNN实际上是模仿人的识别方式,人开始像婴儿一样,对物体没有辨别力,经常把鸡屎当糖吃(哈哈哈),随着不断接触这个世界,慢慢对物体有了辨别力。其中,CNN也是这样的一个过程,不过我们需要人为输入信息即图片。输入信息(像素变化)—— >计算根据信息进行分类,比如图片像素差异的变化 。
CNN输入信息与卷积
输入信息主要是图片的像素关系,以 32 x 32 x 3为例子,第一个32代表row,第二个32代表column,3代表RGB,即#000—#FFF.
-
我们简化思考,假设没有RGB,只有一种黑白,即32 x 32 x 1。我们在黑板上想想32 x 32的格子,我们使用3 x 3的笔刷进行粉刷。这个笔刷我们称之为filter(神经元/核),笔刷此时点击的领域我们称之为receptive field。
注:filter与输入图片信息深度必须一致
-
计算filter矩阵与receptive filed的点乘,进行存储
-
不断滑动filter,计算图片其他领域的信息,进行存储
-
最终会得到28 x 28的数组,我们称这个数组为
激活映射
/特征映射
高层次角度中,每一个filter看作feature identifiers(特征标识符)
filter与该领域像素值的点积,如果匹配的话,值会比较大;如果不匹配或者匹配度比较低的话,值会比较小。
FAQ:
-
滑动filter,这里的是指滑动一步(部分会重叠),还是滑动全部(没有重叠部分)?
这个文章后面会进行讲解,主要看个人设置,称之为stride
-
filter只有一个吗?
不是,filter可以有多个,并且个数越多,从输入信息学到越多,即spatial dimensions保留越好,激活映射的深度越大,对输入内容越了解。当输入内容中寻找特定特征时,第一层filter在输入图像上进行卷积运算和激活
关于stride、padding
stride 主要是filter与输入信息的匹配过程的步伐大小,步伐较大的话,部分重叠计算的就越小,可以减少一定的时间复杂度,但是也会丢失一些spatial dimensions 信息
padding主要是用于进行输入信息处理过程中保持固定大小,比如之前的32 x 32 x 3 第一次卷积之后就是 28 x 28 x 3。这样的话,空间变小,不方便运算,可以选择进行zero padding.
非线性层
卷积之后——>ReLu 这个过程中,Relu相当于对卷积点乘之后线性运算进行非线性层(激活层)的处理。这样不但不会影响卷积层的receptive filed ,同时会增加模型乃整个网络的非线性特征
池化
池化(下采样)—— down sampling层,不过当前最受欢迎的还是max-pooling
,即常用一个filter和同等大小的stride(之后会介绍),应用在输入内容,输出filter卷积计算的每一个子区域最大figure
当然,池化层还有其他选择,比如平均池层、L2-norm层池
Dropout层
这用于训练,不用于测试,缓解过拟合过程
完全连接层
经过之前的卷积、非线性层处理,池化之后,进入完全连接层。检测高级特征之后,处理输入内容会输出一个N维向量,N一定为程序选择分类数量
filter的训练
filter开始的时候,几乎就是很沙雕的一个东西。什么都不知道,所以我们需要通过内容标记——>反向传播
反向传播主要分为以下步骤:
- 前向传导
- loss function(用于纠正filter)
- 后向传导
- 权重的update
数据增强
在处理图像信息过程中,有时对图形翻转、图片的某部分增加一些像素的修饰,可以极大程度改变处理的效果,恰当的数据增强对于信息处理起到极大的效果
CNN发展
以上介绍了卷积神经网络的基本概念。 以下是几个比较有名的卷积神经网络结构,详细的请看CS231n。
- LeNet:第一个成功的卷积神经网络应用
- AlexNet:类似LeNet,但更深更大。使用了层叠的卷积层来抓取特征(通常是一个卷积层马上一个max pooling层)
- ZF Net:增加了中间卷积层的尺寸,让第一层的stride和filter size更小。
- GoogLeNet:减少parameters数量,最后一层用max pooling层代替了全连接层,更重要的是Inception-v4模块的使用。
- VGGNet:只使用3x3 卷积层和2x2 pooling层从头到尾堆叠。
- ResNet:引入了跨层连接和batch normalization。
- DenseNet:将跨层连接从头进行到尾。