CNN及其在lenet-5、Alexnet上的应用

来源:互联网 发布:js中怎么使用map 编辑:程序博客网 时间:2024/06/03 18:24

1 概述

卷积神经网络是一种前馈神经网络,它的神经元与前一层的局部神经元相连接。
卷积神经网络由一个或多个卷积层和顶端的全连通层组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。
具体可参考维基:https://zh.wikipedia.org/wiki/%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C
下图是它的形象表示:
这里写图片描述

1.1 卷积单元

主要组成:采样窗口,滤波器(卷积核),特征图。有几个滤波器就有几个特征图。
采样窗口:就是特征采样单元,一般首选3x3,然后根据训练结果尝试5x5或者7x7,或者3x3、5x5搭配采样。首选3x3的原因是3x3比较小的,可以采到比较深层或者细微的特征。比如采集毛发的特征,就需要用到小的采样窗口。
滤波器:一个滤波器一般能采集到一类特征,多个滤波器采集到多类图像特征。
滤波器大小和采样窗口大小一样。滤波器个数一般根据图像的复杂程度来确定,比如手写体数字识别中滤波器个数可以少一点,识别一只狗的神经网络中,滤波器个数要多一点。
特征图:特征图就是采集到的一类特征,特征图个数和滤波器个数相同,特征图大小跟步长和padding形式有关。一般还会对特征图进行池化操作,用来减少权重个数,同时对避免过拟合也有一定作用。

这里写图片描述

这里写图片描述

2 结构

输入层:图片的三维矩阵
卷积层:通过卷积层处理过的节点矩阵会变得更深,所以经过卷积之后的节点矩阵的深度通常会增加。
池化层:池化层不会改变三维矩阵的深度,但可以缩小矩阵的大小,池化层可以认为是将一张分辨率较高的图片转化为分辨率较低的图片
全连接层:在经过多轮卷积层和池化层的处理之后,在卷积神经网络的最后一般会由1到2个全连接层来给出最后的分类结果。经过几轮卷积和池化,可以认为图像中的信息已经被抽象成了信息含量更高的特征。
**softmax层:**softmax主要用于分类,通过softmax可以得到当前样例属于不同种类的概率分布情况。

3 特点

1)相比传统神经网络,很大程度的降低了计算量。
2)能通过采样窗口的权值共享减少了神经网络需要训练的权值个数,这样也降低了训练样本数

4 相关概念

4.1 局部感受野:

1962年哈佛医学院神经生理学家Hubel和Wiesel通过对猫视觉皮层细胞的研究,提出了感受野(receptive field)的概念,1984年日本学者Fukushima基于感受野概念提出的神经认知机(neocognitron)可以看作是卷积神经网络的第一个实现网络,也是感受野概念在人工神经网络领域的首次应用。

4.2 池化:

4.2.1 分类

主要有两种:最大值池化和均值池化
最大值池化:选出pool中的最大值
前向传播时:[1,2,3,4] ->4,要记住最大值的位置
反向传播时:把原来的[1,2,3,4] ->[0,0,0,4]
均值池化:计算pool中的平均值
前向传播时:[1,2,3,4] ->1.25
反向传播时:把原来的[1,2,3,4] ->[1.25/4,1.25/4,1.25/4,1.25/4]

4.2.2 池化作用

1)通过采样窗口和权值共享减少神经元的权值个数
2)防止过拟合
3)增强网络的鲁棒性(比如这个区域中的值略有变化,我们只取了最大值,就不会对结果产生影响)
4)池化单元具有平移不变性,池化可以保持某种不变性(旋转、平移、伸缩等)
这里写图片描述

5 应用领域

主要应用于机器视觉领域,因为CNN本身就是为图像识别而生。
现在在NLP、语音处理、知识问答等也都有应用。

6 卷积神经网络的应用1 – LeNET-5

6.1 简介

手写体识别网络,正确率达到99%以上,现在还有一些机构在使用。
官网地址:http://yann.lecun.com/exdb/lenet/index.html
论文地址:https://pan.baidu.com/s/1nuB6nJ7

6.2 网络结构图

这里写图片描述

共八层:
输入层:输入层是32x32的单元

C1层:是卷积层,它的采样窗口是5x5,
步长为1,所以每个卷积核采样到的特征为(32-4)x(32-4),
一共使用了6个卷积核,所以有28x28x6个特征,每个采样窗口有5x5个单元,所以一共有28x28x6x5x5个连接,加上偏置为28x28x6x25+28x28x6
由于每个采样窗口使用的权值是共享的,所以需要训练的权值参数一共有5x5x6,再加上偏置为5x5x6+6

S2层:子采样层,平面为14x14,需要训练的参数为:6+6(这里第一个6不太明白,难道每个采样窗口只有一个参数吗?),连接数为14x14x6x4+14x14x6

C3层:卷积层,采样窗口是5x5,有16个卷积核
这里写图片描述

采用这种采样方式的目的是打破网络之间的平衡性,这样可以采样到不同平面的不同特征,每个平面上包含着图片不同的特征。
需要计算的参数为P =(5x5x3+1)x6+(25x4+1)x9+(25x6+1)x1 = 1516
C = 25x100x3x6+25x4x100x9+25x6x100x1+16x100

S4层:子采样层,和S2层计算方式一样

C5层:全连接层,定义了120个神经元,所以参数和连接数一样 为 120x16x25+120

F6层:全连接层,84个神经元,使用的是径向基函数,不是线性基函数

这里写图片描述

F7层:输出层,对应十个数字

7 卷积神经网络的应用2 – AlexNet

7.1 简介

AlexNet是ImageNet2012年图像识别的冠军,对后面的神经网络发展有着深远的影响
论文地址:https://pan.baidu.com/s/1jHGwfEu
使用两个GTX 580 3GB GPUs,训练一次大概6天
数据集:ImageNet数据集 ,选了1000个分类
数据预处理:首先把图片处理成256*256
使用的激活函数是ReLU:
这里写图片描述
选用ReLU激活函数的原因是双曲正切函数和sigmoid函数在多层神经网络中容易出现梯度消失,到5、6层的时候信号基本消失的差不多了。

7.2 网络结构图

这里写图片描述

这里写图片描述

第一层到第五层是卷积层
后面三层是全连接层

输入层:
厚度3代表rgb三原色,224*224是输入x

第一个卷积层:
采样窗口是11*11
卷积核是11个,步长是4(每次向右移动4格)
96换成两个48代表用两个GPU计算
池化窗口大小是3 步长是2,主要作用是减少我们需要训练的参数,同时也起到特征提取的作用
具体操作:先进行一个卷积采样操作,然后经过RELU激活,然后经过池化,然后局部响应归一化。
这里写图片描述

第二个卷积层:
5个卷积核,采样窗口是5x5
具体操作:先进行一个卷积采样操作,然后经过RELU激活,然后经过池化,然后局部响应归一化。
这里写图片描述

第三个卷积层:
3个卷积核,采样窗口是3x3
先卷积,然后ReLU激活
这里写图片描述

第四个卷积层:
3个卷积核 采集窗口3x3
先卷积,然后ReLU激活
这里写图片描述

第五个卷积层:
3个卷积核,采集窗口3x3
先卷积,然后ReLU激活,然后池化

这里写图片描述

全连接层1:
先全连接,然后ReLU激活,然后dropout
这里写图片描述

全连接层2:
先全连接,然后ReLU,然后dropout

这里写图片描述

全连接层3:
先全连接,然后softmax,然后得到y
这里写图片描述
最后一层1000个神经元 代表1000个分类
softmax的作用:把之前的数字转换成概率 比如1%,20%等

这个神经网络有6千万(60 million)个参数 很容易出现过拟合问题。

所以做了过拟合处理:
1)扩大数据集
这里:从256x256里面取224x224 把数据集扩大了2048倍,但是由于这些是高度相关的 所以只截取上下左右和翻转的的 只扩大了10倍
改变rgb的强度,相当于改变了图片的颜色和光照强度

这里写图片描述

2)在代价函数后面加正则项(这个项目中未使用)
3)dropout:
在模型训练中,每次训练只打开部分神经元,只让部分神经元参与训练,
直到下一次训练,随机关闭一些神经元。

7.3 训练

使用的是随机梯度下降 批次是128个 动量是0.9 权值的衰减是0.0005
算法跟BP神经网络差不多,使用批量梯度下降法迭代。

7.4 对比三种梯度下降法

标准梯度下降法:
计算所有样本 汇总误差,根据总误差来更新权值 导致更新一次权值计算量比较大
不适用于样本比较大的数据集
随机梯度下降法:
一次只抽取一个样本来计算误差,然后更新权值
问题:可能带来很多噪音,权值改变的方向可能不是最好的方向,可能陷入局部最优解
批量梯度下降法:(比较常用)
折中的方案 从总样本中选取一个批次,每次只计算一个批次作为总误差,根据这个总误差来更新权值。