9. 卷积神经网络工程实践

小姐姐归来,带着蜜汁微笑,啦啦啦~

这次讲的应该是一些成功的神经网络架构,毕竟我们不能总重复造轮子,借鉴很重要

AlexNet

结构
  • AlexNet的架构如图,有5个卷积层
问题1
  • 输入是:227×227×3 的图像
  • 第一层(卷积层1):96个大小为11×11的滤波器,步长为4
  • 问题:卷积层的输出是?
    *答案:55×55×96
问题2
  • 问题:这一层的超参数的个数是多少?
  • 答案:(11×11×3)×96=35k
问题3
  • 输入:227×227×3
  • 经过卷积层1:55×55×96
  • 第二层(池化层1):3×3 的滤波器 步长为2
  • 问题:这层输出大小为?
  • 答案:27×27×96
问题4
  • 问题:第二层的超参数个数?
  • 答案:0
  • 池化层没有参数!
所有层的情况
  • input: [227×227×3]
  • conv1: [55×55×96]
  • max pool1: [27×27×96]
  • norm1: [27×27×96]
  • conv2: [27×27×256]
  • max pool2: [13×13×256]
  • norm2: [13×13×256]
  • conv3: [13×13×384]
  • conv4: [13×13×384]
  • conv5: [13×13×256]
  • max pool3: [6×6×256]
  • FC6: 4096
  • FC7: 4096
  • FC8: 1000
更多的细节

图像分类比赛冠军概览

ILSVRC1
  • AlexNet是第一个基于CNN的获得冠军的网络
ILSVRC2
  • ZFNet在AlexNet的基础上改善了超参数的设置
ZFNet
ILSVRC3
  • VGG和GoogleNet在AlexNet的基础上使用了更深的网络

VGGNet

VGGNet

更小的卷积核,更深的网络

  • AlexNet只有8层,而VGG有16层到19层
  • 只使用 3×3的卷积核,步长为1,pad为1;池化层采用2×2的核,步长为2
  • 达到了7.3%的错误率

为什么使用更小的卷积核?

  • 三个步长为1的3×3的卷积核,与一个7×7的卷积核有相同的效果,但是拥有更少的参数,更深的网络。
3×3

网络具体情况

VGG16-1
VGG16-2
细节

GoogleNet

GoogleNet

网络更深,计算效率更高

  • 22层
  • 采用inception模块
  • 没有FC(全连接)层
  • 只有5百万个超参数,比Alex Net少了12倍
  • 6.7%的错误率

inception模块

inception
  • 设计一个好的局部网络拓扑,把它看作一个网络,然后堆放这些网络,放到每一层的顶部
inception
  • 对相同层的相同输入并行应用不同类型的滤波操作
  • 把结果串联起来,得到一个张量输出
  • 这个张量进入下一层
example
  • 模块的输入是:28×28×256
  • 经过不同的滤波器,保持28×28不变
  • 串联后的结果是:28×28×672
  • 计算次数:854m ops
  • 这样的计算量是很大的,该如何解决呢?
solution
  • 增加一个”瓶颈层“,减少在进行卷积之前的特征深度
1×1
  • 1×1的卷积保持了特征,减少了深度
改进
  • 在进行3×3,5×5之前,增加了一层1×1的瓶颈层
  • 在池化层后加一层1×1的瓶颈层
改进后
  • 计算量为:356m ops
完整结构

ResNet

ILSVRC winner
  • ResNet:深度革命
ResNet

非常深的网络

  • 152层网络
  • 3.57%的错误率
普通网络层数增加后
  • 比较20层的网络和56层的网络
  • 56层的网络在训练损失和测试损失上都表现较差
  • 更深的网络表现更差,却不是因为过拟合
原因
  • 问题应该是由于更深的网络更难优化,所以不如浅层网络表现好
  • 更深的网络应该至少和浅层网络表现得一样好
  • 一个解决方法是,从浅层网络复制已经训练好的层,添加到剩下的深层网络的层
  • 通过上面的方法可以让深层的网络表现的和浅层的一样好
solution
  • 基于上面的思路,产生了Residual block的方法,如图右
Residual block
  • 完整的结构:
    • 由residual块组成
    • 每个residual块拥有两个3×3的卷积层
    • 通常,两个滤波器,步长为2
    • 在网络开始的时候添加额外的卷积层
    • 没有任何全连接层
瓶颈层
  • 对于深层网络,通常需要添加瓶颈层来减小网络的深度
实际应用中
  • 在实际应用中在每个卷积层后进行批量归一化
  • 使用Xavier/2初始化
  • 使用随机梯度下降和动量初始化
  • 使用类似时间表类型的学习率
  • 小批量的大小为256
  • 权重小
  • 没有使用dropout

你可能感兴趣的:(9. 卷积神经网络工程实践)