卷积神经网络五之典型的CNN网络

一、典型的CNN网络

1、开山之作:LeNet-5 1998

  • LeNet-5 是一个非常成功的神经网络模型。
    • 基于 LeNet-5 的手写数字识别系统在 90 年代被美国很多银行使用,用来识别支票上面的手写数字。
    • LeNet-5 共有 7 层。
    • (不怎么会计算)

输入层:输入图像大小为 32 × 32 = 1024。

C1 层:这一层是卷积层。滤波器的大小是 5×5 = 25,共有 6 个滤波器。得到 6 组大小为 28 × 28 = 784 的特征映射。因此,C1 层的神经元个数为 6 × 784 = 4,704。可训练参数个数为6 × 25 + 6 = 156。连接数为 156 × 784 = 122,304(包括偏置在内,下同)。

S2 层:这一层为子采样层。由 C1 层每组特征映射中的 2 × 2 邻域点次采样为 1 个点,也就是 4 个数的平均。也采用了激活函数,神经元个数为 6 × 14 × 14 = 1, 176,可训练参数数量为6 × (1 + 1) = 12,连接数为 6 × 196 × (4 + 1) = 5, 880。

C3层为卷积层: LeNet-5中用一个连接表来定义输入和输出特征映射之间的依赖关系,共使用 60个 5 × 5的滤波器,得到 16组大小为 10 × 10的特征映射。神经元数量为 16 × 100 = 1, 600,可训练参数数量为 (60 × 25) + 16 = 1, 516,连接数为 100 × 1, 516 = 151, 600。

S4层是一个汇聚层,采样窗口为 2 × 2,得到 16个 5 × 5大小的特征映射,可训练参数数量为 16 × 2 = 32,连接数为 16 × 25 × (4 + 1) = 2000。

C5层是一个卷积层,使用 120 × 16 = 1, 920个 5 × 5的滤波器,得到 120组大小为 1 × 1的特征映射。 C5层的神经元数量为 120,可训练参数数量为 1, 920 × 25 + 120 = 48, 120,连接数为 120 × (16 × 25 + 1) = 48, 120。
F6层是一个全连接层,有84个神经元,可训练参数数量为84×(120+1) =10, 164。连接数和可训练参数个数相同,为 10, 164。

输出层:输出层由 10个欧氏径向基函数(Radial Basis Function, RBF)函数组成。
 

2、王者归来:AlexNet  2012

Imagenet数据集和ILSVRC(ImageNet Large Scale Visual Recogition Challenge),计算机视觉乃至整个人工智能发展史上的里程碑

ImageNet 数据集最初由斯坦福大学李飞飞等人在 CVPR 2009 的一篇论文中推出。截至 2016 年,ImageNet 中含有超过 1500 万由人手工注释的图片网址,也就是带标签的图片,标签说明了图片中的内容,超过 2.2 万个类别。其中,至少有 100 万张里面提供了边框(bounding box)。

AlexNet  2012 ILSVRC winner

    • 八层卷积神经网络,其中前5层卷积层,后边3层全连接层,65万个神经元,6000万个自由参数
    • 两个Nvidia GTX580 GPU,120万训练图像,训练了6天
    • 第一个现代深度卷积网络模型,首次使用了很多现代深度卷积网络的一些技术方法,比如使用GPU进行并行训练,采用了ReLU作为非线性激活函数,使用数据增强和Dropout防止过拟合。
  • 分为上下两个部分的网络,论文中提到这两部分网络是分别对应两个GPU,只有到了特定的网络层后才需要两块GPU进行交互,这种设置完全是利用两块GPU来提高运算的效率。
  • 网络总共的层数为8层,5层卷积,3层全连接层。
  • 第一层:卷积层1,输入为 224×224×3的图像,卷积核的数量为96,论文中两片GPU分别计算48个核; 卷积核的大小为 11×11×3 ; stride = 4, stride表示的是步长, pad = 0, 表示不扩充边缘;卷积后的feature map大小为width= (224 + 2 * padding - kernel_size) / stride + 1 = 54   height = (224 + 2 * padding - kernel_size) / stride + 1 = 54    dimention = 96然后进行 (Local Response Normalized), 后面跟着池化pool_size = (3, 3), stride = 2, pad = 0 最终获得第一层卷积的feature map为54*54*96
  • 第二层:卷积层2, 输入为上一层卷积的feature map, 卷积的个数为256个,论文中的两个GPU分别有128个卷积核。卷积核的大小为:5×5×48; pad = 2, stride = 1; 然后做 LRN, 最后 max_pooling, pool_size = (3, 3),  stride = 2;
  • 第三层:卷积3, 输入为第二层的输出,卷积核个数为384, kernel_size = (3×3×256), padding = 1, 第三层没有做LRN和Pool
  • 第四层:卷积4, 输入为第三层的输出,卷积核个数为384, kernel_size = (3×3), padding = 1, 和第三层一样,没有LRN和Pool
  • 第五层:卷积5, 输入为第四层的输出,卷积核个数为256, kernel_size = (3×3), padding = 1。然后直接进行max_pooling, pool_size = (3, 3), stride = 2;
  • 第6,7,8层是全连接层,每一层的神经元的个数为4096,最终输出softmax为1000,因为上面介绍过,ImageNet这个比赛的分类个数为1000。全连接层中使用了RELU和Dropout。

2.1 AlexNet中使用的训练技巧

  • Relu激活函数
  • Overlapping Pooling(覆盖的池化)
  • Local Response Normalization(局部响应归一化)
  • Dropout
  • Data augmentation(数据增强
  • Overlapping Pooling(覆盖的池化)
  • 一般的池化层因为没有重叠,所以pool_size 和 stride一般是相等的。
  • 如果 stride < pool_size, 就是覆盖的池化操作。
  • 在top-1,和top-5中使用覆盖的池化操作分别将error rate降低了0.4%和0.3%。论文中说,在训练模型过程中,覆盖的池化层更不容易过拟合。
  • Local Response Normalization(局部响应归一化)
  • 传统的激活函数如tanh和sigmoid,值域都是有范围的,而ReLU激活函数得到的值域没有一个区间,所以要对ReLU得到的结果进行归一化
  • Local Response Normalization,对不同feature map相同位置的点进行归一化。
  • 参数α,β, 如何确定?
  • 论文中说在验证集中确定,最终确定的结果为:k=2,n=5,α=10−4,β=0.75
  • Data Augmentation(数据增强)
  • 数据增强防止过拟合的最简单的方法
  • 只需要对原始的数据进行合适的变换,就会得到更多有差异的数据集,防止过拟合。
  • from keras.preprocessing.image import ImageDataGenerator
  • data_augment = ImageDataGenerator(rotation_range= 10,zoom_range= 0.1, width_shift_range = 0.1,height_shift_range = 0.1, horizontal_flip = False,  vertical_flip = False)
  • model.fit_generator(data_augment.flow(X_train, y_train, batch_size=batch_size),                             epochs= epochs, validation_data = (X_test,y_test),shuffle=True)

(三)Dropout

  • dropout是CNN中防止过拟合的大杀器
  • Dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。

3、越走越深:VGGNet   2014

  • VGGNet由牛津大学计算机视觉组和Google DeepMind公司研究员一起研发的深度卷积神经网络。
  • 它探索了卷积神经网络的深度和其性能之间的关系,通过反复的堆叠3*3的小型卷积核和2*2的最大池化层,成功的构建了16~19层深的卷积神经网络。
  • VGGNet获得了ILSVRC 2014年比赛的亚军和定位项目的冠军,在top5上的错误率为7.5%。迄今为止,VGGNet仍然是最常用的cnn架构之一。
  • VGGNet包含很多级别的网络,深度从11层到19层不等,比较常用的是VGGNet-16和VGGNet-19。
  • VGGNet全部使用3*3的卷积核和2*2的池化核,通过不断加深网络结构来提升性能。网络层数的增长并不会带来参数量上的爆炸,因为参数量主要集中在最后三个全连接层中。

4、大浪推手:GoogLeNet 2014

GoogLeNet是谷歌(Google)研究出来的深度网络结构,为什么不叫“GoogleNet”,而叫“GoogLeNet”,据说是为了向“LeNet”致敬,因此取名为“GoogLeNet”

获得高质量模型最保险的做法就是增加模型的深度(层数)或者是其宽度(层核或者神经元数),但是这里一般设计思路的情况下会出现两个缺陷(1.参 数太多,容易过拟合,若训练数据集有限;2.网络越大计算复杂度越大,难以应用;3.网络越深,梯度越往后穿越容易消失,难以优化模型)。 googlenet的主要思想就是围绕这两个思路去做的:

1.深度,层数更深,文章采用了22层,为了避免上述提到的梯度消失问题,googlenet巧妙的在不同深度处增加了两个loss来保证梯度回传消失的现象。

2.宽度,增加了多种核 1x1,3x3,5x5,还有直接max pooling的,但是如果简单的将这些应用到feature map上的话,concat起来的feature map厚度将会很大,所以在googlenet中为了避免这一现象提出的inception具有如下结构,在3x3前,5x5前,max pooling后分别加上了1x1的卷积核起到了降低feature map厚度的作用。

5、里程碑式创新:ResNet  2015

问题:神经网络越深越好么?

随着网络层级的不断增加模型精度不断得到提升,而当网络层级增加到一定的数目以后,训练精度和测试精度迅速下降,这说明当网络变得很深以后,深度网络就变得更加难以训练了。

原因:

  • 梯度消失问题
  • 神经网络在反向传播过程中要不断地传播梯度,而当网络层数加深时,梯度在传播过程中会逐渐消失(假如采用Sigmoid函数,对于幅度为1的信号,每向后传递一层,梯度就衰减为原来的0.25,层数越多,衰减越厉害),导致无法对前面网络层的权重进行有效的调整。

6、继往开来:DenseNet 2017

dense block

  • 密集连接
  • 缓解梯度消失问题,加强特征传播,鼓励特征复用,极大的减少了参数量
  • DenseNet 是一种具有密集连接的卷积神经网络。在该网络中,任何两层之间都有直接的连接,也就是说,网络每一层的输入都是前面所有层输出的并集,而该层所学习的特征图也会被直接传给其后面所有层作为输入。下图是 DenseNet 的一个dense block示意图,一个block里面的结构如下,与ResNet中的BottleNeck基本一致:BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3) ,而一个DenseNet则由多个这种block组成。每个DenseBlock的之间层称为transition layers,由BN−>Conv(1×1)−>averagePooling(2×2)组成

密集连接不会带来冗余吗?

  • 答案是不会!
  • 关键在于网络每层计算量的减少以及特征的重复利用
  • 由于每一层阿包含之前所有层的输出信息,因此其只需要很少的特征图就够了,这也是为什么DneseNet的参数量较其他模型大大减少的原因。

 

 

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clark-dj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值