Cs231n课堂内容记录-Lecture 9 深度学习模型

Lecture 9 CNN Architectures

参见:https://blog.csdn.net/qq_29176963/article/details/82882080#GoogleNet_83

一、 LeNet-5:

神经网络的第一个实例,用于识别邮票上的手写数字,使用步长为1,大小为5*5的卷积核,对第一层进行操作,然后进行池化,通过几层卷积和池化,在网络的最后还有一些全连接层。LeNet在数据识别领域取得了成功。

二、 AlexNet

Alexnet是2012年ImageNet中胜出的模型,将错误率从25.8%降低至16.4%。

1.网络结构:

[227x227x3] INPUT

[55x55x96] CONV1: 96 11x11 filters at stride 4, pad 0

[27x27x96] MAX POOL1: 3x3 filters at stride 2

[27x27x96] NORM1: Normalization layer

[27x27x256] CONV2: 256 5x5 filters at stride 1, pad 2

[13x13x256] MAX POOL2: 3x3 filters at stride 2

[13x13x256] NORM2: Normalization layer

[13x13x384] CONV3: 384 3x3 filters at stride 1, pad 1

[13x13x384] CONV4: 384 3x3 filters at stride 1, pad 1

[13x13x256] CONV5: 256 3x3 filters at stride 1, pad 1

[6x6x256] MAX POOL3: 3x3 filters at stride 2

[4096] FC6: 4096 neurons

[4096] FC7: 4096 neurons

[1000] FC8: 1000 neurons (class scores)

FC8与softmax层相连,进行1000个类别的ImageNet的图像分类。

2.关于第一层形状和参数数量的计算(number of parameters

output_size = (input_size-filter_size)/stride +1

parameters_num = filter_size*filter_number

比较有趣的是,池化层参数数量为零。因为它只对参数做了较少操作,只是观察卷积层已有的参数,然后取了最大值。

3.AlexNet网络特点

First use of ReLU;

Used Norm layers (not common anymore);

Heavy data augmentation;

Dropout 0.5;

Batch size 128;

SGD Momentum 0.9;

Learning rate 1e-2, reduced by 10 manually when val accuracy plateaus;

L2 weight decay 5e-4(正则化的权重衰减);

7 CNN ensemble: 18.2% -> 15.4%(模型集成,取平均)。

由于当时所使用GPU的显存不够存放这么多参数,因此从第一个卷积层开始将参数分为两组,在两个GPU中训练。

三、 ZFNet

ZFNet是2013年ImageNet获胜的模型,在超参数上对AlexNet进行了改进。

ZFNet网络特点

ZFNet框架大体与AlexNet一致。它们具有相同的层数,基本结构;在步长上有一点改进,卷积核数量上也略有不同。

四、 VGGNet

VGGNet和GoogleNet是14年胜出的模型,它们与之前的网络最大的不同之处在于拥有了更深层的网络,分别是19层、22层。GoogleNet与VGGNet很相近,实际上是VGGNet的一个本地化的改进,两者的鲁棒性都很好。

VGG16网络详细信息:

INPUT: [224x224x3] memory: 224x224x3=150K params: 0

CONV3-64: [224x224x64] memory: 224x224x64=3.2M params: (3x3x3)x64 = 1,728

CONV3-64: [224x224x64] memory: 224x224x64=3.2M params: (3x3x64)x64 = 36,864

POOL2: [112x112x64] memory: 112x112x64=800K params: 0

CONV3-128: [112x112x128] memory: 112x112x128=1.6M params: (3x3x64)x128 = 73,728

CONV3-128: [112x112x128] memory: 112x112x128=1.6M params: (3x3x128)x128 = 147,456

POOL2: [56x56x128] memory: 56x56x128=400K params: 0

CONV3-256: [56x56x256] memory: 56x56x256=800K params: (3x3x128)x256 = 294,912

CONV3-256: [56x56x256] memory: 56x56x256=800K params: (3x3x256)x256 = 589,824

CONV3-256: [56x56x256] memory: 56x56x256=800K params: (3x3x256)x256 = 589,824

POOL2: [28x28x256] memory: 28x28x256=200K params: 0

CONV3-512: [28x28x512] memory: 28x28x512=400K params: (3x3x256)x512 = 1,179,648

CONV3-512: [28x28x512] memory: 28x28x512=400K params: (3x3x512)x512 = 2,359,296

CONV3-512: [28x28x512] memory: 28x28x512=400K params: (3x3x512)x512 = 2,359,296

POOL2: [14x14x512] memory: 14x14x512=100K params: 0

CONV3-512: [14x14x512] memory: 14x14x512=100K params: (3x3x512)x512 = 2,359,296

CONV3-512: [14x14x512] memory: 14x14x512=100K params: (3x3x512)x512 = 2,359,296

CONV3-512: [14x14x512] memory: 14x14x512=100K params: (3x3x512)x512 = 2,359,296

POOL2: [7x7x512] memory: 7x7x512=25K params: 0

FC: [1x1x4096] memory: 4096 params: 7x7x512x4096 = 102,760,448

FC: [1x1x4096] memory: 4096 params: 4096x4096 = 16,777,216

FC: [1x1x1000] memory: 1000 params: 4096x1000 = 4,096,000

TOTAL memory: 24M * 4 bytes ~= 96MB/image (only forward) (每个数字占用四字节内存)

TOTAL params : 138M parameters。

前向传播占用的总内存约为每张图像96MB,算入反向传播的话加倍即可。

VGGNet网络特点:

更小的filters,更深的网络;

Only 3x3 CONV stride 1, pad 1 and 2x2 MAX POOL stride 2

这种卷积核已经是最小的卷积核了,网络只关注相邻的像素。整个网络保持这种小卷积核的结构、并进行下采样,简洁而优雅,获得了ImageNet最好的7.3的错误率。

为什么使用小的卷积核?当使用小卷积核时,3个3x3的卷积层和1个7x7的卷积层拥有同样有效的感受野,但是小卷积核可以让我们尝试更深层的网络和更多的卷积核,更非线性化,最终的效果比大卷积核的效果要好,且其参数数量更少,3x(3x3)<7x7。

倒数第二层FC(FC7,1000个,即类别层之前)的hidden number=4096被验证已经能够很好地进行特征表达,可以用于在其他数据中提取特征,并有比较好的泛化性能;

作者先训练了一个11层的网络,使其收敛,之后将其扩展到16/19层,以此来解决深层网络收敛困难的问题(Batch Normalization提出后就不需要这种操作了);

五、GoogleNet

1.GoogleNet网络特点:

l   22层网络;

l   没有FC层,因此节省了大量参数,仅有5million,比AlexNet少了12倍;

l   为提高计算效率引入了“inception” module和“bottleneck”的概念;

l   网络有两个辅助输出(Auxiliary classification outputs)用于向低层的网络注入额外的梯度,以此解决网络收敛困难的问题(Batch Normalization提出后就不需要这种操作了);

2.“inception” module

可以将网络看成是由局部网络拓扑(“inception” module)堆叠而成。对进入相同层的相同输入并行应用不同类别的滤波操作。我们将来自前面层的输入进行不同的卷积操作、池化操作,从而得到不同的输出,最后需要将所有输出在深度层面上连接到一起。计算与串联方式如下图所示:

我们通过inception操作在保持形状不变的情况下扩充了深度。为什么在经过不同的滤波器后我们总是能得到相同的尺寸?为了让输出尺寸和输入尺寸保持一致,我们使用的方法是零填充(zero padding)。另外,输入中的256是上一层中输入的深度。

池化层在这个问题中也参与了运算,它保留了模型的深度,因此在每一层深度只能增加。

另外通过计算我们可以发现,卷积层的参数数量或者操作数量达到了854M,计算量极大。

3.“blottleneck”(瓶颈层):

使用 “inception” module 后随之而来的问题就是:

l   单层的参数就达到854M个,计算量极大;

l   且数据经过每一个 “inception” module 后深度都会增加(光池化层得到输出数据的尺寸就已经与原数据相同)。

为解决上述问题,构建了称之为“bottleneck”的1x1卷积层以减少特征深度(如下图所示):

改进后的“inception” module如下图所示:

Bottleneck的目的是在卷积运算之前降低特征图的维度。我们运用之前提到过的1*1卷积核,它能够保持形状不变,减小深度,从而降低特征图的维度。

对于Bottleneck减小运算量的具体计算:对于相同的输入大小28*28*256,我们将计算量减少到了358M。

用1*1卷积核是否会导致一些信息丢失?结果可能会有一些信息丢失,但这样的效果更好,对于处理计算复杂性这一点来说。

4.Full GoogleNet Architecture:

Stem Network更像我们之前见过的正常的CNN结构。

我们将初始模块堆叠在一起

在堆栈的顶部有分类输出。全连接层已经被移除,没有FC工作效果依然很好,还节省了很多参数。

5.Auxiliary classification outputs

GoogleNet同时拥有两个辅助输出,它们是使用Softmax函数的一个带有平均池化的小网络,具有平均池化、1*1卷积、FC*2、Softmax分类的结构(相当于我们提前进行了分类输出),可以对前面几个层进行更多的梯度训练。当网络深度很深的时候,一些梯度信号会最小化并且丢失了前面几层的梯度信号,该方法能在一定程度上解决梯度消失的问题。

五、ResNet

1.ResNet网络特点:

l   152层;

l   利用残差层实现优化;

l   网络由残差盒堆叠而成(每一个残差盒包含两个3x3 CONV);

l   如果将残差盒中的所有权重置零,那么残差盒的输出与输入就是相等的,因此,在某种层度上,这个模型是相对容易去训练的,并不需要添加额外的层;

l   神经网络中添加L2正则化的作用是迫使网络中的所有参数趋近于0,其他网络结构(如CONV)参数趋于0不太说得通。但在残差网络中,如果所有参数趋于0,那就是促使模型不再使用他不需要的层,因为它只趋使残差盒趋向同一性,也就不需要进行分类;

l   残差连接在反向传播时,为梯度提供了一个超级“高速通道”(梯度经过残差盒的加法门分流然后汇总),这使得网络训练更加容易(DenseNet和FractalNet也有类似的梯度直传式的连接);

l   周期性的,会使用两倍数量的filters,用stride 2 CONV进行下采样(所有维度/2);

l   网络起始处有一个额外的CONV;

l   没有额外的FC;

l   只有一个全局的AVE POOL;

l   每一个CONV后都带有一个BN;

l   用一个额外的带尺度因子的Xavier/2去初始化;

l   初始学习率为0.1,当Validation error停滞时,将其缩小十倍;

l   Mini-batch size = 256;

l   Weight decay = 1e-5.

2.残差盒(Residual block):

当我们在普通卷积神经网络[1]上堆叠越来越多的层时到底会发生什么?我们以VGG或者其他的一般网络为例,我们能仅仅通过扩展更多的层来得到更好的效果吗?答案是不能。

由上图实验结果可知,56层网络的训练误差和测试误差都高于20层的网络。按理说。56层的NN拥有很多参数和更深的层数,应该会更早地达到过拟合,从而拥有更低的训练误差和更高的测试误差。但是实验表明56层的NN的训练误差比20层的NN更高了。

ResNet的作者假设:这是一个优化问题,层深的模型更难优化。于是,作者提出了残差网络的概念,其与常规网络的区别如下图所示:

Residual block使这些网络层拟合的是残差映射H(x)-x而不是直接映射H(x)。某种意义上可以看成是一种对输入的修正。之前我们学习的是H(x),现在我们把最终的表达分解为F(x)+x,从而只需学习F(x),F(x)就是我们所说的残差。通常来说,网络的层与层之间实际上相差不大的,一个恒等映射(x到x本身)加上很小的?x(若恒等映射是最好的,只需将?x置零)的学习过程更容易实现。

与GoogleNet类似,如果网络层数较多的话,ResNet的残差盒可以使用“bottleneck”来加速计算(如下图所示)。

六、扩展知识:

1.Network in Network(NiN):

每个卷积层中都有一个完全连接的MLP(micronetwork),以计算局部图像块的更多抽象特征。这个模型是GoogleNet和ResNet模型“bottleneck”的灵感来源。

2.Identity Mappings in Deep Residual Networks

在ResNet的基础上进行修改,新的结构能够实现一种更直接的路径用于在整个网络中传播信息(将激活层移动到残差映射路径中)。

3.Wide Residual Networks

作者认为残差量是一个十分重要的因素而不是深度。使用了更宽的残差模块(FxK filters而不是F filters in each layer),宽网络的另一个优点是便于使用并行计算。本文旨在比较网络的宽度、深度和残差连接所做出的贡献。

4.ResNeXt

通过多条平行路径增加残差盒宽度,这些分支总和被称为“cardinality”,思想类似于“inception”module。

5.Deep Networks with Stochastic Depth

动机是在训练过程中通过短网络减少消失梯度和训练时间。该思想类似于Dropout,只不过这里是沿网络深度方向的dropout。方法是在每次训练中随机drop某层子集(即ResNet中?x=0,该层为恒等映射),在测试时使用完整的训练好的网络。

6.FractalNet

作者认为引入残差可能不是必须的,关键在于有效地从浅层网络转型为深层网络。因此他使用了上图所示这种分型结构,各层都以分形的形式存在,因此同时存在浅层和深层路径到大输出值。他们通过抛弃子路径的方式训练,类似于dropout,测试时使用整个分形网络。

7.DenseNet

密集连接卷积神经网络。每个Dense block中每层都与其后的所有层以前馈的形式连接,因此在这个Dense block内,你对其的输入也是对所有其他各层的输入,你会计算每一个卷积输出,这些输出与其后的所有层连接,所有这些值集中起来,共同作为卷积层的输入。这一方法能缓解梯度消失的问题,加强特征图的传递,鼓励特征的再利用。

8.SqueezeNet

关注于构建高效网络,压缩网络的大小。由一个个fire模块组成,每个fire模块都含有一个squeeze层,其由许多1x1的filters组成。接着,它再传递给一个扩大层含有一些1x1和3x3的filters。参数只有AlexNet的1/50,性能相似。


[1] plain convolutional neural network专指不带残差功能的卷积神经网络。

原文地址:https://www.cnblogs.com/yun-an/p/10293841.html

时间: 2024-09-28 14:11:56

Cs231n课堂内容记录-Lecture 9 深度学习模型的相关文章

Cs231n课堂内容记录-Lecture 6 神经网络一

Lecture 6 神经网络一 课程内容记录: (上)https://zhuanlan.zhihu.com/p/21462488?refer=intelligentunit (下)https://zhuanlan.zhihu.com/p/21513367?refer=intelligentunit 1.视频弹幕中关于课堂例子的解释: 1:我们通过学习训练集得到权重W1,对应于可以识别一些feature的模板. 2:输入新的数据X,结合W1,计算得到一个得分score(中间过程可能会再经过一些非线

Cs231n课堂内容记录-Lecture 7 神经网络二

Lecture 7 神经网络二 课程内容记录:https://zhuanlan.zhihu.com/p/21560667?refer=intelligentunit 1.协方差矩阵: 协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差.而方差是协方差的一种特殊情况,即当两个变量是相同的情况. 协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同. 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间

Cs231n课堂内容记录-Lecture3

Lecture 3 课程内容记录:(上)https://zhuanlan.zhihu.com/p/20918580?refer=intelligentunit (中)https://zhuanlan.zhihu.com/p/20945670?refer=intelligentunit (下)https://zhuanlan.zhihu.com/p/21102293?refer=intelligentunit 1.线性分类器(linear classifer): 我们总是希望得到一个函数f(x,w

利用 TFLearn 快速搭建经典深度学习模型

利用 TFLearn 快速搭建经典深度学习模型 使用 TensorFlow 一个最大的好处是可以用各种运算符(Ops)灵活构建计算图,同时可以支持自定义运算符(见本公众号早期文章<TensorFlow 增加自定义运算符>).由于运算符的粒度较小,在构建深度学习模型时,代码写出来比较冗长,比如实现卷积层:5, 9 这种方式在设计较大模型时会比较麻烦,需要程序员徒手完成各个运算符之间的连接,像一些中间变量的维度变换.运算符参数选项.多个子网络连接处极易发生问题,肉眼检查也很难发现代码中潜伏的 bu

提升深度学习模型的表现,你需要这20个技巧

提升深度学习模型的表现,你需要这20个技巧 标签: 深度学习 2016-09-24 21:28 6650人阅读 评论(0) 收藏 举报  分类: 深度学习(4)  选自machielearningmastery 机器之心编译 作者:Jason Brownlee 参与:杜夏德.陈晨.吴攀.Terrence.李亚洲 本文原文的作者 Jason Brownlee 是一位职业软件开发者,没有博士学位的他通过「从应用中学习」的方法自学了机器学习,他表示对帮助职业开发者应用机器学习来解决复杂问题很有热情,也

文本情感分类(二):深度学习模型

在<文本情感分类(一):传统模型>一文中,笔者简单介绍了进行文本情感分类的传统思路.传统的思路简单易懂,而且稳定性也比较强,然而存在着两个难以克服的局限性:一.精度问题,传统思路差强人意,当然一般的应用已经足够了,但是要进一步提高精度,却缺乏比较好的方法:二.背景知识问题,传统思路需要事先提取好情感词典,而这一步骤,往往需要人工操作才能保证准确率,换句话说,做这个事情的人,不仅仅要是数据挖掘专家,还需要语言学家,这个背景知识依赖性问题会阻碍着自然语言处理的进步. 庆幸的是,深度学习解决了这个问

构建和优化深度学习模型(神经网络机器识图)

DSL(Deep Learning Service)是基于华为云强大高性能计算提供一站式深度学习平台服务,内置大量优化的网络模型算法,以兼容.便携.高效的品质帮助用户轻松使用深度学习技术,通过灵活调度按需服务化方式提供模型训练.评估与预测. 深度学习训练模型:数据准备-->数据模型训练(优化参数)-->反馈损失值-->更多训练 评估模型:返回结果为预测值与测试数据集标注值的错误率或准确率 深度学习模型的优化方法? 训练次数的调整? 代价函数的调整? 学习率的调整? 训练算法的优化? 神经

深度 | 提升深度学习模型的表现,你需要这20个技巧(附论文)

深度 | 提升深度学习模型的表现,你需要这20个技巧(附论文) 2018-04-15 19:53:45 JF_Ma 阅读数 296更多 分类专栏: 机器学习 深度 | 提升深度学习模型的表现,你需要这20个技巧(附论文) 2016-09-23 机器之心 选自machielearningmastery 机器之心编译 作者:Jason Brownlee 参与:杜夏德.陈晨.吴攀.Terrence.李亚洲 本文原文的作者 Jason Brownlee 是一位职业软件开发者,没有博士学位的他通过「从应用

一种基于脑电图情感识别的新型深度学习模型

目录 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区(微信号:Brain_Computer).QQ交流群:903290195 机器学习的最新进展使得检测和识别人类情绪的技术也得到了快速的发展.其中一部分机器学习技术中是通过分析脑电图(EEG)信号来工作的,这些信号本质上是对从一个人的头皮上收集的脑电活动的记录. 过去十多年来,大多数基于脑电图的情绪分类方法都采用了传统的机器学习方法,例如支持向量机(SVM)模型,因为这些方法需要的训练样本较少.事实上之所以使用需要训练样本量少的方法是因