深度学习之GoogLeNet-v3解读

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31531635/article/details/78067035


为什么提出?

—针对计算效率和低的参数量的标准,为了进一步的优化googlenet,将卷积核分解。。

提出的背景

  • 由于之前都关注的是网络的准确率,但是要真正运用深度学习,更应该关注如何能运用他,也就是要效率高,快。

基本思想及其过程

由于Inception结构的复杂性使得其很难对网络做出改变,因为现有的inception结构,只要对其做一个简单的变换,就会加倍所有滤波器相应尺寸的数量,也就会增加4倍的计算损失以及参数的数量。

通用设计原则

有一些针对不同结构的卷积网络的选择实验得到的通用设计原则。
1.避免代表性的瓶颈,特别是网络的早期。应该避免极端压缩的瓶颈,通常表示大小应该从输入到输出平缓的减小。
2.更高维表达更容易在网络中局部处理。增加卷积网络中的激活数量有利于加速训练。
3.在没有太多表达能力的损失情况下,空间聚合可以在更低维的嵌入中进行。比如进行3x3卷积时,其可以在空间聚合没有预期严重的不利影响之前减少输入表达的维数。
可能是因为相邻单元的强相关性导致在维数约减时有更少的信息损失。
4.平衡网络的宽度和深度。也就是平衡每个阶段的滤波器的数量以及网络的深度。增加滤波器的数量和网络的深度有利于得到一个高质量的网络,因为他们分散了计算的预算。
但上述4个原则最好谨慎的使用。

利用扩大滤波器尺寸来分解卷积

网络中的网络就是一种有效分解卷积的方式,而适当的分解有利于减少参数,也就能更快的训练。
(1)分解到更小的卷积
利用7x7,5x5卷积就计算而言是非常昂贵的,如果将5x5卷积看作一个5x5的滑窗对输入的全连接,如果将这个全连接看作两个卷积结构来代替,如两个3x3,就能节省25/(9+9)=1.39倍的参数,虽然这样分解,但是通过实验证明两者能达到同样的效果。

这里写图片描述

(2)空间分解成不对称卷积
同样的道理,可以将一个3x3的卷积分解成不对称的结构即3x1再接1x3。经过试验,发现这个不对称层放在前面的层的话,效果并不好,但是在对于m x m大小的的feature maps(m=12~20)时,有很好的效果,可以用1x7再接7x1卷积。

这里写图片描述

辅助分类器的实用性

辅助分类器能加快深层网络的收敛,即通过将有用的梯度传到底层,并通过防止梯度消失来提升收敛性。但是只有在训练快结束时,利用辅助分类器才有好的效果,并且推测辅助分类器相当于一个正则化因子。

这里写图片描述

网格尺寸减少很有效

通常利用池化操作来减少feature maps的尺寸来避免表达瓶颈,也就是先通过卷积操作,再通过池化操作,但是如果先池化降维,在卷积,就能减少很多参数量的计算。

这里写图片描述
但是这样做会影响表达能力,因此还是可以按照下面这么做。
这里写图片描述
其中右边表示卷积但是步长为2和通过池化降维有一样的效果。

InceptionV3

这里写图片描述
如上图即为inceptionV3的网络结构,首先将传统的7x7变为三个串联的3x3卷积层,池化过后,又利用3个3x3串联卷积来代替一个7x7卷积,主要目的就是较少参数量的计算。然后分别利用下面三种inception结构来继续提取特征,最后直接对feature map利用相应大小的池化操作转换到1维,而不再利用变平操作将其变为1维。
这里写图片描述
这里写图片描述
这里写图片描述

标签平滑的模型正则化

在训练时,通过对标签dropout的边缘化影响的估计来正则化分类器层。对每一个输入x,模型计算每个标签的概率为:p(k|x)= exp(zk)Ki=1exp(zi) zi 为最后的逻辑值logits或者没有经过归一化的对数概率。而ground-truth的标签概率设为q(k|x),假设忽略q,p对x相关性,定义交叉熵 l=Kk=1q(k)log(p(k)) ,通过最小化这个损失来最大化我们的计算出的标签与真实标签的相近程度,对交叉熵求梯度有 lzk=p(k)q(k) ,值在-1~1之间。
但是这种求得的标签可能造成过拟合,如果模型对每个训练样本都能学习分配整个概率到ground-truth的标签,就不能保证泛化性,不仅如此,他还增大了最大的logits值和其他逻辑值之间的差距,则相对来说更容易造成过拟合了。
下面提出了一种机制来平滑这个得到的这个计算出来最好的标签值。考虑标签的分布为u(k),独立的训练样本x,以及平滑参数 ϵ ,对于一个有着ground-truth的标签y,将标签分布q(k|x)= δk,y ,用下面代替
q(k)=(1ϵ)δk,y+ϵu(k)
此为一个原始ground-truth分布q(k|x)和混合分布u(k)的结合版本,结合版本,u(k)可以为一个均匀分布,即u(k)=1/K,即
q(k)=(1ϵ)δk,y+ϵK
这就叫label-smoothing正则化,或LSR,LSR阻止了最大的logits相比于其他logits变得更大。
也可以换种角度理解,即考虑交叉熵
H(q,p)=Kk=1q(k)logp(k)=(1ϵ)H(q,p)+ϵH(u,p)
因此可以看出,第二个损失处罚了来源于u的预测标签分布p的偏差,这个偏差可以用KL散度得到,由于 H(u,p)=DKL(u||p)+H(u) ,并且H(u)是固定的。H(u,p)测量了预测的分布p和均匀分布不相似的程度。一般 ϵ=0.1

训练方法

利用batch-size为32迭代100个epochs,使用RMSProp优化方法,利用0.9的衰减率和0.1的 ϵ ,使用0.045的学习率,每两个epoches衰减指数倍的0.94。

低分辨率输入上的表现

通常的想法是利用更高分辨率的感受野来提升识别性能,但是我们更想只改变图像的分辨率而不需要调整模型,也能有非常好的效果,因为这样更加简单方便。但这样的想法已经被淘汰了,因为计算量已经减少了,为了更加准确的评估模型,需要分析这种减少来找到更多的细节更好的解决这个问题。
首先思考,计算量不变的情况下,更高的分辨率会带来什么好处?最直观的感受就是可以减少最开始两层的步长,或者直接移除第一个池化层。做了以下三个实验
1. 299x299感受野,利用步长为2且在第一层后就使用最大池化
2. 151x151感受野,利用步长为1且在第一层厚就使用最大池化
3. 79x79感受野,利用步长为1且在第一层之后不使用池化操作
上述三种试验的计算损失大致相同,尽管第三个实验看起来很简单,但是池化操作是微不足道的,在整个网络中只占1%的损失。实验结果如下
这里写图片描述
尽管低分辨率网络在训练时花费时间更长,但是最后的效果非常接近高分辨率的网络。
然而如果只是单纯的减少网络输入的分辨率,网络可能会表现的更差

猜你喜欢

转载自blog.csdn.net/qq_31531635/article/details/78067035