想象你是一位城市规划师,手里有一张城市设计图纸,想要把这座“神经网络城市”变得更大、更强。过去人们总是单方面扩张——要么只加宽马路(增加通道数),要么只加盖楼层(加深网络)。但 EfficientNet 的工程师们发现:城市要想真正繁荣,必须让马路、楼层、公园绿地(图像分辨率)三者按比例同步扩建。这就是复合缩放——不是盲目地把城市放大一倍,而是找到一种“和谐生长”的比例,让每一分资源都花在刀刃上。本文将带你从城市规划的视角,拆解 EfficientNet 如何用一组简洁的数学公式,设计出当时碾压一众对手的高效网络。

岗位关联

理解复合缩放,你就掌握了“在算力预算下如何优雅地扩容神经网络”的设计哲学——这是每个做模型轻量化、移动端部署的 AI 工程师的必修课。

目录
  1. 可视化演示
  2. 缩放困境
  3. 复合缩放公式
  4. 系数求解
  5. Baseline搜索
  6. 性能提升
  7. 设计启发
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

复合缩放公式与约束方程 复合缩放公式约束方程推导约束方程:\u03B1 * \u03B2\u00B2 * \u03B3\u00B2 = 2\u03C6每增加1: FLOPS翻倍 \u2192 d*w\u00B2*r\u00B2 = 2^\u03C6复合缩放公式

缩放困境

城市规划师们最初扩建城市时,各有一套偏执的方案。第一派觉得“城市的高度代表实力”,于是疯狂加盖楼层——这对应神经网络里一味地加深网络深度(增加层数)。第二派认为“道路宽度决定通行效率”,于是拼命拓宽马路——这对应增加每层通道数(网络宽度)。第三派主张“绿地面积越多越宜居”,于是不断外扩公园——这对应提高输入图像分辨率。单独看,每种方案都让城市变大了一点,但很快问题出现了:只有高楼没有宽马路,交通会堵塞(梯度消失);只有宽马路没有高楼,土地被浪费(特征表达不足);公园扩建了,但周围的路网和建筑跟不上,市民根本到不了公园(低层特征感受野不足)。

在深度学习里,这种偏执被证明是低效的。Google 团队在 2019 年的 EfficientNet 论文中做了一个关键实验:用同样的算力预算,分别只缩放深度、只缩放宽度、只缩放分辨率,结果三个方向的收益都迅速饱和。比如只把 ResNet 从 18 层加到 200 层,精度提升越来越小,但计算量却线性暴涨。这就像城市只盖摩天楼却不通地铁——表面的规模上去了,实际效率反而恶化。

为什么单一缩放会失效?深度学习理论给了一个直觉解释:神经网络的不同维度之间存在耦合关系。更深的网络需要更宽的通道来传递梯度,更高的分辨率需要更深的网络来提取细粒度特征。如果只动一个维度,其他维度就成了瓶颈——城市里最高的楼旁边却是单车道,再高的楼也只是摆设。

需要说明的是,交叉偏导为正意味着当你同时增加深度和宽度时,精度提升比单独增加两个维度带来的提升之和还要大。这就像同时拓宽马路和增加公交线路,通勤效率的提升是“1+1>2“的。EfficientNet 的所有后续设计,都建立在这个”维度和谐”的观察之上。

Accuracy≈f(d,w,r)且∂2Acc∂d∂w>0\text{Accuracy} \approx f(d, w, r) \quad \text{且} \quad \frac{\partial^2 \text{Acc}}{\partial d \partial w} > 0
这个公式表达的是:精度对深度和宽度的交叉偏导为正——意思是深度和宽度是“互补品”。就像高架桥(深度)和地面车道(宽度)必须配套建设,单独增加某一项,边际收益会递减;同时增加,反而互相成就、收益倍增。
  1. 精度函数精度 $\text{Accuracy}$ 是深度 $d$、宽度 $w$、分辨率 $r$ 三个变量的函数
    Accuracy≈f(d,w,r)\text{Accuracy} \approx f(d, w, r)
  2. 交叉偏导为正$\frac{\partial^2 \text{Acc}}{\partial d \partial w} > 0$ 表示深度与宽度存在正交互作用
    ∂2Acc∂d∂w>0\frac{\partial^2 \text{Acc}}{\partial d \partial w} > 0

复合缩放公式

既然单一缩放是死胡同,城市规划师们开始思考:能不能找到一种“黄金比例”,让楼层高度、马路宽度、公园面积按照同一个节奏同步生长?EfficientNet 给出的答案是一个优雅的复合缩放公式。假设基准网络(baseline)的深度为 $d_0$、宽度为 $w_0$、分辨率为 $r_0$,复合缩放用三个指数系数 $\alpha, \beta, \gamma$ 控制三个维度的增长速率,并引入一个全局缩放系数 $\phi$ 作为“总预算旋钮”:

其中 $\alpha, \beta, \gamma$ 是常数(通过小规模网格搜索确定),且满足约束 $\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2$。这个约束的含义是:当 $\phi = 1$ 时,网络的 FLOPS(浮点运算量)大约变为原来的 2 倍——因为 FLOPS 与深度成正比、与宽度的平方成正比、与分辨率的平方成正比。

为什么是这个约束?简单算一笔账:加一层楼(深度 $d$),成本线性增加;拓宽马路(宽度 $w$),面积成本是平方级;扩建公园(分辨率 $r$),整个城市 footprint 也是平方级。所以为了做到“预算翻倍,整体面积才翻倍”,必须给宽度和分辨率分配更小的系数。

在这个公式体系里,$\phi$ 就像一个“城市总规划师”——它不关心具体每个街区怎么建,只决定城市的整体规模等级。$\alpha, \beta, \gamma$ 则是三个“专业设计师”,负责在各自领域内按比例施工。这种“总控 + 分控”的架构,让 EfficientNet 可以用一套公式生成从 B0 到 B7 的一整个家族,而每个成员都严格遵循同一种“生长律”。

d=αϕ,w=βϕ,r=γϕd = \alpha^{\phi}, \quad w = \beta^{\phi}, \quad r = \gamma^{\phi}
FLOPS∼d⋅w2⋅r2=(αϕ)⋅(βϕ)2⋅(γϕ)2=(α⋅β2⋅γ2)ϕ≈2ϕ\text{FLOPS} \sim d \cdot w^2 \cdot r^2 = (\alpha^{\phi}) \cdot (\beta^{\phi})^2 \cdot (\gamma^{\phi})^2 = (\alpha \cdot \beta^2 \cdot \gamma^2)^{\phi} \approx 2^{\phi}
这个公式揭示了复合缩放的精髓:三个维度不是独立放大,而是被一个 $\phi$ 统一驱动。FLOPS 增长被严格控制在 $2^{\phi}$ 倍——预算可预测,缩放才有工程意义。
  1. 深度缩放深度 $d$ 是基准深度乘以系数 $\alpha$ 的 $\phi$ 次方
    d=αϕd = \alpha^{\phi}
  2. 宽度缩放宽度 $w$ 是基准宽度乘以系数 $\beta$ 的 $\phi$ 次方
    w=βϕw = \beta^{\phi}
  3. 分辨率缩放分辨率 $r$ 是基准分辨率乘以系数 $\gamma$ 的 $\phi$ 次方
    r=γϕr = \gamma^{\phi}
  4. FLOPS 约束FLOPS 与 $d \cdot w^2 \cdot r^2$ 成正比
    FLOPS∼d⋅w2⋅r2=(α⋅β2⋅γ2)ϕ≈2ϕ\text{FLOPS} \sim d \cdot w^2 \cdot r^2 = (\alpha \cdot \beta^2 \cdot \gamma^2)^{\phi} \approx 2^{\phi}

系数求解

有了公式,下一个问题就是:$\alpha, \beta, \gamma$ 这三个系数具体取多少?EfficientNet 的工程师们采用了一个两步法。第一步,先固定 $\phi = 1$,把它当作一个小预算的“试点项目”。在这个固定预算下,用网格搜索(grid search)在 $\alpha, \beta, \gamma$ 的候选集合里逐一尝试,目标是找到在 ImageNet 上精度最高的一组系数。

网格搜索是暴力但有效的方法:假设 $\alpha$ 有 5 个候选值、$\beta$ 有 5 个、$\gamma$ 有 5 个,那就是 125 种组合,每种组合训练一个小模型评估精度。由于模型足够小(就是 baseline 结构,不做大缩放),125 次小训练是可接受的工程成本。搜索结果表明:最优系数大致落在 $\alpha = 1.2, \beta = 1.1, \gamma = 1.15$ 附近——深度稍微优先,宽度和分辨率紧随其后。

第二步,固定 $\alpha, \beta, \gamma$ 不变,只改变 $\phi$ 来生成不同规模的模型。$\phi$ 从 0 到 7 取整数值,就得到了 EfficientNet-B0 到 B7。这个过程就像城市已经定好了“街道标准”——主干道宽 8 车道、每隔 500 米一个公园,那么 $\phi$ 就是城市的总体量规划:$\phi = 1$ 是县城,$\phi = 5$ 是一线城市,$\phi = 7$ 是超级都市圈。标准不变,规模翻倍,工程上极其高效。

有了这套“试点 → 定标 → 放大”的流程,EfficientNet 的架构设计就从一门手艺变成了一条流水线。任何人都可以用这套方法,在自己的数据集上重新搜索系数,形成定制化的缩放策略——这种“方法论迁移”能力,才是复合缩放真正的遗产。

Step 1:max⁡α,β,γAcc(α,β,γ)s.t.α⋅β2⋅γ2≈2Step 2:fix α,β,γ;scale ϕ=0,1,…,7\begin{aligned}& \text{Step 1:} \quad \max_{\alpha, \beta, \gamma} \quad \text{Acc}(\alpha, \beta, \gamma) \\& \text{s.t.} \quad \alpha \cdot \beta^2 \cdot \gamma^2 \approx 2 \\& \text{Step 2:} \quad \text{fix } \alpha, \beta, \gamma; \quad \text{scale } \phi = 0, 1, \dots, 7\end{aligned}
两步法把“搜系数”和“放规模”解耦:先在显微镜下找到最优比例,再在望远镜下生成整个模型族。这种方法论后来被广泛借鉴,成为“先小规模搜索、再大规模扩展”的范式原型。
  1. 第一步优化目标在约束条件下最大化精度
    max⁡α,β,γAcc(α,β,γ)\max_{\alpha, \beta, \gamma} \quad \text{Acc}(\alpha, \beta, \gamma)
  2. 约束条件系数乘积约等于 2,保证 FLOPS 可控
    α⋅β2⋅γ2≈2\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2
  3. 第二步固定系数系数不再变化,只调 $\phi$
    fix α,β,γ;scale ϕ=0,1,…,7\text{fix } \alpha, \beta, \gamma; \quad \text{scale } \phi = 0, 1, \dots, 7

Baseline搜索

复合缩放就像给城市定生长律,但你首先得有一座值得放大的城市。EfficientNet 的 baseline(即 EfficientNet-B0)并不是手调的,而是通过神经架构搜索(Neural Architecture Search, NAS)自动设计出来的。2019 年时,NAS 已经能在小规模数据集上找到不错的单元结构,但 EfficientNet 走得更远——它用 NAS 搜索整个网络的宏观结构,而不只是某个重复单元。

搜索空间设计得很有讲究:每个 stage 的层数、每层的卷积核大小、通道数、是否使用 SE(Squeeze-and-Excitation)注意力模块,都是可搜索的变量。优化目标是精度和 FLOPS 的加权组合——既要模型准,又要模型轻。最终搜索出的 B0 结构有 16 个 block,总参数量约 530 万,在 ImageNet 上达到 76.3% 的 top-1 精度,这个精度在同等 FLOPS 下已经超过了当时的经典网络。

为什么有好的 baseline 才能放大?想象你要建一个超级都市圈,如果基础城市的路网规划本来就是乱的——断头路多、功能区混杂——那么盲目放大只会让混乱加倍。反过来,一个精心规划的 baseline 城市,放大后依然井井有条。这就是“B0 是基座、缩放是杠杆”的含义:基座的质量决定了缩放效果的上限。

B0 的另一个贡献是引入了 SE 注意力模块到每个 block 中。SE 模块像城市的“交通调度中心”——它显式学习每个通道的重要性,给关键通道“优先通行权”。虽然 SE 增加了少量参数,但它让网络的表示能力大幅提升。这也解释了为什么后来缩放时,即使宽度和深度同步增长,模型也不会因参数膨胀而失控——注意力机制在“内部”优化了资源分配,与复合缩放“外部”的资源分配形成了互补。

B0:Structure=NAS(Search Space,ACC+λ⋅FLOPS)\text{B0:} \quad \text{Structure} = \text{NAS}(\text{Search Space}, \text{ACC} + \lambda \cdot \text{FLOPS})
NAS 为 EfficientNet 找到了“黄金骨架”,复合缩放为这个骨架提供了“生长律”。搜索 + 缩放的双层设计,让 EfficientNet 成为第一个“从自动设计到自动缩放”全流程化的模型族。
  1. 搜索空间NAS 在每个 stage 搜索层数、卷积核大小、通道数等
    Structure=NAS(Search Space,… )\text{Structure} = \text{NAS}(\text{Search Space}, \dots)
  2. 优化目标精度与 FLOPS 的加权组合,$\lambda$ 控制效率权重
    ACC+λ⋅FLOPS\text{ACC} + \lambda \cdot \text{FLOPS}

性能提升

当 $\phi$ 从 0 逐渐加大到 7,EfficientNet 家族的性能曲线让人惊叹。先看精度:EfficientNet-B0 在 ImageNet 上达到 76.3%(略高于 ResNet-50 的 76.0%),而 B7 达到了 84.4%——比当时最强的 GPipe 还高 0.3%,但参数少了 8.4 倍。再看效率:B0 的 FLOPS 只有 0.39B,B7 为 37B,在同等精度下,EfficientNet 比经典的 ResNet、DenseNet、Inception 系列在 FLOPS 上节省数倍。

最具冲击力的是“参数效率”的对比。ResNet-152 参数量约 60M,在 ImageNet 上有 77.8% 的精度;EfficientNet-B4 参数量约 19M,精度却达到 82.9%。相当于用 1/3 的钢筋水泥,盖出了更高的大厦——这就是复合缩放的魔力:每个维度的增长都踩在另一个维度的“肩膀”上,参数利用率大幅提高。这种效率提升对工业界意义巨大——同样的 GPU 预算,能训练更大规模的模型;同样的推理延迟要求,能部署更精确的模型。

为什么复合缩放能带来如此显著的提升?一个直观的解释是:当分辨率提高时,网络需要更深的层来捕捉细粒度特征;当宽度增加时,需要更高的分辨率来提供足够的信息量。三维联动让每一层、每个通道都在处理“有效信息”,而不是像单一缩放那样,大量参数在“空转”。就像城市同步扩建交通、住宅、商业区,不会出现“有商业区没住宅区”的错配。

在当年的 ImageNet 竞赛和多个迁移学习基准上,EfficientNet 系列都是“效率之王”。它的名字本身就带有宣言式的意味——"Efficient"直指核心:在资源有限的世界里,精度不是唯一目标,如何用最少的资源榨取最多的精度,才是工程智慧。

AccB7=84.4%,ParamsB7=66M,FLOPSB7=37B\text{Acc}_{\text{B7}} = 84.4\%, \quad \text{Params}_{\text{B7}} = 66\text{M}, \quad \text{FLOPS}_{\text{B7}} = 37\text{B}
直观对比:B7 在精度上超越 GPipe 的同时,参数量只有后者的约 1/8。高效的复合缩放,本质上是把参数花在了“协同增效”的地方。
  1. 精度指标EfficientNet-B7 在 ImageNet 上的 top-1 精度
    AccB7=84.4%\text{Acc}_{\text{B7}} = 84.4\%
  2. 参数量对比B7 参数量为 66M,比同精度网络小一个量级
    ParamsB7=66M\text{Params}_{\text{B7}} = 66\text{M}
  3. 计算量对比B7 的 FLOPS 为 37B,在相同精度下远低于经典网络
    FLOPSB7=37B\text{FLOPS}_{\text{B7}} = 37\text{B}

设计启发

复合缩放的影响远不止一个 EfficientNet 系列。它首先确立了一种“模型族”的研发范式:不再一个一个手调模型,而是搜索出一个优秀的 baseline,再用缩放公式批量产出不同规模、适用于不同硬件条件的模型族。这个范式后来被 MobileNetV3、EfficientNetV2、ConvNeXt 等模型广泛采用。它改变了 AI 工程师的工作方式——从“设计单个网络”变为“设计一个可缩放的网络体系”。

更深远的影响在于“维度协调”的思想。后续研究发现,复合缩放不仅适用于 CNN,对 Transformer 类模型也有启发:模型深度(层数)、注意力头数、序列长度之间同样存在耦合关系。ViT 中的 patch size 与网络宽度、深度的联合调优,几乎就是复合缩放思想在注意力世界的翻版。这个“向所有维度要效率”的思维模式,成为了深度学习中“设计空间探索”的重要分支。

当然,复合缩放也有它的隐含假设——baseline 质量必须足够好,缩放公式中的系数受限于特定数据集与计算资源。EfficientNetV2 正是发现了 B0 在缩放时训练速度不够快、部分层放大后效率下降的问题,才提出“渐进式训练 + 更均衡的 stage 缩放”改进方案。这说明复合缩放是“开放的框架”,不是“封闭的答案”——后续工作不断在它的肩膀上继续攀登。

复合缩放告诉我们:在深度学习中,架构设计的“成长性”和架构本身的“质量”同样重要。一个只能固定大小、无法优雅扩展的模型,就像一座无法扩建的城市——它的上限从诞生那天就注定了。EfficientNet 用一套公式解决了“城市如何生长”的问题,这个思路至今仍在启发新一代的模型设计。

Design Philosophy:Search a good base→Scale with compound rule→Verify under budget\text{Design Philosophy:} \quad \text{Search a good base} \rightarrow \text{Scale with compound rule} \rightarrow \text{Verify under budget}
从 EfficientNet 到 EfficientNetV2、从 CNN 到 ViT,复合缩放的方法论一直在延续。它的核心洞见是:优秀的网络架构设计,需要同时回答“长什么样”和“怎么长大”两个问题。
  1. 搜索基座先用 NAS 搜索出高效 baseline
    Search a good base\text{Search a good base}
  2. 复合缩放用统一公式按比例放大
    Scale with compound rule\text{Scale with compound rule}
  3. 预算验证在目标资源预算内验证效果
    Verify under budget\text{Verify under budget}

AI 应用场景

模型家族快速部署

阶段:模型设计与部署

解决的问题:移动端、Web端、云端三种场景对模型大小和速度要求差异巨大。传统做法是为每个场景单独设计一个模型,工作量极大且难以保证性能一致。利用 EfficientNet 的复合缩放公式,只需训练一个 B0 baseline,然后通过调整 $\phi$ 快速生成 B0-B3 系列模型,分别部署到不同平台。

具体案例:某安防公司需要在摄像头端(低算力)、边缘服务器(中等算力)和云端(高算力)同时部署人脸识别模型。工程师用 EfficientNet-B0 做 baseline,用复合缩放生成 B1(边缘)、B2(云端)三个模型,在保持识别精度曲线平滑的前提下,三端模型共享大部分训练代码和超参配置,上线时间从 3 周缩短到 5 天。

算力受限场景的模型选型

阶段:模型调优与资源规划

解决的问题:训练预算有限时,传统方法盲目增大模型导致 OOM(显存溢出)或训练时间过长。复合缩放公式提供了精确的 FLOPS 预算控制(约 $2^{\phi}$ 倍),工程师可以根据 GPU 显存和训练时间预算,反推出合适的 $\phi$ 值,避免试错成本。

具体案例:某高校实验室只有 4 张 3090 显卡,需要在一个月内完成图像分类模型的训练与论文实验。研究者选中 EfficientNet-B3($\phi = 3$,FLOPS 约 3.1B)而不是更大的 B5,因为 $2^3 = 8$ 倍基准 FLOPS 正好落在 4 张卡 30 天的预算内,最终顺利发表并被多个下游任务引用。

Python 演示

python39 行
import math  class CompoundScaling:    """EfficientNet 复合缩放调度器:根据 phi 生成模型配置"""    def __init__(self, alpha=1.2, beta=1.1, gamma=1.15):        self.alpha = alpha        self.beta = beta        self.gamma = gamma        self.base_depth = 16   # B0 的总 block 数        self.base_width = 24   # B0 首个 stage 的通道数        self.base_res = 224    # B0 的输入分辨率     def scale(self, phi):        depth = int(self.base_depth * (self.alpha ** phi))        width = int(self.base_width * (self.beta ** phi))        res = int(self.base_res * (self.gamma ** phi))        flops_mult = 2 ** phi  # FLOPS 增长约为 2^phi 倍        return {            "depth": depth,            "width": width,            "resolution": res,            "flops_mult": round(flops_mult, 2),        }     def verify_constraint(self, phi):        lhs = self.alpha * (self.beta ** 2) * (self.gamma ** 2)        return round(lhs, 3), round(2 ** (phi / 4), 3)  if __name__ == "__main__":    cs = CompoundScaling()    for phi in range(0, 5):        config = cs.scale(phi)        actual, target = cs.verify_constraint(phi)        print(f"phi={phi}: depth={config['depth']}, "              f"width={config['width']}, res={config['resolution']}, "              f"FLOPS_mult={config['flops_mult']}")    print("alpha*beta^2*gamma^2 =", round(cs.alpha * cs.beta ** 2 * cs.gamma ** 2, 3))
目的:用纯 Python 模拟 EfficientNet 复合缩放的配置生成过程——输入 $\phi$ 值,输出对应的深度、宽度、分辨率和 FLOPS 增长倍数,直观感受“按比例放大”的含义。
  1. class CompoundScaling:定义复合缩放器类,封装 $\alpha, \beta, \gamma$ 三个系数和基准网络的初始配置。
  2. self.base_depth = 16以 EfficientNet-B0 为基准:16 个 block、首 stage 24 通道、输入 224 分辨率。
  3. def scale(self, phi):缩放入口函数:传入 $\phi$,输出三个维度的放大结果。
  4. depth = int(self.base_depth * (self.alpha ** phi))深度按 $\alpha^{\phi}$ 指数增长,对应加楼层。
  5. flops_mult = 2 ** phiFLOPS 增长约等于 $2^{\phi}$ 倍,这是复合缩放约束的直接体现。
  6. def verify_constraint(self, phi):校验 $\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2$ 约束是否满足。
  7. for phi in range(0, 5):生成 B0 到 B4 共 5 个模型配置,观察“规模翻倍、结构不变”的规律。

常见误区

误区我以为复合缩放就是把网络的每个维度都乘以同一个数——比如深度、宽度、分辨率全部乘以 2,就是缩放系数 $\phi = 2$。

正解复合缩放对每个维度用了不同的指数系数:深度乘以 $\alpha^{\phi}$,宽度乘以 $\beta^{\phi}$,分辨率乘以 $\gamma^{\phi}$。而且 $\alpha, \beta, \gamma$ 三者不相等(通常是 $\alpha = 1.2, \beta = 1.1, \gamma = 1.15$),深度、宽度、分辨率各自的默认值也不同。可以把它想成城市规划:楼层高度、道路宽度、公园面积按不同的比例系数“协调”增长,但都受同一个总体规划 $\phi$ 驱动。之所以不同,是因为三个维度对 FLOPS 的贡献不同——宽度和分辨率是平方级成本,所以要“压低”它们。

为何常见:公式 $d = \alpha^{\phi}$ 看起来很像等比缩放,容易让人忽略 $\alpha, \beta, \gamma$ 彼此不同,以及它们与 FLOPS 约束的微妙关系。

误区我学习了复合缩放公式后,打算直接把任何现有网络的深度、宽度、分辨率按 $\alpha^{\phi}$ 的规则放大,以为都能获得 EfficientNet 那样的效率提升。

正解复合缩放的高效性高度依赖 baseline 的质量。EfficientNet 的 B0 是经过 NAS 搜索得到的,它的基础设计(如 SE 注意力、MBConv 结构)本身就很高效。如果对一个结构不佳的网络盲目做复合缩放,比如一个没有残差连接的网络,加深会直接导致梯度消失,精度不升反降。就像把一个路网混乱的旧城按规定“放大 4 倍”,结果只是把混乱放大了 4 倍。正确的姿势是:先有一个经过验证的高效 baseline,再考虑缩放。

为何常见:看到一个漂亮的公式,很容易误以为它是“万能钥匙”,忽略了公式背后的前提假设——好基座才能放大。

误区我把 FLOPS 约等于 $2^{\phi}$ 理解成“算力翻倍,精度也会翻倍”,总想着把 $\phi$ 调大就能无限提升模型效果。

正解FLOPS 是成本指标,不是收益指标。复合缩放约束的是“成本可控”,不承诺精度的线性增长。精度随规模的增加是收益递减的:B0 到 B1 精度提升约 1.5%,B6 到 B7 提升不到 0.5%,而 FLOPS 从 0.39B 涨到 37B——90 倍的成本换来约 8 个百分点的精度。这就像城市规模从县城扩到省会,宜居度确实提升,但从省会扩到超级都市圈,提升就很有限了。工程上选择 $\phi$ 本质是在成本与精度之间找平衡点。

为何常见:$\approx 2^{\phi}$ 这个简洁的公式容易让人误以为“付出就有对等回报”,实际上任何模型扩展都会遇到收益递减,复合缩放也不例外。

面试题

Q1. EfficientNet 复合缩放中,三个缩放维度分别是什么?

单选题 · easy

  • A.层数、通道数、批大小
  • B.深度、宽度、分辨率← 正确答案
  • C.学习率、正则化、数据增强
  • D.卷积核大小、步长、填充

答案:B。复合缩放针对的是网络深度(层数)、宽度(通道数)和输入分辨率三个维度。批大小是训练超参数,学习率是优化参数,卷积核大小属于结构设计但不是缩放维度。这就像城市扩建的三个方向:加楼层(深度)、加车道(宽度)、扩公园(分辨率)。

Q2. 复合缩放公式中,$\phi$ 的作用是什么?

单选题 · easy

  • A.控制单个维度的缩放比例
  • B.全局缩放系数,统一驱动三个维度← 正确答案
  • C.控制卷积核大小的变化
  • D.控制训练轮数的变化

答案:B。$\phi$ 是全局预算旋钮,三个维度分别以 $\alpha^{\phi}$、$\beta^{\phi}$、$\gamma^{\phi}$ 的方式同时放大。$\alpha, \beta, \gamma$ 才是控制单个维度的系数。可以把 $\phi$ 理解为城市总规模等级——它不决定每个街区怎么建,只决定城市整体扩到多大。

Q3. 为什么复合缩放约束要求 $\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2$?

单选题 · mid

  • A.因为 FLOPS 与深度成正比,与宽度和分辨率的平方成正比← 正确答案
  • B.因为 ImageNet 数据集恰好有 2 个主要类别
  • C.因为 $\alpha, \beta, \gamma$ 必须相等才满足约束
  • D.因为这是为了确保模型参数量恰好翻倍

答案:A。FLOPS 约等于 $d \cdot w^2 \cdot r^2$,代入缩放公式后得到 $(\alpha \cdot \beta^2 \cdot \gamma^2)^{\phi}$。约束为约 2 意味着 $\phi = 1$ 时总计算量恰好翻倍,让规模可控。这就像规定“预算翻倍时城市面积才翻倍”——如果系数积是 3,预算只涨 1.5 倍面积就翻倍了,成本会失控。

Q4. EfficientNet 的 baseline(B0)是如何获得的?

单选题 · mid

  • A.手动堆叠 VGG 的卷积层
  • B.使用神经架构搜索(NAS)自动搜索得到← 正确答案
  • C.对 ResNet 做剪枝后得到
  • D.直接复用 Inception 的 Inception 模块

答案:B。EfficientNet-B0 通过 NAS 在自定义的搜索空间中搜索得到,搜索目标同时考虑了精度和 FLOPS。它并非传统手工设计或简单剪枝可得。这就像先通过自动化选型确定一个“黄金城市原型”,而不是随手拿一个旧城市来放大。

Q5. 以下哪些是复合缩放相比单一缩放的优势?

多选题 · mid

  • A.深度、宽度、分辨率协调增长,避免维度瓶颈← 正确答案
  • B.在相同精度的前提下大幅减少 FLOPS 和参数量← 正确答案
  • C.保证任何网络结构都能获得相同的精度提升
  • D.可以通过调节 $\phi$ 生成不同规模的模型族← 正确答案

答案:ABD。A、B、D 都是复合缩放的直接优势。C 错误——缩放效果依赖 baseline 质量,对结构不佳的网络不会有效。复合缩放是“好基座上的生长律”,不是“所有网络的万能药”。

Q6. EfficientNet-B7 在 ImageNet 上的 top-1 精度约为多少?

单选题 · easy

  • A.76.3%
  • B.80.0%
  • C.84.4%← 正确答案
  • D.90.0%

答案:C。B0 约 76.3%,B7 达到 84.4%——从县城规模市长到超级都市圈,精度逐步提升。但注意 B6 到 B7 的提升已经非常小,说明复合缩放同样遵循收益递减规律。

Q7. 在复合缩放中,为什么宽度和分辨率对 FLOPS 的影响是平方级的?

单选题 · hard

  • A.因为卷积运算中每个输出通道都要与所有输入通道连接← 正确答案
  • B.因为 GPU 并行计算时宽度和分辨率会占用更多显存
  • C.因为网络层数增加导致反向传播时间平方级增长
  • D.因为数据增强使训练样本数量平方级增加

答案:A。卷积层 FLOPS 与输入通道数、输出通道数、特征图尺寸都相关。宽度增加 d 倍使输入输出通道同时增加,因此是平方;分辨率增加使特征图宽高同时增长,也是平方。深度增加则只是逐层累加,所以是线性。这正是约束中要给宽度和分辨率加平方指数的原因——它们的成本本来就更高。

Q8. 关于 EfficientNet 对后续模型设计的启发,下列说法正确的有?

多选题 · hard

  • A.“先搜索高效 baseline,再复合缩放”成为模型族设计范式← 正确答案
  • B.SE 注意力模块与复合缩放形成内外互补← 正确答案
  • C.EfficientNetV2 完全抛弃了复合缩放思想
  • D.复合缩放思想被推广到 Transformer 模型的深度与宽度联合调优← 正确答案

答案:ABD。A、B、D 都是复合缩放的后续影响。C 错误——EfficientNetV2 没有抛弃复合缩放,而是改进了训练策略并调整了 stage 级缩放方式,属于“在继承中演进”。这就像第二代城市规划仍遵循环保理念,但换用了更先进的建设方式。

Q9. 复合缩放的两步法流程是什么?

单选题 · mid

  • A.先扩大数据规模,再增加模型深度
  • B.先固定 $\phi = 1$ 网格搜索 $\alpha, \beta, \gamma$,再固定系数调整 $\phi$← 正确答案
  • C.先训练大模型,再蒸馏小模型
  • D.先随机初始化,再使用 NAS 搜索最终结构

答案:B。两步法是先在小预算下用网格搜索确定最优系数组合,再固定系数只调 $\phi$ 生成整个模型族。这就像先建一个微缩试点城市验证规划方案,再按方案建设大都市圈——试点决定比例,放大决定规模。

Q10. 单一缩放维度(如只加深度)为什么效率会下降?

单选题 · easy

  • A.因为网络层数增加导致显存占用超出 GPU 上限
  • B.因为其他维度成为瓶颈,边际收益递减← 正确答案
  • C.因为训练数据不足以支撑更深的网络
  • D.因为反向传播算法无法处理深层网络

答案:B。只加深度时,宽度和分辨率不变,梯度信息难以在过深的网络中顺畅传递,精度提升迅速饱和;只加宽度同理,特征表达和感受野不足会成为天花板。维度间的耦合关系决定了单一缩放必然失衡——这就像只有高楼没有宽马路,城市必然堵车。