Network Compression(李宏毅)机器学习 2023 Spring HW13 (Boss Baseline)

1. Introduction to Network Compression

深度学习中的网络压缩是指在保持神经网络性能的同时,减少其规模的过程。这非常重要,因为深度学习模型,尤其是用于自然语言处理或计算机视觉的大型模型,训练和部署的计算成本可能非常高。网络压缩通过降低内存占用并加快推理速度,在不牺牲精度的情况下,使模型更加高效。

网络压缩所使用的技术有:

1.1 Network Pruning

Network Pruning (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/tiny_v7.pdf)

对于网络剪枝,有一个彩票假设理论,该理论指出:“密集的、随机初始化的前馈网络中包含子网络(中奖票),当这些子网络单独训练时,其测试精度可以在类似的迭代次数下达到与原始网络相当的水平。这些中奖票之所以‘中奖’,是因为它们的连接权重初始值使训练特别高效。”(来源:论文链接)。

还有一篇关于神经网络重要性估计的论文也值得阅读。(来源:论文链接)

1.2 Knowledge Distillation

知识蒸馏(Knowledge Distillation, KD)是一种机器学习技术,其中一个较小且更简单的模型(称为学生模型)被训练以复制一个较大且更复杂的模型(称为教师模型)的行为。其目标是将教师模型的“知识”转移到学生模型,使得较小的模型在保持高性能的同时,在计算和内存方面更加高效。

knowledge distillation (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/tiny_v7.pdf)

在进行知识蒸馏时,一个常用的技巧是引入一个称为温度(temperature)的超参数。知识蒸馏中的温度用于使教师模型的输出概率分布更加平滑。它控制预测的置信度或分散程度,从而使学生模型更容易从教师模型的输出中学习。

teperature for softmax (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/tiny_v7.pdf)

1.3 Parameter Quantization

参数量化是一种模型压缩技术,通过用更少的位数表示神经网络的参数(权重和激活值),来减少内存占用和计算需求。与使用全精度(如32位浮点数)表示参数不同,参数量化使用低精度数据类型,例如16位、8位甚至二进制格式来存储和处理参数。

Parameter Quantization (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/tiny_v7.pdf)

Range Mapping and Clipping (source: https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-quantization)

这篇文章在解释和可视化量化方面做得非常出色: 文章链接。

1.4 Architecture Design

架构设计涉及创建内在高效的神经网络结构,通过减少模型规模、内存使用和计算复杂性来优化性能,而无需依赖训练后的压缩技术。与剪枝或量化不同,这种方法从一开始就专注于设计更小、更快且更高效的网络。

以卷积神经网络(CNN)为例,常规的卷积核如下:

Standard CNN (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/tiny_v7.pdf)

但是,我们可以引入一种新的卷积方式,即深度可分卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)。深度可分卷积对每个输入通道独立地应用一个单独的滤波器。逐点卷积则用于跨通道混合信息,它使用一个 1×1 的卷积核来调整输出通道的数量。

Depthwise and pointwise convolutions (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/tiny_v7.pdf)

与普通卷积相比,深度可分卷积的参数量大大减少,减少的比例约为 k×k。其中 k 是卷积核的大小。

Depthwise and pointwise convolutions (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/tiny_v7.pdf)

之所以有效,是因为它是一种低秩近似(low rank approximation)。

低秩近似是一种在机器学习和神经网络中使用的技术,通过用较小的低秩矩阵来近似大矩阵,从而减少其规模和复杂度。其目标是捕捉最重要的信息,同时丢弃冗余部分,从而减少计算、存储和内存需求。在卷积神经网络中,深度可分卷积通过将传统的卷积操作分解为两个较小的操作(深度卷积和逐点卷积),有效地降低了计算量和参数数量,这正是低秩近似的一种应用。

Low-rank approximation (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/tiny_v7.pdf)

Low-rank approximation (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/tiny_v7.pdf)

1.5 Dynamic Computation

动态计算方法允许网络根据输入数据、网络当前状态或资源限制来调整其计算的操作数或层数。这种适应性可以发生在推理过程中(例如在测试图像上),甚至在训练过程中。通过动态地选择不同的计算路径或层,网络能够在保证性能的同时,优化计算资源的使用,提高效率。

Dynamic Depth (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/tiny_v7.pdf)

Dynamic Width (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/tiny_v7.pdf)

2. Homework Results and Analysis

机器学习作业13是网络压缩。

网络压缩:在不损失性能的情况下使模型更小。在这个任务中,我们需要训练一个非常小的模型来完成作业3(在Food-11数据集上进行图像分类)。

数据集仍然是Food-11,但顺序不同。

Dataset (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2023-course-data/HW13.pdf)

有一个特别的规定:确保你的模型的总参数数目小于或等于60,000。

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

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

相关文章

UnityDots学习(二)

在一里已经概述了什么是Dots,已经如果使用它,我们要做的思维转变。 简单总结下: Dots使用了计算器多核,已经3级缓存的优势,在此基础上使用Brust编译器对各个平台实现了代码优化。从而达到了加速提升的效果。 我们要…

Linux (CentOS) 安装 Docker 和 Docker Compose

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …

c++ 预备

目录 前言 一,知识点的补充 二,c语言与c 三,面向对象的三大特点 前言 将进入c的学习,接下来是对于c的预备和c的一些预习 一,知识点的补充 1 标识符 标识符不能为关键字 标识符只能由下划线,数字&#xf…

SpringBoot项目实战(41)--Beetl网页使用自定义函数获取新闻列表

在Beetl页面中可以使用自定义的函数从后台新闻列表中获取新闻数据展示到页面上。例如我们可以从后台新闻表中获取新闻按照下面的格式展示&#xff1a; <li><a href"#">东亚非遗展即将盛妆亮相 揭起盖头先睹为快</a></li><li><a hre…

从零开始开发纯血鸿蒙应用之多签名证书管理

从零开始开发纯血鸿蒙应用 一、前言二、鸿蒙应用配置签名证书的方式1、自动获取签名证书2、手动配置签名证书 三、多签名证书配置和使用四、多证书使用 一、前言 由于手机操作系统&#xff0c;比电脑操作系统脆弱很多&#xff0c;同时&#xff0c;由于手机的便携性&#xff0c…

写个自己的vue-cli

写个自己的vue-cli 1.插件代码2. 发布流程3. 模板代码讲解3.1 vue2模板的运行流程:3.2 vue3模板的运行流程: 1.插件代码 写一个自己的vue-cli插件 插件地址&#xff1a;插件地址 流程&#xff1a; 实现简单版 vue-cli 步骤文档1. 项目初始化 - 创建项目文件夹 qsl-vue-cli - …

leetcode热门100题1-4

第一天 两数之和 //暴力枚举 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int n nums.size();for (int i 0; i < n; i) {for (int j i 1; j < n; j) {if (nums[i] nums[j] target) {return {i, j};}}}return {…

数据结构初阶---排序

一、排序相关概念与运用 1.排序相关概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的…

系统看门狗配置--以ubuntu为例

linux系统配置看门狗 以 ubuntu 系统配置看门狗为例 配置看门狗使用的脚本文件&#xff0c;需要使用管理员权限来执行&#xff1a; 配置是&#xff1a;系统每 30S 喂一次狗&#xff0c;超过 60S 不进行投喂&#xff0c;就会自动重启。 1. 系统脚本内容&#xff1a; #!/bin/b…

Stable Diffusion本地部署教程(附安装包)

想使用Stable Diffusion需要的环境有哪些呢? python3.10.11(至少也得3.10.6以上):依赖python环境NVIDIA:GPUgit:从github上下载包(可选,由于我已提供安装包,你可以不用git)Stable Diffusion安装包工具包: NVIDIA:https://developer.nvidia.com/cuda-toolkit-archiv…

opencv的NLM去噪算法

NLM&#xff08;Non-Local Means&#xff09;去噪算法是一种基于图像块&#xff08;patch&#xff09;相似性的去噪方法。其基本原理是&#xff1a; 图像块相似性&#xff1a;算法首先定义了一个搜索窗口&#xff08;search window&#xff09;&#xff0c;然后在该窗口内寻找…

Docker运维高级容器技术知识点总结

1、虚拟机部署和容器化部署的区别是什么&#xff1f; 1、技术基础&#xff1a; <1>.虚拟化技术在物理硬件上创建虚拟机&#xff0c;每台虚拟机运行自己完整的操作系统、从而实现资源隔离。 <2>.容器化技术&#xff1a;将应用程序打包在容器内&#xff0c;在进程空间…

双模充电桩发展前景:解锁新能源汽车未来的金钥匙,市场潜力无限

随着全球能源转型的浪潮席卷而来&#xff0c;新能源汽车行业正以前所未有的速度蓬勃发展&#xff0c;而作为其坚实后盾的充电基础设施&#xff0c;特别是双模充电桩&#xff0c;正逐渐成为推动这一变革的关键力量。本文将从多维度深入剖析双模充电桩的市场现状、显著优势、驱动…

python3GUI--大屏可视化-传染病督导平台 By:PyQt5

文章目录 一&#xff0e;前言二&#xff0e;预览三&#xff0e;软件组成&开发心得1.样式&使用方法2.左侧表格实现3.设计4.学习5.体验效果 四&#xff0e;代码分享1.环形渐变进度组件2.自定义图片的背景组件 五&#xff0e;总结 大小&#xff1a;60.9 M&#xff0c;软件…

某漫画网站JS逆向反混淆流程分析

文章目录 1. 写在前面1. 接口分析2. 反混淆分析 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Pyth…

ffmpeg aac s16 encode_audio.c

用ffmpeg库时&#xff0c;用代码对pcm内容采用aac编码进行压缩&#xff0c;出现如下错误。 [aac 000002bc5edc6e40] Format aac detected only with low score of 1, misdetection possible! [aac 000002bc5edc8140] Error decoding AAC frame header. [aac 000002bc5edc81…

Vue.js组件开发,AI时代的前端新玩法

AI可不只是写写小说、聊聊天&#xff0c;现在它的触角已经伸到了程序员的代码世界里。特别是前端开发&#xff0c;很多人都在尝试用ChatGPT或者类似的AI工具来写代码&#xff0c;甚至直接生成Vue.js组件。有些人感叹&#xff0c;"写代码的时代是不是要结束了&#xff1f;&…

深度学习的原理和应用

一、深度学习的原理 深度学习是机器学习领域的一个重要分支&#xff0c;其原理基于多层神经网络结构和优化算法。以下是深度学习的核心原理&#xff1a; 多层神经网络结构&#xff1a;深度学习模型通常由多层神经元组成&#xff0c;这些神经元通过权重和偏置相互连接。输入数据…

mv指令详解

&#x1f3dd;️专栏&#xff1a;计算机操作系统 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 基本语法 主要功能 常用选项详解 1. 移动文件或目录 2. 重命名文件或目录 3. -i&am…

vue3树形组件+封装+应用

文章目录 概要应用场景代码注释综合评价注意事项功能拓展代码说明概要 创建一个基于Vue 3的树形结构组件,用于展示具有层级关系的数据,并提供了节点展开/折叠、点击等交互功能。以下是对其应用场景、代码注释以及综合评价和注意事项的详细说明。 应用场景 这个组件适用于需…