HAQ:硬件感知自动化量化框架

本文出自论文 HAQ: Hardware-Aware Automated Quantization with Mixed Precision,利用强化学习来自动确定量化策略,并在设计过程中对硬件加速器进行反馈。



一、简介

  1. 传统的量化方法对所有层使用相同的比特数,但是当不同的层有着不同的冗余且在硬件平台上表现有差异性时,对不同的层使用灵活的位宽是很有必要的。然而目前所缺少的部分是如何确定不同硬件加速器上每层的权重和激活的位宽。随着神经网络越来越深,搜索空间也呈指数级增长,只依赖手工策略是不可行的。因此,这些基于规则的量化策略通常是次优的,它们不能从一个模型推广到另一个模型。在本文中,我们想要通过一个基于学习的框架来自动化这个探索过程。
  2. 另一个较大的挑战是如何衡量在硬件上被给定模型的延迟和能耗,一个广泛被接受的方案是依赖一些代理信号(FLOPs,内存引用数)。然而,当不同的硬件表现得非常不同时,在该硬件上一个模型的性能不可能总是精确地被代理信号所影响。另外,在一个硬件上的最优策略并不一定是另一硬件的最优策略。
  3. 我们提出来硬件感知自动化量化(HAQ)框架,它利用强化学习来自动预测给定硬件反馈的量化策略。RL代理方以分层的方式决定给定神经网络的带宽。对于每层,代理方接收到层配置和统计信息作为观察,然后输出动作行为即权值和激活的位宽。我们然后利用硬件加速器作为环境来获取硬件的直接反馈,以指导RL代理方满足资源约束。在所有层被量化过后,我们对量化模型进行了几个周期的微调,并将短期重训练后的验证精度作为对RL代理方的奖励信号。在探索过程中,我们利用深度确定性策略梯度(DDPG)来监督我们的RL代理方。
  4. 本文主要由4个方面组成:(1)自动化(2)硬件感知(3)特殊化(4)设计见解(提供了对神经网络架构设计和硬件架构设计的见解)。
    模型比较

二、相关工作

  1. 量化:传统的量化方法要么简单地将相同数量的比特分配给所有层,要么需要领域专家来确定不同层的比特宽度,而我们的框架将这个设计过程自动化,并且我们基于学习的策略由于基于规则的策略。
  2. AutoML:在自动框架的激励下,He等人利用强化学习来自动修建卷积通道。我们的框架进一步探索了网络权重和激活的自动量化,并且它将硬件架构也考虑入内。
  3. 效率模型:为了便于高效部署,研究者设计了一种硬件友好型的方法来精简神经网络模型。例如,使用粗粒度通道剪枝方法来对卷积核的整个通道进行剪枝来达到加速的目的。Yang等人提出了一种直接优化神经网络消耗的能量感知剪枝方法。然而,这些方法仍然是基于规则的,并且大部分集中于剪枝上。我们的框架使用基于学习的方法,将硬件特定的度量作为直接奖励,从而自动化量化过程。
    框架描述

三、方法

  1. HAQ框架:我们利用强化学习在循环中自动化搜索庞大的量化设计空间与硬件。代理方在给定计算资源数量下提出了一个最佳的位宽分配策略。我们的RL代理方将硬件加速器集成到探测回路中,从而它能够从硬件中获得直接的反馈,而不是依赖于间接的代理信号。
  2. 观察(状态空间):我们的代理以分层的方式处理神经网络。对于每层,我们的代理方采取两个步骤:一个用于权重,一个用于激活。在本文中,我们引入了一个十维特征向量作为我们的观测。对于观测向量中每个维数,我们将其标准化为[0,1],来使它们在相同的规模内。
  3. 动作空间:我们使用一个连续的动作空间来决定位宽。我们不使用离散动作空间的原因是因为其失去了相对的顺序。我们鼓励agent通过限制动作空间来满足计算预算。在RL代理为所有层提供动作后,我们度量被量化模型所使用的资源量,反馈直接来自于硬件加速器。
  4. 来自硬件加速器的直接反馈:我们使用来自硬件加速器的直接延迟和能量反馈来优化性能,这使我们的RL代理能够从不同层之间的细微差别来确定位宽分配策略。
  5. 量化:由于线性量化模型只需要一个有效的固定点算术单元,因为我们使用代理给出的动作来对每一层的权重和激活进行线性量化。在本文中,我们通过寻找在原始权值分布和量化权值分布中最小化KL散度的最优质x来选择c值。
    a r g m i n x D K L ( W k ∣ ∣ q u a n t i z e
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 利用MATLAB来从四种三维Archimedean Copula函数中选取最优的三维copula函数,可以使用下面的代码: [U,V,W] = copulafit('t',[x1,y1,z1;x2,y2,z2;...;xn,yn,zn]); 其中,xi,yi,zi是观察值,U,V,W是Archimedean Copula函数的参数。 ### 回答2: 要从四种三维Archimedean Copula函数中选取最优的三维Copula函数,可以使用MATLAB编写代码。以下是用于实现此任务的一种可能方法: ```MATLAB clear all; close all; clc; % 生成模拟数据 n = 1000; % 样本数 u1 = rand(n, 1); % 第一个随机变量的样本 u2 = rand(n, 1); % 第二个随机变量的样本 u3 = rand(n, 1); % 第三个随机变量的样本 % 初始化模型评估指标 bestCopula = []; % 最优Copula函数 bestAIC = Inf; % 最小AIC值 % 遍历四种Archimedean Copula函数 archimedeanFamilies = {'Clayton', 'Frank', 'Gumbel', 'Ali-Mikhail-Haq'}; for i = 1:length(archimedeanFamilies) family = archimedeanFamilies{i}; % 拟合Copula函数 copula = fitcopula([u1, u2, u3], family); % 计算AIC值 [tCopula, ~] = kde([copula(u1, u2, u3)]); % 使用核密度估计做极大似然估计 logL = sum(log(pdf(tCopula, [u1, u2, u3]))); % 计算模型的对数似然估计 numParams = copulafitParamsNum(family); % 获取Copula模型的参数数量 aic = -2 * logL + 2 * numParams; % 计算AIC值 % 更新最优Copula函数和AIC值 if aic < bestAIC bestCopula = copula; bestAIC = aic; end end % 输出结果 disp('最优Copula函数:'); disp(bestCopula); disp('最小AIC值:'); disp(bestAIC); ``` 这段代码中首先生成了三个随机变量的样本数据u1、u2和u3。然后,通过遍历四种Archimedean Copula函数(Clayton、Frank、Gumbel和Ali-Mikhail-Haq),利用`fitcopula`函数拟合Copula函数。接着,使用核密度估计对模型进行极大似然估计,计算对数似然估计值和AIC值。最后,比较四种Copula函数的AIC值,选取AIC值最小的Copula函数作为最优Copula函数。这个最优Copula函数和相应的最小AIC值将在代码的最后输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值