网络压缩之稀疏模型设计

news2024/9/21 18:47:49

        通过网络架构的设计来达到减少参数量的效果。等一下 要跟大家介绍深度可分离卷积(depthwise separable convolution)。在讲这个方法之前,先复 习一下CNN。在 CNN 的这种卷积层里面,每一个层的输入是一个特征映射。如图1 所 示,在这个例子里面,特征映射有两个通道,每一个滤波器的高度是2,而且这个滤波器并不 是一个长方形,而是一个立方体,通道有多少,的滤波器就得有多厚。再把这个滤波器扫过这 个特征映射,就会得到另外一个正方形。我们有几个滤波器,输出特征映射就有几个通道。这 边有4个滤波器,每一个滤波器都是立方体,输出特征映射就有4个通道。总共有4个滤波 器,每一个滤波器的参数量是3×3×2,要注意一下每一个滤波器,其实立方体总共的参数 量是3×3×2×4=72个参数。

图1  标准卷积

        接下来介绍下深度可分离卷积。深度可分离卷积分成两个步骤,第一个步骤称为深度卷 积(depthwise convolution)。如图 2所示,深度卷积要做的事情是有几个通道,我们就有 几个滤波器,每一个滤波器只管一个通道。举例来说,假设输入特征映射是两个通道,在深度 的卷积层里面,只放两个滤波器。不像之前在一般的卷积层里面,滤波器的数量跟通道的数量 是无关的。图17.9 中的通道只有两个,但滤波器可以有四个。但在深度卷积里面滤波器数量 与通道数量相同,每一个滤波器就只负责一个通道而已。假设浅蓝色的滤波器管第一个通道, 浅蓝色的滤波器在第一个通道上面滑过去,就算出一个特征映射。深蓝色的滤波器管第二个 通道,它就在第二个通道上面做卷积,也得到另外一个特征映射。因此在深度卷积里面,输入有几个通道,输出的通道的数量会是一模一样的,这个跟一般的卷积层不一样。一般的卷积层 里面,输入跟输出的通道数量可以不一样,但在深度卷积里面,输入跟输出的通道数量是一模 一样的。

图2 深度卷积

        但是如果只做深度卷积,会遇到一个问题:通道和通道之间没有任何的互动。假设有某一 个模式是跨通道才能够看得出来的,深度卷积对这种跨通道的模式是无能为力的,所以再多 加一个点卷积。点卷积是指现在一样有一堆滤波器,这个跟一般的卷积层是一样的。但这边做 一个限制是滤波器的大小,核大小通通都是1×1。在一般的卷积层里面,滤波器大小可能开 2×2,3×3,4×4。但是在点卷积里面,我们限制大小一定是1×1。如图3所示,1×1的 滤波器的作用是去考虑不同通道之间的关系。所以第一个1×1的滤波器就是去扫过这个深 度卷积出来的特征映射,然后得到另外一个特征映射。这边有另外三个滤波器,它们做的事情 也是一样,每一个滤波器会产生一个特征映射,所以点卷积跟一般的卷积层是一样的地方是, 输入跟输出的通道数量可以不一样。但是点卷积有一个非常大的限制,强制要求滤波器的大 小只准是1×1,只要考虑通道之间的关系就好了,不要考虑同一个通道内部的关系了。深度 卷积已经做完同一个通道内部的关系,所以点卷积只专注于考虑通道跟通道间的关系就好。

图3 点卷积

        如图4 所示,先来计算一下这个方法的参数量。深度卷积里面两个滤波器,每一个滤 波器大小是3×3,所以总共是3×3×2=18个参数。在点卷积里面,有四个滤波器,每一 个滤波器的大小是2,每个滤波器只用了两个参数,所以总共是2×4=8个参数。左边图是 一般的卷积,右边这个图是深度卷积加点卷积。

图 4 深度可分离卷积参数计算

        现在来比较一下这两者参数量的差异。假设我们先预设好,输入通道数量就是I 个通道, 输出通道数量就是O个通道。核大小都是k×k。如果是一般的卷积,要有k×k的核大小, 输入I 个通道,输出O个通道,到底会需要多少参数呢?每一个滤波器的大小应该是k×k, 核大小乘上输入通道的数量也就是k×k×I。如果要输出O个通道,就需要O个滤波器,一 个滤波器的参数量是k×k×I。总参数量是(k×k×I)×O。

        如果是深度卷积加点卷积,要达到输入 I 个通道,输出 O 个通道。深度卷积的滤波器 是没有厚度的,它的滤波器是没有厚度的,所以深度卷积所有的滤波器加起来的参数量只有 k×k×I 而已,跟一般的卷积里面的一个滤波器的参数量是一样的。点卷积的参数量是I×O。 假设输入通道的数量是I,每一个1×1的卷积的高度会是I。假设要输出O个通道,就要有O个1×1的卷积,所以点卷积的总参数量是I×O。如下式所示,把这两者进行比较,因为O通常是一个很大的值,通道数量可能设置为256或512,所以先忽略 1/ O , 1/kxk 常是比较在这一整项里面是比较关键的数值。这一整项的大小跟 1/ k×k 通 k×k 是比较有关系的。假设核大小可能是3×3或者是2×2。假设核大小是2×2,把一般的卷积换成深度卷积加点卷 积组合的话,网络大小就变成 1 /4 。假设核大小是3×3,从卷积变成深度卷积加点卷积的时候, 网络大小就变成原来的 1 /9 。

        在深度可分离卷积之前,就已经有一个方法是用低秩近似(lowrankapproximation)来 减少一层网络的参数量。如图5所示,假设有某一个层有N 个神经元,输出有M 个神 经元。假设输入是N 个神经元,输出是M 个神经元,这两层之间的参数量是N×M。只要 N 跟M其中一者很大,W 的参数就很多了。怎么减少这个参数量呢?有一个非常简单的方 法是在N 跟M中间再插一层,这一层就不用激活函数,这一层神经元的数量是K。原来本 来只有一层,现在拆成两层,这两层里面的第一层用V 来表示,第二层用U 来表示。这两层 的网络参数量反而是比较少的。原来一层的网络的参数量是M×N。如果拆成两层网络,第 一层是N×K,第二层是K×M。如果K远小于M 跟N,U 跟V 的参数量加起来是比W 还要少的多。W 是N×M,U 跟V 的参数量加起来是K×(N+M),只要K够小,整 体而言U+V 的参数量就会变少。之前过去常有的做法就是N =1000,M =1000,可以塞 个20或50,参数量就减少蛮多的。这样子的方法虽然可以减少参数量,但它还是会有一些限 制。把W 拆解成U×V 的时候,把W 用U 跟V 两层来分开表示的时候,我们会减少W 的可能性,本来W 可以放任何的参数。但假设把W 拆成U 跟V,矩阵W 的秩会小于等于 K。如果不知道秩是什么也没有关系,反正就是W 会有一些限制,所以会变成说不是所有的 W 都可以变成当作参数,参数会变成有一些限制。这个方法就是拿来减少参数的一个非常常 用的做法。其实刚才讲的深度卷积加点卷积(pointwise convolution)其实用的就是把一层拆 成两层的概念。

图5 低秩近似示例

        怎么说呢?如图6所示,先来看一下原来的卷积。在原来的卷积里面,左上角红色的 这一个矩的这个参数是怎么来的。是不是有一个红色的这个滤波器放在特征输入的特征映射 的左上角以后所得到的。在这个例子里面,一个滤波器的参数量是3×3×2=18,把滤波器 里面的18个参数跟输入特征映射左上角的这18个数值做内积以后,就会得到这边输出特征 映射左上角的值,所以每一个滤波器有18个参数。

图6 标准卷积与深度可分离卷积对比

        如果拆成深度卷积加点卷积两阶段,左上角输出特征映射,左上角这个数值来自于中间 的深度卷积的输出。所以左上角这个值来自于中间深度卷积的输出,左上角这两个值来自于 输入特征映射,第一个通道左上角这9个值跟第二个通道左上角这9个值。我们有两个滤波 器,这两个滤波器分别是9个输入,得到输出,接下来这两个滤波器的输出再把它综合起来, 得到最终的输出。所以本来是直接从这18个数值变成一个数值,现在是分两阶,18个数值 变两个数值再变一个数值。如果看黄色的这个特征映射左下角这个参数黄色的特征映射。左下角来自于深度卷积的输出。而左下角这两个数值来自于这个滤波器左下这来自于这个深度 卷积,来自于输入的这个特征映射。左下角的这 18 个数值,把一般的卷积拆成深度卷积加 点卷积的时候,就可以看成是把一层的网络拆解成两层的网络,其原理跟低秩近似是一样的, 把一层拆成两层,这个时候它对于参数的需求反而是减少了,这个是有关网络架构(network architecture)的设计。

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

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

相关文章

Mysql——高可用集群部署

目录 一、源码编译mysql 二、mysql的主从复制 2.1、主从复制 2.2、延迟复制 2.3、慢查询日志 2.4、MySQL的并行复制 三、MySQL半同步模式 四、mysql高可用组复制 五、mysql-router 六、mysql高可用MHA 七、为MHA添加VIP功能 一、源码编译mysql 1、安装依赖 [rootm…

HX711—称重模块

1、简介 HX711 采用了海芯科技集成电路专利技术, 是一款专为高精度电子秤而设计的 24 位 A/D 转 换器芯片。 2、原理图 PCB参考设计原理图 3、模块驱动代码(固件库) 数据读取代码分析 HX711信号读取时序 初始化: 将 PD_SCK&…

C练手题--A snail enters a bar! 【7 kyu】

一、原题 链接:Training on A snail enters a bar! | Codewars Problem Description: A snail is crawling along a rubber band that has an initial length of x units. The snail moves at a constant speed of y units per minute. As the snail crawls from t…

upload-labs靶场通关(附靶场环境)

链接: https://pan.baidu.com/s/1GQP5zthh598A4Mp-WQM4vA 提取码: zovn 环境搭建 步骤一:将环境附件下载到phpstudy_pro\WWW下面修改名字为upload 步骤二:询问绑定地址 第一关 less-1 步骤一:上传一句话木马 步骤二:更改文件名…

昇腾 编程范式 - 矢量编程流水任务设计

昇腾 编程范式 - 矢量编程流水任务设计 flyfish 编程范式简单来说就是不同编程风格或方式的“套路”。按着套路走就可以。 矢量算子编程范式把算子的实现流程分为3个基本任务:CopyOut,Compute,copyout CopyIn负责数据搬入操作, Compute负责…

spring入门(一)spring简介

一、spring简介 Spring技术是JavaEE开发必备技能,企业开发技术选型命中率>90% spring能够简化开发,降低企业级开发的复杂性。框架整合,高效整合其他技术,提高企业级应用开发与运行效率。 主要学习&…

Leetcode3244. 新增道路查询后的最短距离 II

Every day a Leetcode 题目来源:3244. 新增道路查询后的最短距离 II 解法1:贪心 由于题目保证添加的边(捷径)不会交叉,从贪心的角度看,遇到捷径就走捷径是最优的。所有被跳过的城市都不可能再出现在最短…

从人机环境系统的角度看,自下而上和自上而下两种认知方式如何有机地结合使用?...

从具体的“态”到抽象的“势”,从感觉到认知是自下而上的,例如 GPT;反之,则是自上而下的,比如有经验的人。理性偏自下而上,神性(感觉)则自上而下。其中,“态”和“势”是…

[000-01-008].Seata案例应用

业务说明:这里我们创建三个服务,一个订单服务,一个库存服务,一个账户服务。当用户下单时,会在订单服务中创建一个订单,然后通过远程调用库存服务来扣减下单商品的库存;再通过远程调用账户服务来…

如何用命令行工作流做定制化 AI 文献回顾?

(注:本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费) 千万不要把 AI 生成的结果,直接端出去给你的导师,甚至是投稿到出版社。 需求 我最近在 B 站发布了一个视频,叫做《AI…

Redis:Redis性能影响因素

这里写自定义目录标题 一、CPU对Redis的影响二、磁盘对Redis的影响三、网络对Redis的影响四、Swap对Redis的影响 一、CPU对Redis的影响 二、磁盘对Redis的影响 性能建议: 如果是热点场景,建议大家关闭rdb和aof。在SATA和SAS普通盘上,append…

【微服务】springboot 自定义注解+反射+aop实现动态修改请求参数

目录 一、前言 二、动态修改接口请求参数的场景 2.1 动态修改请求参场景汇总 2.1.1 数据格式标准化 2.1.2 安全需要 2.1.3 参数校验与默认值设定 2.1.4 数据隐私保护 2.1.5 适配不同客户端 2.1.6 统计与监控 2.1.7 高级功能特性 三、springboot 使用过滤器和拦截器动…

Mysql8 主从复制主从切换(超详细)

文章目录 1 主从复制1.1 实施前提1.2 主节点配置(在192.168.25.91操作)1.3 从节点配置(在192.168.25.92操作)1.4 创建用于主从同步的用户1.5 开启主从同步1.5 主从同步验证 2 主从切换2.1 实施前提2.2 主节点设置只读(在192.168.25.91操作)2.3 检查主从数据是否同步完毕(在192.…

Vue的冷门内置指令:优化与性能提升的利器

在Vue.js的广阔生态中,开发者们常常聚焦于那些耳熟能详的内置指令,如v-for用于循环渲染列表,v-if和v-else-if用于条件渲染等。然而,Vue还提供了一系列较为冷门但功能强大的内置指令,它们在某些特定场景下能够显著提升应…

ER模型介绍

7.1.概述: 1.ER模型也叫做实体关系模型,是用来描述现实生活中客观存在的事物、事物的属性,以及事物之间关系的一种数据模型。2.在开发基于数据库的信息系统的设计阶段,通常使用ER模型来描述信息需要和信息特性,帮助我…

云平台之Zabbix 监控网站

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

NMPC非线性模型预测控制经验分享与代码实例

NMPC非线性模型预测控制经验分享与代码实例 原本做完本科毕设之后就应该动笔写这一部分,但是做的过程中慢慢意识到自己懂的只是一点点。最近重新接触一些优化相关的问题,希望能够做出我认知之下比较好的解答。本人知识有限,难免写的有问题&am…

ClickHousez中如何定时清理过期数据库?

一、脚本清理 要在ClickHouse中自动删除过期的数据库,你可以使用ClickHouse的SQL命令结合外部脚本(如Shell脚本)和计划任务(如cron)来实现。下面是一个示例,展示如何创建一个Shell脚本来检查数据库的创建时…

1、.Net UI框架:Avalonia UI - .Net宣传系列文章

Avalonia UI是一个开源的跨平台UI框架,它允许开发者使用C#和XAML来创建应用程序,这些应用程序可以在多个平台上运行,包括Windows、macOS、Linux、Android和iOS。Avalonia UI的设计目标是提供一个现代化、可移植的UI框架,它具有类似…

C++之搜索二叉树(上)

目录 搜索二叉树的概念 搜索二叉树的操作 递归版本 二叉树的插入 二叉树的查找 二叉树的删除 非递归版本 二叉树的递归插入 二叉树的递归查找 二叉树的递归删除 在之前我们已经学习过了二叉树这一数据结构,本期我们将学习一种新的数据结构------搜索二…