天天看点

Google提出的CNN模型设计准则

1、慎用bottleneck

如果出于模型分类精度考虑,那么应尽量避免使用bottleneck模块,尤其是不应当在模型的早期阶段使用。CNN模型本质上是一个DAG(有向无环图),其上信息自底向上流动,而每一个bottleneck的使用都会损失一部分信息,因此当我们出于计算与存储节省而使用bottleneck时,一定要慎重。如果一定要用,也要在模型较靠后的几层使用。

2、层宽些还是有好处的

撇开计算与内存开销增加的负面因素不谈,每个Conv层的kernels数目增加对于模型处理局部信息,进而更有效地对其表达还是有好处的。毕竟多些参数就可使得每层获得多些的表达能力。它还可使得模型收敛得更快。

3、更深的较底层(size亦小)可以使劲压

这个是实验多了得出来的结论。即对于网络后面的feature maps可以使用像bottleneck那样的模块对其进行channels数目缩减再进行3x3 conv这样的较大计算。在其中1x1 conv reduction op的使用不仅不会影响模型精度,反而还能使其收敛速度加快。他们给出的猜测性解释是,后期较小size的feature maps之上的相邻units(即channels)之间具有更加的关联性(即冗余信息不少),因此可以折腾的厉害些(使输出的channels变少)而不担心信息丢失(反而信息被梳理的更清晰、有效)

4平衡网络的深度与宽度

Google将深度学习网络的设计问题视为了一个在计算能力和内存资源存在限定的条件下,通过有效组合、堆加各种层/模块,从而使得模型分类精度最高的一种最优化问题。