网络压缩简介


前言

本文主要包括卷积神经网络的网络压缩的相关知识。主要致力于减小模型复杂度,减少模型存储所需的空间,加速模型的训练与推理。

模型的压缩又分为前端压缩(不怎么改变网络结构)和后端压缩(追求极致的压缩,极大地改造网络结构,操作不可逆),接下来将分别介绍它们。


提示:以下是本篇文章正文内容,仅供参考

一、前端压缩

1、知识蒸馏

采用迁移学习的思想,通过预训练好的teacher model(大and强)的输出作为监督信号去训练另外一个轻量化的网络student model(小 and快)。
在这里插入图片描述
teacher model可以监督的信息包括:

  • 概率分布
  • 输出的特征
  • 中间层的feature map
  • attention map
  • 中间过程

其中针对概率分布的蒸馏可以使用KL。KL散度是描述两个概率分布差异的一种方法。我的理解是通过KL告诉student model自己的prediction和teacher model的差异,从而纠正其可能的错误(因为teacher model的预测更准确)。具体做法是计算两个pre的KL散度得到一个KL loss,训练student model时将其自己计算的loss和KL loss相加后再做反向传播。

针对feature map做知识蒸馏。我们希望student model得到的feature map和teacher model得到feature map尽可能像,但是如果直接用L2 loss计算可能太暴力,可能导致过拟合,所以这里通常使用MMD loss(maximum mean discrepancy,可以评价两个域的相似性),它是将两个model 的feature map的分布域拉近而不是直接针对每个feature map(这里假设我们有一系列的feature map)。
在这里插入图片描述

2、紧致网络设计

直接在设计网络时设计又小又好又的网络,如SqueezeNet、MobileNet、ShuffleNet等,这里不赘述。

二、后端压缩

1、低秩近似

PCA的思想中,大的矩阵可以用低秩的矩阵来表示其大部分的信息,丢弃少量信息来消除大量的冗余。这就和低秩近似的思想比较相近。

常见的方法有:

  • 卷积分解:将d×d的卷积核分解为d×1和1×d的卷积核(感受野没有变化),精度损失<1%
  • SVD分解:对卷积和和卷积运算进行SVD分解,对特征吃进行排序,保留比较大的几项

2、剪枝

原本神经网络是全连接的,在训练完成后,并不是每个神经元都对预测结果有着重要影响,有些神经元是没什么用的。剪枝就是在网络训练完成后,裁剪掉贡献信息量不大的网络参数。如果权值越少,就认为经过激活之后所产生的影响几乎可以忽略不计。去除权重比较小的连接,使得网络稀疏。

在这里插入图片描述
剪枝的基本流程:

  1. 衡量所有神经元的重要程度
  2. 移除一部分不重要的神经元
  3. 对网络进行fine-tune(因为网络结构变了所以需要微调)
  4. 返回1进行下一轮剪枝直到满足某些条件

剪枝方法分类:
在这里插入图片描述

3、量化

一般而言,神经网络的参数是用32bit长度的浮点型表示,可以通过牺牲精度来降低储存参数所需的空间。
可以量化的对象包括:

  • 网络权重
  • 网络特征
  • 网络梯度
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值