IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> PRUNING-卷积神经网络剪枝 -> 正文阅读

[人工智能]PRUNING-卷积神经网络剪枝

PRUNING CONVOLUTIONAL NEURAL NETWORKS FOR RESOURCE EFFICIENT INFERENCE --- 基于资源高效推理的裁剪卷积神经网络

这篇论文来自NVIDIA,2017年发表的。与network-slimming一样通过结构化剪枝方法进行通道剪枝,核心思想就是移除一些冗余的channel,从而简化模型。当删减某些通道的同时也裁剪了卷积核中与这些通道对应的卷积核,因此通过剪枝能够减少卷积的运算量,也可以叫做卷积核剪枝。

进行通道剪枝,最重要的便是进行通道重要性判断,与network-slimming使用BN进行通道重要性判断的方法不同,本文提出了一种新的对神经网络中卷积核进行剪枝的算法以实现高效推理。

主要贡献

论文中提出了一种用于修剪神经网络中的卷积核的新公式,以实现有效的推理。
论文中提出了一个基于泰勒展开的新准则,用它去近似由于修剪网络参数引起的损失函数的变化。

与其他标准(例如,对用于细粒度分类的大型CNN使用卷积核或特征图的范数进行剪枝只使用了一阶梯度信息)相比,本文提出的标准性能更好。

实验表明,本文算法在理论上可以在基本不影响模型准确率的情况下将3D卷积滤波器的大小压缩超过10倍,本文的算法也适用于基于ImageNet数据集训练的模型。

剪枝算法

作者交错进行基于贪婪标准的剪枝和通过反向传播的微调,实现了高效的剪枝,并且剪枝后的模型保持了良好的泛化能力。

本文提出的剪枝方法包括以下步骤:

1.在数据集上对各个通道进行重要性评估。
2.移除一批不重要的通道。
3.在数据集上对剪过后的模型进行权重微调,使其恢复精度。继续进行通道剪枝,在达到目标精度和修剪目标之间的平衡后停止修剪,例如运算量(FLOPs)或内存利用率。

??????通 道 重 要 性 判 断

本文使用

这个函数去衡量修剪的W是否达到最优,即寻找一个修剪后效果最接近预训练的原始权重W,使得损失函数变化最小。(其中C表示任务的loss,W和 W'分别表示完整的通道和剪枝后的通道, D代表网络的输入输出,B是剪枝后的最大通道数量?),直观来看,如果W?′?= W,误差值最小

那么找到一个好的参数子集,同时尽可能接近原始的损失值是一个组合问题。需要对2^|w|个参数子集计算损失值。对于当前的网络结构,遍历测试的话计算量太大。

本文中作者研究了一种贪婪算法。如图所示,从初始模型W开始,迭代地识别并移除最不重要的参数。因为每次迭代都是在删除参数,那么各次迭代结果都满足W'的l0约束。

泰勒展开

如果将剪枝作为优化问题,目的就是找到W',具有有限的非零元素。公式化表示即最小化。

泰勒公式是一个用函数在某点的信息描述其附近取值的公式。如果函数满足一 定的条件,泰勒公式可以用函数在某一点的各阶导数值做系数构建一个多项式来近似表达这个函数。

本文通过基于泰勒展开的方法,可以直接通过去除特定参数来近似损失函数的变化。使用hi表示参数 i 的输出,对于特征图h。为了方便起见,这里认为损失函数同样取决于参数和根据参数计算的输出。假设各参数相互独立,有:

其中,如果hi被修剪掉,则C ( D , h i = 0 ) 表示该参数为0时的损失值;如果 hi 没有被修剪掉,则
?C(D,hi)表示具有该参数时的损失值。虽然参数实际上是相互依赖的,但在模型训练期间的梯度计算过程中已经使用了参数相互独立的假设。

为了近似,我们使用一阶泰勒展开。对于函数f ( x ),函数在x=a处的泰勒展开为:

其中,f(p)(a)为 f 在点 a 处的 p 阶导数。R p ( x )?为 p 阶剩余项。在h i = 0 处使用一阶泰勒展开近似C(D,hi=0)

剩余项R1可省略。最终,每个通道对loss的影响可用其一阶梯度近似。

FLOPS正则化剪枝

剪枝的主要目的之一是减少网络的操作量。由于输入特征图和卷积核的数量和大小不同,不同层的特征图需要不同的计算量。考虑到这一点,本文引入FLOP正则化,通过在评判标准中加入每个通道所在FLOPs可以让剪枝真正降低计算量,而不是只降低参数量。

?这里的FLOPs正则化是对计算量大小的限制。同样可以改成其他的限制,例如存储大小,推理时间等。

实验结果

如图显示了在Birds-200数据集(Birds 200-2011: 由200种鸟类图片组成,总共有6000张训练图片和5700张测试图片)上进行微调后对VGG-16剪枝的结果。

横坐标是模型计算量或者参数,其实也就是反应裁剪了多少,最左边是完全没裁剪,最右边是全部裁剪掉了。该图显示了准确率-剪枝比例及准确度-GFLOPs的关系。本文的泰勒剪枝标准取得了几乎最好的效果。特别地,加了FLOPs正则化后,能更精准的得到低FLOPs的剪枝模型。

图6显示了使用泰勒标准进行修剪以及修剪迭代之间的不同数量的微调的区别。增加更新次数会带来更高的准确性,但代价是修剪过程的额外运行时间。

在修剪期间,我们观察到精确度略有下降。其中一个原因是修剪迭代之间的微调。初始的网络通过更长的微调和更好的优化参数搜索,具有更好的准确性。例如,在额外的128k更新后,Birds-200上的未修剪得VGG16网络的准确率达到75%。在130k更新后,Flowers-102上的AlexNet上升到82.9%。应该注意的是,通过对修剪网络的进一步微调,我们也可以实现更高的精度,因此精度的一对一比较是粗略的。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:52:59  更:2022-09-30 00:56:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:48:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码