前言:
深度学习:sigmod、tanh、ReLU函数的优缺点-文章图文并举;文章:CNN的结构分析--; 文章:历年ImageNet冠军模型网络结构解析---; 文章:GoogleLeNet系列解读---; 文章:DNN结构演进History—CNN-GoogLeNet :Going Deeper with Convolutions ;文章:Google最新开源Inception-ResNet-v2,借助残差网络进一步提升图像分类水准-----附有代码解析; 文章:深入浅出——网络模型中Inception的作用与结构全解析
科普一下,如何加快卷积速度,以及应该在计算时候进行简单拆分卷积核;文章:谷歌大脑颠覆深度学习混乱现状,要用单一模型学会多项任务------这是个极其扯蛋的问题!Google这群人就知道标题党搞事情!
文章对摘抄文章有大量修改,如有疑问,请移步原文。
为了更多的类别和更高的精度,以及使用更少的网络,单个CNN必须变得参数更多,因此成为更大。参数更大导致模式识别过程计算速度降低,因此要优化计算过程,避免一次性计算所有参数,所以要分层。CNN逐渐更大,更长。
这些结构又发生了怎样地变化?
一切数学问题都是可以被数学基础集合论所解释的问题,CNN也可以使用集合论的形式进行阐述,并使用集合论的工具解决问题。
变宽边长变稀疏是CNN的发展趋势,CNN为了更有效的训练网络和降低总参数量,对结构上也进行逐步改进。最早的LeNet使用了C1-S2-C3-S4-C5-F6六层网,使用了三个Conv层C1C3C5,和两个pooling层S2S4。而后AlexNet除了变胖之外,有加入F6、F7 的附带Dropout和ReLU层,变得更长,进而可以处理图像的复杂模式识别问题。VGG网络在引入Dropout和ReLU整流之后,通过反复堆叠C层和S层,堆积到16层、19层。GoogleInception Net通过增强卷积模块功能,减低总的参数量,只有ALexnet的1/2,达到了22层。此后,残差网络ResNet出现,残差网络对网络结构进行了改变,在网络残差反传的过程中允许存在shortcuts,直接传播到下一层,用于训练更深的神经网络。2016年又出现了所谓的DenseNet,指出ResNet是DenseNet的一种特殊形式,给出了一种更为泛泛的网络结构形式,取得比ResNet更有效的结果。
获得CVPR2016最佳论文的DenseNet,这个网络与GAN对抗生成网络有比较过吗?
0、CNN——卷积层的作用.
二维卷积计算过程是一个二维矩阵乘法运算,在图像滤波方法中大量应用,反向卷积过程可以看做一个模板匹配过程,与卷积核相同或者相似的区域会有最大的卷积值。 OpenCV对应的运算为filter2D和matchtemplate。
CNN的二维结构天然适合图像特征提取和识别过程,CNN通过卷积层,训练不同的卷积核来提取图像中隐含的模式。CNN训练得到的是滤波器-卷积核,结构描述为神经网络稀疏神经元参数,数学描述为一个二维压缩映射。本质上是对于某种特定的模式有响应,反之无响应,所以全卷积一直到最后一层,响应最强的特征图,就是对应的分类。
怎样全局?为提取到较为全局的特征,CNN一般至少有两个卷积层,即最小为类似于LeNet的CNN网络。多个卷积层可以使用卷积核的作用扩增到正副图像,Pooling层的作用可以使特征保持一定的平移不变性。
一、LeNet网络-最早的六层网络.
下图是广为流传LeNet的网络结构,麻雀虽小,但五脏俱全,卷积层、pooling层、全连接层,这些都是现代CNN网络的基本组件。
网络结构:C1 +S2 +C3 +S4 +C5 +F6
Conv层用于提取特征map,而pooling层用于降维和维持平移不变性,FullCon层用于特征压缩把特征map压缩到向量空间,MLP层用于多类识别。
LeNet5当时的特性有如下几点:每个卷积层包含三个部分:卷积、池化和非线性激活函数;使用卷积提取空间特征;降采样(Subsample)的平均池化层(Average Pooling);双曲正切(Tanh)或S型(Sigmoid)的激活函数;MLP作为最后的分类器;层与层之间的稀疏连接减少计算复杂度。
LeNet的Caffe中配置文件:https://github.com/BVLC/caffe/blob/master/examples/mnist/lenet.prototxt
问题:sigmod激活函数的反传梯度消失问题(网络加深,BP算法在误差反传过程中使用sigmod导数,导致残差急剧衰减);CNN网络过拟合(更深更大的网络导致函数映射复杂,参数过多,容易过拟合);函数参数太多,训练过程收敛性难以控制,因此导致训练困难。
二、AlexNet -可并行的8层 CNN
卷积过程可以分组吗?分组卷积的思想影响比较深远,后来一些轻量级的SOTA(State Of The Art)网络,都用到了分组卷积的操作,以节省计算量。受制于硬件限制,卷积分组过程真正使大规模CNN的快速训练称为可能。
AlexNet 可以说是具有历史意义的一个网络结构,可以说在AlexNet之前,深度学习已经沉寂了很久。历史的转折在2012年到来,AlexNet 在当年的ImageNet图像分类竞赛中,top-5错误率比上一年的冠军下降了十个百分点,而且远远超过当年的第二名。
AlexNet 之所以能够成功,深度学习之所以能够重回历史舞台,原因在于工程模式和网络结构上进行了改进,缓解或解决了LeNet遇到的大部分问题:
梯度消失 问题:非线性激活函数ReLU激活函数使用——用以解决反传训练时的梯度消失问题。
防止过拟合方法:Dropout,数据增强——使用更多的神经元用于容错,用于增加泛化性能。
大数据 预训练:百万级ImageNet图像数据——使用预训练网络,再对特定问题微调,类似原始DNN论文预先非监督训练结构方法。
并行加速 训练:GPU实现,LRN归一化层的使用——增加训练速度。
文章:DeepLearning回顾
1.AlexNet的8层分布式结构
AlexNet只在某些层进行参数交流,可以把一些层的神经元分不到不同的GPU上,进而可以并行运行。
2.ALexNet数据增强:图像翻转,裁剪平移,光照变换等....(这纯粹是一个技巧,可以从网络中分离出来)
文章:DeepLearning回顾
3.DropOut—网络冗余
Dropout方法用于防止过拟合的。Dropout应该算是AlexNet中一个很大的创新,以至于Hinton在后来很长一段时间里的Talk都拿Dropout说事,后来还出来了一些变种,比如DropConnect等。
4. ReLU激活函数
用ReLU代替了传统的Tanh或者Logistic。好处有:
ReLU本质上是分段线性模型,前向计算简单,无需指数之类操作;
ReLU的偏导也很简单,反向传播梯度,无需指数或者除法之类操作;
ReLU不容易发生梯度发散问题,Tanh和Logistic激活函数在两端的时候导数容易趋近于零,多级连乘后梯度更加约等于0;
ReLU关闭了右边,从而会使得很多的隐层输出为0,即网络变得稀疏,起到了类似L1的正则化作用,可以在一定程度上缓解过拟合。ReLU缺点,比如左边全部关了很容易导致某些隐藏节点永无翻身之日,所以后来又出现pReLU、random ReLU等改进,而且ReLU会很容易改变数据的分布,因此ReLU后加Batch Normalization也是常用的改进的方法。
5. Local Response Normalization
局部响应归一化,简称LRN,实际就是利用临近的数据做归一化,用以平衡网络权重。这个策略贡献了1.2%的Top-5错误率。
6.Overlapping Pooling
覆盖池化代替划分池化,即Pooling的步长比Pooling Kernel的对应边要小。用以降低平移影响。这个策略贡献了0.3%的Top-5错误率。
7.SoftMax层
softMax的好处就是反传更新参数方式简单明了,具有神奇的效果。
其实使用 交叉熵Cross Entropy Loss 作为损失函数不是 DNN 的专属,在“当我们在谈论GBDT:Gradient Boosting 用于分类与回归”中介绍过 GBDT 在进行多类分类的时候就是使用的 Softmax + Cross Entropy,只是当时它被称为对数损失函数(Log-Likehood Loss)。有兴趣的同学可以回去看看那个部分。
最后需要说明的是,当我们使用 MSE(均方误差)作为 Cost Function ,会导致的更新速度依赖于 Activation Function 的导数,在 Activation Function 为 Sigmoid 函数时很容易更新缓慢;而使用 Softmax + Cross Entropy Loss,能够有效克服这个问题。这也是 Cross Entropy Loss 在分类问题中使用较多的原因之一。
文章:***DNN与他的参数们***https://zhuanlan.zhihu.com/p/26122560
AlexNet的Caffeproto文件:https://github.com/BVLC/caffe/blob/master/models/bvlc_reference_caffenet/train_val.prototxt
深度学习:sigmod、tanh、ReLU函数的优缺点-文章图文并举.
三、网络结果可视化-ZFNet
基于NN的分层堆叠性,NN即使以特定结构三层网便可以以任意精度逼近任意非线性函数,也同时表示函数形式在NN中的难以形式化。K曾经证明(1957),在单位超立方体内的任意连续函数,都可以选择适当的参数展开为两级级数求和问题。后来的研究发现,任意一个从x到y的映射,都存在一个合适的三层神经网络以任意的精度逼近它。
反过来看,从神经网络结构和参数,去描述函数的一个形式,涉及到假设和拟合问题,是个不确定问题。进而以此归结出基于模型函数的优化函数,则是不可能完成的事情。从这个角度上看来,NN是个语义和语法的黑箱。
Visualizing and Understanding Convolutional Networks,提出通过反卷积(转置卷积)进行卷积网络层可视化的方法,以此分析卷积网络的效果,并指导网络的改进,在AlexNet网络的基础上得到了效果更好的ZFNet网络。
该论文是在AlexNet基础上进行了一些细节的改动,网络结构上并没有太大的突破。该论文最大的贡献在于通过使用可视化技术揭示了神经网络各层到底在干什么,起到了什么作用。如果不知道神经网络为什么取得了如此好的效果,那么只能靠不停的实验来寻找更好的模型。使用一个多层的反卷积网络来可视化训练过程中特征的演化及发现潜在的问题;同时根据遮挡图像局部对分类结果的影响来探讨对分类任务而言到底那部分输入信息更重要。
参考: ZfNet解卷积:可视化CNN模型( PythonCode可视化Cifar10)
ZFNet在保留AlexNet的基本结构的同时利用反卷积网络可视化的技术对特定卷积层的卷积核尺寸进行了调整,第一层的卷积核从11*11减小到7*7,将stride从4减小到2,Top5的错误率比AlexNet比降低了1.7%。对AlexNet本身网络结构的改变不大。
四、更小更深更大—反复堆叠C和S层的VGG-Net
之前人们的观念是,卷积核越大,receptive field(感受野)越大,看到的图片信息越多,因此获得的特征越好。AlexNet中用到了一些非常大的卷积核,比如11×11、5×5卷积核。虽说如此,但是大的卷积核会导致计算量的暴增,不利于模型深度的增加,计算性能也会降低。
NN走向Deep的过程即是拆分卷积核,以多层小核组合来达到单层大核的目的。从FNN到局部感受野,从大卷积核到多层小卷积核,即是走的同一个过程。从整体到局部,从单个到组合,进而可以构建稀疏性,使结构最优化。
理论上反复堆叠卷积层和Pooling层,使网络变长,可以获得更为全局的特征,拟合更复杂的函数,可以得到更为精准的分类器。VGGNet是牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员一起研发的的深度卷积神经网络。VGGNet探索了卷积神经网络的深度与其性能之间的关系,通过反复堆叠3*3的小型卷积核和2*2的最大池化层(最小核和最小池化层),VGGNet成功地构筑了16~19层深的卷积神经网络。获得ImageNet2014年亚军(VGGNet,top-5错误率7.3%,19层神经网络)。
图片:VGG19网络,理论山反复堆叠conv层和Pooling层,必定会得到更高的准确率
图片:ALexNet ,VGG19网络,和Google InceptionNet的大致对比。
VGG与Alexnet相比,做了以下改进:
1.去掉了LRN层,作者实验中发现深度卷积网络中LRN的作用并不明显。
2.采用更小的连续3x3卷积核来模拟更大尺寸的卷积核,例如2层连续的3x3卷积层可以达到一层5x5卷积层的感受野,但是所需的参数量会更少,两个3x3卷积核有18个参数(不考虑偏置项),而一个5x5卷积核有25个参数。后续的残差网络等都延续了这一特点。
VGGNet是相对于InceptionNet相对稠密的网络,少了一些特定结构,因此在通用图像处理领域有较好的泛化性能,作为多数检测网络和分类网络的基础网络被广泛使用,且VGGNet相对于其他网路,剪枝也相对简单。
五、CNN网络的神经元——Google InceptionNet
为何只用一种卷积核和Pooling核,为何不能得到一种更为稀疏的结构呢?3*3的核一定是最下粒度的吗?
也因为,CNN网络一直被批判,在结构上根本就不像一个神经网络,而inception结构的引入,使CNN更像一个神经元 网络,使用Inception结构,构建网络中的网络,也更像人的神经系统结构。
GoogLeNet InCeptionNet V1引入了Inception结构,保持利用密集矩阵搞计算性能的同时,强化了CNN结构的稀疏性。且inception结构为模块化结构,方便在深度网络中增删修改。
代码:GoogleNet的Caffe代码:googlenet:caffe/train_val.prototxt at master · BVLC/caffe · GitHub
文章:DNN结构演进History—CNN-GoogLeNet :Going Deeper with Convolutions
提高模型准确率的方法是提高模型的复杂度,提升网络性能最直接的办法就是增加网络深度和宽度,这也就意味着巨量的参数。但是,巨量参数容易产生过拟合也会大大增加计算量。
GoogLeNet InCeptionNet V1是 GoogLeNet的最早版本,出现在2014年的《Going deeper with convolutions》。文章认为解决上述两个缺点的根本方法是将全连接甚至一般的卷积都转化为稀疏连接。一方面现实生物神经系统的连接也是稀疏的,另一方面有文献-1表明:对于大规模稀疏的神经网络,可以通过分析激活值的统计特性和对高度相关的输出进行聚类来逐层构建出一个最优网络。这点表明臃肿的稀疏网络可能被不失性能地简化。 虽然数学证明有着严格的条件限制,但Hebbian准则有力地支持了这一点:fire together,wire together。
早些时候,为了打破网络对称性和提高学习能力,传统的网络都使用了随机稀疏连接。但是,计算机软硬件对非均匀稀疏数据的计算效率很差,所以在AlexNet中又重新启用了全连接层,目的是为了更好地优化并行运算。
所以,现在的问题是有没有一种方法,既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。大量的文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,据此论文提出了名为Inception 的结构来实现此目的。
对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倍。
改进型Inception结构,降低计算量
网络改进:
1.Inception V1中精心设计的Inception Module提高了参数的利用效率,其结构如上图所示。这一部分也借鉴了 Network In Network 的思想,形象的解释就是Inception Module本身如同大网络中的一个小网络,其结构可以反复堆叠在一起形成大网络。
2 . 网络最后采用了average pooling来代替全连接层(全连接层几乎占据了AlexNet或VGGNet中90%的参数量,而且会引起过拟合,去除全连接层后模型训练更快并且减轻了过拟合),想法来自NIN,事实证明可以将TOP1 accuracy提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便以后大家finetune;
3 . 虽然移除了全连接,但是网络中依然使用了Dropout ;
4 . 为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度。文章中说这两个辅助的分类器的loss应该加一个衰减系数,但看caffe中的model也没有加任何衰减。此外,实际测试的时候,这两个额外的softmax会被去掉。
Inception V1 网络结构:
Inception V1有22层深,比AlexNet的8层或者VGGNet的19层还要更深。但其计算量只有15亿次浮点运算,同时只有500万的参数量,仅为AlexNet参数量(6000万)的1/12,却可以达到远胜于AlexNet的准确率,可以说是非常优秀并且非常实用的模型。
googleNet 的Caffe代码:googlenet:caffe/train_val.prototxt at master · BVLC/caffe · GitHub
Google InceptionNet家族
Google Inception Net是一个大家族,包括:
2014年9月的论文Going Deeper with Convolutions提出的Inception V1(top-5错误率6.67%)。
2015年2月的论文Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate提出的Inception V2(top-5错误率4.8%)。
2015年12月的论文Rethinking the Inception Architecture for Computer Vision提出的Inception V3(top-5错误率3.5%)。
2016年2月的论文Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning提出的Inception V4(top-5错误率3.08%)。
GoogLeNet被称为Inception-v1,加入batch normalization之后被称为Inception-v2,加入factorization的idea之后,改进为Inception-v3。从DistBelief过渡到TensorFlow之后,不用再顾虑分布式训练时要做模型的分割,设计出Inception-v4模型。设计的更简洁,计算量也更小。
Googel InceptionV3到V4有哪些改进?https://www.zhihu.com/question/50370954/answer/128527285
GoogleInception V2的改进
1. 用两个3*3的卷积代替5*5的大卷积(用以降低参数量并减轻过拟合),此处, Inception V2学习了VGGNet。
2. 还提出了著名的Batch Normalization(以下简称BN)方法。BN是一个非常有效的正则化方法,可以让大型卷积网络的训练速度加快很多倍,同时收敛后的分类准确率也可以得到大幅提高。
BN在用于神经网络某层时,会对每一个mini-batch数据的内部进行标准化(normalization)处理,使输出规范化到N(0,1)的正态分布,减少了Internal Covariate Shift(内部神经元分布的改变)。
BN的论文指出,传统的深度神经网络在训练时,每一层的输入的分布都在变化,导致训练变得困难,我们只能使用一个很小的学习速率解决这个问题。而对每一层使用BN之后,我们就可以有效地解决这个问题,学习速率可以增大很多倍,达到之前的准确率所需要的迭代次数只有1/14,训练时间大大缩短。
而达到之前的准确率后,可以继续训练,并最终取得远超于Inception V1模型的性能——top-5错误率4.8%,已经优于人眼水平。因为BN某种意义上还起到了正则化的作用,所以可以减少或者取消Dropout,简化网络结构。
六、残差网络—概率组合模型ResNet34
另一方面,inception网络包含了网络非全部遍历的性质,输入数据在形式上不需要走完整个网络,是通过inception的堆叠结构实现的。为何不在模型的集成层面构建稀疏性,一个深度网络是否需要全部的深?
此外,恒等映射不会降低网络的泛化性能,多加几层恒等映射不会降低网络的表达能力。残差越过一层网络直接到下一层的HighWayNet思想促进了网络向更深的方向发展,并由此取得了更好的效果。
恒等映射类似的保存残差的思想在古老的RNN-LSTM网络中已得到很好的体现。LSTM中使用Gate控制参数的改变,有效的防止梯度爆炸和梯度衰减,并能以此处理特征的变长问题。
ResNet最初的灵感出自这个问题:在不断加神经网络的深度时,会出现一个退化的问题,即准确率会先上升然后达到饱和,再持续增加深度则会导致准确率下降。这并不是过拟合的问题,因为不光在测试集上误差增大,训练集本身误差也会增大。假设有一个比较浅的网络达到了饱和的准确率,那么后面再加上几个的全等映射层,起码误差不会增加,即更深的网络不应该带来训练集上误差上升。
这里提到的使用全等映射直接将前一层输出传到后面的思想,就是ResNet的灵感来源。假定某段神经网络的输入是x,期望输出是H(x),如果我们直接把输入x传到输出作为初始结果,那么此时我们需要学习的目标就是 F(x) = H(x) - x 。
一个ResNet的残差学习单元(Residual Unit),ResNet相当于将学习目标改变了,不再是学习一个完整的输出H(x),只是输出和输入的差别H(x)-x,即残差。
直通网络-残差网络和Plain网络—原始逐层CNN的结构对比如下:
上图 展示ImageNet网络架构。左:vgg-19模型(19.6亿触发器)作为参考。中间:一个有34个参数层的普通网络(3.6亿个触发器)。右:有34g1参数层的残差网络(3.6亿触发器)。快捷键点增加尺寸。表1显示更多细节和其他变型。
ResNet有很多旁路的支线将输入直接连到后面的层,使得后面的层可以直接学习残差,这种结构也被称为shortcut或skip connections。传统的卷积层或全连接层在信息传递时,或多或少会存在信息丢失、损耗等问题。ResNet在某种程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络则只需要学习输入、输出差别的那一部分,简化学习目标和难度。
下图是各个层的残差网络在不同层数时的网络配置,其中基础结构很类似,都是前面提到的两层和三层的残差学习单元的堆叠。
使用了ResNet的结构后,可以发现层数不断加深导致的训练集上误差增大的现象被消除了,ResNet网络的训练误差会随着层数增大而逐渐减小,并且在测试集上的表现也会变好。
ResNet 流行的结构为使用了50层、101层、201层,被称为ResNet-50,DenseNet-101,ResNet-201。广泛使用的ResNet为ResNet201.
集成模型理解
残差网络的集成模型理解:系统学习深度学习(二十)--ResNet,DenseNet,以及残差家族 描述残差网络其实是一个深浅层网络并行的投票系统。其实ResNet是由大多数中度网络和一小部分浅度网络和深度网络组成的,说明虽然表面上ResNet网络很深,但是其实起实际作用的网络层数并没有很深。大多数的梯度其实都集中在中间的路径上,论文里称为effective path 。ResNet似乎没有解决深度网络的梯度消失的问题,ResNet其实就是一个多人投票系统。
具有一定模型概率性的残差网络,使一个CNN网络不需要全部的深,对数据的处理在复杂度上是不稳定的,最高复杂度取决于最深的路径,最低复杂度来自于最短的路径。
ResNet其实就是一个多人投票系统。
何凯明的Caffe Model:https://github.com/KaimingHe/deep-residual-networks
基于TensorFlow的Model:https://github.com/ry/tensorflow-resnet
一些其他的配置文件:https://github.com/antingshen/resnet-protofiles
ResNet50的一个使用案例:http://blog.csdn.net/tangwenbo124/article/details/56070322 Caffe2使用了新的构架,摆脱了原始的分层结构,并实现了LSTM的功能。
七、Inception ResNet V2
Inception-ResNet-v2是早期Inception V3模型变化而来,从微软的残差网络(ResNet)论文中得到了一些灵感,使用与ResNet类似的网络构架。
文章链接:系统学习深度学习(二十一)--GoogLeNetV4与Inception-ResNet V1,V2
Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning,top5 error 3.08%。这篇论文,主要贡献如下:
-
1、在Inception v3的基础上发明了Inception v4,v4比v3更加复杂。
-
2、结合ResNet与GoogLeNet,发明了Inception-ResNet-v1、Inception-ResNet-v2,其中Inception-ResNet-v2效果非常好,但相比ResNet,Inception-ResNet-v2的复杂度非常惊人,跟Inception v4差不多。
-
3、加入了Residual Connections以后,网络的训练速度加快了。
-
4、在网络复杂度相近的情况下,Inception-ResNet-v2略优于Inception-v4。
-
5、Residual Connections貌似只能加速网络收敛,真正提高网络精度的是“更大的网络规模”。
InceptionV4的Inception-A 模块网络结构 和 Inception-ResNet-A 模块网络结构:
其中的+就是residual connection
InceptionV4的Inception-A 模块 Inception-ResNet-A 模块
Inception-ResNet构架图
通过20个类似的模块组合,构建一个Inception-ResNet:
基于Inception-v3和Inception-v4,论文分别得到了Inception-ResNet-v1和Inception-ResNet-v2两个模型。
Inception-ResNet-v2图中最上部分,可以看到整个网络扩展了。注意该网络被认为比先前的Inception V3还要深一些。在图中主要部分重复的残差区块已经被压缩了,所以整个网络看起来更加直观。另外注意到图中inception区块被简化了,比先前的Inception V3种要包含更少的并行塔 (parallel towers)。
八、概率扩沿延——看看来自16年的DenseNet
DenseNet把直连结构引入到各个网络层,比残差网络更近一步,是个更稠密的概率模型,这意味着训练网络需要更多的样本以及更长的收敛周期,相比于残差网络,所谓的DenseNet没有太大的工业价值。DenseNet结构的出现相当于把LSTM结构再次放松约束为RNN,展开形式是一种更为稠密的概率模型,理论上可以通过更强大的过拟合取得更好的测试结果。
再重复一张拓扑变化图 、
当然,RNN也可以拓扑变化为HighNet的形式。
其实无论是ResNet
还是DenseNet
,核心的思想都是HighWay Nets
的思想:就是skip connection
,对于某些的输入不加选择的让其进入之后的layer(skip),从而实现信息流的整合,避免了信息在层间传递的丢失和梯度消失的问题(还抑制了某些噪声的产生).
核心的思想都是HighWay Nets
的思想:就是skip connection
, 与RNN的表现能力相同。但在图像模式识别的能力上,现阶段实验结果二维RNN的可达到能力不如标准CNN模型。
此外抑制噪声意味着平均模型,模型仍然在训练准确率和泛化能力取得平衡。最有效的方式仍然是收集更多的标记数据,达到更高的训练正确率,以至于达到近似遍历的层次。
DenseNet分类流程:
文章地址: [1]Deep Residual Learning for Image Recognition,CVPR2015
[2]Densely Connected Convolutional Networks,CVPR2016
标准CNN之后的网络
此后,顶级研究院在网络结构化上面进行粒度分解,InceptionN结构之后,出现了所谓的 Capsule Networks,以及从CNN网络整体结构上进行分解,出现了GAN。
本身CNN考虑到了特征之间的几何位置关系,max pooling对这种关系有一定破坏。Capsule Networks 的来由为了解决传统CNN的空间位置信息错失问题,因此结构更难训练。
浅谈CapsuleNetWork 。GAN是一种网络训练的思路,把CNN网络联合到一个生成式神经网络模型中,使用生成式模型对CNN进行训练。
后记:
中国人写的英文论文就是容易看懂,果然语言是无国界的,论文作者有他自己的祖国。