参考文献链接: AI嵌入式系统:算法优化与实现
前言
神经网络的实现与优化方式:
- 基本运算实现
- 权重系数优化
- 神经网络结构优化
一. 基本运算实现
二. 权重系数优化
三. 神经网络结构优化
- 剪枝操作
- 裁剪不必要的结构,降低运算量。
- (细粒度)操作细节:
- 找出待选的可修剪参数(即可以置零),将其固定为0;
- 在部分参数固定后,补充训练神经网络,以弥补下降的网络性能;
- 交替执行,直到达到可接受指标;
- 为了减小权重系数数量,使得更多的权重系数接近于0,在损失函数中添加一个L1范数损失项。
- (粗粒度)操作细节:
- 删除卷积层中若干特征图, 同时消除相关运算;
- 卷积层剪枝配合BN层进行,删除 ∥ α c ∥ \|\alpha_c \| ∥αc∥小于门限的特征图来降低卷积运算量;
- 补充训练(finetune) 调整剩余网络参数, 降低网络结构的改变带来的性能损失;
- 交替执行,直到达到可接受指标;;
- 某个特征图删除后,对应上游,下游的所有运算和数据均成为冗余;
- 执行剪枝前提: 训练时,使得BN层有足够多的缩放因子接近0,在损失函数中添加所有BN层的缩放因子的绝对值之和, ∥ θ B N ∥ = ∣ α 1 ∣ + ∣ α 1 ∣ + ∣ α 1 ∣ + . . . \|\theta_{BN} \|=|\alpha_1|+|\alpha_1|+|\alpha_1|+ ... ∥θBN∥=∣α1∣+∣α1∣+∣α1∣+...
- 卷积结构优化
- 按点卷积 (pointwise convolution)
- 1*1 卷积
- 按深度卷积(depthwise convolution)
- 对每个通道特征图与对应卷积核卷积得到输出特征图;
- 输出特征图的数目与输入特征图数目一致;
- 深度可分离卷积(depthwise separable convolution)
- 深度卷积与按点卷积的级联
- MobileNet
- MobileNet V2
- 反残差模块(inverted residual):
- 以滑动步长为2的卷积运算环节,取代神经网络的池化运算
- 反残差模块(inverted residual):
- MobileNet V3
- 激活函数进行了修改
- 网络架构的自动搜索
- MobileNet V2
- 按点卷积 (pointwise convolution)
- 知识蒸馏
- 基本过程:
- 先训练大而复杂的神经网络(教师网络)。
- 构建小型神经网络(学生网), 用大神经网络从输入数据中提取的中间信息来帮助训练小网络。
- 教师网络仅进行推理操作,学生网负责训练过程;
- 基本过程:
总结
学会针对不同系统运算特点,尝试多种可能的改进方式。