MobileNet_v2详解

一、背景介绍

  MobileNet_v1看起来已经不错了,但有人在实际使用的时候, 发现depthwise layer的卷积核在训练之后不少参数为0,这很可能是因为ReLU导致神经元死亡。另外,MobileNet_v1没有引入shortcut,无法复用特征。

MobileNet_v2详解_第1张图片

二、思路提出

2.1 Linear Bottlenecks

  假设将许多张图片作为网络的输入,经过第i层输出并激活之后得到一个 h i × w i × d i h_i \times w_i \times d_i hi×wi×di的张量,如果把这个张量看作是 h i × w i h_i \times w_i hi×wi个具有 d i d_i di维的点构成,那我们可以进一步把这个张量视为manifold of interest(可以理解为有用的特征)。这里manifold流形,如果以前没接触的话可以先移步流形学习的基本思想-知乎。

  根据流形的思想,虽然对于神经网络的每一层,我们得到的是许多个 d i d_i di维的像素,但是这些高维数据里蕴含的信息实际上也存在于低维流形之中。作者说本来这个想法可以通过MobileNet_v1提出的width multiplier来验证,通过直接降维以达到让manifold of interest覆盖一整个低维子空间,我猜意思可能类似于下图,让3维空间中的一部分数据通过流形学习降维并覆盖满二维空间:

MobileNet_v2详解_第2张图片

  但是作者发现CNN里有个非线性变换ReLU,所以这想法不行。因为涉及到流形,不行的原因我解释不了(论文里每个单词我都认得,但是我看不懂),所以后面我就直接放结论了。

  作者认为ReLU会造成信息的丢失,但是输入数据的channel越多,信息保存得越好。假设在2维空间有一组由m个点组成的螺旋线 X m X_m Xm数据作为输入,利用随机矩阵 T T T映射到n维空间上并进行ReLU运算,然后再利用 T − 1 T^{-1} T1投影回到2维空间得到$X_m^{’} $,即:
y = R e L U ( T X m ) X m ′ = T − 1 y y = ReLU(TX_m) \\ X_m^{'} = T^{-1}y y=ReLU(TXm)Xm=T1y

再将 X m X_m Xm X m ′ X_m^{'} Xm进行比较,就可以看出ReLU的作用。如下图所示,可以看到在n = 2,3的时候, X m ′ X_m^{'} Xm和原来相比已经丢失很多信息了,但是n = 15, 30的时候情况会好很多:

在这里插入图片描述

  我的理解是:因为ReLU会把负值归零,所以对于 d i d_i di维的像素,如果 d i d_i di越大,这么多特征经过ReLU后可能保留下的信息也就会越多,如果只有2/3维,那么一不小心就容易丢失信息。这类似于分散投资的想法,不要把所有鸡蛋放在一个篮子里。作者的原话也是大概这个意思:

when ReLU collapses the channel, it inevitably loses information in that channel. However if we have lots of channels, and there is a structure in the activation manifold that information might still be preserved in the other channels.

总之,作者最后得到了两个结论

  • 如果经过ReLU后输入还是非零的,那ReLU实际上只是一个线性变换
  • 仅当输入可以被嵌入到低维流形里时,ReLU可以保留输入的完整信息。我的理解是,因为ReLU会造成信息丢失,但是如果输入没有信息冗余的话,ReLU是保留不了完整信息的。

  基于这两个结论,作者提出了本文关键linear bottlenecklinear bottleneck本质上就是将 1 × 1 1 \times 1 1×1的卷积层之后的ReLU替换成了Linear Layer,而称作bottleneck是因为通道数明显改变了。下图带有纹理的方块就是指Linear Layer,原本MobileNet_v1里的pointwise layer之后使用ReLU的,但是这里换成了线性函数。
MobileNet_v2详解_第3张图片

2.2 Inverted residuals

  在Linear Bottleneck的基础上,作者还想引入ResNet的残差连接,以实现特征复用和缓解梯度消失/爆炸,所以提出了inverted residual
MobileNet_v2详解_第4张图片

  图(a)是ResNet里的Residual block,图(b)就是MobileNet_v2提出的inverted residual block。两者区别在哪呢?图上蓝色方块的厚度表示通道数量,可以看出Residual block是先降维再进行升维,而inverted residual block是先升维再进行降维,即如下图所示:
MobileNet_v2详解_第5张图片

  具体来说,ResNet是先将通道数降为原来的0.25倍,最后通过 1 × 1 1 \times 1 1×1的卷积升维至原输入的通道数;MobileNet_v2则是先将输入的通道数升维至6倍,最后通过 1 × 1 1 \times 1 1×1的卷积降维至原输入的通道数。因为两者升降维顺序恰好相反,所以后者称为inverted residual。MobileNet_v2里升维的系数,也就是这里的6倍,称为expansion ratio,用于升维的这一个 1 × 1 1 \times 1 1×1卷积称为expansion layer因为之前提到在高维下ReLU保留的信息更完整,所以要先升维,防止ReLU在通道数少的情况下造成信息丢失。另外,要注意的是,这里的残差连接的是两个bottleneck,即通道数较小的两层,而原来的Residual block连接的是通道数较大的两层。至少在MobileNet里,前者设计的shortcut效果更好。

MobileNet_v2详解_第6张图片

  再来和MobileNet_v1对比一下,MobileNet_v2多了一个 1 × 1 1 \times 1 1×1卷积,那参数量和计算量变大了吗?答:没有。因为MobileNet_v2的设计理念可以将输入和输出通道数大大降低,使得Multi-Adds、参数量以及运行时间都比MobileNet_v1少,并且准确率更高。

参考资料

  • 求简要介绍一下流形学习的基本思想-知乎
  • 如何评价mobilenet v2 ?
  • 轻量级神经网络“巡礼”(二)—— MobileNet,从V1到V3
  • 轻量化网络ShuffleNet MobileNet v1/v2 解析
  • 30组-MobileNets论文解读和MobileNetV2简介

你可能感兴趣的:(深度学习,深度学习,人工智能)