一句话定义:EfficientNet 是一类用于图像识别的卷积神经网络(CNN),它的核心贡献不是发明新算子,而是给“怎么把模型变大”这件事定了一套规则——复合缩放(compound scaling):宽度、深度、分辨率三个维度要按一组搜出来的比例同步放大。
为什么不能只调一个旋钮
卷积网络的“大小”大致由三样东西决定:深度(堆多少层)、宽度(每层多少通道)、输入分辨率(图片送进去多大)。打个比方,这像盖一栋办公楼:楼层数是深度,每层面积是宽度,采光和视野是分辨率。只加楼层不扩面积,每层会挤得转不过身;只扩面积不加层,空间全浪费在平地上。三者明显有一个“配套比例”,偏科就是浪费预算。
关键在于:比例是搜出来的,不是拍脑袋定的
早年大家习惯只动一个维度——ResNet 靠加深、Wide ResNet 靠加宽、或者干脆把输入图放大。而 EfficientNet 的做法是:先把三个维度的缩放指数当作未知数,在小模型上做网格搜索,找出一组在小规模下最划算的比例;确定之后,再用一个统一的系数 φ 把这套比例整体放大,得到从小到大的一系列档位(B0 往上)。因为卷积的计算量大约正比于“深度 × 宽度² × 分辨率²”,指数之间还要满足一个平方关系的约束,才能保证每放大一档,算力大致翻倍。
所以“复合缩放”常被误解成“三个一起调大就行”。其实三个一起调大只是必要条件,真正值钱的是那个比例。经验上,深度的指数最大、分辨率次之、宽度最小——直观理解是:先把路修长(更多层带来更强的抽象能力),再把视野放大,最后才加宽通道。
和相邻概念的区别
| 做法 | 调什么 | 局限 |
|---|---|---|
| 深度缩放 | 层数 | 太深难训练,收益递减 |
| 宽度缩放 | 通道数 | 浅而宽,抓不到高层语义 |
| 分辨率缩放 | 输入尺寸 | 算力涨得极快,小模型吃不消 |
| 复合缩放 | 三者按搜出的比例同步 | 比例与硬件、任务相关,换场景需重搜 |
它和 MobileNet 那类工作的区别也值得说清:MobileNet 优化的是“单个模块长什么样”(深度可分离卷积),EfficientNet 的基线模块正是借鉴了这类轻量结构,但它的主张是“结构定型之后,规模怎么分配”。它和神经架构搜索(NAS)也不是一回事:NAS 搜的是网络内部结构,EfficientNet 搜的是三个缩放系数,两者用同一套思路,但搜索空间小得多、代价也低得多。
对从业者的实际意义
一是预算固定时,先想“怎么分配”再想“堆多大”,这个思路可以迁移到语言模型、检测模型上。二是别默认“分辨率越高越好”,放大输入常常是性价比最差的那一档。三是它长期被当作迁移学习的骨干网络使用,但实际部署时要看真实延迟而不是理论计算量,不同硬件上结论可能相反,具体选型以官方实现和实测为准。对普通人来说,它提供了一个很好用的思维模型:任何系统扩容,均衡配比比单项拉满更划算。
