机器学习——神经网络压缩

神经网络压缩

需要部署,设备内存和计算能力有限,需要进行模型压缩,在设备上运行的好处是低延迟,隐私性。

在这里插入图片描述

目录

在这里插入图片描述
不考虑硬件问题,只考虑通过软件算法优化。

修剪网络

参数过多或者没有用的参数,可以将其剪掉。
在这里插入图片描述
先训练一个最大的网络模型,衡量评估每个参数的重要性,

  • 看权重的绝对值
  • 评估神经元的重要性,可以将其修剪掉

修剪后能力会降低一点,并想办法将性能变好一点,对小模型进行微调
在这里插入图片描述

  • 不要一次性剪掉大量参数
  • 动了元气性能不太行

在这里插入图片描述
如果剪掉后,进行空缺的话导致无法进行GPU加速,一般将其值设置为0
在这里插入图片描述
速度大于1是加速,小于1是降速。
从上述看到对权重进行修剪,加速的效果不理想。
在这里插入图片描述

  • 对网络进行修剪,只是改输入输出的dim,在torch里面好实现,gpu也好加速。

在这里插入图片描述

  • 先训练大模型,再训练小模型达到相同性能,那为什么不直接训小模型呢?
  • 原因是大模型更好训练,小模型难训练
  • 大乐透假说

在这里插入图片描述

一个大的模型可以看作是很多个小模型的集合,只要里面有一个成功,大的模型也就成功了,跟买大乐透一样,买的彩票越多,越有可能中奖。

在这里插入图片描述

  • 基于大模型得到的参数,更有可能得到好的初始化参数,在这个基础上继续微调,有很大概率得到好的结果。

在这里插入图片描述

  • 权重的正负号很重要。
  • 跟雕像一样,只是把多余的东西拿掉。

在这里插入图片描述

  • 这篇文章打脸大乐透文章
  • 将epoch设置多一点,小模型也能得到好的结果。

知识蒸馏

在这里插入图片描述
让学生的输出与老师的输出尽可能相近,哪怕老师的模型输出是错误的。

在这里插入图片描述
teacher不仅是一个模型,可以是多个模型的集成。模型集成在打比赛的时候用的多,但是实际中考虑性能问题不太行,因此可以使用知识蒸馏使得学生模型也能得到相近的性能。

在这里插入图片描述

对softmax进行修改,增加一个温度参数T,把比较集中的分布变得更加平滑一点,对分类结果不会有影响,但是每个类别得到的分数会比较平滑平均

参数量化

在这里插入图片描述
在这里插入图片描述

  • 使用更小的bit来表示值,以降低存储占用
  • 权重聚类,使用一类来表示该类的所有值
  • 常见的用少量的bit,少见的用多一点的bit

在这里插入图片描述
使用二元值代替
在这里插入图片描述

  • 可以防止overfit
  • bit减少是不是引入了噪声,进而效果好呢?

结构设计

depthwise separable convolution

在这里插入图片描述
传统的cnn 每个通道都要进行卷积,参数量大。

在这里插入图片描述

  • depthwise的滤波器格式等于输入的channel数量
  • 每个滤波器只负责自己那个channel
  • 问题是通道之间没有交互

在这里插入图片描述
可以先加一个pointwise convolution,然后再进行depthwise convolution;
在这里插入图片描述

  • 参数约变为原先的 1 / k 2 1/{k^2} 1/k2

在这里插入图片描述

  • 把一层变成两层,类似于矩阵连续相乘,中间可操作空间大,以减少维度计算。
    *在这里插入图片描述
    在这里插入图片描述

动态计算

在这里插入图片描述
在这里插入图片描述
期望网络能自己调整计算量,因为模型会跑到不同设备上。电量的多少也会对性能有影响。

自己调整深度
在这里插入图片描述

让每层的输出,与最终的输出之间的差距加起来作为最终的loss,优化该loss来动态调整深度。

自己调整宽度
在这里插入图片描述

  • 不同宽度的输出与最宽的输出之间的差距越小越好
  • 同一个模型,只是不同的宽度
    在这里插入图片描述
    根据环境困难度自己决定深度和宽度
    在这里插入图片描述
  • 对于简单的样本,就使用浅层的输出即可
  • 对于困难的样本,可以使用最终的输出

总结

在这里插入图片描述

  • 上述技术不是互斥的,可以一起使用

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

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

相关文章

Shell脚本的编写规范【入门篇】

在软件开发中,Shell脚本是一种非常常见的脚本语言,用于自动化执行一系列命令。Shell脚本可以帮助开发人员简化日常工作,提高工作效率。然而,要编写出高效且易于维护的Shell脚本,需要掌握其基本结构和书写规范。本文将通…

Missing type map configuration or unsupported mapping

今天开发的时候突然遇到这么一个问题,可以确定的是不是AutoMap的问题,因为项目中其他接口都是好好的,只有新加的这个控制器不行,排查了一下,少了映射配置,在这里加上映射关系即可,大意了。

大唐杯学习笔记:Day8

1.1 功率控制 一、NR功控的作用 抑制小区间干扰省电,减少发射功率;在小区内,主要用于补偿路损和阴影 小区内工控上行功率控制下行功率分配 二、PRACH信道的功率控制 P P R A C H ( i ) m i n { P C M A X , f , c ( i ) , P L b , f , c Δ p r e ( N p r e…

2023年NOC大赛软件创意编程(学而思)赛道c++初赛试题

2023NOC软件创意编程初中组C++初赛 一、单选 1、(2分)下列选项中,不属于计算机软件系统的是 A 操作系统 C.用户自己开发的软件系统 B.系统文用程序D.存储系统 2、(2分)十进制数17对应的二进制数是( A 11000B.10001 C 11111 D.10101 3、(2分)关于函数,以下说法错误的是( A…

【Unity】ABB CRB 15000 外部引导运动

一、RobotStudio控制器的文件系统和配置参数 HOME:控制器文件系统的根目录或起始点。配置:机器人控制器的配置设置和参数。外件信息:连接到机器人的外部组件的信息。I/O 系统:输入/输出系统,管理机器人和外部设备之间的…

JavaScript 入门手册(一)

目录 一、JavaScript 是什么? 1.1 JavaScript 介绍 1.2 JavaScript 与 ECMAScript 的关系 1.3 JavaScript 是脚本语言 1.4 JavaScript 的特点 1.5 运行 JavaScript 1.6 保留关键字 二、Node.js 是什么? 2.1 运行时是什么? 2.2 Node.js 的组成…

用WSGI发布flask到centos7.9

起因 想把自己的Flask或者Django网站,发布到服务器上,让大家都可以访问。网上搜的结果,要么是用NginxuWSGI,要么是用NginxGunicorn。大名鼎鼎的Nginx我早有耳闻,那么两位俩玩意是啥呢。 WSGI是什么 uwsgi是Nginx和w…

存内计算生态环境搭建以及软件开发

在当今数据驱动的商业世界中,能够快速处理和分析大量数据的能力变得越来越重要。而存内计算开发环境在此领域发挥其关键作用。存内计算环境利用内存(RAM)而非传统的磁盘存储来加速数据处理,提供了一个高效和灵活的平台。这种环境的…

借着ChatGPT的人机交互聊聊长连接

ChatGPT这两年可谓风靡全球,尤其是最近Sora视频模型的横空出世以及claude 3模型所具备的浅意识,更是像打开了新世界的大门。本文就从ChatGPT的网页聊天开始聊起(有蹭热度之嫌,哈哈),聊聊长连接的发展历程和…

React-Redux中actions

一、同步actions 1.概念 说明:在reducers的同步修改方法中添加action对象参数,在调用actionCreater的时候传递参数,数会被传递到action对象payload属性上。 2.reducers对象 说明:声明函数同时接受参数 const counterStorecre…

指针进阶(4)看一下这些与指针有关的题你都会做吗?

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

【E3S独立出版】2024年第二届绿色建筑国际会议(ICoGB 2024)

会议简介 Brief Introduction 2024年第二届绿色建筑国际会议(ICoGB 2024) 会议时间:2024年5月22日-24日 召开地点:意大利米兰 大会官网:www.icogb.org ICoGB 2024由意大利米兰理工大学主办,西安交通大学,葡萄牙米尼奥大…

现有各行业识别和应对神秘顾客的“秘籍”

神秘顾客调查方法在各行各业中都被广泛应用,以评估和提升服务质量。尽管不是刻意为之,但在运用神秘顾客调查方法的各行业中,确实存在服务人员和神秘顾客相互较劲的情况,这也催生了一些服务人员试图识别和应对神秘顾客的“秘籍”。…

什么是Java内存模型

当问到 Java 内存模型的时候,一定要注意,Java 内存模型(Java Memory Model,JMM)它和 JVM 内存布局(JVM 运行时数据区域)是不一样的,它们是两个完全不同的概念。 1.为什么要有 Java …

【DevOps基础篇】Dockerfile快速掌握

目录 什么是Dockerfile?创建一个DockerfileDockerfile 指令构建和测试 Dockerfiles为你自己的应用编写Dockerfile如何从Dockerfile创建一个优化的Docker镜像结语在本指南中,我们将学习关于Dockerfile的内容。它是什么,如何创建一个,以及如何配置基本内容来启动您自己的Dock…

【校园安全】支小蜜防校园霸凌语音识别系统的好处

在校园安全领域,防校园霸凌语音识别系统的出现,为预防和应对校园霸凌行为提供了新的技术手段。本文将探讨防校园霸凌语音识别系统的好处,并分析其在校园安全建设中的重要作用。 通过安装在校园各个角落的语音识别设备,系统能够捕…

蓝桥杯倒计时 36天-DFS练习2

文章目录 黄金二叉树混沌之力2 黄金二叉树 思路一&#xff1a;递推做法 #include<bits/stdc.h> using namespace std;const int N 1e510;int A[N]; int B[N]; int n,sum;int main( ){cin>>n;for(int i1;i<n;i)cin>>A[i];int left,right;for(int i1;i<…

用Python爬取古诗文网的各类古诗

fetch-gushiwen 用途 可以拿去用于个人知识库、知识图谱的创建等其他学习用途。 使用 输入古诗文网的链接&#xff0c;即可爬取该页面所有诗歌的诗名&#xff0c;作者&#xff0c;朝代&#xff0c;内容&#xff0c;译文&#xff0c;注释&#xff0c;赏析&#xff0c;创作背…

Golang 写日志到文件

package mainimport ("log""os""time" )func main() {printLog("auto", "报警内容AA") }func printLog(filename string, content string) {t : time.Now().Format(time.DateOnly)file : filename "." t "…

[MRCTF2020]Transform1

a[33]"9,10,15,23,7,24,12,6,1,16,3,17,32,29,11,30,27,22,4,13,19,20,21,2,25,5,31,8,18,26,28,14" b[33]"103,121,123,127,117,43,60,82,83,121,87,94,93,66,123,45,42,102,66,126,76,87,121,65,107,126,101,60,92,69,111,98,77" python代码 a3 [103…