可见,将原始数据映射到的高维空间维度较少时,映射回来的数据与原来的数据差距很大,当高维空间维度大时,映射回来的数据与原数据差距要更小。作者认为当将数据映射的高维空间维度不足时,非线性激活函数的使用会使得数据特征大量丢失,因此在其设计的\(MovibleNet V2\)版中,在\(bottleneck\)构造块的最后使用了线性激活函数取代了非线性激活。除此之外,作者也并没有直接使用ReLU激活函数,而是使用了ReLU6激活函数,ReLU6激活函数相对于ReLU的区别就是,对于激活值加了一个6的上限。该操作可以使得模型的参数范围进行进一步压缩,以让模型存储和计算量进一步降低。
除了激活函数使用的变化之外,作者引入了残差连接。
我们知道,对于神经网络而言,更深更复杂的构造理论上总会带来更好的性能。但是,深度神经网络存在着梯度消失、梯度爆炸等的原因使得模型训练很困难,而残差连接就是针对该问题而进行设计的。
常规的残差块如下图:
为了降低计算量,首先使用\(1*1\)的卷积核将原始数据特征维度进行降低,然后再通过常规卷积层,最后又使用\(1*1\)卷积核将特征进行升维,最后将前后特征进行相加。因为是先降维再升维的操作,该结构称为宽,窄,宽结构。
\(MobileNet V2\)使用的残差连接结构如下:
因为深度可分离卷积的存在已经使得模型的计算量降低,因此,作者认为,这里不需要将数据进行降维,取而代之的是,为了提高模型的性能,作者在这里使用\(1*1\)卷积核来先将数据进行升维,然后又进行可分离卷积操作之后,又使用\(1*1\)卷积核进行降维操作,最后,将前后特征进行相加。因为是先升维,再降维的操作,该结构称为窄,宽,窄的结构,作者将该构造结构称之为\(Inverted \ residual \ block\)。
\(MovibleNet \ V2\)的构造块如下图:
模型的配置如下: