神经网络的量化

news2025/1/10 10:56:50

tinyML 的主要挑战是如何采用相对较大的神经网络(有时约为数百兆字节),并使其适合并在资源受限的微控制器上运行,同时保持最小的功耗预算。 为此,最有效的技术称为量化(quantization)。

在这里插入图片描述

推荐:用 NSDT设计器 快速搭建可编程3D场景。

1、小型机器学习神经网络的内存约束

在理解量化之前,有必要讨论一下为什么神经网络通常会占用如此多的内存。

神经网络由一系列层中的一系列互连神经元组成。 如图 1 所示,标准神经网络由互连的神经元层组成,每个神经元都有自己的权重、偏差和与其关联的激活函数。

在这里插入图片描述

这些权重和偏差通常称为神经网络的“参数”。

每个神经元也有自己的“激活”,这个数字决定了该神经元的活跃程度。 神经元的激活基于其权重和偏差值以及所使用的激活函数。

权重和偏差是在训练期间进行调整的参数,并且通过扩展,神经元的激活也是如此。

这些值、权重、偏差和激活是神经网络物理存储在内存中的大部分内容。 标准是将这些数字表示为 32 位浮点值,这样可以实现高精度,并最终提高神经网络的准确性。

这种准确性就是神经网络往往占用大量内存的原因。 对于具有数百万个参数和激活的网络(每个参数和激活都存储为 32 位值),内存使用量会迅速增加。

例如,50 层 ResNet 架构包含大约 2600 万个权重和 1600 万个激活。 通过使用 32 位浮点值来表示权重和激活,整个架构将需要 168 MB 的存储空间。

2、什么是神经网络的量化?

量化是降低权重、偏差和激活精度的过程,从而消耗更少的内存。

换句话说,量化的过程就将神经网络参数的32位浮点数表示,转换为更小的表示形式,例如8位整数。

例如,从 32 位变为 8 位将使模型大小减少 4 倍,因此量化的一个明显好处是显着减少内存。

图 2 显示了一个示例。

在这里插入图片描述

量化的另一个好处是它可以降低网络延迟并提高能效。

由于可以使用整数而不是浮点数据类型执行操作,因此网络速度得到了提高。 这些整数运算在大多数处理器内核(包括微控制器)上需要较少的计算。

总体而言,由于计算量减少和内存访问减少,功率效率得到了提高。

尽管有这些好处,但量化的代价是神经网络可能会失去准确性,因为它们不能精确地表示信息。 然而,根据损失的精度、网络架构和网络训练/量化方案,量化通常会导致非常小的精度损失,特别是在权衡延迟、内存使用方面的改进时 和功率。

3、如何量化机器学习模型

在实践中,有两种主要的量化方法:

  • 训练后量化
  • 量化感知的训练

顾名思义,训练后量化是一种神经网络完全使用浮点计算进行训练,然后进行量化的技术。

为此,一旦训练结束,神经网络就会被冻结,这意味着它的参数不能再更新,然后参数就会被量化。 量化模型最终被部署并用于执行推理,而无需对训练后参数进行任何更改。

虽然这种方法很简单,但它可能会导致更高的精度损失,因为所有与量化相关的误差都是在训练完成后发生的,因此无法补偿。

量化感知的训练(如图 3 所示)通过在训练期间使用前向传递中的量化版本来训练神经网络来补偿与量化相关的误差。
在这里插入图片描述

思路是与量化相关的误差将在训练期间累积在模型的总损失中,训练优化器将相应地调整参数并减少总体误差。

量化感知的训练的优点是比训练后量化损失低得多。

如需对量化背后的数学进行更深入的技术讨论,建议阅读 Gholami 等人的这篇论文。

4、TinyML 的量化

对于 TinyML 来说,量化是一个非常宝贵的工具,是整个领域的核心。

总而言之,量化是必要的,主要原因有以下三个:

  • 量化显着减小了模型大小,这使得在微控制器等内存受限设备上运行机器学习变得更加可行。
  • 量化允许 ML 模型运行,同时需要较少的处理能力 - TinyML 中使用的 MCU 往往具有比标准 CPU 或 GPU 更低的性能处理单元。
  • 量化可以降低功耗——TinyML 的最初目标是以低于 1mW 的功率预算执行 ML 任务。 这对于在由纽扣电池等小型电池供电的设备上部署机器学习是必要的。

原文链接:神经网络的量化 — BimAnt

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

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

相关文章

1.5 为x64dbg编写插件

任何一个成熟的软件都会具有可扩展性,可扩展性是现代软件的一个重要特征,因为它使软件更易于维护和适应变化的需求,x64dbg也不例外其可通过开发插件的方式扩展其自身功能,x64dbg提供了多种插件接口,包括脚本插件、DLL插…

基于深度学习的高精度鸡蛋检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度鸡蛋检测识别系统可用于日常生活中或野外来检测与定位鸡蛋目标,利用深度学习算法可实现图片、视频、摄像头等方式的鸡蛋目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

水星U3相机在Halcon里面不能使用GenICamTL库采集解决方案

在halcon里面使用采集助手,U3相机不能使用GenICamTL库实时采集。 (首先确保已经安装好水星相机驱动,如果没有安装,GenICamTL库会找不到) 查看电脑的系统环境变量,打开对应电脑位数的值。 只留下大恒水星相…

ESP32(MicroPython) TFT LCD多功能显示(RTC+DHT22)

本程序内容与之前的类似,传感器换成DHT22,测量温湿度更符合日常使用的需要。逻辑上的一项改动是测量的温度和湿度值统一保留一位小数。 代码如下 from ili934xnew import ILI9341, color565 from machine import Pin, SPI import m5stack import tt14 …

【Redis】五大数据类型

🎯Redis 数据类型 💭Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及zset(sorted set有序集合)。 📝String(字符串) Redis的String类型是一种最基本的数据类型&…

基于OIDC的SSO单点登录

文章目录 什么是SSO(Single Sign On)单点登录OIDC(Open ID Connect)SSO服务授权流程(OIDC)授权模式授权码模式授权码模式授权流程请求授权码过程 授权模式对比总结 什么是SSO(Single Sign On&am…

Navicat 备份和恢复MongoDB库的数据

1、前期准备 (1) 有数据的MongoDB数据库old_db、空数据库new_db (2) 准备好MongoDB Tools 前往页面:https://www.mongodb.com/try/download/database-tools 选择所需版本下载并解压到自己想要的目录中: 2、将数据库old_db中的数据备份导出 (1) 对old_db…

多国卫星遥感领域工作人员和专家莅临大势智慧考察交流

7月4日下午,商务部卫星主题研修班(后简称“卫星研修班”)20余名来自多个国家的卫星遥感相关领域的工作人员和专家莅临武汉大势智慧有限公司(后简称“大势智慧”)参观考察、交流学习。大势智慧黄先锋博士陪同考察并作交…

学生用的台灯有什么讲究吗?盘点暑假适合写作业的台灯

如今青少年近视的比例越来越大,而且年龄越来越提前了,前不久经过一个小学看到二三年级就已经有孩子开始近视佩戴眼镜。其实造成近视的原因不全是读写作业时的坐姿不标准、学习时间过长、缺少户外的运动等,也包括可能灯光光源的问题造成对于视…

使用QTreeView显示指定目录中的文件,并自定义Header

这次研究了QTreeView的用法,于是想使用QTreeView显示制定目录下的所有子目录和文件。过程中,遇到了几个问题,在此记录一下同时分享给大家,如有不妥之处,还请批评指正: 设置根目录后,仍然会展示…

thinkphp系列vulhub所有漏洞复现ThinkPHP 2.x 任意代码执行漏洞,ThinkPHP5 5.0.22/5.1.29 远程代码执行漏洞

ThinkPHP 2.x 任意代码执行漏洞 漏洞详情: hinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由: $res preg_replace((\w).$depr.([^.$depr.\/])e, $var[\\\1\]"\\2";, implode($depr,$paths));导致用户的输入参数被插入双引号…

力扣 90. 子集 II

题目来源:https://leetcode.cn/problems/subsets-ii/description/ C题解1:由于解集不能包含重复的子集,所以我们先对nums进行排序, 以便后续去重。 采用递归回溯法,对每个子集都即使保存,在完成第一次子集…

一文晓得SaaS、IaaS和 PaaS 是什么,三者的区别是?

接下来我们直接直奔主题 首先,概念走起。 IaaS:基础设施服务, Infrastructure-as-a-service PaaS:平台服务,Platform-as-a-service SaaS:软件服务,Software-as-a-service IaaS 基础设施即服…

【C++】C++11的新特性

文章目录 1. C11简介2. 统一的列表初始化2.1 {}统一初始化2.2 std::initializer_list 3. 声明的新方式和范围for循环3.1 decltype3.2 auto&nullptr&范围for循环 4. STL的变化4.1 新容器4.2 新接口 1. C11简介 ​ 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1…

Java并发编程面试题

一、线程、进程、程序 进程: 我们把运行中的程序叫做进程,每个进程都会占用内存与CPU资源,进程与进程之间互相独立. 线程: 线程就是进程中的一个执行单元,负责当前进程中程序的执行。一个进程可以包含多个线程。多线程可以提高程序的并行运…

Stable Diffusion 常用主流checkpoint模型

AbyssOrangeMix2 https://civitai.com/models/4437/abyssorangemix2-sfwsoft-nsfw dosmix https://civitai.com/models/6250/dosmix Counterfeit-V3.0 https://civitai.com/models/4468/counterfeit-v30 万象熔炉 | Anything V5/Ink QteaMix 通用Q版模型 https://civitai.c…

Spring Boot 中的监控及使用

Spring Boot 中的监控及使用 Spring Boot 是一个非常流行的 Java 应用程序开发框架,它提供了一种快速构建应用程序的方法。除此之外,Spring Boot 还提供了一系列的监控功能,方便开发人员对应用程序进行监控和管理。本文将讨论 Spring Boot 中…

MachineLearningWu_第1+2章_SupervisedLearningUnsupervisedLearning

x.1 笔记 常见Supervised Learning的app,会有input和label 线性拟合做回归, 分类问题如下,当单个输入但是多个类别信息时可以简化为单轴向, 当分类问题是多输入时,可以简化为特征空间如下, *无监督算法的核…

SiLM27624系列 双通道30V, 5A/5A高速低边门极驱动器介绍

在开关电源系统中,需要利用门极驱动器来有效地驱动功率器件,实现功率器件的快速开关,以减少开关功率损耗、提高系统效率。在 GaN 等新兴的宽带隙功率器件技术中,需要快速的传输延时、精准的延迟匹配、极强的驱动能力以满足系统中高…

移动隔断地板无轨道,只需将轨道安装于天花板上

移动隔断地板无轨道设计可以提供更加灵活的空间划分和布局选择。相较于传统的固定轨道系统,只需将轨道安装在天花板上,就能实现移动隔断的收放和推动。这种设计可以避免地板上的轨道对于日常活动和清洁的干扰,并且减少了地板安装的复杂性。 在…