另一方面,当 ReLU 折叠通道时,它不可避免地会丢失该通道中的信息。但是,如果我们有很多通道,并且激活流形中有一个结构,那么信息可能仍会保留在其他通道中。在补充材料中,我们表明,如果输入流形可以嵌入到激活空间的显着低维子空间中,那么 ReLU 变换会保留信息,同时将所需的复杂性引入可表达的函数集
总而言之,我们强调了两个属性,这些属性表明感兴趣的流形应该位于高维激活空间的低维子空间中:
-
如果感兴趣的流形在 ReLU 变换后保持非零体积,则对应一个线性变换
-
ReLU 能够保留有关输入流形的完整信息,但前提是输入流形位于输入空间的低维子空间中
这两个见解为我们提供了优化现有神经架构的经验提示:假设感兴趣的流形是低维的,我们可以通过将线性瓶颈层插入卷积块来捕获这一点。 实验证据表明,使用线性层至关重要,因为它可以防止非线性破坏太多信息。 在第 6 节中,我们凭经验表明,在瓶颈中使用非线性层确实会降低几个百分点的性能,进一步验证了我们的假设。 我们注意到,在 [29] 中报告了有助于非线性的类似报告,其中非线性从传统残差块的输入中移除,从而提高了 CIFAR 数据集的性能。
在本文的其余部分,我们将使用瓶颈卷积。 我们将输入瓶颈的大小与内部大小之间的比率称为扩展比率。
瓶颈块看起来类似于残差块,其中每个块包含一个输入,然后是几个瓶颈,然后是扩展 [8]。 然而,受到瓶颈实际上包含所有必要信息的直觉的启发,而扩展层仅充当伴随张量非线性变换的实现细节,我们直接在瓶颈之间使用快捷方式。图 3 提供了示意图 设计差异的可视化。 插入快捷方式的动机类似于经典的残差连接:我们希望提高梯度在乘法器层中传播的能力。 然而,倒置设计的内存效率要高得多(详见第 5 节),并且在我们的实验中效果更好。
瓶颈卷积的运行时间和参数计数 基本实现结构如表 1 所示。对于大小为 h × w h \times w h×w、扩展因子为 t 和内核大小为 k 的块,具有 d ′ d^{\prime } d′ 个输入通道和 d ′ ′ d^{\prime \prime} d′′个输出通道,所需的乘加总数 是 h ⋅ w ⋅ d ′ ⋅ t ( d ′ + k 2 + d ′ ′ ) h \cdot w \cdot d^{\prime} \cdot t\left(d{\prime}+k{2}+d^{\prime \prime}\right) h⋅w⋅d′⋅t(d′+k2+d′′)。 与(1)相比,这个表达式有一个额外的项,因为我们确实有一个额外的 1 × 1 卷积,但是我们网络的性质允许我们使用更小的输入和输出维度。 在表 3 中,我们比较了 MobileNetV1、MobileNetV2 和 ShuffleNet 之间每种分辨率所需的大小。
我们架构的一个有趣特性是它提供了构建块(瓶颈层)的输入/输出域和层转换之间的自然分离——这是一种将输入转换为输出的非线性函数。前者可以看作是网络在每一层的容量,而后者可以看作是表现力。这与常规和可分离的传统卷积块形成对比,在传统卷积块中,表现力和容量都纠缠在一起,并且是输出层深度的函数。
特别是,在我们的例子中,当内层深度为 0 时,由于快捷连接,底层卷积是恒等函数。当扩展比小于 1 时,这是一个经典的残差卷积块 [8, 30]。然而,为了我们的目的,我们表明大于 1 的膨胀比是最有用的。
这种解释使我们能够将网络的表达能力与其容量分开研究,我们相信有必要进一步探索这种分离,以更好地理解网络属性。
=================================================================
现在我们详细描述我们的架构。 如上一节所述,基本构建块是带有残差的瓶颈深度可分离卷积。 该块的详细结构如表 1 所示。MobileNetV2 的架构包含具有 32 个过滤器的初始全卷积层,随后是表 2 中描述的 19 个残差瓶颈层。由于其鲁棒性,我们使用 ReLU6 作为非线性 当与低精度计算一起使用时[27]。 我们始终使用现代网络的标准内核大小 3 × 3,并在训练期间利用 dropout 和批量归一化。
除第一层外,我们在整个网络中使用恒定的扩展率。 在我们的实验中,我们发现在 5 到 10 之间的扩展率会导致几乎相同的性能曲线,较小的网络在扩展率稍低的情况下效果更好,而较大的网络在扩展率较大的情况下性能稍好。
对于我们所有的主要实验,我们使用 6 的扩展因子应用于输入张量的大小。 例如,对于采用 64 通道输入张量并产生具有 128 通道的张量的瓶颈层,则中间扩展层为 64×6 = 384 通道。
权衡超参数 如在 [27] 中,我们通过使用输入图像分辨率和宽度乘数作为可调超参数来定制我们的架构以适应不同的性能点,可以根据所需的精度/性能权衡进行调整。 我们的主网络(宽度乘法器 1,224 × 224)的计算成本为 3 亿次乘加,并使用了 340 万个参数。 我们探讨了性能权衡,输入分辨率从 96 到 224,宽度乘数从 0.35 到 1.4。 网络计算成本范围从 7 乘加到 585M MAdds,而模型大小在 1.7M 和 6.9M 参数之间变化。
与 [27] 的一个小的实现差异是,对于小于 1 的乘数,我们将宽度乘数应用于除最后一个卷积层之外的所有层。 这提高了较小模型的性能。
=================================================================
倒置残差瓶颈层允许实现特别高效的内存实现,这对于移动应用程序非常重要。使用例如 TensorFlow[31] 或 Caffe [32] 的标准高效推理实现构建了一个有向无环计算超图 G,由边组成 表示表示中间计算张量的操作和节点。 计划计算以最小化需要存储在内存中的张量总数。 在最一般的情况下,它搜索所有合理的计算顺序 Σ(G) 并选择最小化的。
M ( G ) = min π ∈ Σ ( G ) max i ∈ 1… n [ ∑ A ∈ R ( i , π , G ) ∣ A ∣ ] + size ( π i ) M(G)=\min _{\pi \in \Sigma(G)} \max _{i \in 1 . . n}\left[\sum_{A \in R(i, \pi, G)}|A|\right]+\operatorname{size}\left(\pi_{i}\right) M(G)=π∈Σ(G)mini∈1…nmax⎣⎡A∈R(i,π,G)∑∣A∣⎦⎤+size(πi)
其中 R ( i , π , G ) R(i, \pi, G) R(i,π,G) 是连接到任何 π i … π n \pi_{i} \ldots \pi_{n} πi…πn节点的中间张量列表, ∣ A ∣ |A| ∣A∣表示张量 A 的大小,size(i) 是内部所需的内存总量 操作期间的存储 i。
对于仅具有平凡并行结构(例如残差连接)的图,只有一个非平凡的可行计算顺序,因此可以简化计算图 G 上推理所需的内存总量和界限:
M ( G ) = max o p ∈ G [ ∑ A ∈ o p inp ∣ A ∣ + ∑ B ∈ o p out ∣ B ∣ + ∣ o p ∣ ] (2) M(G)=\max _{o p \in G}\left[\sum_{A \in \mathrm{op}_{\text {inp }}}|A|+\sum_{B \in \mathrm{op}_{\text {out }}}|B|+|o p|\right] \tag{2} M(G)=op∈Gmax⎣⎡A∈opinp ∑∣A∣+B∈opout ∑∣B∣+∣op∣⎦⎤(2)
或者重申一下,内存量只是所有操作中组合输入和输出的最大总大小。 接下来我们将展示,如果我们将瓶颈残差块视为单个操作(并将内部卷积视为一次性张量),则内存总量将由瓶颈张量的大小决定,而不是由张量的大小决定 在瓶颈内部(并且更大)。
瓶颈残差块 图 3b 所示的瓶颈块算子 F(x) 可以表示为三个算子 F ( x ) = [ A ∘ N ∘ B ] x \mathcal{F}(x)=[A \circ \mathcal{N} \circ B] x F(x)=[A∘N∘B]x 的组合,其中 A 是线性变换 A : R s × s × k → R s × s × n \mathcal{A}: \mathcal{R}^{s \times s \times k} \rightarrow \mathcal{R}^{s \times s \times n} A:Rs×s×k→Rs×s×n,N 是一个非线性的每通道变换: N : R s × s × n → R s ′ × s ′ × n \mathcal{N}: \mathcal{R}^{s \times s \times n} \rightarrow \mathcal{R}{s{\prime} \times s^{\prime} \times n} N:Rs×s×n→Rs′×s′×n,B又是输出域的线性变换: B : R s ′ × s ′ × n → R s ′ × s ′ × k ′ \mathcal{B}: \mathcal{R}{s{\prime} \times s^{\prime} \times n} \rightarrow \mathcal{R}{s{\prime} \times s^{\prime} \times k^{\prime}} B:Rs′×s′×n→Rs′×s′×k′。
对于我们的网络 N = ReLU 6 ∘ \mathcal{N}=\operatorname{ReLU} 6 \circ N=ReLU6∘ dwise ∘ ReLU 6 \circ \operatorname{ReLU} 6 ∘ReLU6 ,但结果适用于任何每通道转换。 假设输入域的大小为 ∣ x ∣ |x| ∣x∣,输出域的大小为 ∣ y ∣ |y| ∣y∣,那么计算 F(X) 所需的内存可以低至 ∣ s 2 k ∣ + ∣ s ′ 2 k ′ ∣ + \left|s^{2} k\right|+\left|s^{\prime 2} k^{\prime}\right|+ ∣∣s2k∣∣+∣∣s′2k′∣∣+ O ( max ( s 2 , s 2 ) ) O\left(\max \left(s^{2}, s^{2}\right)\right) O(max(s2,s2))。
该算法基于这样一个事实,即内部张量 I \mathcal{I} I可以表示为 t 个张量的串联,每个张量的大小为 n / t n/t n/t,然后我们的函数可以表示为
F ( x ) = ∑ i = 1 t ( A i ∘ N ∘ B i ) ( x ) \mathcal{F}(x)=\sum_{i=1}^{t}\left(A_{i} \circ N \circ B_{i}\right)(x) F(x)=i=1∑t(Ai∘N∘Bi)(x)
通过累积总和,我们只需要一个大小为 n=t 的中间块始终保存在内存中。 使用 n/ t,我们最终不得不始终只保留一个中间表示的通道。 使我们能够使用此技巧的两个约束是(a)内部变换(包括非线性和深度方向)是每个通道的事实,以及(b)连续的非每个通道运算符具有显着的比率 输入到输出的大小。 对于大多数传统的神经网络,这种技巧不会产生显着的改进。
我们注意到,使用 t-way split 计算 F(X) 所需的乘加运算符的数量与 t 无关,但是在现有的实现中,我们发现用几个较小的矩阵乘法替换一个矩阵乘法会由于缓存增加而损害运行时性能 错过。 我们发现这种方法在 t 是 2 到 5 之间的一个小常数时最有帮助。它显着降低了内存需求,但仍然允许人们利用通过使用高度优化的矩阵乘法和卷积算子获得的大部分效率 由深度学习框架提供。 特殊的框架级别优化是否会导致进一步的运行时改进还有待观察。
===============================================================
训练设置 我们使用 TensorFlow[31] 训练我们的模型。 我们使用标准的 RMSPropOptimizer,衰减和动量都设置为 0.9。 我们在每一层之后使用批量归一化,标准权重衰减设置为 0.00004。 在 MobileNetV1[27] 设置之后,我们使用 0.045 的初始学习率和每个 epoch 0.98 的学习率衰减率。 我们使用 16 个 GPU 异步工作器,批量大小为 96。
结果 我们将我们的网络与 MobileNetV1、ShuffleNet 和 NASNet-A 模型进行比较。 一些选定模型的统计数据如表 4 所示,完整的性能图如图 5 所示。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板
.cn/97c454a3e5b4439b8600b50011cc8fe4.png)