CNN框架介绍(1)AlexNet和VGG16

1. AlexNet

AlexNet是2012年ImageNet竞赛冠军框架,也是在那之后,更多的神经网络框架相继被提出,论文地址可以在这里看到。

整体的结构图如下所示:
在这里插入图片描述
AlexNet共有八层,有60M以上的参数量。
前五层为卷积层:convolutional layer;
后三层为全连接层,fully connected layer。
最后一个全连接层输出具有1000个输出的softmax。(这个不懂什么意思的参考机器学习理论中的softmax regression,就是一个多类的logistic regression),可以精简为:
在这里插入图片描述
具体如下所示:
在这里插入图片描述
详细解释:
Conv1:输入图像为224x224x3,表示为长宽分别都是224个像素,RGB彩色图三个通道,(学界普遍认为论文中说的224不太合适,讲道理应该是227的大小才对,这也成为一个悬案)然后采用96个11x11x3的filter,在stride为4的情况下,对图像进行卷积操作,得到55x55x96((((227-11)/4)+1)=55,96是滤波器(filter)的个数)的feature map,经过ReLu激活层,在经过最大池化层:滤波器的大小为3 x 3,步长stride为2. 所以池化后的输出为27x 27 x 96,(55-3)/ 2 + 1 =27. 96仍为原来的深度。得到27x27x96的feature map,再经过LRN(局部响应归一化),因为后面的网络架构都不用这个了,且没有太大的作用,这里不做解释。
Conv2:对Conv1得到的27x27x96的feature map做卷积操作:256个5x5x96,stride=1,padding=2的filter,得到27x27x256的feature map(27-5+2x2)/1+1=27,256为filter的数量。在经过ReLu激活层,最大池化层(3x3,步长=2),得到13x13x256的feature map。
Conv3,Conv4,Conv5:跟上述操作差不多,其中Conv3和Conv4没有池化层,具体不做详细说明。
Fc6:本层的输入为6 x 6 x 256,全连接层其实就是一个矩阵运算,它完成一个空间上的映射。所以把输入看成一个列向量X,维度为9216(6 x 6 x 256),也就是你可以把输入看成一个9216 x 1的矩阵。然后和参数矩阵W相乘,参数矩阵W你此时设置为4096 x 9216,所以最后本全连接层的输出就是 矩阵相乘Y = W·X得 4096 x 1的矩阵。 AlexNet在fc6全连接层引入了dropout的功能。dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率(一般是50%,这种情况下随机生成的网络结构最多)将其暂时从网络中丢弃(保留其权值),不再对前向和反向传输的数据响应。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而相当于每一个mini-batch都在训练不同的网络,drop out可以有效防止模型过拟合,让网络泛化能力更强,同时由于减少了网络复杂度,加快了运算速度。还有一种观点认为drop out有效的原因是对样本增加来噪声,变相增加了训练样本。
Fc7和Fc8:第7层跟第6层差不多,第八层的输出就为1000 x 1的矩阵,即1000维度的一个列向量,对应softmax regression的1000个标签。

2. CNN模型参数数量确定

AlexNet参数数量确定:
在这里插入图片描述
以Conv1层为例:
在这里插入图片描述
11x11为filter的大小,3为输入图像的通道数,96为filter的数量,最后加上一个bias,就得到11x11x3x96+96的参数数量。

再以Conv3为例:
在这里插入图片描述
3x3为filter的数量,256为输入的通道数(可以这么理解,就是13x13x256的256),384为filter的数量,再加上一个bias(384),就得到3x3x256x384=885120,就是这一层的参数数量。

3. VGGNet

VGG卷积神经网络是牛津大学在2014年提出来的模型。当这个模型被提出时,由于它的简洁性和实用性,马上成为了当时最流行的卷积神经网络模型。它在图像分类和目标检测任务中都表现出非常好的结果。
论文下载地址
在这里插入图片描述
包括13个卷积层和3个全连接层,故叫做VGG16。
输入图像为224x224x3,
下面是具体的操作和模型参数数量的计算:
在这里插入图片描述
输入图像为224x224x3,
经过第一个卷积层filter: 3x3x64,padding=1,stride=1,得到224x224x64的feature map,参数数量为3x3x3x64+64=1792;
再经过第二个卷积层filter: 3x3x64,padding=1,stride=1,得到224x224x64的feature map,参数数量为3x3x64x64+64=36928;
再经过最大池化层:2x2,stride=2,padding=0,得到112x112x64的feature map,不产生参数
再经过第三个卷积层filter: 3x3x128,padding=1,stride=1,得到112x112x128的feature map,参数数量3x3x64x128+128=73856
。。。
经过FC1层:输入为7x7x512,输出4096,就是讲7x7x512的feature map压缩为4096x1的矩阵,参数数量为:7x7x512x4096+1
再经过FC2和FC3,最终得到1000x1的矩阵输出,对应softmax的1000个标签。

VGG16是一种只需要专注于构建卷积层的简单网络。首先用3×3,步幅为1的过滤器构建卷积层,padding参数为same卷积中的参数。然后用一个2×2,步幅为2的过滤器构建最大池化层。因此VGG网络的一大优点是它确实简化了神经网络结构。

4.为什么使用ReLu激活函数

再使用ReLu激活函数之前,都是使用sigmiod激活函数,如下所示:
在这里插入图片描述
但是会出现一个问题:我们在使用随机梯度下降优化模型参数的过程中,上述sigmoid函数在左右两侧的梯度会接近于0,梯度接近于0那么使用梯度下降发学习优化的速度就会很慢,学习的速率降低,
在这里插入图片描述
而对于上述ReLu激活函数,他的梯度对于所有输入的负值都是0,因此梯度更加不会趋向于减小到0,会使得梯度下降算法的收敛速度更快。不会出现梯度消亡的现象,而下面的leakyReLu相对于ReLu激活函数,解决了生物层面对应的神经死亡的现象,在输入的值为负值时,也给出一个梯度,而不是ReLu的0。
在这里插入图片描述
参考:1

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值