您的位置:首页 > 理论基础 > 计算机网络

深度学习网络Lenet Alexnet VGG GoogleNet 总结笔记

2017-04-20 21:13 1051 查看

-深度学习网络学习总结

卷积神经网络,是深度学习方向的主流方向,目前具有代表的网络如下:lenet alexnet vgg googlenet, 大部分卷积神经网络都由conv层、pool层、rule层、LRN层、fc层、softmax、dropout等层组成。本文对以上网络依次介绍。:

1. Lenet,1986年
2. Alexnet,2012年
3. GoogleNet,2014年
4. VGG,2014年
5. Deep Residual Learning,2015年


- Lenet网络



lenet是1998年设计的用于手写数字识别的卷积神经网络,该网络由1个input输入层、2个pool层、2个conv层、3个fc(full connections)层构成。


conv层: 简单说就是用 n*n大小核 对图像进行卷积操作,有点类似图像边缘检测算法,比如拉普拉斯滤波。作用是抽取原始图像特征,如果是共享权值型卷积层,可以大大减少层与层之间的参数。conv层的卷积核大小选取是有讲究的,一般取1,3,5等小的半径。原因一:太大的核,会导致参数变得很多,原因二:可以用小半径核分多层替代大半径核,使得相同视野范围,小核是非线性特征组合,大核是线性特征组合,特征表达能力能小核的组合层小。

pool层: 就是对图像进行下采样,使得网络越来越小,便于网络训练收敛,减小网络训练参数。

rule层: 我的理解就是让网络产生很多0值,抑制作用不大的网络节点,使得网络变得稀疏。事实证明可以有利于网络训练收敛。

LRN: 局部响应归一化层完成一种“临近抑制”操作,对局部输入区域进行归一化。据说这种layer没什么作用,做网络的训练结果没什么影响

fc层: 全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;在FC越来越不被看好的当下,我们近期的研究发现,FC可在模型表示能力迁移过程中充当“防火墙”的作用。具体来讲,假设在ImageNet上预训练得到的模型为 ,则ImageNet可视为源域(迁移学习中的source domain)。微调(fine tuning)是深度学习领域最常用的迁移学习技术。针对微调,若目标域(target domain)中的图像与源域中图像差异巨大(如相比ImageNet,目标域图像不是物体为中心的图像,而是风景照,见下图),不含FC的网络微调后的结果要差于含FC的网络。因此FC可视作模型表示能力的“防火墙”,特别是在源域与目标域差异较大的情况下,FC可保持较大的模型capacity从而保证模型表示能力的迁移。(冗余的参数并不一无是处)。简单说就是有利于用已经训好的模型做fine-tuning

softmax: 就是将输出做一个概率计算,从类1~类N的概率分布,没记错的话,好像计算公式是: y = log(x) / ∑(log(x))。

dropout: Dropout是指在模型训练时随机让网络某些隐含层节点的权重不工作,不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了(有点抽象,具体实现看后面的实验部分)。Dropout类似于性别在生物进化中的角色,物种为了使适应不断变化的环境,性别的出现有效的阻止了过拟合,即避免环境改变时物种可能面临的灭亡。

-了解了以上网络层的作用,就很容易理解lenet网络。

- Alexnet网络结构

-


Alexnet 比 Lenet 网络复杂点,多了LRN层,dropout层,没其它什么特殊的地方,因此也很容易理解。这里提下怎么计算每个conv层有多少个参数。如果前一层网络有200个节点,本层卷积核大小3*3,节点400个,那么本conv层的参数有:200 * (3 * 3 * 400) = 720000 个参数。


- VGG网络



VGG 网络也是由conv、pool、fc、softmax层组成,有意思的是,VGG网络的卷积层,没有缩小图片,每层pad都是有值的,图片缩小都是由pool来实现的。这么做的好处,我看是为了加深网络的深度,实际上网络越深,一般都会带来比较好的训练结果。另外看看怎么计算每个conv层的参数个数




有意思的是,大家会注意到,在VGGNet这样一个神经网络里,大多数的内存消耗在前面的卷积层,而大多数需要训练的参数却集中在最后的全连接层,比如上上面的例子里,全连接层有1亿权重参数,总共神经网里也就1.4亿权重参数。


-考虑点:

组一个实际可用的卷积神经网络最大的瓶颈是GPU的内存。毕竟现在很多GPU只有3/4/6GB的内存,最大的GPU也就12G内存,所以我们应该在设计卷积神经网的时候多加考虑:

1. 很大的一部分内存开销来源于卷积层的激励函数个数和保存的梯度数量。

2. 保存的权重参数也是内存的主要消耗处,包括反向传播要用到的梯度,以及你用momentum, Adagrad, or RMSProp这些算法时候的中间存储值。

3. 数据batch以及其他的类似版本信息或者来源信息等也会消耗一部分内存。

- GoogleNet网络



-对上图做如下说明

1 . 显然GoogLeNet采用了模块化的结构,方便增添和修改;

2 . 网络最后采用了average pooling来代替全连接层,想法来自NIN,事实证明可以将TOP1 accuracy提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便以后大家finetune;

3 . 虽然移除了全连接,但是网络中依然使用了Dropout ;

4 . 为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度。文章中说这两个辅助的分类器的loss应该加一个衰减系数,但看caffe中的model也没有加任何衰减。此外,实际测试的时候,这两个额外的softmax会被去掉。

第一次看到这个网络这么复杂肯定吓到了,其实没啥,关键在于掌握它的精髓,你就不觉得复杂了。该


网络提出了一种新的结构,叫 Inception,主要思路是怎样用密集成分来近似最优的局部稀疏结构。



-**对上图做以下说明**


1 . 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;

2 . 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了;

3 . 文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了。

4 . 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加。

但是,使用5x5的卷积核仍然会带来巨大的计算量。 为此,文章借鉴NIN2,采用1x1卷积核来进行降维。


例如:上一层的输出为100x100x128,经过具有256个输出的5x5卷积层之后(stride=1,pad=2),输出数据为100x100x256。其中,卷积层的参数为128x5x5x256。假如上一层输出先经过具有32个输出的1x1卷积层,再经过具有256个输出的5x5卷积层,那么最终的输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256,大约减少了4倍。

-**改进后的结构如下:**




- 如何设计自己的网络

下面的准则来源于大量的实验,因此包含一定的推测,但实际证明基本都是有效的。


1 . 避免表达瓶颈,特别是在网络靠前的地方。 信息流前向传播过程中显然不能经过高度压缩的层,即表达瓶颈。从input到output,feature map的宽和高基本都会逐渐变小,但是不能一下子就变得很小。比如你上来就来个kernel = 7, stride = 5 ,这样显然不合适。

另外输出的维度channel,一般来说会逐渐增多(每层的num_output),否则网络会很难训练。(特征维度并不代表信息的多少,只是作为一种估计的手段)

2 . 高维特征更易处理。 高维特征更易区分,会加快训练。

3 . 可以在低维嵌入上进行空间汇聚而无需担心丢失很多信息。 比如在进行3x3卷积之前,可以对输入先进行降维而不会产生严重的后果。假设信息可以被简单压缩,那么训练就会加快。

4 . 平衡网络的宽度与深度。

上述的这些并不能直接用来提高网络质量,而仅用来在大环境下作指导。

-参考

1. http://blog.csdn.net/han_xiaoyang/article/details/50542880

2. http://blog.csdn.net/xbinworld/article/details/45619685

3. http://blog.csdn.net/shuzfan/article/details/50738394
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐