理论部分

方法介绍

本节将详细介绍AMC的算法流程。AMC旨在自动地找出每层的冗余参数。 AMC训练一个强化学习的策略,对每个卷积层会给出其action(即压缩率),然后根据压缩率进行裁枝。裁枝后,AMC算法直接对裁剪后的网络惊醒精度的测试,不经过fine-tune过程,这种精度测量结果是fine-tune后得到最优模型的精度的一中近似,而且可以加速整个训练过程。

问题定义

在深度神经网络中,通过建超每层的参数个数,达到模型压缩和加速的效果。通常有2中裁枝方法:细精度裁枝和结构化裁枝。细精度裁枝【19】直接将不重要的参数去除掉,不考虑结构信息,以单个参数(scale)为单位裁剪,这种裁枝可以做到很高的压缩率和很少的精度损失,但同时这种算法导致稀疏的不规则参数结构(无法用通常的张量或矩阵表示),需要使用特殊设计的硬件做加速(比如EIE【18】)。结构化裁枝则是粗精度的,直接去除掉一个张量中规则的区域(比如按channel裁剪,或者按整列,整行去裁剪)裁剪后的参数依然是规则的,依然可以使用张量或矩阵表示,不需要额外的硬件或软件支持。本文中将采用结构化的裁枝方案,对卷积层和全联接层的通道进行裁枝。

AMC的目标在于对每层都找出有效的稀疏度(即压缩率),在之前的工作【38,31,22】中,压缩率通常是人工决定的。以卷积层为例,原始的参数张量为 ,其中n,c分别表示输出通道数和输入通道数,k是卷积核大小。对于细精度裁枝方法,稀疏度表示为0元素个数除以所有元素的个数,而对于通道裁枝,我们直接将参数张量压缩为 ,因此稀疏度就是 .

使用强化学习自动压缩

AMC利用强化学习对action空间(在本文即压缩率)进行有效地搜索,下面将介绍本文使用的强化学习框架的细节设定。

状态空间(State Space)

对每层卷积,AMC使用11个参数来表示该层的状态 :

其中t表示第t层,其参数张量为 ;输入特征的维度为 ;FLOPs[t]表示该层的FLOPs,即该卷积层的操作数;reduced表示在之前所有层经过压缩已经减少的FLOPs;rest表示在后面所有层中剩余的FLOPs。在传入强化学习的agent之前,这些值会被归一化至【0,1】。状态 是agent区分不同卷积层的基本特征。

行为空间(Action Space)

当前大多工作中,强化学习的行为空间为离散的(比如以通道数个数为action,仅取64,128,256,512),这种粗精度的行为空间可能影像模型结构的精度,因为模型压缩后的精度,对压缩率很敏感。同时随着层数变深,离散的行为空间扩大,搜索空间变得越来越大,无法做到有效的搜索。因此,AMC提出使用连续的行为空间,以压缩率为action,则每个action: a∈[0,1],这种搜索空间可以得到更准确的压缩率。

DDPG Agent

图1为AMC算法的整体流程。强化学习的agent接收 层的状态 ,输出为该层可以达到的稀疏度 (action),根据稀疏度取压缩后的channel个数,使用通道裁枝方法对网络进行压缩。然后将下一层 输入到agent中,对下一层可以达到的稀疏度进行估计。在完成最后一层的压缩后,直接用压缩后的模型在验证集上测试,将测试准确率作为反馈,传给agent。

AMC使用DDPG策略控制输出的连续的压缩率。DDPG在训练过程中,需要兼顾2个方面:exploration与exploitation。Exploration是将我们在确定性函数得到的行为加入噪声,以达到探索潜在更优的action,而AMC中噪声分布采用截断的正态分布(truncated normal distribution)

在exploitation阶段,噪声σ初始化为0.5,之后每个episode都以指数减少。

根据Block-QNN【54】的方法,每个episode都是从状态 ,得到行为 ,以R为反馈回传给agent,在将状态转到 ,其中R是网络压缩后的奖励。在更新阶段,为了减少梯度估计的方差,使用如下的损失函数:

为防止短期奖励比重过大,折扣因子γ设定为1。

搜索策略

限制资源消耗的压缩策略

图2 对action的约束

通过限制action(即每层的稀疏度),我们可以准确得到目标压缩率,与工作【57,4,54】类似,AMC中强化学习中使用的奖励函数为:

然而这种奖励函数中缺少对模型大小的限制,因此AMC在计算目标压缩率时限制action的解空间(即行为空间)。例如,我们要以细精度裁枝压缩模型大小,在计算前几层卷积核稀疏度时,我们使用任意的行为解(action),之后当我们发现在对所有层以大压缩率裁枝,都无法满足资源限制时,我们开始对行为解(action)进行限制。图2为整个算法的流程,这个算法中并没有指定资源限制一定是模型大小,可以由其他限制代替:比如FLOPs,或者整个网络在移动设别上一次前传的时间。作者进行了一系列实验证明,尽管强化学习的agent没有关于资源限制的刺激(AMC是通过对action作限制,而在奖励函数中没有这种资源限制),它也可以准确地给出目标压缩率。

最优精度的压缩策略

通过改变奖励函数,我们可以找到没有精度损失条件是,对压缩率的限制。作者通过实验,观察到Error与log(FLOPs)或参数的个数成负相关,基于此,作者提出以下奖励函数:

上述奖励函数不仅对Error很敏感,同时包含了操作数(FLOPs)或模型大小(#Param)的刺激。作者通过实验,证明这种奖励函数可以自动找到在保证精度的条件下,压缩率的范围。

实验部分

待完善

代码解析

参考资料

  1. https://zhuanlan.zhihu.com/p/63299393

【论文笔记】AutoML for MCA on Mobile Devices——论文解读与代码解析的更多相关文章

  1. 【C语言学习笔记系列】C语言编程狼追兔子问题代码解析!

    问题描述 一只兔子躲进了10个环形分布的洞中的一个.狼在第一个洞中没有找到兔子,就隔一个洞,到第3个洞去找:也没有找到,就隔2个洞,到第6个洞去找:以后每次多一个洞去找兔子--这样下去,如果一直找不到 ...

  2. 《DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks》研读笔记

    <DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks>研读笔记 论文标题:DSLR-Quality ...

  3. 【论文笔记系列】AutoML:A Survey of State-of-the-art (下)

    [论文笔记系列]AutoML:A Survey of State-of-the-art (上) 上一篇文章介绍了Data preparation,Feature Engineering,Model S ...

  4. 【论文阅读】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

    ShuffleNet: An Extremely Efficient Convolutional Neural Network for MobileDevices

  5. 论文笔记系列-Neural Network Search :A Survey

    论文笔记系列-Neural Network Search :A Survey 论文 笔记 NAS automl survey review reinforcement learning Bayesia ...

  6. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)

    Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文, ...

  7. 论文笔记之:Visual Tracking with Fully Convolutional Networks

    论文笔记之:Visual Tracking with Fully Convolutional Networks ICCV 2015  CUHK 本文利用 FCN 来做跟踪问题,但开篇就提到并非将其看做 ...

  8. How to Run Node.js with Express on Mobile Devices

    We released a JXcore plugin for Apache Cordova recently and in this article I will show how to run a ...

  9. Deep Learning论文笔记之(八)Deep Learning最新综述

    Deep Learning论文笔记之(八)Deep Learning最新综述 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感觉看完 ...

随机推荐

  1. python sqlite3增加表字段

    给sqlite3表格增加新字段,要注意大小写,要不然不成功. 一开始这样写,不成功! 后面规范写,按大小写严格规范写! 成功了!现在查看新增加的字段commit: 仔细看,这下全部小写,括表名称.co ...

  2. 环境变量IFS

    环境变量IFS的值是由1个空格.1个制表符.1个换行符依序构成的字符串,也就是" \t\n"字符串. #查看IFS变量值的长度: test ~ # expr length &quo ...

  3. JMS监听Oracle AQ

    该文档中,oracle版本为11g,jdk版本1.8,java项目为maven构建的springboot项目,springboot的版本为2.1.6,并使用了定时任务来做AQ监听的重连功能,解决由于外 ...

  4. linux下的命令自动补齐增强

    linux 7 下 安装 bash-completion 可以实现命令的参数的自动补齐

  5. click的简单使用

    click的简单使用 先通过一个简单的例子来认知一下click把 import click @click.command() @click.option('-p', '--port', default ...

  6. 【转载】【GDB】GDB with Python

    作者:薛定谔的喵链接:https://zhuanlan.zhihu.com/p/152274203来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 你还在用GDB调试程序 ...

  7. 关闭(隐藏)VS2019控制台上文件路径的显示

    昨天有个朋友问我,怎么关闭在运行程序后,控制台上显示的文件路径啊?啥??我突然不知道他说的说什么,然后我就自己随便打了几行运行了一下,才知道原来他说的是这个: 一开始我也没在意,我就告诉他,这个无所谓 ...

  8. LOJ10144宠物收养所

    HNOI 2004 最近,阿 Q 开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,阿 Q 根据领养者的要求通过他自己发明的 ...

  9. 接口鉴权之sign签名校验与JWT验证

    需求描述: 项目里的几个Webapi接口需要进行鉴权,同接口可被小程序或网页调用,小程序里没有用户登录的概念,网页里有用户登录的概念,对于调用方来源是小程序的情况下进行放权,其他情况下需要有身份验证. ...

  10. Language Guide (proto3) | proto3 语言指南(三)默认值

    默认值 解析消息时,如果编码的消息不包含特定的单数元素,则解析对象中的相应字段将设置为该字段的默认值.这些默认值是特定于类型的: string:默认值为空字符串 bytes:默认值为空字节 boole ...