深度学习知识点总结
专栏链接:
https://blog.csdn.net/qq_39707285/article/details/124005405
本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。
论文题目《Searching for MobileNetV3》。
把高效的神经网络模型部署到手机端,无需将其数据发送到服务器进行评估,是个人隐私的关键促成因素。神经网络效率的提高不仅通过更高的精度和更低的延迟改善了用户体验,而且通过降低功耗帮助保持电池寿命。因此,本文的目标是开发最佳的移动计算机视觉体系结构,优化移动设备上的准确度权衡。
为此,本文提出了基于互补搜索技术和新架构设计的下一代移动网络模型。通过使用NetAdapt算法结合 神经网络搜索(NAS),然后通过新的 模型结构改进 ,MobileNetV3将直接使用手机CPU。
网络搜索已证明是发现和优化网络架构的一个非常强大的工具(详见本系列文章NASNet、PNASNet、MnasNet等)。对于MobileNetV3,使用平台感知NAS通过优化每个网络block来搜索全局网络结构。然后,使用NetAdapt算法按层搜索过滤器的数量。这些技术是互补的,对于给定的硬件平台,可以结合起来有效地找到优化模型。
和MnasNet类似,本文也采用一种平台感知的神经结构方法来搜索全局网络结构。因为本文使用的基于RNN的控制器和相同的因式分层搜索空间与MnasNet一样,当把目标延迟限制到约80ms时,搜索得到的大型移动模型,与MnasNet的结果类似。因此,本文只需重复使用MnasNet-A1,然后在其上应用NetAdapt和其他优化即可。
但是观察发现,最初的激励设计没有针对小型移动模型进行优化。具体的说就是,MnasNet使用多目标激励机制, A C C ( m ) × [ L A T ( m ) / T A R ] w ACC(m)×[LAT(m)/TAR]^w ACC(m)×[LAT(m)/TAR]w,为了取得近似帕累托最优解,固定目标延迟TAR,平衡每个模型m的模型精度 A C C ( m ) ACC(m) ACC(m)和延迟 L A T ( m ) LAT(m) LAT(m),发现对于小型模型,模型精度随着延迟的变化更为显著;因此,需要更小的权重因子w=−0:15(在MnasNet中w=-0.07)以补偿不同延迟的较大精度变化。通过这个新的权重因子w,从头开始新的架构搜索,以找到初始seed model,然后应用NetAdapt和其他优化,以获得最终的MobileNetV3-Small模型。
本文应用到架构搜索中的第二个技术点是NetAdapt。此方法是对平台感知NAS的补充:它允许以顺序方式对各个层进行微调,而不是全局的架构。简而言之,该技术执行过程如下:
在Netadapt中,该指标旨在使精度变化最小化。本文对该算法进行了改进,修改为使延迟变化与准确度变化之比最小化。也就是说,对于每个NetAdapt步骤中生成的所有候选项,选择一个最大化: △ A c c ∣ △ l a t e n c y ∣ \frac{\triangle Acc}{|\triangle latency|} ∣△latency∣△Acc,其中 ∣ △ l a t e n c y ∣ |\triangle latency| ∣△latency∣满足上述步骤2(a)中的约束。从直觉来讲,因为这些候选项是离散的,所以更喜欢那些最大化权衡曲线斜率的候选项。重复此过程,直到延迟达到其目标,然后从头开始重新训练新架构。在MobileNet v2上使用与Netadapt中相同的候选项生成器,具体而言,只使用以下两种类型的候选项:
在本文的实验中,使用T=10000,发现它虽然提高了候选的初始微调精度,但在从头开始训练时,它不会改变最终精度。所以设置δ=0:01|L|,其中L是种子模型的延迟。
除了网络搜索,本文还在模型中引入了几个新组件,以进一步改进最终模型。 在网络的开始和结束部分重新对那些计算成本较高的层进行了设计。还介绍了一种新的非线性激活函数, h-swish ,它是最近swish非线性激活函数的一种改进版本,计算速度更快,量化更友好。
通过架构搜索找到合适的模型后,发现模型的最后一层和前期的层比其他层计算成本高很多,所以在保持准确率不变的情况下对这些层进行修改,以减少成本消耗及延迟。
第一个重写了网络的最后几层。基于MobileNetV2的反向瓶颈结构及其变体的模型使用1x1卷积作为最终层,以扩展到更高维的特征空间。为了具有丰富的预测特征,该层至关重要。然而,代价就是额外的计算成本及延迟。为了减少延迟并保留高维特性,将此层移动到最终的平均池化层之外。最后一组特征现在以1x1卷积计算而不是7x7卷积计算。使用这种设计后,在计算和延迟方面,特征的计算变得几乎无计算成本。如下图所示:
这最后一层的修改使延迟减少了7毫秒,这是总运行时间的11%,并在几乎不损失精度的情况下将操作数减少了30M的MAdds。
第二个修改了初始层。目前在初始层中大多数的模型倾向于使用32个卷积核的3x3卷积,用于边缘检测的初始滤波器组。这些滤波器通常是彼此的镜像,就是好几个通道之间的信息是重复的。本文尝试减少过滤器的数量,并且使用不同的非线性激活函数以尝试减少冗余。尝试多种激活函数后,决定使用该层的hard-swish非线性激活函数,它的性能更好。将滤波器数量减少到16个,能够同时保持与使用ReLU或swish的32个滤波器相同的精度。
这一修改节省了额外的2毫秒和10M的MAdds。
激活函数介绍可以看这篇文章。
(https://blog.csdn.net/qq_39707285/article/details/124008601)
swish是ReLU的替代品,大大提高了神经网络的准确性,公式如下:
s w i s h = x ⋅ σ ( x ) swish=x·\sigma(x) swish=x⋅σ(x)
虽然这种非线性提高了精度,但在嵌入式环境中,例如在移动设备上计算sigmoid函数要消耗成本比较多。本文从两个方面解决这个问题:
下图中显示了Sigmoid和swish非线性的soft版本和hard版本的比较如下:
从图中可以看出,h-swish与原始平滑版本swish非常匹配,几乎一样。在实验中发现所有这些函数的hard版本在精度上没有明显差异,但从部署的角度来看有多个优势:
(a) ReLU6的优化实现可用于几乎所有的软件和硬件框架
(b) 在量化模式下,它消除了由近似Sigmoid的不同实现引起的潜在数值精度损失
(c) 在实践中,h-swish可以被编译成一种分段函数,用于减少内存访问次数,从而大幅降低延迟成本。
2. 第二个方面,因为每层激活存储器通常在特征图分辨率下降时减半,所以应用非线性的成本随着网络层数越深越低,所以在网络深层使用h-swish。顺便说一句,本文实验发现swish的大部分好处都是在更深层中使用它们实现的。因此,在本文的架构中,只在模型的后半部分使用h-swish。具体布局见4.18.4节的网络结果表1和表2。
在MnasNet中,SE bottleneck的大小与卷积bottleneck的大小有关,相反,本文将它们全部固定为扩展层中通道数的1/4。实验发现,这样做可以在轻微增加参数数量的情况下提高准确性,并且不会产生明显的延迟成本。
MobileNetV3分为两个模型: MobileNetV3-large 和 MobileNetV3-small ,分别针对高和低资源使用情况。这些模型是通过将平台感知NAS和NetAdapt技术应用于网络搜索,并结合对网络改进方法而得到的。有关网络的完整结构,请参见表1和表2。