Skip to content

Commit fe8f8a9

Browse files
committed
Update format
1 parent 48f0611 commit fe8f8a9

File tree

17 files changed

+193
-317
lines changed

17 files changed

+193
-317
lines changed

docs/ch01/ch01.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,27 @@
1212

1313
  除此之外,还有其他的技术如蒸馏学习,神经网络架构搜索等等,也基本上是从模型参数和数值存储的角度出发设计来达到模型减小且保持模型性能的目标。这些技术可以被统称为**模型压缩技术**。这些模型压缩技术有助于解决现代神经网络日益增长的复杂性和资源需求所带来的挑战。通过减小模型大小和提高运行效率,使得模型可以在各种设备上部署深度学习模型,为跨各个领域的实际应用提供可能性。接下来是对涉及的技术大致做一个介绍。
1414

15-
## 1.1 模型剪枝
15+
## 模型剪枝
1616

1717
  模型剪枝主要是从深度学习模型中识别并删除不必要的连接、权重甚至整个神经元。通过消除这些冗余组件,模型可以变得更紧凑、运行更快、内存效率更高,同时剪枝后的模型仍保持较高的准确性。一般建议剪枝从修剪权重开始,因为这不会像修剪神经元那样改变模型的架构。修剪权重的本质是将模型中所选单个参数的权重设置为零,该操作使得改变的参数并不影响模型的推理。
1818

19-
## 1.2 模型量化
19+
## 模型量化
2020

2121
  模型量化是另一种通过减少权重和偏差的精度来使神经网络更小、更快、更高效的技术。在传统的深度学习模型中,权重和偏差等参数通常使用32位浮点数(单精度)进行存储和处理,这提供了高精度,但需要大量的内存和计算资源。量化通过使用较少位数(例如8位或甚至更低)表示这些值来降低内容和计算资源的使用。
2222

23-
## 1.3 神经网络架构搜索
23+
## 神经网络架构搜索
2424

2525
  神经网络架构搜索是一种使用机器学习的方法,可以在不需要大量人力的情况下,自动搜索最优网络架构的技术。通过给定搜索空间,如给定模型架构,范围,长度,将模型网络设计转换为搜索问题,通过设计搜索策略和自动化的模型评估方法,自动化快速搜索到给定搜索空间中符合目标的神经网络架构。尽管神经网络架构搜索本质上是一种用于自动设计神经网络结构的技术,但它在许多应用中,尤其是移动端、嵌入式设备等场景中的主要目标之一,是搜索出在保证精度的前提下计算开销更小、结构更简洁的模型架构。这与模型压缩的核心目标是一致的:在不显著牺牲性能的情况下降低模型复杂度。因此,我们将其视为模型压缩的一种形式。
2626

27-
## 1.4 知识蒸馏
27+
## 知识蒸馏
2828

2929
  知识蒸馏是一种用于将知识从大型复杂模型(通常称为教师模型)转移到较小的简化模型(称为学生模型)的技术。教师模型包含在大型数据集训练过程中学到的大量信息。蒸馏旨在将这些知识提炼成更紧凑、更高效的形式,可以轻松部署在资源受限的设备上或计算能力有限的场景中。
3030

31-
## 1.5 低秩分解
31+
## 低秩分解
3232
  低秩分解是一种通过将神经网络中的权重矩阵近似为低秩矩阵乘积的方式,来压缩模型参数并提升推理效率的技术。该方法的核心思想是利用矩阵的冗余性,将原始高维矩阵分解为两个或多个低秩矩阵的乘积,从而显著减少参数数量和计算开销。在实践中,低秩分解常应用于线性层或卷积层,并可结合其他压缩手段如剪枝和量化,进一步提升压缩效果。通过适当的分解策略,可以在保持模型性能的前提下,实现显著的模型压缩和加速。
3333

3434

35-
## 1.6 总结
35+
## 总结
3636

3737
剪枝、量化、神经架构搜索、知识蒸馏与低秩分解等模型压缩方法为去除模型冗余提供了有效的解决方案。不同的模型压缩方法的特点如下:
3838

@@ -44,50 +44,50 @@
4444
| **知识蒸馏** | 将softmax分类器输出作为软知识,作为训练学生模型的先验知识。|卷积层、整个模型 || 训练简单,可以显著减少参数数量,容易与其他压缩方法组合使用实现更大程度压缩。 | 模型训练时间长,需要训练教师和学生模型;特殊结构很难与卷积核和较小方向的模型结合使用,泛化性差。 |
4545
| **低秩分解** | 将权重矩阵近似为若干低秩因子矩阵的乘积,以减少参数和计算量。|卷积层、线性层|| 显著减少参数量和FLOPs,带来真实的推理加速。保持较高的精度,对现有硬件友好,可与剪枝、量化等方法结合。 | 分解引入逼近误差,需要额外微调才能恢复性能。秩的选择和分解方式对效果敏感,调参成本较高。 |
4646

47-
## 2.常见评估指标
47+
## 常见评估指标
4848

4949
  模型压缩是一种减少深度学习模型大小和计算量的技术,其目的是在保持模型性能的前提下减少资源消耗,使模型更适合部署在资源受限的设备上。模型压缩的常见评估指标包括:
5050

51-
### 2.1 准确率(Accuracy)
51+
### 准确率(Accuracy)
5252

5353
  准确率指对比模型压缩前后在特定任务上的准确度,如分类准确率、检测精度等。尽管压缩可能会牺牲一定的精度,但目标是在保持可接受精度的前提下进行压缩。对于LLMs压缩,通常计算在零样本(Zero-shot)数据集上的准确率。
5454

55-
### 2.2 参数量(Params)
55+
### 参数量(Params)
5656

5757
  参数量(Params)是指模型中可训练参数的总数,通常是指构成深度学习模型的所有权重(weights)和偏置(biases)的总数。模型大小通常是通过模型的总参数数量来衡量的。一般来说,具有更多参数的模型通常需要更多的计算资源和内存来进行训练和推理。
5858

59-
### 2.3 模型大小(Model Size)
59+
### 模型大小(Model Size)
6060

6161
  模型大小(Model Size)是衡量压缩效果最直观的指标,通常以模型文件的存储大小(如MB)来度量。其计算公式为:`大小= 参数量 * 带宽`
6262

6363
  比如一个模型的参数量为70B,假设使用32位浮点数存储,那么其模型大小为:
6464
$$ 70B * 4Bytes(32bits) = 280GB(280 * 10^9 Bytes) $$
6565

66-
### 2.4 乘累加操作(MACs)
66+
### 乘累加操作(MACs)
6767

6868
  乘累加操作(Multiply-Accumulate Operations,MACs)数量是计算机执行浮点运算的基本单位,包括一个乘法操作和一个累加(加法)浮点数操作。在深度学习中,MACs用于描述卷积神经网络(CNN)中的卷积操作的计算量。具体来说,当我们在卷积层中进行前向传播时,每个卷积核都会与输入特征图(input feature map)的局部区域进行点积(element-wise multiplication),然后将所有点积的结果累加起来,得到输出特征图上的一个值。这个过程中的每一次乘法和随后的累加操作就构成了一个MAC。
6969

70-
### 2.5 浮点运算(FLOPs)
70+
### 浮点运算(FLOPs)
7171

7272
  FLOPs(Number of Floating Point Operations,FLOPs)指模型执行一次前向推理需要的浮点运算次数。FLOPs与模型需要计算资源成正比。浮点运算(FLOPs)是衡量LLMs计算效率的指标,代表LLM执行一个实例所需的浮点运算数量。在模型压缩中,减少 FLOPs 有助于使LLM运行得更快、更高效。 FLOPS(Floating Point Operation Per Second)代表每秒执行的浮点运算次数。
7373

7474
$$FLOPS=\frac{FLOPs}{\text { second }}$$
7575

76-
### 2.6 操作数(OPs)
76+
### 操作数(OPs)
7777

7878
  神经网络中的激活或权重计算也不总是浮点运算。一般地,操作数(NumberofOperations, OPs)用来测量计算数量。比如:Alex有`724M` MACs,则OPs为:`724M × 2 = 1.4G OPs`。OPS(Operation Per Second)代表每秒执行的操作数。
7979

8080
$$OPS=\frac{OPs}{\text { second }}$$
8181

82-
### 2.7 压缩比(Compression Ratio)
82+
### 压缩比(Compression Ratio)
8383

8484
  压缩比是原始模型大小与压缩后模型大小的比值。比率越高意味着大小减少得越多,显示压缩在节省存储和内存方面的有效性。更高的压缩比意味着更小的模型大小,但也可能伴随性能损失。
8585

86-
### 2.8 推理时间(Inference Time)
86+
### 推理时间(Inference Time)
8787

8888
  推理时间是指模型在推理过程中处理输入数据并生成响应所花费的时间。模型压缩通常会提高推理速度,因为它减少了计算量和模型大小。推理时间对于LLM需要响应用户查询或实时处理大量数据的实际应用程序尤其重要。
8989

90-
### 2.9 吞吐量(Throughput)
90+
### 吞吐量(Throughput)
9191

9292
  吞吐量(Throughput)是指模型在单位时间内能够处理的数据量,通常用于衡量压缩后模型的效率。Throughput 通常是与其他性能指标(如准确率、延迟)一同考量,以平衡模型精度和推理速度之间的关系。在剪枝或量化时,如果模型的 Throughput 提升显著而精度损失较小,则该压缩方法是有效的。
9393

docs/ch02/ch02.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
>本教程将以CNN网络为基础点,带领大家领略模型压缩的魅力。有一些基础的同学应该都了解过CNN,那么能分清通道(Channel)、卷积核(Kernel)、滤波器(Filter)、特征图(Feature Map)、层(Layer)等这些术语的区别吗?如果分不清,请带着疑问阅读本教程。
44
5-
## 2.1 CNN介绍
5+
## CNN介绍
66

77
  CNN网络,即卷积神经网络(Convolutional Neural Network),是一类特别为处理具有类似网格结构的数据设计的深度学习网络,比如图像(2D网格)和声音信号(1D网格)。CNN在图像和视频识别、图像分类、医学图像分析等领域取得了显著的成功。
88

9-
### 2.1.1 核心组成
9+
### 核心组成
1010
  CNN的核心思想是利用卷积层来自动并有效地提取输入数据的特征,无需手动特征提取。这些特征通过网络的多个层次被逐渐抽象和组合,用以执行分类、检测或分割等任务。CNN通常包含以下类型的层:
1111

1212
1. **卷积层(Convolutional Layers)**
@@ -21,7 +21,7 @@
2121
4. **全连接层(Fully Connected Layers)**
2222
通常位于CNN的末端,将卷积层或池化层输出的高维特征向量转换为最终的输出,如分类标签。
2323

24-
### 2.1.2 优点
24+
### 优点
2525
  CNN通过层的叠加和组合,能够自动并有效地从原始数据中学习到有用的特征表示,避免了传统机器学习方法中手工特征提取的繁琐过程。具有如下优点:
2626
1. 参数共享:通过卷积层中的卷积核重复使用同一组参数,CNN能够以较少的参数量处理大规模输入数据。
2727
2. 局部连接:卷积层中的神经元仅与输入数据的一个局部区域相连接,这使得网络专注于局部特征,并增强了模型的空间利用率。
@@ -31,7 +31,7 @@
3131

3232
![CNN可视化示例](images/convlayer_overview_demo.gif)
3333

34-
## 2.2 相关术语解读
34+
## 相关术语解读
3535

3636
- 通道(Channel):通常指数据的深度维度。例如,彩色图像有三个颜色通道:红、绿、蓝(RGB)。在CNN中,输入层的Channel数对应于图像的颜色通道数,而隐藏层的Channel数则对应于该层Filter的数量,即每个Filter产生的特征图数量。
3737
- 卷积核(Kernel):卷积层中用于特征提取的小矩阵。在进行卷积操作时,卷积核滑过输入数据的每个区域,与其对应的局部区域进行元素乘法操作,然后求和,最终形成卷积输出的一个元素。卷积核能够捕捉到数据的局部特征,如边缘、纹理等。
@@ -61,7 +61,7 @@
6161

6262
下面一起动手实践一个简单的CNN例子[Mnist手写数字识别](https://github.com/datawhalechina/awesome-compression/blob/main/docs/notebook/ch02/1.mnist_classify.ipynb),通过这个例子来加深对CNN的理解。
6363

64-
## 2.3 实践
64+
## 实践
6565

6666
首先导入必要的包,并加载数据集
6767

0 commit comments

Comments
 (0)