Layer-Wise Data-Free CNN Compression

2023-11-10 16:40

本文主要是介绍Layer-Wise Data-Free CNN Compression,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Layer-Wise Data-Free CNN Compression

我们的无数据网络压缩方法从一个训练好的网络开始,创建一个具有相同体系结构的压缩网络。这种方法在概念上类似于知识蒸馏[23],即使用预先训练好的“教师”网络来训练“学生”网络。但是知识蒸馏需要训练数据。以前的方法都是通过生成数据来解决这个问题,比如Adversarial Knowledge Distillation(AKD)[6]和Deep Inversion(DI)[51]。然而,这些方法的计算成本很高。

在这里插入图片描述

图1。我们的方法概述。我们首先在教师和学生身上进行BatchNorm fusion和Assumption-Free Cross-Layer Equalization(AFCLE,第3.2节)。然后,我们分别训练学生的每一层。我们使用前一层(第3.1节)的BatchNorm统计数据生成数据,然后使用这些数据优化压缩的学生网络以匹配教师。

我们采用图1所示的更简单的方法。我们将学生的每一层视为教师中相应层的压缩近似值。只要每一层的近似值是准确的,整体的学生网络就会产生与教师类似的输出。这个这种方法的计算效率远高于其他生成方法,因为我们的方法不需要训练输入图像,就可以在网络的每一层产生良好的训练信号。

在这里插入图片描述

图2。MobileNetV1分析了我们的方法和对抗性知识提取(AKD)的前传次数和训练精度[6]。深度反演[51](未显示)比AKD需要更多的FLOPs ,而且精度较低。

相反,我们为每个层分别生成输入,这不需要生成真实的图像。我们的方法比AKD[6]少14倍的触发器,比DI[51]少450倍的FLOPs (图2),只经过几百次迭代就收敛了。

我们的第一个挑战在于生成用于训练教师层的压缩近似值的数据。我们的第二个挑战在于对网络进行预处理以实现更有效的压缩。我们将在以下小节中讨论这些问题。

3.1. LayerWise Data Generation

我们描述了layer-wise网络输入的方法。我们假设网络由包含卷积的块组成,然后是BatchNorm[25],然后是激活。让 B i \mathcal B_i Bi代表与索引i块相关联的BatchNorm层。 B i \mathcal B_i Bi的均值和标准差为 μ B i , σ B i \mu_{\mathcal B_i},\sigma_{\mathcal B_i} μBi,σBi,然后应用权值为 γ B i \gamma_{\mathcal B_i} γBi和bias为 β B i \beta_{\mathcal B_i} βBi的的通道仿射变换。因此,我们知道BatchNorm的输出通道的标准偏差是 γ B i \gamma_{\mathcal B_i} γBi,均值为 β B i \beta_{\mathcal B_i} βBi

我们利用这些信息生成layer-wise输入。设 C i \mathcal C_i Ci表示网络块i中的卷积层, f i f_i fi表示块i中的激活。另外, h ( ⋅ ) h(\cdot) h()代表h层对应输入的输出。考虑块i从由集合K索引的块中接受多个输入张量的情况。让 x B i − 1 x_{\mathcal B_{i-1}} xBi1代表用真实数据训练的训练batch中BatchNorm层 B i − 1 \mathcal B_{i-1} Bi1的输入。假设这些tensors由加法函数组合而成(如残差网络[22]),卷积Ci的输入xCi为

在这里插入图片描述

加法外的其他组合函数也如此。

在没有数据的训练中,我们无法访问 x B i − 1 x_{\mathcal B_{i-1}} xBi1,所以我们估计它。用 G c i ( ⋅ ) \mathcal G_{c_i}(\cdot) Gci()代表用于生成训练 C i \mathcal C_i Ci层输入的函数,利用我们上面关于BatchNorm层的输出统计的观察,我们估计

在这里插入图片描述

其中 N ( μ , σ ) \mathcal N(\mu,\sigma) N(μ,σ)代表高斯分布。在第一个卷积层的情况下,我们从 N ( 0 , 1 ) \mathcal N(0,1) N(0,1)生成数据。我们忽略了其他层(如平均池)对统计数据的影响。

我们在第3.3节和第3.4节中描述了如何使用生成的数据来计算学生网络的层。但首先,我们描述了我们的方法的另一个组成部分,该方法旨在对网络进行预处理以改进最终结果。

3.2. AssumptionFree CrossLayer Equalization

我们描述了均衡(equalizing)网络层的方法。为了便于描述, W ∈ R c o , c i W\in \mathbb R^{c_o,c_i} WRco,ci代表一个具有 c o c_o co输出维度和 c i c_i ci输入维度的矩阵。

我们的方法将无数据网络压缩问题分解为压缩单个层的子问题。有两个问题使从压缩后的单个层组装压缩网络的问题变得复杂。

第一个问题是关于BN层,BN层具有参数 μ , σ , γ , β \mu,\sigma,\gamma,\beta μ,σ,γ,β。给定一个偏置为b的线性层W,线性层的输出,后跟BatchNorm

在这里插入图片描述

⨀ \bigodot 代表elementwise multiplication。如果W的某一行c乘以比例因子 α \alpha α,如果b和 μ \mu μ的第c个元素乘以 α \alpha α,如果 γ \gamma γ的第c个元素乘以标量因子 1 / α 1/\alpha 1/α,则函数f(x)保持不变。因此,W的权重的相对重要性取决于BatchNorm参数的值。在修剪或量化W时,这是有问题的,因为我们希望权重值的大小能反映其重要性。BatchNorm层内隐藏的比例因子可以防止这种情况的发生。为了解决这个问题,我们融合BN层的参数 μ , σ , γ , β \mu,\sigma,\gamma,\beta μ,σ,γ,β到之前的线性层。以使BatchNorm参数对权重大小的有效影响得到考虑。一旦这种融合发生,BatchNorm可以被忽略。公式3中使用的BatchNorm统计量必须在该融合步骤之前收集。它们将保持有效,因为BatchNorm参数的变化会被W和b的变化所补偿。

将无数据网络压缩分解为layer-wise压缩子问题的第二个复杂性是,各层的权重相对大小可能不一致。考虑一对具有权重 W 1 W_1 W1 W 2 W_2 W2以及偏置 b 1 b_1 b1 b 2 b_2 b2的线性层的输出。假设网络使用ReLU激活[1],这样层对的输出是

在这里插入图片描述

如果 W 2 W_2 W2的第c行乘上一个缩放因子 α \alpha α,且如果 b 2 b_2 b2对应的第c个元素乘上 α \alpha α,且 W 1 W_1 W1相对应的列乘上 1 / α 1/\alpha 1/α,输出 f ( x ) f(x) f(x)保持不变。换句话说,层间权重的相对重要性在先验上是不一致的。有相似重要性的权重需要在整个网络中具有相似的值,否则一些层将被修剪得太重,而一些层将被修剪得不够。不一致也会导致次优的量化范围,如[38]所述。

为了解决这种缩放不一致的问题,我们采用了一种方法,我们称之为Assumption-Free Cross-Layer Equalization(AFCLE),它是DFQ[38]中描述的Cross-Layer Equalization方法的扩展。对于每一个权重为 W j ∈ R c o × c i W_j\in\mathbb R^{c_o\times c_i} WjRco×ci,偏置为 b j ∈ R c o b_j\in\mathbb R^{c_o} bjRco的线性层 L j \mathcal L_j Lj,我们把一对向量 v j i ∈ R c j , v j o ∈ R c o v_j^i\in\mathbf R^{c_j},v_j^o\in\mathbf R^{c_o} vjiRcj,vjoRco联系起来。(扩展到卷积层是同样的)这些向量将在AFCLE中使用,之后将保持固定。我们计算线性层的输出为
在这里插入图片描述

在AFCLE之前, v j i a n d v j o v_j^i\ and\ v_j^o vji and vjo的所有元素初始化为1。设 W 2 W_2 W2的第c行 W 2 c W^c_2 W2c,和 W 1 W_1 W1对应的列 W 1 c W_1^c W1c。我们计算比例因子 s c s_c sc,并将网络更新为
在这里插入图片描述

在这里插入图片描述

这篇关于Layer-Wise Data-Free CNN Compression的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/383952

相关文章

BD错误集锦3——ERROR: Can't get master address from ZooKeeper; znode data == null

hbase集群没启动,傻子!   启动集群 [s233 s234 s235]启动zk集群 $>zkServer.sh start $>zkServer.sh status   [s233] 启动dfs系统 $>start-dfs.sh 如果s237 namenode启动失败,则 [s237] $>hadoop-daemon.sh start namenode [s233]启动yarn集群

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解 码客 卢益贵 ygluu 关键词:游戏策划 可配置化 模块化配置 数据引擎 条件系统 红点系统 一、前言 在插件式模块化软件开发当中,既要模块高度独立(解耦)又要共享模块数据,最好的方法是有个中间平台(中间件)提供标准的接口来进行数据的交换,这在很多行业软件开发中已经广泛应用。但是,由于中间件的抽象和封

▶《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch5 蒙特卡洛方法【model-based ——> model-free】

PPT 截取必要信息。 课程网站做习题。总体 MOOC 过一遍 1、视频 + 学堂在线 习题 2、 过 电子书 是否遗漏 【下载:本章 PDF GitHub 页面链接 】 【第二轮 才整理的,忘光了。。。又看了一遍视频】 3、 过 MOOC 习题 看 PDF 迷迷糊糊, 恍恍惚惚。 学堂在线 课程页面链接 中国大学MOOC 课程页面链接 B 站 视频链接 PPT和书籍下载网址: 【Gi

Core Data 网络应用实例

转自:http://www.cocoachina.com/applenews/devnews/2014/0430/8275.html 转自 answer_huang的博客 几乎每一个应用开发者都需要经历的就是将从 web service 获取到的数据转变到 Core Data 中。这篇文章阐述了如何去做。我们在这里讨论的每一个问题在之前的文章中都已经描述过了,并且 Apple 在

05 TensorFlow 2.0:CNN总结及实战

浮云爱蹉跎 流光怕寂寞 填残篇脉络 续断章因果 问今生旅途几时交错 前尘灯火 隔世传说                                                                                                                                 《流光卷》 卷积层 发现特征轮廓,实现特征提

MATLAB-SSA-CNN-SVM,基于SSA麻雀优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类)

MATLAB-SSA-CNN-SVM,基于SSA麻雀优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类) 1.数据均为Excel数据,直接替换数据就可以运行程序。 2.所有程序都经过验证,保证程序可以运行。 3.具有良好的编程习惯,程序均包含简要注释。 结果展示 获取方式 https://mbd.pub/o/bread/mbd-ZpeYkpZw

spring-data-redis 连接池应用

具体配置看我的项目。用的是redisTemplate ,和jdbctemplate  是不是很相似。 真的不想吐槽csdn,钻钱眼里了,我想上传我的代码,免费都不行吗 想要测试代码可以私信,也可以模仿https://www.cnblogs.com/tankaixiong/p/3660075.html  这个链接下的。

Windows 内核驱动无法使用 __DATA__、__TIME__、__TIMESTAMP__ 解决方法

项目 -> 属性 -> Driver Settings -> Driver Model -> Allow Date, Time and Timestamp -> Yes。 感谢单总的解答和这篇文章:https://developercommunity.visualstudio.com/content/problem/186922/-timestamp-macro-not-defined-in-r

lock_free 锁无关

锁无关的(Lock-Free)数据结构——在避免死锁的同时确保线程继续 C/C++ Users Journal October, 2004 锁无关的(Lock-Free)数据结构 在避免死锁的同时确保线程继续   Andrei Alexandrescu 刘未鹏 译 Andrei Alexandrescu是华盛顿大学计算机科学系的在读研究生,也是《Modern C++ Design》一书的作者。

python请求multipart/form-data数据

今天遇见发送post请求时,post data是类似下面的数据: 解决办法,参考:python拼接multipart/form-data类型post请求格式