当前位置: 首页 > news >正文

论文阅读:A comprehensive survey on model compression and acceleration

对模型压缩和加速的全面调查

阅读论文:A comprehensive survey on model compression and acceleration

摘要

  • 背景:近年来,机器学习(ML)和深度学习(DL)在计算机视觉、自然语言处理、股票预测、预测和音频处理等多个领域取得显著进展。然而,针对这些复杂任务训练的深度学习模型规模较大,难以在资源受限的设备上部署,例如在 ImageNet 数据集上预训练的 VGG16 模型大小超过 500MB,而手机和物联网设备等资源受限设备内存和计算能力有限。
  • 问题:对于实时应用,需要将训练好的模型部署到资源受限设备上,但流行的卷积神经网络模型拥有数百万参数,导致训练后的模型体积庞大。因此,在将这些模型部署到资源受限设备上时,有必要在对模型准确性影响最小的情况下进行压缩和加速且在压缩模型后保持相同的准确性是一项具有挑战性的任务。
  • 现状与本文工作:为应对这一挑战,近年来许多研究人员提出了不同的模型压缩和加速技术。本文对这些用于压缩和加速机器学习和深度学习模型的各种技术进行了综述,同时讨论了现有技术面临的挑战,并提供了该领域未来的研究方向。

1 引言

这部分算是摘要部分的一个扩写,主要是从深度学习的发展现状、在资源受限设备部署面临的问题,以及模型压缩和加速的必要性与研究意义。

  • 深度学习的发展与应用:深度学习基于人工神经网络,是机器学习的一部分。近年来,深度神经网络(DNN)的准确率显著提升,2012 年 AlexNet 赢得 ImageNet 挑战后,机器学习和深度学习在图像、文本、音频和视频等领域广泛应用,解决了图像字幕生成、语言翻译、目标检测、语音识别等诸多实际问题 。同时,得益于图形处理单元(GPUs),人们能够处理多层 DNN 的参数。
  • 深度学习模型部署面临的问题
    • 资源受限设备的挑战:移动电话、物联网设备等资源受限设备的数量逐年递增,预计到 2024 年移动订阅数量将达到 89 亿。然而,这些设备的计算能力、存储容量和能源供应有限,限制了训练好的 DNN 模型在其上的实时、本地快速推理。例如,在 ImageNet 数据集上预训练的 VGG16 模型大小超过 500MB,难以直接部署在资源受限设备上。
    • 云端部署的不足:将 DL 模型部署在云端,虽然可利用其强大的计算和存储资源,但存在吞吐量低、响应时间长的问题。对于实时性要求高的应用,如视频中的目标检测和分割,将推理步骤从云端迁移到边缘设备至关重要,但当前边缘设备的能力难以满足需求。
    • 数据处理的能耗问题:网络传输数据所需的能量比在本地处理数据更多,从能耗角度考虑,在小型设备上本地处理数据更为合适。此外,训练 DL 模型是一个耗时的过程,通常需要使用 GPU 加速,且不同架构的 VGG 模型在 ImageNet 数据集上训练耗时 2 - 3 周不等。
  • 模型压缩和加速的必要性与研究内容:许多实际应用(如无人驾驶汽车)需要模型具备实时决策能力,而参数多的模型在推理时耗时、耗能且占用空间大。因此,在部署到资源受限设备前,降低模型参数数量、去除冗余连接,对模型进行压缩和加速十分必要。
  • 本文的研究内容:在 ML 和 DL 研究领域,模型压缩和加速已成为热门研究方向,并取得了一定进展。本文旨在综述各种模型压缩和加速技术(如下图所示),对流行的 DNN 压缩和加速方法进行深入的性能分析,探讨其优缺点,同时研究传统 ML 模型的压缩技术。此外,文章还将讨论现有技术面临的挑战,并对该领域未来的研究方向进行展望。

在这里插入图片描述

2 DNN压缩技术

论文第2部分聚焦于DNN压缩技术,其中剪枝技术是重要一环。剪枝通过去除网络中冗余参数来减少模型参数数量,降低存储需求,提升计算效率,还能缓解过拟合问题。具体内容如下:

1.1 剪枝

剪枝是一种强大的DNN参数减少技术。其原理基于神经网络存在冗余参数,这些参数在训练中对降低误差和泛化网络作用不大,去除后对网络精度影响较小 。剪枝最初目的是减少DL模型存储需求,并且还能通过减少卷积层参数或滤波器来降低计算量、加快推理过程。此外,剪枝有助于缓解神经网络的过拟合问题。模型剪枝可在训练过程中或训练后进行,主要包括权重剪枝、神经元剪枝、滤波器剪枝和层剪枝等技术。

2.1.1 全连接层的剪枝

前馈NNs 仅具有完全连接的层(FC),也称为密集层,以其最简单的形式,它们具有输入,隐藏和输出层。每个输入Xi都乘以相应的权重Wi,并且在每个神经元上计算一个线性总和为:
在这里插入图片描述
其中b是偏差,n是输入的数量。计算出的总和通过激活函数(即sigmoid,relu等)作为z = g(y)进一步处理,该函数将线性总和转换为非线性,并最终产生所需的输出z。

剪枝的目的是减少深度神经网络的参数数量,降低存储需求,提高模型运行效率,同时减少过拟合问题。

在输入层,隐藏的层和输出层中,馈送前nn的结构分别为3、2和1神经元,以及用于剪枝的候选权重连接(图a)和神经元(图b) 。同样,从图(b)中,如果我们删除了红色神经元,则其所有相关的重量连接(虚线)也将被删除,从而导致总重连接减少到四个(参数数量减少50%)。
在这里插入图片描述
下面将介绍一些全连接层剪枝的方法:

  • 权重剪枝

    • Optimal Brain Damage (OBD):LeCun等人于1990年提出该方法,依据权重的显著性(即权重参数去除对训练误差的影响程度)来决定是否删除权重。小幅度的权重(即小显著性)对训练误差影响较小,去除这些参数后,通过重新训练网络可恢复部分精度损失,此过程可多次重复直至网络达到满意精度。计算小显著性时使用目标函数关于参数的二阶导数,如下图所示是算法流程。
      在这里插入图片描述

    • Optimal Brain Surgeon (OBS):Hassibi和Stork在1993年提出,该方法扩展了OBD的思想。他们认为OBD中假设的海森矩阵是对角的,这可能导致错误地去除权重,而实际上海森矩阵是非对角的。OBS的重要优势是剪枝后无需重新训练网络,但计算量比OBD更大。

  • 神经元剪枝
    Srinivas 和 Babu 在 2015 年提出通过删除冗余神经元来减少模型参数。他们发现网络中存在一些类似的神经元,这些神经元的存在会造成冗余。该方法通过改变输出神经元激活程度来判断权重的重要性,一次性删除一组权重,进而去除冗余神经元。具体来说,如果两个神经元的权重集合相似,那么可以删除其中一个。在计算过程中,通过特定的计算方式将相似神经元的影响合并,然后删除其中一个神经元及其连接,从而简化网络结构。这种方法相较于逐个删除权重的方式,效率更高,并且能够更有效地减少模型的复杂度。
    如下面图中的圆圈是神经元,边缘是权重。输出计算为:
    在这里插入图片描述
    此时,如果满足以下条件(W1 = W2):
    在这里插入图片描述
    那么结果可以写为:
    在这里插入图片描述
    接下来,可以去除带有红色的神经元,如下图所示(图示为W1 = W4)
    在这里插入图片描述

  • 其他方法

    • 稀疏连接网络:Ardakani 等人在 2016 年提出稀疏连接网络的概念。他们通过随机删除(归零)全连接层的连接来使网络稀疏化,具体操作是根据随机掩码将连接置零,随机掩码由线性反馈移位寄存器生成。为此引入掩码矩阵 M,其元素由线性反馈移位寄存器的值决定为 0 或 1 ,进而定义新的稀疏权重矩阵Ws = W * M(W 为原始权重矩阵)。稀疏连接网络的前向传播可重新定义为y = f(Ws * X + b);同时,他们还提出了基于线性反馈移位寄存器的高效硬件架构,这种架构能够有效节省内存,相较于传统的全连接神经网络,可节省 90% 的内存。在实际应用中,稀疏连接网络可以在不损失太多精度的情况下,大大提高模型的运行效率,尤其在内存受限的环境中具有重要意义。
    • NoiseOut 方法:Babaeizadeh 等人在 2017 年提出 NoiseOut 方法。该方法依据内层神经元激活之间的相关性来删除神经元,即如果一些神经元的激活相关性较高,说明它们在功能上有一定的重叠,可以删除其中一部分。为了提高剪枝效率,还提出通过添加额外输出节点(噪声输出)来增加神经元间的相关性。这种方法不仅适用于全连接层,对于含有全连接层的卷积神经网络(CNN)同样适用。在实际操作中,通过计算神经元激活的相关性矩阵,根据设定的阈值来判断哪些神经元可以被删除,从而实现模型的简化和加速。
    • 替代全连接层的方法:还有一些研究尝试用其他类型的层替代全连接层。例如,Yang 等人在 2015 年用自适应快速食品变换层替代全连接层,这种变换是对快速食品变换的推广,能够在一定程度上减少模型参数。Network in Network 和 GoogleNet 则使用全局平均池化层替代全连接层,由于全局平均池化层没有可学习参数,因此可以减少模型的过拟合问题,同时降低存储复杂度。然而,这种替代也带来了一些问题,比如会增加计算开销,并且使得迁移学习变得困难。为了解决迁移学习的问题,GoogleNet 后来添加了一个线性层,使得网络可以在不同数据集上进行迁移学习。在实际应用中,需要根据具体任务和需求来选择是否使用这些替代方法,以及如何调整网络结构以平衡计算量、存储需求和模型性能。
2.1.2卷积层的剪枝

在CNN中,卷积是使用输入图像的滤波器的点乘积。 CNN的主要部分是卷积层,用于从输入图像中提取特征。

2.1.2 卷积层剪枝

卷积神经网络(CNN)是目前最成功的深度神经网络。在CNN中,卷积操作是滤波器与输入图像的逐点相乘。CNN的主要部分是卷积层,用于从输入图像中提取特征。

在卷积网络中,一个滤波器 W ∈ R h × w × i c × f W \in \mathbb{R}^{h ×w ×i c ×f} WRh×w×ic×f应用于每个输入图像 I I I I ∈ R m × n × i c I \in \mathbb{R}^{m×n×ic} IRm×n×ic,并产生输出特征图(激活值) T T T T ∈ R p × q × f T \in \mathbb{R}^{p ×q ×f} TRp×q×f。其中, h h h w w w是滤波器的高度和宽度, i c ic ic是输入图像的输入通道数, f f f是滤波器的数量, m m m n n n是输入图像的尺寸, p p p q q q是输出特征图的尺寸。输出特征图的尺寸计算公式为:,
在这里插入图片描述
其中 s s s是步长, p p p是填充。下图展示了一个最简单的CNN,输入图像大小为 4 × 4 × 3 4×4×3 4×4×3,应用的滤波器大小为 3 × 3 × 3 × 2 3×3×3×2 3×3×3×2(2是滤波器的数量)。
在这里插入图片描述

通常,CNN的每个卷积层都有大量的滤波器,直接从卷积层中修剪掉不重要的滤波器可以显著降低计算开销并加速模型。正如Li等人所指出的,从全连接层中消除参数将显著减少存储开销,因为全连接层是存储密集型的。

下面主要介绍下卷积层 进行剪枝的相关技术:
卷积层的剪枝旨在通过去除不重要的滤波器或连接,降低卷积层的计算量和存储开销,同时尽量保持模型的准确性。这部分内容主要介绍了多种针对卷积层的剪枝方法,具体如下:

  • 基于幅度的剪枝方法

    • Han等人的三步法:受早期剪枝方法和神经网络过参数化问题的启发,Han等人(2015)提出一种简单的基于幅度的三步法,如下图所示。先识别重要连接,然后修剪不重要的连接(将激活小于预定义阈值的权重连接剪掉),最后对修剪后的模型进行微调或重新训练以补偿精度损失。该过程重复多次,以减小模型整体大小,将密集网络转换为稀疏网络。此方法能同时修剪全连接层和卷积层,但存在模型结构不保留的问题,需要专门的硬件和软件进行推理。
      在这里插入图片描述
    • Guo等人的动态网络手术:通过连接剪枝降低网络复杂度。该方法分为修剪和拼接两部分,修剪时移除不重要的权重连接,拼接则在发现修剪或误剪的参数重要时恢复连接,修剪和拼接迭代进行。与Han等人(2015)的方法相比,动态网络手术在获得更高压缩率时所需的迭代次数更少,且能保持相当的精度。
  • 基于滤波器重要性的剪枝方法

    • Li等人的L1-范数排序法:提出根据滤波器对模型精度的影响来修剪卷积层滤波器,即按照L1-范数对滤波器进行排序,从每一层中修剪低排名的滤波器。这种方法采用一次性修剪和重新训练策略,减少了跨层修剪滤波器的时间,且不会创建稀疏网络,可与现有库配合使用,无需特殊的稀疏卷积库或硬件。使用该方法,他们将VGG16模型的MAC操作数从(3.13×10{8})减少到(2.06×10{8})。
    • Molchanov等人的组合优化法:将剪枝表示为一个组合优化问题,通过迭代修剪CNN滤波器来消除最不重要的特征图,并使用泰勒展开准则进行高效剪枝。该准则基于近似损失的变化,与OBD中使用的符号差损失近似不同,基于绝对差的剪枝在实验中表现出更好的精度。他们不断修剪和微调网络,直到在期望的精度和模型大小之间达到平衡。
    • He等人的两步剪枝法首先使用lasso回归方法识别最具代表性的通道,然后修剪冗余通道。在第二步中,对输出进行重建,以减少卷积网络参数的冗余。

    lasso回归(Least Absolute Shrinkage and Selection Operator regression),即最小绝对收缩和选择算子回归,由Robert Tibshirani在1996年提出。它是一种在回归分析中用于变量选择和正则化的方法,能有效解决多重共线性数据问题,在模型复杂度和预测能力间取得平衡。

    1. 原理与公式:lasso回归在普通线性回归的基础上添加了 L 1 L_1 L1正则化项。普通线性回归的目标是最小化预测值与真实值之间的误差平方和,即最小化损失函数 J ( β ) = ∑ i = 1 n ( y i − ∑ j = 0 p β j x i j ) 2 J(\beta)=\sum_{i = 1}^{n}(y_i-\sum_{j = 0}^{p}\beta_jx_{ij})^2 J(β)=i=1n(yij=0pβjxij)2 ,其中 y i y_i yi 是第 i i i个样本的真实值, x i j x_{ij} xij是第 i i i个样本的第 j j j个特征值, β j \beta_j βj是对应的回归系数, n n n是样本数量, p p p是特征数量。lasso回归则在损失函数中加入 L 1 L_1 L1正则化项,新的损失函数为 J ( β ) = ∑ i = 1 n ( y i − ∑ j = 0 p β j x i j ) 2 + λ ∑ j = 1 p ∣ β j ∣ J(\beta)=\sum_{i = 1}^{n}(y_i-\sum_{j = 0}^{p}\beta_jx_{ij})^2+\lambda\sum_{j = 1}^{p}|\beta_j| J(β)=i=1n(yij=0pβjxij)2+λj=1pβj ,这里的 λ ≥ 0 \lambda\geq0 λ0是正则化参数。 L 1 L_1 L1正则化项会使一些回归系数 β j \beta_j βj被压缩为0,从而起到变量选择的作用,即自动筛选出对目标变量有重要影响的特征,剔除不重要的特征。
    2. 特点与优势:lasso回归的突出特点是能实现变量选择,从众多特征中筛选出真正重要的变量,简化模型结构,避免过拟合。当数据存在多重共线性(即特征之间高度相关)时,普通回归方法可能不稳定,而lasso回归通过 L 1 L_1 L1正则化可有效处理该问题,提高模型的稳定性和泛化能力。例如在房价预测中,可能存在多个相关特征(如房屋面积、房间数量、周边设施等),lasso回归能挑选出对房价影响显著的特征构建模型。
    3. 应用场景:在生物学领域,lasso回归可用于基因数据分析。从大量基因表达数据中选择与特定疾病相关的关键基因,帮助理解疾病的发病机制和进行疾病预测。在经济学研究中,面对众多可能影响经济指标(如GDP增长、通货膨胀率等)的因素,lasso回归能筛选出主要的经济变量,构建简洁有效的经济模型进行预测和政策分析。在文本分类任务里,文本数据通常具有高维特征(如词向量表示),lasso回归可选择出对文本分类贡献较大的特征词,提高分类模型的效率和准确性。
  • 其他剪枝方法

    • Liu等人的稀疏分解:Liu等人(2015)提出稀疏分解来减少卷积网络参数的冗余,通过应用两阶段分解探索内核的通道间和通道内冗余。在ImageNet数据集上,该方法在精度损失不到1%的情况下,使90%的模型参数稀疏化,并将卷积层操作转换为稀疏矩阵乘法,同时还提出了一种新的高效矩阵乘法算法来在CPU上高效处理稀疏内核。
    • Zhu和Gupta的渐进式剪枝:Zhu和Gupta(2017)提出一种简单的基于幅度的渐进式剪枝方法,可在训练过程中进行,只需极少调整就能达到预设的稀疏度水平。实验结果表明,该算法通过修剪小幅度权重减少了网络中非零元素的数量。他们还发现,大稀疏网络比可比大小的小密集模型表现更好,能达到相同或更高的精度。
    • Gordon等人的MorphNet:Gordon等人(2018)提出MorphNet,用于自动化神经网络结构设计和资源受限的优化。它能学习一种结构,在减少目标资源使用(如每次推理的FLOPs数量或模型大小)的同时提高性能。MorphNet使用宽度乘数和稀疏正则化器这两种混合方法,并在两者之间交替迭代,以收缩或扩展网络。
    • Luo等人的ThiNet:Luo等人(2018)提出ThiNet,其滤波器剪枝基于下一层计算的统计信息,而非当前层。该方法主要包括修剪和后处理两个步骤,后处理中提出组卷积与洗牌(GCOS)进一步减小模型大小。ThiNet与其他方法不同,减少了AlexNet的大小至2.66MB,使其更适合嵌入式设备,同时保持了原始精度。处理步骤如图所示:
      在这里插入图片描述
    • Lin等人的运行时神经剪枝:可在运行时根据输入和当前特征图对神经网络进行剪枝,保留网络能力。为学习最佳剪枝策略,他们基于强化学习训练一个智能体,并将每个卷积层的剪枝建模为马尔可夫决策过程。这种方法的优点是能根据可用资源调整平衡点,单个模型可适用于从受限设备到大型数据中心的不同场景。
    • He等人的AMC:提出AMC(AutoML for model compression)。传统模型压缩技术基于手工制作的启发式和基于规则的策略,需要领域专家参与,效果不佳且耗时。AMC使用强化学习提供模型压缩策略,针对延迟关键型应用和质量关键型应用分别引入资源约束压缩和精度保证压缩两种策略。
    • Chen和Zhao的基于特征表示的层剪枝:与早期根据权重信息进行连接或滤波器剪枝的技术不同,该方法利用卷积层中学习到的特征来识别不重要的连接,然后在层级别进行剪枝。如下图所示:
      在这里插入图片描述
    • Frankle和Carbin的“中奖彩票”理论:Frankle和Carbin(2019)提出每个大型密集、随机初始化的前馈网络都包含子网络,他们称之为“中奖彩票”。训练这些子网络时,需要使用与训练原始网络相同的初始权重初始化才能获得有竞争力的性能。该理论强调了剪枝作为一种神经架构搜索形式的重要性。不过,他们仅在图像分类任务和小数据集(CIFAR10和MNIST)上进行了实验,未在像ImageNet这样的大数据集上验证。
      • Crowley等人的实验验证:Crowley等人(2018)在ResNets和DenseNets架构上应用L1-范数和Fisher剪枝,发现对于给定的参数预算,从头开始训练的缩小版网络比大型剪枝并微调的网络表现更好。这一实验结果支持了剪枝作为一种架构搜索的观点。
  • 表 1:总结了在 ImageNet 数据集上不同深度神经网络(DNN)压缩技术以及标准预训练模型的比较情况。
    在这里插入图片描述

  • 表 2:汇总了不同 DNN 压缩技术在 CIFAR10、CIFAR100 和 MNIST 数据集上的压缩和加速结果,涵盖了如 LeNet - 5、VGG16 等模型在不同压缩方法下的参数变化、计算量减少等数据。
    在这里插入图片描述

  • 图 9:展示了在 ImageNet 数据集上,AlexNet 和 VGG16 架构应用不同压缩方法(PR:剪枝,PQ:剪枝和量化,LRF:低秩分解)后的参数数量(M)和 top5 准确率(%)的关系。图中蓝色点表示不同方法对应的参数数量和准确率的坐标点,线条连接方法名称和相应的点,可直观对比不同压缩方法对模型参数数量和准确率的影响。
    在这里插入图片描述

2.2 量化

  • 量化的基本概念与目的:在 DNN 中,权重通常以 32 位浮点数存储,量化旨在通过减少表示权重和激活值所需的位数,降低所需的 MAC 操作数,进而减小训练好的 DNN 模型的大小
  • 原理:将权重量化为 16 位、8 位、4 位甚至 1 位(权重二值化,仅用二进制值表示权重),还可对梯度和激活值进行量化表示。此外,通过对权重聚类,使同一聚类中的权重共享相同值,仅需微调这些共享权重,而非全精度的 32 位权重,以此减少存储和计算开销,提高 DNN 的推理速度。
  • 量化的影响因素与分类:不同的量化方案会带来不同的加速性能,如均匀量化在某些硬件上可加速推理阶段,非均匀量化则主要用于减小模型大小。批归一化对量化后的 DNN 性能影响较大,它有助于减少层间依赖,提高模型精度,虽不是专为量化优化而设计,但能提升几乎所有量化技术的效率。根据应用阶段不同,量化方法可分为训练期间量化和推理时量化。
2.2.1 训练期间量化

这部分内容主要介绍了在神经网络训练期间应用的量化方法,通过减少权重和激活值表示的位数,降低模型存储需求与计算复杂度,同时维持模型性能,具体内容如下:

  • 期望反向传播算法(EBP):Soudry等人(2014)提出EBP算法,用于支持具有离散(如 +1到 -1 )或连续(实数)权重的多层神经网络训练。传统基于反向传播(BP)或梯度下降的方法不适合训练此类网络。EBP算法在八个二进制文本分类任务中表现优于BP算法,训练出的具有二进制权重的多层神经网络性能更优。该算法为在小型受限设备上实现多层神经网络提供了可能。

  • 共享权重:Chen等人(2015b)提出HashedNets,利用哈希函数将权重连接分组到哈希桶中,同一哈希桶中的权重共享相同值w_i,并在训练期间进行微调 。其公式为:在这里插入图片描述
    其中 h^{l} 是哈希函数,将键 ( i, j ) 映射到自然数 1… K^l 内。

    • 例如,已知 ( h^{1}(2,1)=1 ) ,那么 ( V{1}{2,1}=w{1}=3.2 ) ,这意味着在第1层中,从第2个神经元到第1个神经元的连接权重 ( V_{2,1}^{1} ) 被分配到了编号为1的哈希桶,其权重值与该哈希桶的共享权重 ( w^{1} ) 相同,为3.2 。
    • 通过这种方式,模型中的权重数量得以减少。如下图所示,输入层和隐藏层之间原本有16个权重连接(表示为 ( V1 ) ),经过哈希函数分组后,仅用3个共享权重(表示为 ( W^{1} ) )就可以表示,压缩因子达到0.25;在隐藏层和输出层之间,原本的8个权重( ( V^{2} ) )被3个实权重( ( W^{2} ) )替代。这种权重共享策略有效地降低了模型的存储需求,实现了模型压缩。
      在这里插入图片描述
    • HashedNets主要针对FC网络,但作者认为其理念可扩展到CNNs和RNNs。还可对HashedNets的结果应用多种低精度方法,进一步减小模型大小。
  • 向量量化的应用:Gong等人(2015)运用向量量化压缩DNNs,重点关注存储密集型的密集层以减少模型存储需求。他们采用了标量量化(使用K-均值)、乘积量化和残差量化三种方法,实验表明乘积量化效果最佳。然而,该方法仅适用于FC层,无法用于卷积层。

  • 不同精度权重训练的研究:Courbariaux等人(2015a)对神经网络进行了浮点、定点和动态定点权重的训练实验,发现动态定点权重适用于DNN训练。Courbariaux等人(2015b)提出BinaryConnect,将权重限制为仅两个值( -1或 +1 ),使许多MAC操作可被简单累加替代,在训练的前向和后向传播中都使用二进制权重。其将实值权重随机转换为二进制权重的公式为:在这里插入图片描述
    其中w_b是二值化权重, w 是实值权重,σ 是 sigmoid 函数。与其他方法不同,BinaryConnect使用BP算法训练,且不适用于卷积网络。

  • 权重和激活值的量化拓展:Lin等人(2016b)发现训练后的网络中许多权重为零或接近零,扩展了BinaryConnect的思想,使权重值在[ -1, 0]和[0, +1]区间内,并引入量化反向传播以消除反向传播中的乘法操作,在MNIST、CIFAR10和SVHN数据集上取得了较好的实验结果。Hubara等人(2016)提出二值化神经网络(BNN),将权重和激活值都限制在 +1和 -1之间,通过编程优化的GPU内核实现了MNIST数据集上比未优化GPU内核快7倍的速度,在多个数据集和深度学习框架上取得了优异的性能和加速效果。

  • 考虑量化对损失影响的方法:Hou等人(2017)提出损失感知二值化方案,考虑二值化对损失的影响,该方案优于其他权重二值化方法。Hou和Kwok(2018)进一步将此思想扩展到三值化,将三值化对损失的影响表示为优化问题,并使用近端牛顿法求解,实验结果表明该损失感知三值化方案优于其他先进方法。

  • 不同网络对量化的适应性研究:Sung等人(2015)通过实验发现,浮点网络和基于重新训练的三值网络之间的性能差距与网络大小有关,大模型对量化的适应性更强,小网络则较弱。

  • 近似CNN的量化方法:Rastegari等人(2016)提出两种近似CNN的量化方法,即二进制权重网络(权重滤波器为二进制值,可使网络大小减少约32倍)和XNOR - 网络(输入和滤波器均为二进制值,可带来约58倍的加速),该方法具有通用性,可应用于任何基于CNN的模型,并在ImageNet数据集上对不同网络架构进行了比较。

  • 低比特宽度训练的CNN:Zhou等人(2016)提出DoReFa - Net,用于训练具有低比特宽度权重、激活值和梯度的CNN。研究发现权重和激活值可确定性地量化,而梯度需随机量化。在ImageNet数据集上的实验表明,从AlexNet派生的DoReFa - Net在特定比特宽度下可在验证集上达到46.1%的top1准确率。

  • 硬件实现相关的量化方法:Lin等人(2017a)提出带可分离滤波器的二值化CNN(BCNNwSF),通过对BCNN内核应用奇异值分解(SVD)来减少CNN的参数和大小,并在FPGA硬件上进行了性能比较,发现BCNNwSF在有一定逻辑开销的情况下性能优于BCNN。Kim和Smaragdis(2018)提出位运算神经网络(bitwise NNs),使用位运算XNOR替代二进制权重和量化输入信号上的MAC操作。Juefei - Xu等人(2017)提出局部二进制卷积(LBC)层,作为标准CNN卷积层的替代,具有固定二进制权重。

  • 解决激活函数量化难题的方法:由于ReLU激活函数输出无界,导致激活值量化困难,Cai等人(2017)应用半波高斯量化方案对激活值进行量化,利用Lloyd算法找到优化的量化尺度,但该方法在整个训练过程中离线固定量化参数,无法最优地学习裁剪水平。Choi等人(2018)提出参数化裁剪激活(PACT)函数,公式为在这里插入图片描述
    通过引入新的激活裁剪参数 α 并在训练中优化,动态调整 α 的值,将激活值范围限制在[0, 1],在2位量化时准确率最高,4位量化时与单精度浮点表示的准确率相似 。

2.2.2 推理时量化

这部分内容主要介绍了用于高效推理的量化方法,通过在推理阶段对模型进行量化,减少模型大小、提高推理速度和降低能耗。

  • 基于VLSI的实现与固定点优化:Kim等人(2014)提出用于音素识别的基于VLSI的DNN实现,使用固定点优化将每个权重表示为(+Δ),0或(-Δ),用2比特表示每个权重。研究表明,这种基于VLSI的DNN实现对资源受限设备有利。Hwang和Sung(2014)扩展了这一思想,采用基于重新训练的固定点优化方法。该方法配备两组权重,一组是浮点主权重,另一组是量化版本。由于梯度值较小难以改变量化权重的值,所以在训练时使用浮点权重,在进行前向和反向传播时重新量化,此方法被视为后续量化方法的标准。
  • 剪枝、量化和霍夫曼编码的结合:Han等人(2016b)提出一种三阶段流水线方法,包括剪枝、量化(多个连接共享相同权重)和霍夫曼编码,以减小预训练模型的大小。
    • 首先去除不重要的权重连接,然后进行权重量化,量化后对网络重新训练以恢复精度,最后应用霍夫曼编码进一步减小模型大小。
      在这里插入图片描述
    • 例如,在ImageNet数据集上训练的VGG16模型,通过该方法其大小从550MB减小到11.3MB。这里的权重量化使用K-均值聚类形成权重簇,同一簇中的权重共享相同值,计算梯度时使用共享权重,压缩率(r)的计算公式为:

在这里插入图片描述其中(k)是簇的数量,(n)是连接数,每个连接由(b)比特表示。

  • 其他量化方法:Gupta等人(2015)使用16位宽定点和随机舍入训练DNN。Li和Liu(2016)提出三值权重网络(TWN),将权重量化为((-W_{l}, 0, +W)),通过对称阈值(\pm \Delta_{l})和缩放因子(W_{I})进行量化,公式为
    在这里插入图片描述
    并通过最小化三值权重与全精度权重之间的(L2)距离来得到层间的(W_{I})和(Δ_{I})值,公式为:在这里插入图片描述
    实验结果表明,三值模型在ImageNet数据集上使用ResNet模型时优于原始精度模型。Zhu等人(2017)引入训练三值量化(TTQ),在推理时需要2比特权重和缩放因子,在ImageNet数据集上对AlexNet的实验中,该方法表现优于Li和Liu(2016)的方法。

  • 改进量化分布与加速压缩:Zhou等人(2017b)提出平衡量化方法,通过直方图均衡化改善量化值的分布,以提高量化后神经网络的预测精度。Cheng等人(2017)提出Q - CNN(量化CNN),通过最小化特定层响应的近似误差,同时加速和压缩CNN,能够成功量化FC层和卷积层,实现4 - 6倍的加速和15 - 20倍的压缩。

  • 结构化剪枝与定点优化:Anwar等人(2017)在不同尺度上对卷积层进行结构化剪枝(通道级、内核级和内核内跨步稀疏性),使用粒子滤波方法定位剪枝候选,然后应用固定点优化(4比特和5比特精度)进一步减小模型大小,使模型更适合嵌入式设备的片上实现。但该方法在处理深度CNNs的剪枝时存在不足。

  • 硬件加速器与量化模型:Zhao等人(2017)提出用于FPGA实现的二值化神经网络加速器。Hubara等人(2017)提出量化神经网络,在训练和推理时对权重和激活进行量化,将参数量化为6比特以使用位运算进行梯度更新。实验中,AlexNet量化为1比特权重和2比特激活,RNN量化为4比特,均达到与32比特全精度模型相同的精度。

2.3 知识蒸馏

知识蒸馏(KD)是一种将大而复杂网络(教师模型)学到的知识转移到小而轻量网络(学生模型)的技术,旨在在保持模型性能的同时减小模型规模和计算量。这部分内容详细介绍了知识蒸馏的概念、发展历程、具体方法以及相关实验结果,具体总结如下:

  • 知识蒸馏的概念与目的:在知识蒸馏中,在大型数据集上训练的大模型(教师模型)能很好地对未见数据进行泛化,其学到的知识会被转移到较小且较轻量的学生模型中。教师模型可以是单个大模型或多个分别训练模型的集合。训练学生模型的主要目标是学习教师模型的泛化能力,同时保持自身的轻量性。通过知识蒸馏,可以显著减少模型参数数量和乘法运算量,使模型更小,这在需要小型且计算量低的模型场景中非常有用。知识蒸馏与迁移学习不同,迁移学习是使用相同模型架构和已学习权重,仅根据应用需求替换部分全连接层。
  • 知识蒸馏的发展历程
    • 早期研究:Buciluǎ等人(2006)首次引入知识转移,将大型复杂的集成模型压缩成更小、更快的模型,且性能损失可忽略不计。他们认为大集成模型学到的知识可转移到小模型中,在八个测试问题上的模型压缩结果表明,压缩后的神经网络小1000倍且快1000倍。
    • 扩展与改进:Ba和Caruana(2014)扩展了上述思想,通过实验发现大DNN学习的复杂函数可由小浅层网络学习,且能达到与大DNN相同的准确率。他们在训练学生模型时使用教师模型softmax前的logits,发现这种方式能更好地让学生模型学习到教师模型的内部知识,通过最小化大模型和小模型产生的logits的平方差来实现知识转移。
    • 引入温度参数:Hinton等人(2015)的研究表明,使用大模型提取数据特征更方便,之后可将知识转移到小模型以方便部署。他们引入温度( T T T)概念生成软目标,并在训练小模型时使用相同温度,使两个模型产生的软目标相匹配。在DNN中,softmax层通过公式 q i = e x p ( z i / T ) ∑ j e x p ( z j / T ) q_{i}=\frac{exp \left(z_{i} / T\right)}{\sum_{j} exp \left(z_{j} / T\right)} qi=jexp(zj/T)exp(zi/T)将logits z i z_{i} zi转换为类概率 q i q_{i} qi,当 T = 1 T = 1 T=1时为普通softmax函数,较大的 T T T值会产生更软的类概率分布。同时,他们还建议在训练小模型时同时使用硬目标和软目标,此时目标函数是教师模型软目标与学生模型软目标之间的目标函数,以及实际硬目标与学生模型硬目标之间的目标函数的组合。
  • 基于知识蒸馏的方法
    • FitNets:Romero等人(2015)提出一种两阶段策略训练深度网络,教师模型的中间层为训练更深更窄的学生模型提供“提示”,除输出外,教师模型的中间层表示也作为提示提供给学生模型,以提高其性能。
    • Net2Net:Chen等人(2016)提出基于函数保持变换的技术,将大网络的知识转移到小网络中,与FitNets不同,Net2Net能显著加速和节省训练工作量。
    • 基于知识蒸馏的目标检测框架:Shen等人(2016)利用知识蒸馏和提示框架学习紧凑的目标检测模型,将行人检测表示为二进制分类任务,蒸馏后的模型比教师模型快8倍且小21倍。Chen等人(2017)引入基于知识蒸馏的端到端可训练框架,用于多类目标检测,与Shen等人(2016)的方法不同,该方法适用于多类目标检测。
    • 基于改写的知识转移方法:Kim等人(2018)提出基于改写的知识转移方法,使用卷积操作对教师模型知识进行改写并转移到学生模型。该方法基于改写器和翻译器两个卷积模块,实验结果表明,这种方法在ResNet、WideResNet和VGG16架构上,使用CIFAR10、CIFAR100和ImageNet数据集时,性能优于经典知识蒸馏和注意力转移方法。
    • On-the-fly Native Ensemble (ONE):Lan等人(2018)提出ONE,这是一种高效的单阶段在线知识蒸馏方法。训练时,ONE为目标网络添加辅助分支创建多分支变体,然后从所有分支创建原生集成教师模型。使用两个损失项训练每个分支,即通常的softmax交叉熵损失和蒸馏损失。实验表明,ONE能在一个阶段训练出更具泛化能力的目标网络。
    • 匹配Jacobian:Srinivas和Fleuret(2018)提出匹配Jacobian(梯度)的方法将教师模型的知识转移到学生模型,该方法类似于在训练时向输入添加噪声的软目标匹配。他们在CIFAR100数据集上训练9层VGG - 类似的教师模型,并使用匹配Jacobian在数据集子集上训练4层学生模型,实验结果表明,当匹配Jacobian与常规交叉熵和激活匹配一起应用时,可提高学生模型的性能。
  • 知识蒸馏与其他技术结合:Wu等人(2016)将知识蒸馏与量化结合训练二值化神经网络,在ImageNet验证集上达到了84.1的top5分类准确率,优于Rastegari等人(2016)和Hubara等人(2017)的结果。同时他们发现仅使用软目标训练网络并不能提高性能,同时使用常规目标和软目标训练可提高网络性能,且训练时较低的学习率有助于显著加速收敛速度。Mishra和Marr(2017)将知识蒸馏应用于提高低精度网络性能,提出“Apprentice”方法。在ImageNet数据集上对ResNets网络变体应用3比特和4比特精度时,Apprentice取得了新的最先进准确率。他们提出了三种不同的训练方案:一是低精度学生模型和全精度教师模型都使用知识蒸馏从头开始训练;二是使用训练好的全精度教师模型的蒸馏知识训练低精度学生模型,该方案使学生模型收敛更快;三是学生模型和教师模型都先全精度训练,然后降低学生模型精度并进行微调 。Polino等人(2018)提出两种方法:一是量化蒸馏,用教师模型的蒸馏知识训练低精度学生模型;二是可微量化,通过SGD优化量化点以更好地拟合教师模型的行为。实验结果表明,量化的小学生网络可达到与全精度大教师网络相同的准确率水平。

2.4 低秩分解

低秩分解(Low-rank factorization)是模型压缩和加速的重要技术,通过将大的权重矩阵分解为较小的矩阵来减少模型参数数量,提升存储和计算效率

该部分内容详细介绍了低秩分解在神经网络模型压缩中的应用,包括具体方法、应用场景及相关实验结果,具体总结如下:

  • 低秩分解的基本原理:在低秩分解中,具有 m × n m×n m×n维度且秩为 r r r的权重矩阵 A A A会被较小维度的矩阵替换。在feed-forward NN和CNN中,常用奇异值分解(SVD)来降低参数数量。对于任意矩阵 A ∈ R m × n A \in \mathbb{R}^{m ×n} ARm×n,存在分解 A = U S V T A = U S V^{T} A=USVT ,其中 U ∈ R m × r U \in \mathbb{R}^{m ×r} URm×r S ∈ R r × r S \in \mathbb{R}^{r ×r} SRr×r V T ∈ R r × n V^{T} \in \mathbb{R}^{r ×n} VTRr×n S S S是对角矩阵,对角线上是奇异值,且每个奇异值都大于下一个对角元素, U U U V V V是正交矩阵。通过这种分解,大矩阵被分解为较小矩阵,从而减少模型大小,其中对密集层矩阵的分解主要改善存储需求,对卷积滤波器的分解则使推理过程更快。

  • 低秩分解在模型压缩中的应用

    • 减少DNNs参数数量:Sainath等人(2013)提出对最终权重层进行低秩矩阵分解,因为大部分参数集中在最终权重层。该方法通过将原始权重矩阵分解为两个较小的权重矩阵,在满足 L 1 L1 L1 - 基于的正则化条件下,降低了参数数量,相比全秩矩阵表示,速度提升了30 - 50%。
    • 加速CNN计算:Denton等人(2014)受Denil等人(2013)启发,利用低秩近似减少卷积层和全连接层的计算量。Rigamonti等人(2013)用低秩滤波器近似已训练的CNN,使前两个卷积层的权重内存需求减少2 - 3倍,密集层减少5 - 13倍。Jaderberg等人(2014)提出使用SVD的张量分解方法,减少CNN的参数数量并加速网络,实验表明大部分计算时间花在网络的前两层。Zhang等人(2015)提出一种加速非线性CNN的方法,实验结果显示该方法比Jaderberg等人(2014)的方法更准确,且加速效果不仅限于前两层。
    • 其他相关方法:Lebedev等人(2015)引入基于张量分解和判别式微调的两步法,通过非线性最小二乘法计算4-D张量的低秩CP-分解,将原始卷积层替换为一系列较小滤波器的卷积层,最后通过反向传播进行微调。Novikov等人(2015)将全连接层权重矩阵转换为张量列车表示,减少了参数数量。Kim等人(2016)提出一次性压缩方法,包括秩选择、低秩张量分解和微调三个步骤,使用变分贝叶斯矩阵分解(VBMF)确定每层内核的秩,并应用tucker分解进行全模型压缩,通过最小化张量的重建误差而非非线性响应。Tai等人(2016)提出一种新算法计算低秩张量分解,以消除卷积滤波器的冗余,相比之前的方法,在更大的网络上进行了实验,证明了低秩张量分解对加速CNNs的有效性。Ioannou等人(2016)提出一种基于低秩表示的新方法,在训练过程中从头学习滤波器,同时引入了一种新的权重初始化方法。Alvarez和Salzmann(2017)建议在训练过程中对滤波器进行低秩分解,通过引入正则化器鼓励每层矩阵参数具有低秩值,并将其与稀疏诱导相结合以实现更多压缩。Zhang等人(2016)提出针对非常深的CNNs(层数>10)的压缩和加速方法,该方法考虑非线性单元,基于广义SVD实现解决方案,避免使用随机梯度下降(SGD)。Yu等人(2017)提出统一框架,将权重矩阵的低秩和稀疏分解集成,用于DNN的压缩。Li和Shi(2018)提出基于约束优化的低秩近似(COBLA)方法,以找到训练好的CNN的最优低秩近似,将MAC操作数量和模型存储大小作为约束条件。
  • 低秩分解与其他技术结合:Shi等人(2018)将低秩分解和量化相结合,用于压缩声学事件检测(AED)模型。首先对神经网络进行常规训练,然后应用低秩分解,接着进行量化和微调,实验结果表明该方法可将模型压缩到原始大小的不到1%。Povey等人(2018)提出一种分解的一维CNN,类似时间延迟神经网络,通过SVD压缩网络层,并在训练时考虑其中一个分解矩阵为半正交,同时提出其他改进,如跳跃连接、共享随机失活掩码等,获得了最先进的结果。

  • 硬件相关及其他辅助技术:除上述压缩和加速技术外,还有一些硬件导向的方法用于加速DL模型,但这些方法通常仅适用于小模型,对大模型效率不高。Han等人(2016a)实现了高效推理引擎(EIE),用于处理压缩后的DL模型的高效推理,EIE处理权重共享并执行稀疏矩阵乘法。Ioffe和Szegedy(2015)引入批归一化,通过减少层间的内部协变量偏移来加速DNN的训练,使归一化成为神经网络架构的一部分,并对每个小批量进行归一化。

3 RNN 模型压缩技术

背景:近年来,RNN应用在 像语音识别,语言翻译,文本生成,情感分析,自然语言处理(NLP)等领域,与CNN相比,RNNS需要更长的时间来训练,并且需要更多的内存和计算能力,这增加了硬件和软件实现的复杂性。
表3显示了流行的RNN压缩和加速技术的比较。
在这里插入图片描述
下面具体讲解一下循环神经网络(RNN)的压缩技术:

  • 量化技术:Ott 等人在 2016 年引入有限数值精度,通过实验发现其能有效减少 RNN 的权重精度,降低计算和存储开销,加速训练和推理过程,且发现权重二值化在 RNN 中效果不佳。Shin 等人在 2016 年提出基于重新训练的量化方法,通过浮点训练、敏感性分析和重新训练三个步骤,优化定点 LSTM 的权重和信号字长,在减少模型大小和加速 LSTM 方面取得了良好效果。Xu 等人在 2018 年提出多比特交替量化方案,使用 2 比特权重和激活可使模型大小约减少 16 倍,速度提升约 6 倍;使用 3 比特时,模型大小约减少 10 倍,速度提升约 3 倍 。
  • 分解技术:Prabhavalkar 等人在 2016 年提出基于 SVD 的分解技术,用于压缩 RNN 的循环和非循环(层间)权重矩阵,成功将 LSTM 声学模型压缩至原大小的三分之一。
  • 剪枝技术:Narang 等人在 2017 年提出在训练过程中对权重进行剪枝,使权重矩阵稀疏,从而减少模型大小,且稀疏矩阵可减少推理时间。该方法的优点是无需重新训练模型,使用简单的单调递增阈值方法使权重矩阵稀疏,可使模型减少约 90%,速度提升 2-7 倍,适用于普通 RNN 和 GRU。Narang 等人在 2018 年进一步提出在训练网络时使用 lasso 正则化将权重矩阵中的块归零,构建 80 - 90% 的块稀疏 RNN,使模型大小减少 10 倍,在普通 RNN 和 GRU 上都能高效运行。
  • 其他技术:Lobacheva 等人在 2017 年应用稀疏变分 dropout(sparse VD)技术,使模型高度稀疏,在情感分析任务中实现了 99.5% 的稀疏度。Zhang 等人在 2018 年提出 DirNet,基于快速字典学习算法,可根据目标要求动态调整不同层的压缩率。Ardakani 等人在 2019 年引入一种训练方法,使 RNN 能够学习二进制和三进制权重,用累加操作替代乘法累加操作,在 ASIC 平台上,具有二进制 / 三进制权重的 LSTM 模型大小减少 12 倍,速度提升 10 倍。He 等人在 2016 年提出量化门结构GRU 和 LSTM 单元互连的方法,并提出平衡量化以降低性能下降。Demeester 等人在 2018 年提出设计具有预定义稀疏性的词嵌入层和网络的新策略。Kusupati 等人在 2018 年提出 FastRNN 和 FastGRNN,用于高效训练 RNN。Lobacheva 等人在 2018 年应用贝叶斯稀疏化方法对门控 RNN 进行稀疏化处理。Zhu 等人在 2018 年提出一种新的高效稀疏持久 RNN 算法,用于加速剪枝后的 RNN

4 传统的ML算法压缩技术

该部分主要介绍了传统机器学习算法的压缩技术,旨在降低这些算法的复杂度,使其能在资源受限的环境中高效运行,具体内容如下:

  • 决策树的压缩技术:Li 等人在 2001 年运用动态规划对决策树进行剪枝,该方法在分类准确率上优于基于成本复杂度的剪枝技术,但局限于仅适用于二叉树。Shotton 等人在 2013 年提出 “决策丛林”,有效解决了传统决策树随着深度增加内存需求呈指数增长的问题,同时通过引入新的节点合并方法,优化了特征和有向无环图结构,提升了模型的泛化能力。此外,Sherali 等人在 2009 年提出了针对决策树的最优约束剪枝策略,采用 0-1 编程方法和多种目标函数,进一步优化决策树模型。
  • 基于 KNN 的压缩算法:Gupta 等人在 2017 年受 KNN 启发提出 ProtoNN,它利用数据集的稀疏低维投影、原型和联合优化,能够在像 Arduino UNO 板这样计算能力低、存储容量小的设备上实现实时预测,且保持可接受的准确率,在资源受限设备上具有良好的应用潜力。
  • 分类任务的压缩算法
    • SVM 的压缩技术:Boni 等人在 2007 年针对在 8 位 微控制器上实现支持向量机(SVM),提出了一种新的模型选择算法,使 SVM 能够适应硬件的约束条件,实验表明该实现方式与浮点表示的 SVM 具有相同的准确率,为 SVM 在低功耗、低成本硬件上的应用提供了有效途径。
    • HyCARCE(Hyperellipsoidal Clustering for Resource-Constrained Environments)是由 Moshtaghi 等人在 2011 年提出的一种用于资源受限环境的聚类算法。它的主要目标是在资源有限的情况下,实现高效的聚类操作,具有计算复杂度低、鲁棒性强的特点;主要包含初始化、细胞修剪、扩展和重新调整,以及去除冗余椭圆体等步骤。该算法在资源受限环境下表现出色,相比其他现有聚类算法,HyCARCE 具有更好的分类准确率和更低的计算成本。
  • 随机森林的压缩技术:Nan 等人在 2016 年提出对随机森林进行剪枝,通过构建随机森林并根据全局资源约束对每棵树进行修剪,优化了模型的准确率和特征成本。Joly 等人在 2012 年探索了随机森林的可压缩性,应用 L1 范数正则化实现了在不降低准确率的前提下减少存储需求。
  • 其他相关算法:Kumar 等人在 2017 年提出 “Bonsai”,这是一种基于树的算法,与 Shotton 等人和 Jose 等人在 2013 年的方法相似,能够在资源稀缺的设备(如 Arduino Uno 板)上进行本地预测,可快速拟合到少量闪存中,并在慢速微控制器上实现毫秒级预测。

5 有效的网络体系结构

第五部分 主要介绍了几种在模型压缩和加速领域具有代表性的高效网络架构,主要包括 SqueezeNet、MobileNets、ShuffleNet 和 DenseNet,具体如下:

  • SqueezeNet:由 Iandola 等人于 2017 年开发,是一种小型的基于 CNN 的架构。它的参数数量比 AlexNet 少 50 倍,在 ImageNet 数据集上却能达到与 AlexNet 相同的准确率。通过应用深度压缩技术,其模型大小可压缩至小于 0.5MB,相较于原始 AlexNet 模型,尺寸缩小了 510 倍。
  • MobileNets:Howard 等人在 2017 年提出,专为移动设备设计。它通过扩展 深度可分离卷积,即:深度卷积和 1×1 逐点卷积结合 的概念来构建轻量化 DNN,将标准滤波器替换为深度卷积层和逐点卷积层。同时引入两个超参数,宽度乘数(α)用于降低计算成本和网络参数数量,分辨率参数 P 应用于输入图像,能使计算成本降低倍。在分类、目标检测等多种任务上的实验结果显示,MobileNets 性能优于其他现有方法,后续 Sandler 等人在 2018 年推出的 MobileNetsV2 取得了更优结果。
  • ShuffleNet:Zhang 等人于 2018 年 b 提出,是为移动设备设计的计算高效的 CNN 架构。它引入了逐点分组卷积和通道混洗这两种新操作,在保持与 AlexNet 相近准确率的同时,推理速度快约 13 倍。在 ImageNet 和 MS - COCO 目标检测数据集上的测试中,ShuffleNet 性能优于 MobileNets。之后的 ShuffleNetV2 通过通道混洗和拆分进一步提升了网络的准确率和效率。
  • DenseNet:Huang 等人在 2017 年提出,其网络的每一层都与每隔一层相连。这种结构带来了减少参数数量、实现特征重用和缓解梯度消失问题等优点。DenseNet 包含多个密集块,每个密集块又包含多个层。在 SVHN、CIFAR10、CIFAR100 和 ImageNet 数据集上的实验表明,DenseNet 的性能优于其他现有架构。

表格4比较了 在ImageNet数据集上不同的高效网络架构(分别从参数量、FLOP、错误率、准确率、)
在这里插入图片描述
另外,文中还介绍了几种针对资源受限设备设计的网络架构

  • ESPNet 及其改进版本 ESPNetv2:Mehta 等人在 2018 年提出 ESPNet,这是一种用于分割任务的网络架构,具有快速、低功耗、体积小和低延迟的特点。它基于卷积分解,引入了新的高效空间金字塔(ESP)模块,将标准卷积分解为扩张卷积和逐点卷积组成的空间金字塔形式。在相同的内存和计算约束条件下,ESPNet 的性能优于基于分解的其他网络架构,如 MobileNets 和 ShuffleNet。2019 年,Mehta 等人又推出 ESPNetv2,它在 ESPNet 的基础上进行扩展,且据报道其泛化能力比 ShuffleNetV2 更优。

  • 其他资源受限设备适用的网络架构

    • SqueezeDet:由 Wu 等人在 2017 年提出,用于自动驾驶中的实时目标检测任务。它专为资源受限设备设计,能满足自动驾驶场景下对模型实时性的要求。
    • SlimNets:Oguntola 等人在 2018 年提出,结合了知识蒸馏(KD)和剪枝等多种压缩技术,可将模型大小缩小为原始模型的 1/85,有效减少模型存储需求和计算量,适用于资源受限设备。
    • CondenseNet:Huang 等人在 2018 年提出,与 DenseNet 相比,在达到相似准确率的情况下,计算量仅为 DenseNet 的十分之一,通过优化网络结构,在资源受限的情况下也能实现较好的性能。
  • 架构对比:文中提到图 12(下图) 展示了表 4 中列出的各种高效网络架构在 ImageNet 数据集上基于参数数量和 top1 准确率的对比情况,帮助读者直观了解不同架构在模型复杂度和性能之间的平衡表现,这些架构在不同方面对模型进行优化,以适应资源受限的环境,推动了深度学习在实际应用中的发展。
    在这里插入图片描述

  • 文中还提到了度量模型的一个指标:提出了等式中的模型(QOM)度量的质量的公式。
    在这里插入图片描述

    • 以上公式基于模型的参数(权重)的准确性和数量,以评估ITH模型的质量。在等式中,α和β是模型精度和参数的重量(在我们的情况下,我们将α和β设置为0.5),ACCi是第i个模型的准确性,Parai是第i个模型的参数数量,maxpara是所有模型参数的最大值。
    • 如下图是文中介绍的模型的QoM值:(质量得分越接近1的体系结构更好)
      在这里插入图片描述

6 实验

6.1 模型和数据集

  • 实验方法:作者使用现有的剪枝(权重剪枝和滤波器剪枝)和量化方法进行实验。
  • 实验模型:采用 AlexNet 架构。AlexNet 原本有五个卷积层和三个全连接层,最初在 ImageNet 数据集上训练,最后一层有 1000 个节点。在本次实验中,根据 CIFAR10 和 MNIST 数据集的类别数量,对 AlexNet 的最后一层进行修改
    数据集介绍
  • CIFAR10 数据集:包含 50,000 张训练图像和 10,000 张测试图像,共十个不同类别,每个彩色图像的尺寸为 32×32。训练集每个类别有 5000 张图像,测试集每个类别有 1000 张图像。
  • MNIST 数据集:包含 60,000 张训练图像和 10,000 张测试图像,图像为手写数字的黑白图像,尺寸为 28×28。训练集每个类别有 6000 张图像,测试集每个类别有 1000 张图像。
  • 实验环境:所有实验都在 PyTorch 深度学习框架上进行。

6.2 结果

补充知识:
top1 准确性:指模型预测的最可能的类别(概率最高的类别)与真实类别相同的样本数占总样本数的比例。例如,在 100 个测试样本中,如果模型正确预测了 80 个样本的类别,那么 top1 准确性就是 80%。
top5 准确性:指模型预测的前 5 个最可能的类别中包含真实类别的样本数占总样本数的比例。这种评估方式相对更宽松,因为即使模型预测的最可能类别不是真实类别,但只要真实类别在它预测的前 5 个类别中,也会被视为正确预测。

  • 剪枝技术结果

  • Tables 5 and 6 展示了在基于幅度(Han 等人,2015 年)和结构化(Li 等人,2017 年;Liu 等人,2017 年,2019 年)的剪枝技术上进行的实验结果。

  • 剪枝实验

    • 基于 L1 范数的剪枝:先在 CIFAR10 和 MNIST 数据集上训练 AlexNet,之后依据卷积层滤波器的 L1 范数排序,一次性剪掉低排名滤波器,再微调剪枝后的模型以弥补精度损失。实验采用了有和没有 dropout 及批量归一化层的两种 AlexNet 变体,且在两个数据集上对 AlexNet 进行剪枝时应用了多种剪枝百分比。
    • 基于幅度的剪枝:参考 Han 等人 2015 年的方法,将 AlexNet 卷积层和全连接层的权重按幅度排序,按阈值将小幅度权重置零(剪枝)。实验以 Li 等人 2017 年方法训练的模型为基础模型,对 MNIST 和 CIFAR10 数据集进行操作,卷积层和全连接层使用不同剪枝百分比
    • 网络瘦身剪枝:依照 Liu 等人 2017 年的方法,训练带批量归一化层的 AlexNet 模型,每个通道有缩放因子 γ 并与通道输出相乘,用 L1 稀疏正则化器训练模型和缩放因子,全局剪掉缩放因子较小的滤波器(在两个不同实验中分别剪 40% 和 50%)
  • table 5 展示了在 AlexNet 架构上,运用上述不同 DNN 剪枝技术,在 CIFAR10 和 MNIST 数据集上的实验对比结果,涵盖剪枝前后的 top1 和 top5 验证准确性、参数数量、浮点运算次数,以及具体的剪枝比例等信息
    在这里插入图片描述

  • table 6 展示了一些AlexNet上的剪枝结果 在这里插入图片描述

  • 量化技术的结果

    • 表7显示了增量网络量化(INQ)和二值化神经网络(BNN)的结果。
      • 在INO中,AlexNet在具有全32位精度权重的CIFAR10数据集上接受训练。之后,训练的模型被量化为5位和8位。还在lmageNet数据集中测试了INQ。
      • 对于ImageNet实验,使用了Pytorch框架中提供的经过预先训练的AlexNet和ResNet18架构。表7显示了在ImageNet上对AlexNet和ResNet18进行8位和5位量化的结果。
        具有5位的Alexnet可以比其32位精度获得更好的TOP1精度(感觉不太对,和表格对不上)。

在这里插入图片描述

7 讨论和挑战

  • 平衡资源与性能:对于资源受限设备,找到模型压缩和加速过程中资源利用与系统性能之间的平衡点是一大挑战。不同的应用场景对模型的需求各异,如在计算能力和能源有限的设备上,需要在减少卷积层参数和滤波器以降低能耗的同时,保证模型精度;而在存储受限的设备上,则需着重减少密集层参数。因此,如何根据具体应用需求,灵活优化模型以适应不同资源条件,是亟待解决的问题。
  • 剪枝技术的困境:剪枝是去除网络冗余的常用技术,但存在诸多难点。非结构化剪枝后产生的稀疏矩阵难以被 CPU 和 GPU 高效处理,需要专门的硬件和软件支持,这增加了应用成本和复杂性。当前许多剪枝技术中,剪枝比例往往依赖人工设定,缺乏自动调整机制,难以适用于深度网络的复杂结构。结构化剪枝也面临挑战,如难以准确判断哪些滤波器或层可以被安全删除,需要更有效的评估方法来确定剪枝的重要性。
  • 量化技术的局限:量化虽能减少存储和计算开销,将浮点运算转换为位运算,便于在特定硬件上实现,但存在收敛困难的问题。量化时使用的舍入函数会导致网络训练时收敛速度变慢。现有的向量量化方法仅适用于预训练模型,无法在网络训练过程中发挥作用。而且,多数量化技术主要针对密集层,在 CNN 和 RNN 中的应用效果有待研究。另外,量化权重后如何有效更新梯度也是一大难题,开发能同时量化权重、梯度和激活的高效方法迫在眉睫。
  • 低秩分解的难题:低秩分解在模型压缩中应用广泛,但面临一些挑战。分解过程计算复杂,对计算资源要求高,且分解后的模型实现难度较大。当模型中存在全局平均池化层替代密集层时,低秩分解难以有效应用,需要寻找针对此类模型结构的改进方法,以确保分解效果和模型性能。
  • 知识蒸馏的应用局限:知识蒸馏在将教师模型的知识转移到学生模型方面取得了一定成果,但目前主要局限于分类任务。在目标检测、分割等其他任务中,由于这些网络的输出并非用于训练学生模型的 logits,导致难以直接应用知识蒸馏技术。因此,开发适用于非分类任务的知识蒸馏方法,是拓展其应用范围的关键。

8 结论和未来方向

结论部分总结了模型压缩和加速技术的研究现状,强调多领域协作的重要性;未来工作部分则从优化策略、创新方法、探索新方向和开发通用框架等方面,为后续研究提供了清晰的方向。

  • 结论:文章全面探讨了从深度神经网络(DNN)到传统机器学习算法的模型压缩和加速技术。当前,模型压缩和加速技术已取得显著进展,但要充分发挥其潜力,需多领域研究人员共同努力,整合软件、算法和硬件等多方面的研究成果。
  • 未来工作
    • 基于深度强化学习的策略学习:利用深度强化学习来寻找模型压缩和加速的最优策略,有望进一步优化模型性能。通过强化学习算法,智能体可以在不同的模型和任务环境中进行探索和学习,自动调整压缩和加速的参数及方法,以适应多样化的应用需求。
    • 创新滤波器剪枝方法:设计新的滤波器剪枝方法对小型设备至关重要。这需要在考虑加速和节能的同时,保持或提高模型的准确性。新方法应能更精准地识别卷积层中对模型性能影响较小的滤波器,在不损失过多精度的前提下,有效减少模型参数和计算量。
    • 探索深度网络层的剪枝:目前对极深网络层的剪枝研究较少,未来可探索如何在极深网络中进行有效的层剪枝。这需要解决如何准确判断深层网络中哪些层可以安全移除,以及如何在剪枝后维持网络的稳定性和性能等问题。
    • 按需模型压缩和加速:研究在给定资源限制(如存储、计算能力和能源)和用户指定性能目标(如准确性、延迟)下,模型能够被压缩和加速的程度。这将使模型在不同的应用场景中能够更加灵活地进行优化,满足实际需求。
    • 开发通用框架:构建通用的模型压缩和加速框架,为不同的模型和任务提供统一的优化解决方案。该框架应具有高度的兼容性和扩展性,能够适应各种类型的神经网络和机器学习算法,降低应用这些技术的门槛。
    • 挖掘传统机器学习算法潜力:传统机器学习算法在压缩和加速方面的研究还不够深入,未来有望通过开发新的算法,进一步挖掘其在减少计算复杂度和存储需求方面的潜力,提升其在资源受限环境中的实用性。

相关文章:

论文阅读:A comprehensive survey on model compression and acceleration

对模型压缩和加速的全面调查 阅读论文:A comprehensive survey on model compression and acceleration 摘要 背景:近年来,机器学习(ML)和深度学习(DL)在计算机视觉、自然语言处理、股票预测…...

IO流(师从韩顺平)

文章目录 文件什么是文件文件流 常用的文件操作创建文件对象相关构造器和方法应用案例 获取文件的相关信息应用案例 目录的操作和文件删除应用案例 IO 流原理及流的分类Java IO 流原理IO流的分类 IO 流体系图-常用的类IO 流体系图(重要!!&…...

Ubuntu+deepseek+Dify本地部署

1.deepseek本地部署 在Ollama官网下载 需要魔法下载 curl -fsSL https://ollama.com/install.sh | sh 在官网找到需要下载的deepseek模型版本 复制命令到终端 ollama run deepseek-r1:7b 停止ollama服务 sudo systemctl stop ollama # sudo systemctl stop ollama.servi…...

Java类中的this操作

在Java中,`this` 是一个关键字,用于引用当前对象的实例。它通常在类的方法或构造器中使用,主要有以下几种用途: 1. 区分成员变量和局部变量 当成员变量与局部变量同名时,使用 `this` 可以明确引用当前对象的成员变量。 public class Person { private String name; …...

云创智城YunCharge 新能源二轮、四轮充电解决方案(云快充、万马爱充、中电联、OCPP1.6J等多个私有单车、汽车充电协议)之新能源充电行业系统说明书

云创智城YunCharge 新能源充电行业系统说明书 ⚡官方文档 ⚡官网地址 1. 引言 随着全球环境保护和能源危机的加剧,新能源汽车行业得到了快速发展,充电基础设施建设也随之蓬勃发展。新能源充电行业系统旨在提供高效、便捷的充电服务,满足电…...

利用STM32TIM自制延迟函数实验

一、实验目的 掌握STM32定时器(TIM)的工作原理及配置方法学习使用HAL库实现微秒级/毫秒级延时函数理解定时器中断服务程序的编写规范 二、实验原理 ​定时器基础: STM32定时器包含向上计数器、向下计数器、中心对齐模式通过预分频器&#x…...

【STM32F103ZET6——库函数】6.PWM

目录 配置PWM输出引脚 使能引脚时钟 配置PWM 使能PWM 配置定时器 使能定时器时钟 使能定时器 例程 例程说明 main.h main.c PWM.h PWM.c led.h led.c DSQ.h DSQ.c 配置PWM输出引脚 PWM的输出引脚必须配置为复用功能。 注意:需要使用哪个引脚&…...

RabbitMQ系列(四)基本概念之Exchange

在 RabbitMQ 中,Exchange(交换机) 是消息路由的核心组件,负责根据规则将生产者发送的消息分发到对应的队列(Queue)中。以下是其核心功能与分类的详细说明: 一、Exchange 的核心作用 消息路由枢…...

解决“ReadTimeoutError:HTTPSConnectionPool”pip安装超时问题

安装pytorch时,出现如下报错信息: pip._vendor.urllib3.exceptions.ReadTimeoutError:HTTPSConnectionPool(host‘files.pythonhosted.org’, port443): Read timed out. 这是由于网络等各种原因导致安装超时引发的,可以按如下方式手动设置延…...

SAP中的屏幕PBO和PAI事件

PBO中的O,OUT,输出,和屏幕显示有关,比如屏幕元素的隐藏与显示,屏幕元素的输入状态的控制。 例如,控制屏幕所有元素为只读模式 LOOP AT SCREEN.SCREEN-INPUT 0.MODIFY SCREEN. ENDLOOP.PAI中的I,IN,输入,和屏幕输入有…...

Linux 环境“从零”部署 MongoDB 6.0:mongosh 安装与数据操作全攻略

前提 完成linux平台部署MongoDB【部署教程】且完成mongosh的安装 由于本人使用的是6.0版本的MongoDB,新版本 MongoDB(尤其是 6.0 及以上版本)已经不再默认捆绑传统的 mongo shell,而改用新的 MongoDB Shell(mongosh&am…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(4)

详解(4) 初始化配置转储结构(config_dump) if (ngx_array_init(&cycle->config_dump, pool, 1, sizeof(ngx_conf_dump_t))! NGX_OK){ngx_destroy_pool(pool);return NULL;}ngx_rbtree_init(&cycle->config_dump_rb…...

Eclipse 编译项目指南

Eclipse 编译项目指南 引言 Eclipse 是一款功能强大的集成开发环境(IDE),广泛用于Java、C/C、Python等多种编程语言的开发。在Eclipse中编译项目是进行软件开发的基础步骤。本文将详细介绍如何在Eclipse中编译项目,包括项目设置…...

实现 Leaflet 多类型点位标记与聚合功能的实战经验分享

在现代的地理信息系统(GIS)应用中,地图功能是不可或缺的一部分。无论是展示商业网点、旅游景点还是公共服务设施,地图都能以直观的方式呈现数据。然而,当数据量较大时,地图上可能会出现大量的标记点&#x…...

C高级——shell(3)

一、shell的选择结构 1.回顾:C语言的选择结构:if , if else if ,if else,switch (switch的执行速度最快) 2.shell的选择结构: 单分支if 双分支 if else 多分支if elif case..in 1.1 shell的选择结构的格式 --------C语言的格式--…...

Qt 中,**信号与槽(Signals Slots)机制

在 Qt 中,信号与槽(Signals & Slots)机制 是实现对象间通信的核心模式,通常也被视为一种高效的“通知者模式”。它允许对象在特定事件发生时通知其他对象,且完全解耦。 核心概念 信号(Signal&#xff0…...

字符串复制函数strcpy()的使用仿写strcpy()——C语言

strcpy 函数是C语言标准库中的字符串处理函数,用于将一个字符串复制到另一个字符串中。 char *strcpy(char *dest, const char *src); dest 是目标字符串的指针,用于存储复制后的字符串。 src 是源字符串的指针,指向要被复制的字符串。 st…...

想知道两轮差速方形底盘 URDF 咋做,ROS2 配 Rviz 咋显示吗?看这里!

视频讲解 想知道两轮差速方形底盘 URDF 咋做&#xff0c;ROS2 配 Rviz 咋显示吗&#xff1f;看这里&#xff01; 模型概述 一个方形底盘和两个差速驱动轮 URDF 代码 <?xml version"1.0" encoding"utf-8"?> <robot name"diff"> …...

什么是Ollama?什么是GGUF?二者之间有什么关系?

一、Ollama:本地化大模型运行框架 Ollama 是一款开源工具,专注于在本地环境中快速部署和运行大型语言模型(LLM)。它通过极简的命令行操作简化了模型管理流程,支持离线运行、多模型并行、私有化部署等场景。 核心特性 本地化运行:无需依赖云端API,用户可在个人电脑或服务…...

AI触手可及 | 基于函数计算玩转AI大模型

AI触手可及 | 基于函数计算玩转AI大模型 基于函数计算部署AI大模型的优势方案架构图像生成 - Stable Diffusion WebUI部署操作 释放资源部署总结体验反馈 在生成式AI技术加速迭代的浪潮下&#xff0c;百亿级参数的行业大模型正推动产业智能化范式转移。面对数字化转型竞赛&…...

VScode在Windows11中配置MSVC

因为MSVC编译器在vs当中&#xff0c;所以我们首先要安装vs的一部分组件。如果只是需要MSVC的话&#xff0c;工作负荷一个都不需要勾选&#xff0c;在单个组件里面搜索MSVC和windows11 SDK&#xff0c;其中一个是编译器&#xff0c;一个是头文件然后右下角安装即可。搜索Develop…...

基于SSM实现的bbs论坛系统功能实现四

一、前言介绍&#xff1a; 1.1 项目摘要 随着互联网技术的不断进步和普及&#xff0c;网络社区已成为人们获取信息、交流意见、分享经验的重要场所。BBS&#xff08;Bulletin Board System&#xff0c;电子公告板系统&#xff09;论坛系统作为网络社区的一种重要形式&#xf…...

Linux mount命令

Linux mount命令是经常会使用到的命令&#xff0c;它用于挂载Linux系统外的文件。 一、挂载功能介绍 挂载方法&#xff1a;mount DECE MOUNT_POINT 命令使用格式&#xff1a;mount [-fnrsvw] [-t vfstype] [-o options] device dir device&#xff1a;指明要挂载的设备&…...

【RAG生成】生成模块核心技术解密:从理论到实践的全链路优化

RAG知识系列文章 【RAG实践】手把手Python实现搭建本地知识问答系统【RAG进阶】从基础到模块化&#xff1a;深度解析RAG技术演进如何重塑AI知识边界【RAG检索】RAG技术揭秘&#xff1a;检索≠召回&#xff1f;【RAG增强】解密RAG系统排序优化&#xff1a;从基础原理到生产实践…...

JavaWeb-ServletContext应用域接口

文章目录 ServletContext接口简介获取一个ServletContext对象ServletContext接口中的相关方法获取应用域配置参数关于应用域参数的配置要求getContextPath获取项目路径getRealPath获取真实路径log系列方法添加相关日志增删查应用域属性 ServletContext接口简介 ServletContext…...

Vue3状态管理新选择:Pinia使用完全指南

一、为什么需要状态管理&#xff1f; 在Vue应用开发中&#xff0c;当我们的组件树变得复杂时&#xff0c;组件间的数据传递会成为棘手的问题。传统方案&#xff08;如props/$emit&#xff09;在多层嵌套组件中会变得笨拙&#xff0c;这时状态管理工具应运而生。Vue3带来了全新…...

权重生成图像

简介 前面提到的许多生成模型都有保存了生成器的权重,本章主要介绍如何使用训练好的权重文件通过生成器生成图像。 但是如何使用权重生成图像呢? 一、参数配置 ima_size 为图像尺寸,这个需要跟你模型训练的时候resize的时候一样。 latent_dim为噪声维度,一般的设置都是…...

【ESP32S3接入讯飞在线语音识别】

视频地址: 【ESP32S3接入讯飞在线语音识别】 1. 前言 使用Seeed XIAO ESP32S3 Sense开发板接入讯飞实现在线语音识别。自带麦克风模块用做语音输入,通过串口发送字符“1”来控制数据的采集和上传。 语音识别对比 平台api教程评分百度...

RISCV指令集解析

参考视频&#xff1a;《RISC-V入门&进阶教程》1-4-RV32I基本指令集&#xff08;1&#xff09;_哔哩哔哩_bilibili privilege是特权指令集&#xff0c;有点系统调用的感觉&#xff0c;要走内核态。unprivilege指令集有点像普通的函数调用。...

详解 c++ 中的 namespage

C 中的命名空间很特别&#xff0c;其他编程语言基本都没有。命名空间介于函数与类之间&#xff0c;兼顾了二者的一些优点。这篇博客根据 chatgpt 的回答整理。 文章目录 **1. 什么是 namespace&#xff08;命名空间&#xff09;&#xff1f;****2. 语法****3. 使用 namespace 访…...

Qt监控系统远程回放/录像文件远程下载/录像文件打上水印/批量多线程极速下载

一、前言说明 在做这个功能的时候&#xff0c;着实费了点心思&#xff0c;好在之前做ffmpeg加密解密的时候&#xff0c;已经打通了极速加密保存文件&#xff0c;主要就是之前的类中新增了进度提示信号&#xff0c;比如当前已经处理到哪个position位置&#xff0c;发个信号出来…...

Idea 和 Pycharm 快捷键

一、快捷键 二、Pycharm 中怎么切换分支 参考如下 如果在界面右下角 没有看到当前所在的分支&#xff0c;如 “Git:master” 3. 有了 4....

在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南

随着人工智能技术的飞速发展&#xff0c;本地部署大型语言模型&#xff08;LLM&#xff09;已成为许多技术爱好者的热门选择。本地部署不仅能够保护隐私&#xff0c;还能提供更灵活的使用体验。本文将详细介绍如何在 Mac mini M2&#xff08;24GB 内存&#xff09;上部署 DeepS…...

2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序

2024年国赛高教杯数学建模 A题 板凳龙闹元宵 原题再现 “板凳龙”&#xff0c;又称“盘龙”&#xff0c;是浙闽地区的传统地方民俗文化活动。人们将少则几十条&#xff0c;多则上百条的板凳首尾相连&#xff0c;形成蜿蜒曲折的板凳龙。盘龙时&#xff0c;龙头在前领头&#x…...

【R包】pathlinkR转录组数据分析和可视化利器

介绍 通常情况下&#xff0c;基因表达研究如微阵列和RNA-Seq会产生数百到数千个差异表达基因&#xff08;deg&#xff09;。理解如此庞大的数据集的生物学意义变得非常困难&#xff0c;尤其是在分析多个条件和比较的情况下。该软件包利用途径富集和蛋白-蛋白相互作用网络&…...

基于大模型的脑出血全周期预测与诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 1.3 研究方法与数据来源 二、大模型预测脑出血的原理与技术基础 2.1 大模型概述 2.2 脑出血相关数据收集与预处理 2.3 机器学习算法在预测模型中的应用 2.4 模型训练与优化 三、术前风险预测与准备 3.1 术前…...

高数1.1 函数

1. 定义 1.1 函数 1.2 反函数 1.2.1 求反函数例题 1.3 基本初等函数和初等函数 1.4 基本函数性质...

Java常见设计模式(中):结构型模式

&#x1f308; 引言&#xff1a;设计模式就像乐高积木 适配器&#xff1a;让不同形状的积木完美拼接装饰器&#xff1a;给积木添加炫酷灯光效果代理&#xff1a;遥控积木完成复杂动作组合&#xff1a;将小积木搭建成宏伟城堡 结构型模式 主要用于描述对象之间的关系&#xff…...

【Python修仙编程】(二) Python3灵源初探(3)

第一部分&#xff1a;乾坤袋的秘密与修炼之路 在修仙界&#xff0c;有一个古老的传承&#xff0c;名为《Python无极心法》&#xff0c;它蕴含着强大的力量&#xff0c;能够助修仙者突破重重境界&#xff0c;领悟宇宙天地的奥秘。而要修炼此心法&#xff0c;必须先从基础的“乾…...

Mac本地部署Deep Seek R1

Mac本地部署Deep Seek R1 1.安装本地部署大型语言模型的工具 ollama 官网&#xff1a;https://ollama.com/ 2.下载Deepseek R1模型 网址&#xff1a;https://ollama.com/library/deepseek-r1 根据电脑配置&#xff0c;选择模型。 我的电脑&#xff1a;Mac M3 24G内存。 这…...

可以免费无限次下载PPT的网站

前言 最近发现了一个超实用的网站&#xff0c;想分享给大家。 在学习和工作的过程中&#xff0c;想必做PPT是一件让大家都很头疼的一件事。 想下载一些PPT模板减少做PPT的工作量&#xff0c;但网上大多精美的PPT都是需要付费才能下载使用。 即使免费也有次数限制&#xff0…...

c++作业

练习题&#xff1a; #include <iostream> #include <cstring> using namespace std;class mystring {char* p;int len; public:mystring();mystring(const char* p);~mystring();void copy(const mystring& str);void append(const mystring& str);void sh…...

补题蓝桥杯14届JavaB组第4题

算法&#xff1a;动态规划 需要两个一维数组来进行dp 一个用来记录到当前位置的最短时间&#xff0c;另一个用来记录到达当前位置传送门的最短时间 到达传送门的时间需要进行判断&#xff0c;如果上一次传送到达传送门&#xff0c;需要判断上一次传送到这的位置在当前传送门…...

DeepSeek 15天指导手册——从入门到精通 PDF(附下载)

DeepSeek使用教程系列--DeepSeek 15天指导手册——从入门到精通pdf下载&#xff1a; https://pan.baidu.com/s/1PrIo0Xo0h5s6Plcc_smS8w?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/2e8de75027d3 《DeepSeek 15天指导手册——从入门到精通》以系统化学习路径为核心&…...

【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…...

C#开发——时间间隔类TimSpan

TimeSpan 是 C# 中的一个结构&#xff08; struct &#xff09;&#xff0c;用于表示时间间隔或持续时间。它位于 System 命名空间中&#xff0c;是处理时间相关操作时非常重要的工具&#xff0c;尤其是在计算两个日期或时间之间的差值、表示时间段或执行时间相关的运算…...

第002文-kali虚拟机安全与网络配置

1、kali系统介绍 kali是一个基于Linux kernel的操作系统&#xff0c;由BackTrack(简称BT)发展而来。BackTrack是2006年推出的一个用于渗透测试及黑客攻防的专用平台&#xff0c;基于Knoppix(linux的一个发行版)开发。BackTrack版本周期&#xff1a;2006年的起始版本BackTrack …...

【HarmonyOS Next】鸿蒙应用折叠屏设备适配方案

【HarmonyOS Next】鸿蒙应用折叠屏设备适配方案 一、前言 目前应用上架华为AGC平台&#xff0c;都会被要求适配折叠屏设备。目前华为系列的折叠屏手机&#xff0c;有华为 Mate系列&#xff08;左右折叠&#xff0c;华为 Mate XT三折叠&#xff09;&#xff0c;华为Pocket 系列…...

关于“你对 Spring Cloud 的理解”

Spring Cloud 是一个基于 Spring Boot 的微服务框架&#xff0c;旨在简化分布式系统的开发、部署和管理。它提供了一系列工具和组件&#xff0c;帮助开发者构建和管理微服务架构。以下是对 Spring Cloud 的核心理解&#xff1a; 1. 微服务架构的支持 Spring Cloud 提供了对微…...

微信小程序-二维码绘制

wxml <view bindlongtap"saveQrcode"><!-- 二维码 --><view style"position: absolute;background-color: #FFFAEC;width: 100%;height: 100vh;"><canvas canvas-id"myQrcode" style"width: 200px; height: 200px;ba…...