论文笔记:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

论文:https://arxiv.org/abs/1905.11946

中心思想

  • 提出了一种同时对深度,宽度,尺度(这里指的是输入的分辨率)的网络扩展(scale)方式
    • 以往的工作仅限于在width /height/resolution(input resolution)三者之一进行扩展
    • 而同时调节这几个变量又费时费力
    • 本文发现3个变量只需要同时乘一个系数就能得到比较好的效果,称为compound scale method,复合网络扩展
  • 使用了网络结构搜索的方式,得到EfficientNet作为baseline
  • 具体的用法举例:假如算力增大 2 N 2^{N} 2N倍,depth/width/resolution可增大 α N \alpha^N αN β N \beta^N βN γ N \gamma^N γN倍, α β γ \alpha \beta \gamma αβγ是通过grid search产生的
  • 这种复合扩展背后的原理是:输入更大 → \rightarrow 需要更多layer来提升感受野 → \rightarrow 需要更多的channel捕捉精细特征

网络复合扩展问题描述

  • 一般来说,像ResNet MobileNets网络回根据stage来进行划分,每个stage有相同的卷积类型(可能还会包含降采样模块)
  • 模型扩展(Model Scaling):指的是固定网络结构(Basic Block的结构,以及Stage的数目),使得网络更容易扩展,只改变每个Layer中的 L , C , H , W L,C,H,W L,C,H,W,意味着若想将网络变大,可以只调整 L , C , H , W L,C,H,W L,C,H,W
  • 为了进一步压缩搜索空间: L , C , H , W L,C,H,W L,C,H,W使用相同的扩展系数来调整
  • 因此可以将 L , C , H , W L,C,H,W L,C,H,W的搜索问题转换为:找到一个统一的缩放系数,在有限的资源(Memory, FLOPs)下,对原有的网络的depth/width/resolution进行扩展
  • depth/width/resolution进行扩展对应的收益:
    • 将网络做深,有利于学到更多复杂的信息,使得网络的任务迁移更容易。但容易出现梯度弥散的问题
    • 而对于小网络而言,惯用的方式是使用宽度的扩展,将网络做的更宽,一方面更容易学习,另一方面能够学到更多细节特征(因为特征表达空间变大了),但无法学习高层次的语义信息
    • 输入分辨率越大,图像包含越多的细节,最终的表现必然会更好
    • 但对于这三个维度而言,随着扩展程度的增大(网络变得越来越大),得到的增益将会越来越小
  • 增益越来越小的背后原因是,这三个维度往往是联动的:
    • 分辨率变大,一方面需要增大感受野,因此需要加深
    • 另一方面需要提升特征的粒度(特征表达空间),因此需要加宽
  • 基于上述的结论,这里提出了一种复合缩放的方法,使用一个复合扩展系数 ϕ \phi ϕ
    • depth: d = α ϕ d = \alpha^\phi d=αϕ
    • width: w = β ϕ w = \beta^\phi w=βϕ
    • resolution: r = γ ϕ r = \gamma^\phi r=γϕ
    • 约束: α β 2 γ 2 ≈ 2 \alpha \beta^2 \gamma^2 \approx 2 αβ2γ22,2的含义是:复合系数为 ϕ \phi ϕ,资源增加 2 ϕ 2^\phi 2ϕ倍,平方是因为宽度和分辨率这两个系数一旦翻倍,算力要求就翻4倍,是一个平方关系

EfficientNet网络结构:

  • 有了扩展方法后,关键是baseline网络的定义
  • 本文利用了优化目标 A C C ( m ) ( F L O P s ( m ) / T ) 0.07 \frac{ACC(m)}{(FLOPs(m)/T)^{0.07}} (FLOPs(m)/T)0.07ACC(m),T是目标FLOPs。这里因为没有指定硬件,所以只能用Flops衡量,而不能用Latency
  • 利用MobileNet V2中的BLock作为基本模块(并添加了SE Block,以及用),搜索出类似MNas的网络,称为Efficient-B0,具体结构如下:
    在这里插入图片描述
  • 有了Efficient-B0之后,若扩展系数 ϕ = 2 \phi=2 ϕ=2,通过以下的方式,对网络进行扩展
    • 对于上表中每个stage的深度(#Layers),乘以一个系数 α = 1.2 \alpha=1.2 α=1.2然后向上取整
    • 对于上表中每个stage的宽度(#channels),乘以一个系数 β = 1.1 \beta=1.1 β=1.1然后以Padding=8为基准做“四舍五入”:与8的余数大于4,就向上padding为8的倍数,否则向下padding
  • Efficient-B1对应 ϕ = 1 \phi = 1 ϕ=1,以此类推, ϕ = 1 , 2 , 3... , 7 \phi = 1,2,3...,7 ϕ=1,2,3...,7分别得到EfficientNetB1-7

EfficientNet实现:

  • EfficientNet的具体实现会和网络定义略微有不同,具体实现可以看:https://ai.googleblog.com/2019/05/efficientnet-improving-accuracy-and.html
  • 具体来说,代码实现与论文相比,在2个stage中进行了提前的降采样。下图中上部分为论文描述,下部分为代码实现
    在这里插入图片描述
遗传算法优化BP神经网络(GABP)是一种结合了遗传算法(GA)BP神经网络的优化预测方法。BP神经网络是一种多层前馈神经网络,常用于模式识别预测问题,但其容易陷入局部最优。而遗传算法是一种模拟自然选择遗传机制的全局优化方法,能够有效避免局部最优 。GABP算法通过遗传算法优化BP神经网络的权重阈值,从而提高网络的学习效率预测精度 。 种群:遗传算法中个体的集合,每个个体代表一种可能的解决方案。 编码:将解决方案转化为适合遗传操作的形式,如二进制编码。 适应度函数:用于评估个体解的质量,通常与目标函数相反,目标函数值越小,适应度越高。 选择:根据适应度保留优秀个体,常见方法有轮盘赌选择、锦标赛选择等。 交叉:两个父代个体交换部分基因生成子代。 变异:随机改变个体的部分基因,增加种群多样性。 终止条件:当迭代次数或适应度阈值达到预设值时停止算法 。 初始化种群:随机生成一组神经网络参数(权重阈值)作为初始种群 。 计算适应度:使用神经网络模型进行训练预测,根据预测误差计算适应度 。 选择操作:根据适应度选择优秀个体 。 交叉操作:对选择的个体进行交叉,生成新的子代个体 。 变异操作:对子代进行随机变异 。 替换操作:用新生成的子代替换掉一部分旧种群 。 重复步骤2-6,直到满足终止条件 。 适应度函数通常以预测误差为基础,误差越小,适应度越高。常用的误差指标包括均方根误差(RMSE)或平均绝对误差(MAE)等 。 GABP代码中包含了适应度函数的定义、种群的生成、选择、交叉、变异以及训练过程。代码注释详尽,便于理解每个步骤的作用 。 GABP算法适用于多种领域,如时间序列预测、经济预测、工程问题的优化等。它特别适合解决多峰优化问题,能够有效提高预测的准确性稳定性 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值