网络压缩之动态计算(dynamic computation)

news2024/11/13 9:34:27

        动态计算希望网络可以自由 地调整它需要的计算量。为什么期待网络可以自由地调整它需要的计算量呢? 因为有时候我 们可能同样的模型会想要跑在不同的设备上面,而不同的设备上面的计算资源是不太一样的。所以期待训练好一个网络以后,放到新的设备上面,不需要再重训练这个网络。因为这个训练 一个神奇的模型,这个神奇的模型本来就可以自由调整所需要的计算资源。计算资源少的时 候只需要少的计算资源,就可以计算。计算资源大的时候,它就可以充分利用充足的计算资源 来进行计算。那另外一个可能是就算是在同一个设备上面,也会需要不同的计算。举个例子, 假设手机非常有电,可能就会有比较多的计算资源。假设手机没电,可能就需要把计算资源 留着做其他的事情,网络可能可以分到的计算资源就比较少,所以就算是在同一个设备上面。 我们也希望一个网络可以根据现有的计算资源,比如说手机现在的电量还有多少来自由地调 整它对计算量的需求。

        假设我们是在同一台手机上,需要根据不同的情况做不同的因应,可能就需要训练 一大堆的网络。而手机上的储存空间有限,就是要减少计算量。但是如果我们需要训练 一大堆的网络,就需要一大堆的储存空间。这可能不是我们要的,其实期待可以做到一 个网络可以自由地调整其对计算资源的需求。

          怎么让网络自由地调整其对计算资源的需求呢?一个可能的方向是让网络自由地调整它 的深度。比如图像分类,如图1 所示,它就是输入一张图片,输出是图片分类的结果,可 以在这个层和层中间再加上一个额外的层。这个额外的层的工作是根据每一个隐藏层的输出 决定现在分类的结果。当计算资源比较充足的时候,可以让这张图片去跑过所有的层,得到最 终的分类结果。当计算资源不充足的时候,可以让网络决定它要在哪一个层自行做输出。比如 说计算资源比较不充足的时候,通过第一个层,就直接丢到这个额外的第1层,就得到最终 的结果了。怎么训练这样一个网络呢?其实概念比我们想像的还要简单,训练的时候都有标签 的数据。一般在训练的时候,只需要在意最后一层网络的输出,希望它的输出跟标准答案越接 近越好。但也可以让标准答案跟每一个额外层的输出越接近越好。把所有的输出跟标准答案 的距离通通加起来,把所有的输出跟标准答案的交叉熵通通加起来得到L。

 图1 动态深度

        再去最小化这个L,然后就结束了,这个训练方法是可以用的。确实可以用我刚才讲的训 练方法,就是每一层接出来做训练,然后把所有接出来的结果去跟标准答案算距离,最小化所 有接出来的结果跟标准答案的距离,确实可以用这个方法达到动态的深度,但是其实它不是 一个最好的方法。

        比较好的方法可以参考MSDNet(Multi-scale dense networks for resource efficient image classification[C]//ICLR. 2018.)。另外还可以让网络自由地决定它的宽度,怎么让网 络自由决定它的宽度。设定好几个不同的宽度,同一张图片丢进去。在训练的时候,同一张图 片丢进去,每个不同宽度的网络会有不同的输出。我们在希望每一个输出都跟正确答案越接 近越好就结束了,把所有的输出跟标准答案的距离加起来得到一个损失,最小化这个损失就 结束了。

        图2 中的三个网络并不是三个不同的网络,它们是同一个网络可以选择不同的宽度。相同颜色是同一个权重。只是在最左边情况的时候,整个网络所有的神经元都会被用到。但是 在中间情况的时候,可能会决定有25%的神经元不需要用。或者在最右边的情况,50%的神 经元不要用它。在训练的时候,就把所有的情况一起考虑,然后所有的情况都得到一个输出, 所有的输出都去跟标准答案计算距离,要让所有的距离都越小越好就结束了。但是实际上这 样训练也是有问题的。所以需要一些特别的想法来解决这个问题。

图 2 动态宽度 

        有关深度(depthwise)动态的宽度的网络,怎么训练这件事?大家可以参考论文“Slimmable Neural Networks” (Slimmable neural networks[C]//ICLR. 2019.)。那刚才讲的是可以训练一个网络,可以自由去决定它的深度跟宽度。但 是还需要我们去决定,今天电池电量少于多少的时候,就用多少层或者是多宽的网络。但是有 没有办法让网络自行决定,根据情况决定它的宽度或者是深度呢。

        因为有时候,就算是同样是图像分类的问题,图像的难易程度不同,有些图像可能 特别难,有些图像可能特别简单。对那些比较简单的图像,也许只要通过一层网络就已 经可以知道答案了,对于一些比较难的问题,需要多层网络才能知道答案。

        举例来说,如图3所示,同样是猫,但有只猫是被做成一个墨西哥卷饼,所以这是一 个特别困难的问题。也许这张图片只通过一个层的时候,网络会觉得它是一个卷饼;在通过第二个层的时候,还是一个卷饼。要通过很多个层的时候,网络才能够判断它是一只猫。这 种比较难的问题就不应该在中间停下来。可以让网络自己决定这是一张简单的图片,所以通 过第一层就停下来。这是一个比较困难的图片,要跑到最后一层才停下来。具体怎么做可参 考论文“SkipNet: Learning Dynamic Routing in Convolutional Networks”(Skipnet: Learning dynamic routing in convolutional networks[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 409-424.)、Runtime Neural Pruning(Runtime neural pruning[J]. Advances in neural information processing systems, 2017, 30) 和“BlockDrop: Dynamic Inference Paths in Residual Networks”(Blockdrop: Dynamic inference paths in residual networks[C]//Proceedings of the IEEE conference on computer vision and pat tern recognition. 2018: 8817-8826)。

图3  计算量取决于采样难度

        所以像这种方法不一定限制在计算资源比较有限的情况。有时候就算计算资源比较很充 足,但是对一些简单的图片,如果可以用比较少的层,得到需要的结果,其实也就够了,这样 就可以省下一些计算资源去做其他的事情。

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

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

相关文章

Python编程基础知识,让编程基础更加扎实(输出个人简介)

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

考研--数学(相关公式)

解析几何 知识点1 A(x1,y1) B(x2,y2) 则AB长度 |AB| A、B中点的坐标 (,) 知识点2 方程求解 ①点斜式: y-y0k(x0-x) ②斜率式: ykxb ③两点式: …

【笔记篇】Davinci Configurator CanNm模块

目录 1 简介1.1 架构概览2 功能描述2.1 特性2.2 初始化2.3 状态机2.3.1 网络模式2.3.1.1 重复报文状态2.3.1.2 正常状态2.3.1.3 准备休眠状态2.3.2 预休眠模式2.3.3 总线休眠模式2.4 被动模式(对于被动节点)2.5 NM报文格式2.6 NM报文发送2.6.1 重试第一次报文请求2.7 降低总线…

集成电路学习:什么是I2C内部集成电路总线

I2C:内部集成电路总线 I2C,全称Inter-Integrated Circuit,即内部集成电路总线,是由飞利浦公司(现为恩智浦半导体)在上世纪八十年代初开发的一种同步的串行通信总线。它以其接线简单、硬件实现容易、可扩展性…

Mysql8利用binlog实现数据恢复

文章目录 1binlog基本概念2 binlog相关常用命令3 binlog工具mysqlbinlog4 测试数据准备&导入数据5 模拟误删表6 数据恢复方式说明7 数据恢复分析(偏移量方式恢复)8 数据恢复9 验证10 数据恢复的局限性11 总结 1binlog基本概念 binlog即binary log,二进制日志文件…

【React原理 - 任务调度之中断恢复】

概览 本文紧接上文介绍React调度的时间分片中任务中断和恢复,由于篇幅过长,所以拆成了两篇。上文主要介绍了调度器中的优先级和调度任务的触发、注册和调度循环。本文主要从任务调度入手介绍调度任务之后发送了什么,即在协调器中如何进行到f…

【matlab】数组操作:寻找最大值和最小值及其位置ind2sub函数

【matlab】数组操作:寻找最大值和最小值及其位置ind2sub函数 本文将介绍如何在MATLAB环境中使用内置函数来创建数组,以及如何找到数组中的最大值和最小值及其对应的位置。通过示例代码,我们将一步步展示这一过程,帮助读者更好地理…

探索Python的测试之道:unittest库的奥秘

文章目录 探索Python的测试之道:unittest库的奥秘背景:为何选择unittest?什么是unittest库?如何安装unittest库?简单库函数使用方法场景应用场景一:测试数学运算场景二:测试异常处理场景三&…

armv8 memory model概述

概述 在armv8 架构中,它引入了更多的维度来描述内存模型,从而在此基础上进行硬件优化(但其中一些并未被主流的软件所接受),在此做一些简单的整理,更多信息请参考 Arm spec 以及 AMBA 协议。下文主要是对Memory 和 Device 两大类的…

Python 算法交易实验86 QTV200日常推进-获取A股日交易额并统计

说明 上一篇说到,交易量可能可以作为策略规则的支持度分析,但是(我现在还不想付费买数据)现成的接口似乎并没有这样的统计。获取某一只股票的日交易数据是相对简单的,市场上也就不到5000只的股票,总数据量应该也不会超过18M(5000…

面向整个价值链的高可信度卫星测试解决方案

在动态行业格局中增强卫星任务能力 在罗德与施瓦茨,我们利用专业知识和量身定制的测试和测量解决方案为卫星行业提供支持。这包括帮助行业参与者满足完整测试路径的要求,以实现完美的系统性能,确保符合最新技术和标准。此外,我们…

2024年8月文章一览

2024年8月编程人总共更新了3篇文章: 1.2024年7月文章一览 2.《Programming from the Ground Up》阅读笔记:p95-p102 3.《Programming from the Ground Up》阅读笔记:p103-p116 8月,对自己而言是糟糕的一个月,两个项…

4-8 进入C语言,并跳转到loarder(1)

1 总体的逻辑。 从这里开始 写 loader 代码了。 1 首先是 从汇编跳转到 C原因呢, 2 然后是 , 再源码中新建新的loader 目录。 3 一直跳转到 loader 目录的C语言函数里面, 做循环操作。 2 代码: 首先 是从 start.s 跳转到 boot…

论文阅读:MicroNet: Towards Image Recognition with Extremely Low FLOPs

论文地址:https://arxiv.org/pdf/2011.12289 发表时间:2022 项目地址:https://github.com/liyunsheng13/micronet MicroNet是一种有效的卷积神经网络,使用极低的计算成本(例如,在ImageNet分类上的6M FLOPs…

基于STM32的无线语音放大系统设计

本设计基于STM32设计了一种无线语音放大系统。该系统由语音采集模块、STM32核心控制模块、NRF24L01无线通信模块和语音放大模块组成。语音采集模块承担着对采集到的语音信号进行预处理的任务。STM32单片机负责控制整个系统的运行过程,包括数据处理、发送端的模数转换…

华为云征文|华为云Flexus X实例ultralytics模型yolov10深度学习AI部署与应用

目录 前言: 环境准备 购买服务器配置 连接服务器 安装Python 安装Pytorch 部署YOLOv10 拉取YOLOv10代码并安装相关依赖 数据集准备 Detect目标检测模型训练 训练数据集的配置文件 训练命令 识别命令 前言: 本实验演示从0到1部署YOLOv10深度…

tecplot宏批量导入数据

Tecplot新手进阶——使用tecplot宏操作批量处理数据输出图片(详细步骤) tecplot 宏的使用方法及代码改写 第一步:首先点击Scripting–>Record Macro,生成一个脚本文件,即.mcr文件 点击保存,会出现这个…

Activity的优雅跳转

需求1:跳转到下一个界面:NextActivity startActivity(Intent(this,NextActivity::class.java))需求2:跳转到下一个界面(并传参数):NextActivity startActivity(Intent(this,NextActivity::class.java).apply { putExtra("pa…

Vulnhub靶场 | DC系列 - DC9

文章目录 DC-9环境搭建渗透测试端口敲门服务 DC-9 环境搭建 靶机镜像下载地址:https://vulnhub.com/entry/dc-6,315/需要将靶机和 kali 攻击机放在同一个局域网里;本实验kali 的 IP 地址:192.168.10.146。 渗透测试 使用 nmap 扫描 192.1…