深度神经网络量化算法基础理论

news2024/9/21 20:55:21

关于量化,之前的博客中首先从第一个将量化思想应用在神经网络模型上的工作开始介绍,随后阐述了量化领域的极端情况,即二值化与三值化,并指出尽管目前已经存在多种对二值网络的优化方法,但是显然因极端量化带来的严重精度损失使得这类量化模型无法满足实际场景中的需求。参考之前博客中的量化分级,本文将主要关注Level3的量化方法,即通过在训练过程中模拟量化,来尽可能地降低由量化带来的精度损失,其属于量化感知训练一类,本小节将介绍的即为量化感知训练方法的一些基础理论。

根据量化间隔是否相等,可将量化方法分为均匀量化与非均匀量化,例如对数量化即为典型的非均匀量化方法,但目前该基于非均匀量化的部署还较难在现有硬件上实现,因此本研究主要关注均匀量化。

在均匀量化中,从量化参数中是否包含零点(Zero Point ,简写为zp )可分为非对称量化与对称量化。为便于理解,下面将通过[67][158]中的量化方案来阐述相关概念,其中非对称量化的计算如式2.6中所示。

 式2.6为量化计算过程,其中的s 为缩放因子,代表量化步长,zp 为零点,代表的是浮点数中的0经量化后的整数值,b 是设置的量化位宽,clip( ) 为截断函数, 代表舍入函数,为传统的向最接近值舍入方式。式2.7中则为反量化过程,用于在量化感知训练过程中来接近原始值。上述两式中涉及到两个量化参数szp ,在量化感知训练过程中,这两个参数的初始化与更新均通过式2.8与式2.9完成。

 上述两式中,xmaxxmin 分别表示原浮点值中的最大值与最小值,qmax 则为量化后的最大值。均匀对称量化则是在式2.6与式2.7的基础上删去零点即可,如式2.10与2.11中所示。

其量化参数s 的初始化与更新则与式2.8中相同。最后从量化粒度的角度,可将量化分为逐通道量化与逐层量化,例如在卷积层中,同一层的每个卷积核(Filter)拥有独立的量化参数则为逐通道量化,若每个卷积核共享同一组量化参数,则为逐层量化。一般来说,量化粒度越细,则量化造成的精度损失越低,但是更细的量化粒度,往往会造成更多的冗余计算,因此需要根据实际的参数分布以及硬件情况来选择量化粒度。

最后来关注一下如何通过量化将原本的浮点运算全部转为定点运算过程。鉴于卷积神经网络的运算本质上是由大量矩阵运算完成,此处不妨以两个矩阵的运算来做实例。首先假设两个大小为N×N 的矩阵r1r2r1r2 矩阵相乘后得到r3 ,计算如式2.12。

 采用最一般的量化方式,即式2.6中的非对称量化,不妨假设r1 矩阵的量化参数分别为s1zp1r2r3 的量化参数同理设置,可得式2.7。

 观察式2.14不难发现,除了s1s2/s3 为浮点数,其他运算均为定点数运算,因此此时只需将s1s2/s3 转为定点运算即可。参考[67]中的解决方法,不妨假设M=s1s2/s3 ,通过大量的实验发现,M 的值域通常为(0,1) ,鉴于此,可将其表示为M=2-nM0 ,其中的M0 值域为[0.5,1) ,n转为非负整数。此时,M0 可根据硬件情况表示为一个INT16或INT32的定点乘数,此处不妨假设为INT32,则表示M0 的整数此时是最接近2^31*M0 的INT32整型值,同时由于M0>0.5 ,所以这个值至少为2^30 ,即表明其至少有30位的相对精度,综上,与M0 的乘法运算可通过定点数乘法来完成,而2^-n 则可通过简单的移位来完成。同时鉴于s1s2/s3 中涉及到的量化参数在量化完成后均已知,所以可提前完成s1s2/s3 的近似转换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/733237.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Day45|70. 爬楼梯 (进阶)、 322. 零钱兑换 、279.完全平方数

70. 爬楼梯 (进阶) 1.题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:…

算法与数据结构(一)--算法复杂性

一.算法复杂性的概念 算法的复杂性是指运行算法所需要的计算机资源的量。需要的时间资源的量称为时间复杂性,需要的空间资源的量称为空间复杂性。 这个量应该集中反映算法的效率,而从运行该算法的实际计算机中抽象出来。换句话说,这个量应该…

[物理层]信道的极限容量

信道的极限容量 信号在传输过程中会受到各种因素的影响,会造成信号失真。 失真的因素: 码元传输速率信号传输距离噪声干扰传输媒体质量 因此,怎么提高信息的传输速率? 奈氏准则 [ 香农公式 提高信道的传输速率: …

【C语言初阶(12)】数组(超详解)

文章目录 前言1. 一维数组1.1 一维数组的创建1.2 一维数组的初始化1.3 一维数组的访问1.4 一维数组在内存中的存储 2. 二维数组2.1 二位数组的创建2.2 二维数组的初始化2.3 二维数组的访问 3. 数组越界4. 数组作为函数参数4.1 冒泡排序介绍4.2 冒泡排序函数的设计 5. 数组名6. …

短视频矩阵管理系统私信群聊功能源码开发分享

短视频获客工具的兴起,也有越来越多的企业及商家在发现了更多商机。除了在做短视频推广获客的同时,也有不少意向客户潜藏在评论区需要我们深度挖掘,那么对于一些流量比较高的账号,想在成千上万的评论区里挖掘意向客户,…

C#一个开源跨平台的 HTTP 客户端库——RestSharp

一、RestSharp简介 GitHub - restsharp/RestSharp: Simple REST and HTTP API Client for .NETSimple REST and HTTP API Client for .NET. Contribute to restsharp/RestSharp development by creating an account on GitHub.https://github.com/restsharp/RestSharp …

SpringBoot实战(十九)集成Ribbon

目录 一、负载均衡的分类1.服务端负载均衡2.客户端负载均衡 二、定义和依赖1.Ribbon2.Spring Cloud Ribbon3.Spring Cloud Loadbalancer 三、搭建测试项目1.Maven依赖2.yaml配置3.配置类4.启动类5.接口类 四、测试五、补充:认识 Ribbon 的组件 一、负载均衡的分类 …

knife4j实现微服务swagger文档聚合

使用knife4j实现分布式swagger文档聚合 在项目开发过程中,接口文档的使用是在所难免的,但是在微服务场景下,多个服务之间的swagger是分散的,虽然swagger提供了微服务的聚合方式,配置过于繁琐,加之swagger本身的功能比较少,而且ui布局也比较蛋痛,此处推荐一款新框架用于增强swa…

RestTemplate中exchange发起请求

RestTemplate中exchange简单使用 简介什么是RestTemplate 常用方法实战 简介 在项目中,我们可能需要发起HTTP请求,请求目标URL来获取响应数据做一些处理。就需要用到HTTP请求工具,常用的Java类工具有:HttpUrlConnection、Apache …

[TIFS 2023] 用增强压缩感知做安全模型对比联邦学习

Secure Model-Contrastive Federated Learning With Improved Compressive Sensing | IEEE Journals & Magazine | IEEE Xplore摘要: 联邦学习(FL)已广泛应用于金融风险控制、电子政务、智慧医疗等各个领域。为了保护数据隐私&#xff0…

Leetcode每日一题:167. 两数之和 II - 输入有序数组(2023.7.8 C++)

目录 167. 两数之和 II - 输入有序数组 题目描述: 实现代码与解析: 暴力(超时) 双指针 原理思路: 二分 原理思路: 167. 两数之和 II - 输入有序数组 题目描述: 给你一个下标从 1 开始的…

MySQL性能瓶颈定位慢查询

目录 1 性能优化的思路2 引言3 MySQL慢查询日志3.1 慢查询参数3.2 开启慢查询日志(临时)3.3 开启慢查询日志(永久)3.4 慢查询测试 4 MySQL性能分析 EXPLAIN4.1 概述4.2 EXPLAIN字段介绍4.2.1 id字段4.2.2 select_type 与 table字段…

Leetcode-每日一题【21.合并两个有序链表】

题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4]输出:[1,1,2,3,4,4] 示例 2: 输入:l1 [], l2 []输出:…

1.Git使用技巧-常用命令1

Git使用技巧-常用命令 文章目录 Git使用技巧-常用命令一、git 创建仓库demo 二、本地仓库常用命令提交详解git commitgit commit --amend 三、 推送到远程分支git push 总结参考 一、git 创建仓库 创建远端仓库: git init – bare // 创建远端裸仓库; 远…

【华为机试】HJ16 购物单详解+完整源代码示例

从毕业到入职,忙于各种事情,所以博客一直也没有空更新。从入职到现在差不多整三个月了,刚刚在比亚迪这边转正。目前干的工作涉及到开发的工作不是很多,但是又怕之前的技能荒废了。所以最近有个想法,再把C算法和数据结构…

Android Zygote 启动流程

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: Android系统包含netd、servicemanager、surfaceflinger、zygote、media、installd、bootanimation 等基本服务,具体作用请看下图。 Android…

English Learning - L3 作业打卡 Lesson8 Day60 2023.7.5 周三

English Learning - L3 作业打卡 Lesson8 Day60 2023.7.5 周三 引言Part 1 总结🍉句1: 11 years ago, when I lost my legs, I had no idea what to expect.成分划分连读爆破语调 🍉句2: But if you ask me today, if I would ever want to change my si…

java+Mysql 图书管理系统(idea)

目录 前言 部分界面截图 登录界面 注册界面 图书管理界面 关于我们界面 部分代码 登录界面 数据库工具类 前言 jdk 版本:openjdk version "11.0.12" MySql版本:5.7.40 加(vx:lixuanzi0521)帮调试 …

递推--Fibonacci数列 II

描述 众所周知,Fibonacci数列是一个著名数列。它的定义是: 本题要求采用第二种方法:递推。 输入描述 每行一个整数 i ,表示 Fibonacci 数列的第i项。 i ≤ 100000 对比前一题,本题的数据规模是 十万 ! …

css基础知识十九:让Chrome支持小于12px 的文字方式有哪些?区别?

一、背景 Chrome 中文版浏览器会默认设定页面的最小字号是12px,英文版没有限制 原由 Chrome 团队认为汉字小于12px就会增加识别难度 中文版浏览器 与网页语言无关,取决于用户在Chrome的设置里(chrome://settings/languages)把…