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

深度学习笔记——模型压缩和优化技术(蒸馏、剪枝、量化)

本文详细介绍模型训练完成后的压缩和优化技术:蒸馏、剪枝、量化。

在这里插入图片描述

文章目录

    • 1. 知识蒸馏 (Knowledge Distillation)
      • 基本概念
      • 工作流程
      • 关键技术
      • 类型
      • 应用场景
      • 优势与挑战
        • 优势
        • 挑战
      • 总结
    • 2. 权重剪枝 (Model Pruning)
      • 基本原理
      • 二分类
        • 1. 非结构化剪枝(Unstructured Pruning)
        • 2. 结构化剪枝(Structured Pruning)
      • 常用方法
        • 1. 基于权重大小的剪枝(Magnitude-based Pruning)
        • 2. 基于梯度的剪枝(Gradient-based Pruning)
        • 3. L1/L2 正则化剪枝(Regularization-based Pruning)
        • 4. 基于熵的剪枝(Entropy-based Pruning)
        • 5. 迭代剪枝与再训练(Iterative Pruning and Fine-tuning)
      • 工作流程
      • 优势和局限性
        • 优势
        • 局限性
      • 实际应用
      • 总结
    • 3. 权值量化 (Quantization)
      • 基本原理
      • 类型
        • 1. 静态量化(Post-training Quantization, PTQ)
        • 2. 动态量化(Dynamic Quantization)
        • 3. 量化感知训练(Quantization-aware Training, QAT)
      • 常用方法
        • 1. 线性量化
        • 2. 非线性量化
        • 3. 对称量化和非对称量化
        • 4. 小数位量化(Fixed-point Quantization)
      • 优势与挑战
        • 优势
        • 挑战
      • 实际应用
      • 量化技术总结
    • 4. 权重共享 (Weight Sharing)
    • 5. 低秩分解 (Low-Rank Factorization)
    • 6. 神经架构搜索 (Neural Architecture Search, NAS)
    • 其他优化
    • 总结
    • 应用场景
  • 历史文章
    • 机器学习
    • 深度学习

模型压缩和优化技术是为了在保证模型性能(精度、推理速度等)的前提下减少模型的体积、降低计算复杂度和内存占用从而提高模型在资源受限环境中的部署效率。这些技术对于在边缘设备、移动设备等计算资源有限的场景中部署深度学习模型尤为重要。以下是几种常见的模型压缩和优化技术的解释:

1. 知识蒸馏 (Knowledge Distillation)

知识蒸馏是一种通过“教师模型”(通常是一个性能较高但规模较大的模型)来指导“学生模型”(通常是一个较小但高效的模型)训练的技术。其基本思想是让学生模型学习教师模型输入数据上的输出分布,而不是直接学习真实标签。主要步骤如下:

  • 训练教师模型: 首先训练一个大规模的教师模型,该模型通常有很好的性能。
  • 蒸馏训练: 使用教师模型的预测结果(软标签)来训练学生模型。通常情况下,学生模型会通过一种称为“蒸馏损失”(Distillation Loss)的函数来最小化其输出与教师模型输出的差异。
  • 优势: 知识蒸馏可以有效地提升学生模型的精度,即使学生模型结构相对简单,也能获得接近教师模型的性能。

推荐阅读:一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理

基本概念

知识蒸馏(Knowledge Distillation)是一种将大模型的知识迁移到小模型的方法,旨在保持模型性能的同时,减少模型的参数量和计算复杂度。知识蒸馏广泛用于深度学习中模型压缩和加速的任务,使得小模型能够在有限资源的设备(如手机、嵌入式设备)上高效运行,同时仍保持高精度

知识蒸馏通过训练一个小模型(学生模型)模仿 一个 大模型(教师模型) 的行为。大模型的输出(通常是类别概率分布或特征表示)作为小模型的“软标签”或监督信号,使小模型能够更好地学习复杂的数据分布。

知识蒸馏可以分为以下几种基本形式:

  1. 软标签蒸馏:通过教师模型的输出概率作为目标,使得学生模型不仅学习正确的分类,还学习类别之间的相对关系。
  2. 中间层蒸馏:将教师模型的中间层表示传递给学生模型,使其学习更丰富的特征表示。
  3. 基于特征的蒸馏:直接从教师模型的隐藏层特征提取知识,并将其应用于学生模型。

工作流程

知识蒸馏的整个流程确保了小模型在有限资源的设备上高效运行,同时保留了教师模型的精度。这种方法被广泛应用于边缘计算、移动应用和其他对计算资源敏感的场景。

步骤详细操作
训练教师模型训练一个高精度的大模型,作为学生模型学习的知识源
准备软标签过温度调节生成教师模型的软标签,提供类别间相对关系信息
构建学生模型设计一个小而高效的模型,用于模仿教师模型的行为
构建损失函数使用软标签和硬标签损失的组合,以平衡学生模型对硬标签和软标签的学习
训练学生模型通过前向传播、反向传播和参数更新迭代优化学生模型,模仿教师模型的输出
评估模型对比教师和学生模型的性能,确保学生模型在效率和精度上的平衡
部署学生模型导出学生模型到目标平台,进行量化、剪枝等优化,并在真实环境中进行测试部署
  1. 训练教师模型

    • 目标:知识蒸馏的第一步是训练一个高精度的大模型,也就是教师模型。教师模型通常具有较大的参数量和复杂的结构,能有效学习到数据的复杂模式。
    • 训练:教师模型通常在完整数据集上进行标准的监督学习训练,以确保其在任务上的性能足够好(例如分类任务中达到较高的准确率)。教师模型的高精度和强泛化能力为学生模型提供了可靠的“知识源”。
    • 优化:教师模型可以使用标准的损失函数(例如分类任务中的交叉熵损失)进行优化。教师模型的最终性能将直接影响学生模型的学习效果,因此需要仔细调优确保教师模型的高质量。
  2. 准备教师模型的输出

    • 目标:在知识蒸馏中,教师模型的输出不再是简单的硬标签(one-hot),而是称为“软标签”的类别概率分布。软标签提供了类别间的细微关系,是学生模型的重要学习目标

    • 温度调节:教师模型的输出通常使用温度调节(temperature scaling)进行平滑。具体来说,教师模型在生成输出的 softmax 概率分布时会加入温度参数 ( T T T ),以平滑各类别之间的概率分布

    • 输出软标签:经过温度调节后的 softmax 输出(软标签)会被保存下来,作为学生模型的目标。软标签比硬标签包含了更多类别间的信息,有助于学生模型更细致地学习数据分布。

    • 教师模型生成的软标签的计算公式
      在这里插入图片描述

      • ( p_i ):第 ( i ) 类的概率(软标签)。
      • ( z_i ):第 ( i ) 类的 logit(教师模型输出的未归一化分数)。
      • ( T ):温度参数,用于控制软化程度。

公式参数解释

  1. Logits( z i z_i zi:Logits 是教师模型最后一层但是没有经过 softmax的输出(在应用 softmax 之前),通常表示各类别的非归一化得分

  2. 温度参数( T T T:温度参数用于调节 softmax 函数的输出分布。在知识蒸馏中,通过调整温度参数 ( T T T ) 的值,教师模型可以生成更加平滑的概率分布,从而帮助学生模型学习类别之间的相对关系。

    • 当 ( T = 1 T = 1 T=1 ) 时,这个公式就变成了普通的 softmax 函数,输出的概率分布直接对应教师模型对各类别的置信度。
    • 当 ( T > 1 T > 1 T>1 ) 时,输出分布变得更加平滑,使得非最大类的概率变得较大,利于学生模型捕捉到类间关系

温度参数 ( T ) 的作用

  • 更高的温度(即 T > 1 T > 1 T>1会使得 logits 被缩放得更小,从而使 softmax 函数的输出分布更平滑。这意味着各类别的概率差异会缩小,学生模型可以更好地理解不同类别之间的相对关系而不仅仅关注于概率最高的类别
  • 通过这种方式,学生模型在训练时不仅学习到正确答案的类别标签,还学习到不同类别之间的关系(即类间相似性)。这有助于学生模型在实际应用中对未见数据具有更好的泛化能力。
  1. 构建学生模型

    • 目标:学生模型通常比教师模型小,具有更少的参数量。它的目的是在保持教师模型精度的同时,显著降低计算和存储需求,以便在资源受限的设备(如手机、嵌入式设备)上高效运行。
    • 设计:学生模型可以与教师模型具有相同的结构,但层数、参数量较少;也可以是其他架构,甚至与教师模型完全不同。学生模型的设计通常会根据目标硬件的限制来优化,以在保持精度的前提下达到更高的计算效率。
    • 初始化:学生模型的权重可以从头初始化,也可以使用预训练模型的权重作为初始状态,以加快训练收敛速度。
  2. 构建损失函数

    • 目标:在知识蒸馏过程中,学生模型不仅要匹配数据集的硬标签(真实标签),还要学习教师模型的软标签(类别概率分布)
    • 组合损失:通常,知识蒸馏的总损失硬标签损失软标签损失加权组合。公式如下:
      在这里插入图片描述
    • 软标签损失(蒸馏损失):软标签损失通常使用 Kullback-Leibler (KL) 散度来衡量教师模型和学生模型输出概率分布之间的差异。KL 散度公式如下:
      在这里插入图片描述
  3. 训练学生模型

    • 目标:学生模型通过组合损失函数在软标签硬标签监督下进行训练。其目标是尽可能接近教师模型的表现。
    • 过程
      1. 前向传播:将输入数据经过学生模型,得到学生模型的输出概率分布。
      2. 计算损失:基于软标签损失和硬标签损失的加权组合,计算学生模型的总损失。
      3. 反向传播和参数更新:使用标准的优化算法(如 SGD 或 Adam)进行反向传播,更新学生模型的参数。
    • 超参数调整:在训练学生模型时,温度参数 ( T T T )损失加权系数 ( α \alpha α ) 都会显著影响蒸馏效果。通常通过实验调整,以找到最佳参数配置。
  4. 评估学生模型

    • 目标:在学生模型训练完成后,对其进行评估,检查它的性能是否接近教师模型。评估学生模型的性能可以使用标准的评估指标,如分类任务中的准确率、F1 分数等。
    • 对比:评估时,通常将学生模型的性能与教师模型的性能进行对比,确保学生模型在保持高效推理的同时,准确率尽可能接近教师模型。
    • 优化:如果学生模型的精度未达到预期,可以调整模型架构、增加训练数据量或调整蒸馏超参数(如 ( T T T ) 和 ( α \alpha α )),然后重新训练。
  5. 部署学生模型

    • 目标:知识蒸馏的最终目的是在性能受限的设备上部署学生模型。因此,部署学生模型时需要考虑计算成本、推理延迟和内存占用等因素。
    • 模型导出和优化:根据目标平台(如手机、边缘设备)对模型进行导出和优化。常见的优化方法包括量化、剪枝、加速推理框架(如 TensorRT)等。
    • 上线和测试:在真实环境中测试学生模型的表现,确保其推理速度和精度满足应用需求。必要时进行进一步优化和调整。

关键技术

  1. 温度调节(Temperature Scaling)

    • 温度调节是知识蒸馏中的重要技术,常用于教师模型输出的平滑化处理温度参数 ( T T T ) 增大时,类别概率分布会更加平滑使学生模型更关注不同类别的相对关系,而不仅仅是最优类别。
      在这里插入图片描述
  2. 损失函数设计

    • 知识蒸馏中的损失函数一般包括两个部分:一个是学生模型与真实标签之间的交叉熵损失,另一个是学生模型和教师模型的软标签之间的蒸馏损失
    • 蒸馏损失通常使用 Kullback-Leibler (KL) 散度来衡量教师和学生模型输出之间的差异,鼓励学生模型的输出接近教师模型的输出。
  3. 中间层蒸馏

    • 在一些知识蒸馏方案中,不仅将教师模型的输出作为知识来源,还将其中间层特征传递给学生模型,使学生能够学习到更加丰富的表示。
    • 通过匹配学生和教师模型的中间层表示,可以显著提升学生模型的表达能力和精度。

类型

  1. 单教师-单学生蒸馏

    • 最基础的知识蒸馏类型,只有一个教师模型和一个学生模型。
    • 教师模型通过软标签和中间层表示向学生模型传递知识。
  2. 多教师蒸馏

    • 多个教师模型向单个学生模型提供知识。学生模型学习多个教师模型的组合输出,通常取平均值或加权融合。
    • 这种方法可以进一步提升学生模型的泛化能力。
  3. 自蒸馏(Self-distillation)

    • 不需要单独的教师模型,而是通过多轮训练让模型自己学习自己的知识。例如,每轮训练后生成新的软标签,进一步提升模型精度。
    • 自蒸馏可用于模型的迭代提升,无需外部教师模型。
  4. 对比学习蒸馏(Contrastive Distillation)

    • 使用对比学习的方法使得学生模型和教师模型在生成相似样本时的输出更加接近,而在不同样本上输出差异更大。
    • 对比学习蒸馏通过增加表示的区分度提升学生模型的效果。

应用场景

  1. 模型压缩与加速

    • 知识蒸馏可以有效压缩模型,使得小模型在准确率接近大模型的同时,计算成本和存储需求大幅减少,适用于嵌入式设备或移动端。
  2. 迁移学习

    • 将教师模型从某一领域迁移到其他相关领域,学生模型可以在新领域中得到更好的泛化表现
  3. 多任务学习

    • 通过知识蒸馏,可以将一个多任务的教师模型中的知识转移给多个单任务学生模型,使得学生模型在单一任务上表现更好。
  4. 自监督学习

    • 在自监督学习中,知识蒸馏可以帮助模型有效利用未标注数据,进一步提升模型在下游任务中的性能。

优势与挑战

优势
  1. 有效的模型压缩:知识蒸馏能显著缩小模型规模,同时在准确率上与教师模型接近,适合在资源受限的设备上部署
  2. 改进的泛化能力:学生模型通过学习教师模型的输出分布,能够更好地理解数据分布,提高泛化性能
  3. 灵活性:知识蒸馏方法适用于多种深度学习任务和模型架构,能与其他模型压缩方法(如剪枝、量化)结合使用
挑战
  1. 教师模型依赖:蒸馏效果依赖于教师模型的质量,若教师模型不准确,学生模型可能学到错误的知识。
  2. 训练时间:蒸馏过程通常需要额外的训练步骤,增加了训练时间和计算资源需求
  3. 知识转移的有效性:如何选择最优的蒸馏方法、温度参数以及特征层是一个挑战,需要在不同任务和模型上调整。

总结

知识蒸馏是一种重要的模型压缩方法,通过让小模型(学生模型)学习大模型(教师模型)的知识,达到模型精简和高效推理的目的。它已广泛应用于计算受限环境下的深度学习模型部署,并在迁移学习、多任务学习等场景中表现出色。知识蒸馏仍在持续研究中,未来可能通过结合更多优化方法进一步提升学生模型的效果。

2. 权重剪枝 (Model Pruning)

模型剪枝是一种减少模型冗余参数的方法,通常通过移除对模型性能影响较小的权重或神经元来降低模型的计算复杂度和存储需求。模型剪枝的主要方法包括:

  • 非结构化(权重)剪枝 (Weight Pruning): 将小于某个阈值的权重设为零。剪枝后可以使用稀疏矩阵表示模型,从而减少计算量和存储需求。
  • 结构剪枝 (Structured Pruning): 移除整个滤波器(卷积核)、通道或层。结构剪枝通常在减少模型复杂度的同时更好地保持模型性能。
  • 过程: 先训练一个全量模型,然后根据某种准则(如权重的绝对值、梯度等)进行剪枝,再在剪枝后的模型上进行微调以恢复性能
  • 优势: 剪枝可以大幅度减少模型参数量和计算量,适用于在资源有限的硬件上部署模型。

基本原理

权重剪枝(Weight Pruning)是一种用于深度学习模型压缩的技术,通过移除模型中的冗余权重(连接),来减少模型的参数量和计算量,进而降低内存占用并加速推理速度。权重剪枝主要应用于卷积神经网络(CNN)、循环神经网络(RNN)等结构,可以有效压缩模型,使其更适合在资源受限的设备(如移动端、嵌入式系统)上部署。

在神经网络中,不同权重对模型的输出影响程度不同。权重剪枝的核心思想是通过评估每个权重的重要性,移除对输出影响较小的权重连接。这样不仅能减少参数量,还可以保持模型精度。

权重剪枝通常可以划分为两个步骤

  1. 剪枝过程:确定哪些权重不重要并移除。
  2. 微调(Fine-tuning):剪枝后对模型进行微调,以恢复可能受到损害的精度

二分类

权重剪枝可以分为 非结构化剪枝结构化剪枝,这两种方式各有优缺点。

1. 非结构化剪枝(Unstructured Pruning)
  • 定义:在非结构化剪枝中,模型可以选择性地移除任意不重要的权重,剪枝过程不必遵循特定的结构化规则
  • 原理:通过评估每个权重的大小或梯度,将绝对值较小的权重置零,这些被剪掉的权重被认为对模型输出影响较小。
  • 优势:非结构化剪枝的灵活性较高,理论上可以获得很高的剪枝比例。
  • 缺点:非结构化剪枝后的权重稀疏性较强,结构不规则不易直接加速硬件计算;需要专用的稀疏矩阵存储和运算库来支持高效的稀疏性加速。
  • 应用场景:通常用于模型压缩,适合不考虑硬件加速的场景,例如压缩存储大小。
2. 结构化剪枝(Structured Pruning)
  • 定义:结构化剪枝移除整个特定权重组遵循网络的结构化特性。例如,卷积层的通道、滤波器、卷积核、层等,形成更规则的结构化剪枝模式。
  • 原理:通过评估神经元或通道的重要性,将不重要的神经元、通道、层进行移除,以减少计算负担。
  • 优势:结构化剪枝后模型仍然保持结构完整,能够直接适配硬件加速(如 GPU、TPU 等),实现显著的推理加速。
  • 缺点:剪枝过程中约束更多,压缩率和精度的平衡更难把握。
  • 应用场景:适用于需要高效推理的场景,例如在边缘设备或移动端部署 CNN。

常用方法

权重剪枝可以基于不同的剪枝标准和方法实现。以下是一些常见的权重剪枝技术:

1. 基于权重大小的剪枝(Magnitude-based Pruning)
  • 原理:基于权重的绝对值进行剪枝,通常认为绝对值较小的权重对模型的输出影响较小,因此可以被移除。
  • 实现:按比例剪枝(例如剪掉 20% 的权重)或设定剪枝阈值(小于阈值的权重被剪掉),可以通过多轮剪枝迭代提高剪枝比例。
  • 优点:实现简单,适用于大多数网络结构。
  • 缺点:仅依赖权重的大小进行剪枝,可能忽略一些重要的但权重值小的连接。
2. 基于梯度的剪枝(Gradient-based Pruning)
  • 原理:基于梯度对权重重要性的影响来判断是否剪枝。梯度值较小的权重通常对损失函数的影响较小,可以被剪枝。
  • 实现:在训练过程中,通过权重的梯度信息评估每个权重的重要性,将梯度绝对值较小的权重剪枝。
  • 优点:相比基于大小的剪枝,这种方法能够考虑权重在损失函数中的影响,更具针对性。
  • 缺点:需要额外计算梯度信息,计算成本较高。
3. L1/L2 正则化剪枝(Regularization-based Pruning)
  • 原理:通过引入 L1 或 L2 正则化项,鼓励模型中的一些权重接近于零,从而达到自动剪枝的效果。
  • 实现:在训练过程中将 L1 或 L2 范数作为正则化项加入损失函数,使模型中不重要的权重逐渐变小,接近零后即可剪枝。
  • 优点:正则化剪枝可以在训练中逐步实现,无需单独的剪枝步骤。
  • 缺点:训练时间会增加,适合剪枝比例较小的情况
4. 基于熵的剪枝(Entropy-based Pruning)
  • 原理计算每个权重或特征的重要性信息熵,信息熵较低的权重对输出不敏感,可以被移除。
  • 实现:评估每个通道、滤波器或权重的信息熵,将信息熵较低的部分进行剪枝。
  • 优点:能够精准衡量重要性,适合复杂模型。
  • 缺点:计算复杂度较高,适合小规模网络。
5. 迭代剪枝与再训练(Iterative Pruning and Fine-tuning)
  • 原理逐步剪枝模型,避免一次性移除过多权重。每次剪枝后,对模型进行微调,以恢复模型性能
  • 实现:在每轮剪枝后微调模型,逐步提高剪枝比例,达到最大压缩率。
  • 优点:保持精度的同时获得较高的压缩率。
  • 缺点:剪枝和微调需要多轮迭代,增加训练时间。

工作流程

权重剪枝的基本流程如下:

  1. 训练基础模型:首先训练一个完整的模型,使其在任务上达到最佳性能。
  2. 评估权重重要性:选择合适的评估标准(如权重大小梯度信息熵等)来判断每个权重或连接的重要性。
  3. 选择剪枝比例:根据模型的规模、目标设备性能等因素设定剪枝比例(如 20% 的权重)。
  4. 剪枝不重要的权重:根据评估标准和剪枝比例,移除不重要的权重。可以是一次性剪枝,或者是逐步剪枝。
  5. 微调模型:剪枝后,通常会对模型进行再训练,以恢复剪枝过程中可能损失的精度。微调步骤可以多次进行,以确保剪枝后的模型保持较好的精度
  6. 评估压缩效果:在剪枝和微调完成后,测试剪枝后的模型精度,并与原始模型进行对比,评估剪枝的效果。

优势和局限性

优势
  • 显著减少模型参数量:剪枝可以有效减少模型的参数,减小模型存储需求。
  • 加速推理速度:特别是结构化剪枝,可以显著减少计算量,实现推理加速。
  • 保持较高精度:在适当的剪枝策略下,可以在较小的精度损失下获得高效的压缩效果。
局限性
  • 非结构化剪枝难以加速推理:非结构化剪枝得到的稀疏模型结构不易直接在通用硬件上加速,需要稀疏矩阵库支持。
  • 剪枝比例与精度的平衡难以把握:过高的剪枝比例可能导致模型性能显著下降。
  • 迭代剪枝耗时较长:剪枝和微调过程通常需要多轮迭代,增加训练时间。

实际应用

  • 卷积神经网络(CNN):CNN 的大量权重适合剪枝,通过剪枝可以显著减少参数量和卷积计算的开销。
  • 循环神经网络(RNN):RNN 中的权重剪枝可用于减少循环网络的计算量,适合语音识别、机器翻译等

任务。

  • 全连接层:全连接层的参数量较大,适合进行非结构化剪枝,减少存储需求。

总结

权重剪枝是一种有效的模型压缩技术,通过移除不重要的权重来降低模型的参数量和计算量。根据剪枝方法的不同,剪枝可以在不同程度上加速推理过程,同时保持较高的模型精度。在实际应用中,权重剪枝技术广泛用于模型压缩、推理加速和边缘设备部署中。

3. 权值量化 (Quantization)

量化是指将模型中的浮点数权重和激活值转换为低精度的整数表示(如8-bit)【类似上面提到的DeepSpeed的混合精度】,从而减少模型的存储和计算开销。量化的主要类型有:

  • 静态量化 (Static Quantization): 在推理前【训练后】将模型的权重和激活值提前量化
  • 动态量化 (Dynamic Quantization): 推理时激活值根据输入动态量化推理前权重已经量化
  • 量化感知训练 (Quantization-Aware Training): 在训练过程中考虑量化误差,以减小量化带来的精度损失。
  • 优势: 量化可以在保持模型精度的前提下,显著减少模型大小和计算开销,适用于在移动设备和边缘设备上部署。

基本原理

权值量化(Weight Quantization)是一种通过降低模型中权重和激活值的数值精度压缩模型的技术。量化技术能够显著减少模型的存储需求和计算开销,尤其适合资源受限的硬件设备(如手机、嵌入式系统、FPGA、TPU 等),在保持模型精度的同时大幅提高推理效率。

传统深度学习中,权值和激活值通常使用 32 位浮点数(FP32)来表示,虽然精度高但计算量大。权值量化的基本思想是将这些 32 位浮点数转换为更低精度的数据类型(如 8 位整数,INT8),从而减少存储和计算的成本。

量化的常见数据类型有:

  • INT8:8 位整数,是最常用的量化精度,平衡了性能和精度。
  • FP16:16 位浮点数,在部分精度要求较高的场景中使用。
  • 其他精度:如 INT4、INT2,甚至二值化(binary),适用于对精度要求较低的场景。

类型

权值量化根据实现的时间点和计算方式不同,可以分为以下几类:

量化类型原理优势应用场景
静态量化使用一组校准数据计算激活值的动态范围,在推理前将模型的权重和激活值量化为低精度(如 INT8)实现简单,推理加速推理任务,适合精度要求较低的模型
动态量化推理前对权重进行量化推理时根据输入数据动态量化激活值精度更高,适应实时变化的数据NLP 模型中的 RNN、LSTM 等,输入分布变化较大的任务
量化感知训练训练过程中对权重和激活值模拟量化误差,使用伪量化方法使模型在训练时适应量化的效果精度损失最小,适合复杂模型高精度模型(CNN、Transformer),适合需要保持高精度的任务
1. 静态量化(Post-training Quantization, PTQ)

静态量化是在模型训练完成后,将模型的权重和部分激活值量化为低精度的整数。这种方法不需要在训练中进行额外的调整,因此也称为后量化

  • 工作流程
    1. 训练出完整精度模型。
    2. 将模型的权重和激活值量化为低精度。
    3. 推理时直接使用量化后的模型进行计算。
  • 优点:实现简单,不需要重新训练。
  • 缺点:精度可能有所损失,尤其是对于复杂或精度要求较高的模型。
2. 动态量化(Dynamic Quantization)

动态量化是在推理时部分激活值进行动态量化。通常在推理前(模型训练完成后)对模型的权重进行静态量化的(如 INT8),而在推理过程中对激活值进行动态量化(如 FP32 转换为 INT8),以减少量化误差。

  • 工作流程
    1. 训练完成后,对权重进行静态量化
    2. 在推理时,根据当前输入动态量化激活值
  • 优点:相比静态量化有更好的精度保持。
  • 缺点:计算复杂度增加,对推理速度有一定影响。
3. 量化感知训练(Quantization-aware Training, QAT)

量化感知训练是一种在训练阶段就考虑到量化影响的技术。QAT 在训练过程中引入量化噪声,对权重和激活值进行模拟量化,使模型逐步适应低精度表示。这样可以最大程度地减少量化带来的精度损失,是目前精度最高的量化方法。

  • 工作流程
    1. 训练中加入量化模拟,即引入量化操作模拟推理中的低精度计算。
    2. 训练过程调整模型权重,使其更适应量化后的推理环境。
  • 优点:量化精度最高,可以减少精度损失。
  • 缺点:训练时间增加,需要更多的计算资源。

量化感知训练工作流程如下:

  1. 基础模型训练:训练一个完整精度模型,使其达到预期的高精度表现。

  2. 插入量化节点:在网络中加入量化操作,在每层后添加量化模拟,使模型在前向传播时模拟低精度计算的影响。

  3. 训练模型适应量化:在加入量化模拟的模型上继续训练,优化模型权重,使其逐步适应量化带来的精度损失。

  4. 量化模型参数:将最终训练得到的权重量化为整数表示,保存模型。

  5. 推理优化:部署到硬件上使用量化推理优化,使得模型在计算和存储方面都更高效。

混合精度训练就是量化感知。

常用方法

权值量化的实现方法通常包括线性量化、非线性量化、对称量化和非对称量化等,每种方法在精度和计算开销上有所不同。

量化方式原理优势应用场景
线性量化使用线性映射将权重和激活值缩放到低精度区间实现简单,适合硬件加速数据分布均匀的模型和任务,适合常规计算场景
非线性量化采用对数或分段线性方法,将权重和激活值映射到低精度区间,以适应数据分布减少量化误差,适合数据分布不均的模型稀疏网络、复杂分布数据,适合对精度要求高的模型
对称量化将正负数的量化范围对称,适用于数据分布对称的情况实现简单,硬件友好数据均匀分布的模型,适合标准硬件加速
非对称量化使用不同的量化范围来覆盖正负数据,适用于数据分布不均的情况适应性强,减少量化误差数据分布不均的模型,适合高精度模型的量化
小数位量化使用小数位来表示权重和激活值,适合存储精度较低的数据节省存储空间,适合小范围权重精度要求低、权重小范围变化的模型,适合轻量化模型部署
1. 线性量化

线性量化(Uniform Quantization)将权重映射到固定的低精度区间,例如将 FP32 权重映射到 INT8。具体过程如下:
在这里插入图片描述

  • 优缺点
    • 线性量化实现简单,适用于硬件加速。
    • 但对于分布不均匀的权重(如稀疏分布)会产生较大误差。
2. 非线性量化

非线性量化(Non-uniform Quantization)使用不同的步长非均匀分布来量化权重,可以减少量化误差,尤其在数据分布不均匀时更有效。

  • 实现:例如使用对数分布或自适应区间来量化,更多关注重要的权重区间。
  • 优缺点:非线性量化可以有效减少误差,但计算和实现复杂,硬件支持有限。
3. 对称量化和非对称量化
  • 对称量化(Symmetric Quantization):零点 ( z = 0 ),量化步长相同,适用于分布均匀的权重。
  • 非对称量化(Asymmetric Quantization):零点 ( z 不等于 0 ),正负区间的步长不同,适合分布不均的权重。
4. 小数位量化(Fixed-point Quantization)

对于权重取值范围较小的情况,可以直接将权重映射到固定的小数位数上,这样既可以减少存储开销,也便于硬件计算。

优势与挑战

优势
  • 内存节省:量化将 32 位浮点数转换为更低精度的数据类型(如 8 位整数),大幅减少模型的存储需求。
  • 加速计算:低精度整数计算相比浮点数计算更高效,在专用硬件(如 TPU、FPGA)上能进一步加速推理过程。
  • 能源效率:低精度计算的能耗显著降低,特别适合移动设备和嵌入式设备。
挑战
  • 精度损失:量化会引入近似误差,对精度要求高的模型可能导致性能下降,尤其是静态量化方法。
  • 不均匀分布:模型权重和激活值可能存在不均匀分布,线性量化可能无法很好地拟合这些分布,导致量化误差较大。
  • 硬件支持:不同硬件平台对量化支持程度不同,需要在选择数据格式和量化方法时考虑目标设备的硬件特性。

实际应用

权值量化技术在多个深度学习任务和模型中得到了广泛应用:

  • 计算机视觉:在 CNN 中广泛应用于图像分类、目标检测、图像分割等任务,以加速模型的推理过程。
  • 自然语言处理:在 Transformer 等模型中,对注意力层和自注意力计算量化,减少大模型在推理中的存储和计算开销。
  • 边缘计算与移动应用:量化技术非常适合资源受限的设备,例如手机、智能摄像头等,需要节省能耗和存储的场景。
  • 实时推理:量化后的模型在实际部署中推理速度更快,适合要求低延迟的应用场景,如实时监控、自动驾驶等。

量化技术总结

权值量化是深度学习模型优化的重要技术,在移动设备、嵌入式系统和低功耗设备上部署深度学习模型时有着广泛的应用。量化感知训练(QAT)是当前精度保持最好的量化方法,静态量化则适合模型部署的快速应用。选择合适的量化方法可以在性能和精度之间取得良好平衡,使得深度学习模型在实际应用中更加高效。

4. 权重共享 (Weight Sharing)

权重共享是一种将多个模型参数共享相同的权重,从而减少模型参数数量的方法。常用于压缩神经网络和减少参数冗余。

  • 过程: 训练过程中,将模型中多个类似参数强制约束为相同的值或从一个小的候选集(如哈希表)中选择。
  • 优势: 权重共享可以大幅度减少模型参数量,从而节省存储空间和计算资源。

5. 低秩分解 (Low-Rank Factorization)

低秩分解是一种将模型参数矩阵分解为多个低秩矩阵的乘积,从而减少计算量和存储需求的方法。常用于压缩大型全连接层和卷积层。

  • 过程: 将一个大的权重矩阵分解为两个或多个小的矩阵的乘积,这些小矩阵的秩比原矩阵低得多。
  • 优势: 低秩分解可以显著减少矩阵乘法的计算量,提高推理速度。

6. 神经架构搜索 (Neural Architecture Search, NAS)

NAS是一种自动设计高效神经网络结构的方法,通过搜索算法(如强化学习或进化算法)自动寻找性能与效率兼具的模型架构。

  • 过程: 定义一个模型结构搜索空间,使用搜索算法在这个空间中找到最优的模型结构。
  • 优势: NAS可以自动化地找到高效且适合特定硬件或任务的模型架构,减少人工设计的复杂性。

这些技术可以单独使用,也可以组合使用,以在特定应用场景中最大化模型的效率和性能。

其他优化

在处理大型数据集时,Transformer模型可以通过以下几种方法加以优化

  1. 使用分布式训练
  2. 数据预处理与数据增强
  3. 混合精度训练
  4. 逐步增加数据集规模

总结

方法主要目的优点缺点
剪枝去除冗余参数显著减小模型大小可能导致结构不规则
量化降低参数精度显著减少存储需求可能导致精度损失
知识蒸馏训练轻量学生模型性能接近大模型训练需要教师模型
低秩分解分解权重矩阵降低计算量适用性不广泛
NAS自动设计轻量架构高效模型,自动化搜索成本高

应用场景

模型压缩技术广泛应用于移动设备、嵌入式系统和其他计算资源受限的场景,适合需要在有限资源下部署深度学习模型的情况。


历史文章

机器学习

机器学习笔记——损失函数、代价函数和KL散度
机器学习笔记——特征工程、正则化、强化学习
机器学习笔记——30种常见机器学习算法简要汇总
机器学习笔记——感知机、多层感知机(MLP)、支持向量机(SVM)
机器学习笔记——KNN(K-Nearest Neighbors,K 近邻算法)
机器学习笔记——朴素贝叶斯算法
机器学习笔记——决策树
机器学习笔记——集成学习、Bagging(随机森林)、Boosting(AdaBoost、GBDT、XGBoost、LightGBM)、Stacking
机器学习笔记——Boosting中常用算法(GBDT、XGBoost、LightGBM)迭代路径
机器学习笔记——聚类算法(Kmeans、GMM-使用EM优化)
机器学习笔记——降维

深度学习

深度学习笔记——优化算法、激活函数
深度学习——归一化、正则化
深度学习——权重初始化、评估指标、梯度消失和梯度爆炸
深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总
深度学习笔记——卷积神经网络CNN
深度学习笔记——循环神经网络RNN、LSTM、GRU、Bi-RNN
深度学习笔记——Transformer
深度学习笔记——3种常见的Transformer位置编码
深度学习笔记——GPT、BERT、T5
深度学习笔记——ViT、ViLT
深度学习笔记——DiT(Diffusion Transformer)
深度学习笔记——多模态模型CLIP、BLIP
深度学习笔记——AE、VAE
深度学习笔记——生成对抗网络GAN
深度学习笔记——模型训练工具(DeepSpeed、Accelerate)

相关文章:

深度学习笔记——模型压缩和优化技术(蒸馏、剪枝、量化)

本文详细介绍模型训练完成后的压缩和优化技术:蒸馏、剪枝、量化。 文章目录 1. 知识蒸馏 (Knowledge Distillation)基本概念工作流程关键技术类型应用场景优势与挑战优势挑战 总结 2. 权重剪枝 (Model Pruning)基本原理二分类1. 非结构化剪枝(Unstructur…...

[在线实验]-RabbitMQ镜像的下载与部署

镜像下载 docker的rabbitmq镜像资源-CSDN文库 加载镜像 docker load --input rabbitmq.tar 给镜像打标签 这里发现镜像名为none,需要给镜像重命名下 docker tag [镜像id] [新镜像名称]:[新镜像标签] docker tag ebaf409ffbe2 rabbitmq:management 运行镜像…...

Netty 入门应用:结合 Redis 实现服务器通信

在上篇博客中,我们了解了 Netty 的基本概念和架构。本篇文章将带你深入实践,构建一个简单的 Netty 服务端,并结合 Redis 实现一个数据存取的示例。在这个场景中,Redis 作为缓存存储,Netty 作为服务端处理客户端请求。通…...

推荐 编译器c++

网页型 https://www.acgo.cn/playground C 在线工具 | 菜鸟工具 AcWing - 在线题库 ZJYYC在线测评系统 少儿编程竞赛在线学习 登录 - JOYSKID 余博士教编程_酷哥OJ_酷哥爱编程_酷哥创客AI编程 登录 - Luogu Spilopelia 软件型 DEV-c Dev C软件下载...

【新品发布】ESP32-P4开发板 —— 启明智显匠心之作,为物联网及HMI产品注入强劲动力

核心亮点: ESP32-P4开发板,是启明智显精心打造的一款高性能物联网开发板。它专为物联网项目及HMI(人机界面)产品而设计,旨在为您提供卓越的性能和稳定可靠的运行体验。 强大硬件配置: 双核400MHz RISC-V处…...

MeterSphere 使用脚本处理数据

1、前置/后置脚本 支持BeanShell(JSR223)、python、groovy、JavaScript脚本语言,推荐BeanShell(JSR223)。 在前置脚本中可以直接引用JMeter 预定义对象,例如: -- log:用于在脚本执行过程中打印日志 //打印“Hello World!”到info…...

如何获取谷歌新闻API密钥?

在信息获取和新闻传播领域,快速获取最新的新闻动态至关重要。谷歌新闻API为开发者提供了强大的工具,能够方便地集成全球各类新闻内容。通过使用该API,开发者可以实现对新闻的实时访问和管理,为用户提供丰富的信息服务。本文将指导…...

【全网最新】若依管理系统基于SpringBoot的前后端分离版本开发环境配置

目录 提前准备: 下载源代码 设置依赖 设置后台连接信息 运行后台 运行前端 安装npm依赖 启动前端 登录网页客户端 提前准备: 1、安装mysql 5以上就可以。 2、安装redis. 3、安装npm npm下载地址:https://nodejs.org/dist/v22.12…...

备赛蓝桥杯--算法题目(3)

1. 2的幂 231. 2 的幂 - 力扣(LeetCode) class Solution { public:bool isPowerOfTwo(int n) {return n>0&&n(n&(-n));} }; 2. 3的幂 326. 3 的幂 - 力扣(LeetCode) class Solution { public:bool isPowerOfT…...

如何解决 java.nio.charset.CoderMalfunctionError: 编码器故障错误问题?亲测有效的解决方法!

java.nio.charset.CoderMalfunctionError 是一个在 Java 中相对较少遇到的异常,通常与字符编码转换过程中的错误有关。当 Java 程序在进行字符编码转换时,遇到无法处理的字符或编码故障时,就会抛出该异常。 1. 问题描述 java.nio.charset.C…...

电气自动化 基于PLC控制的四路抢答器设计

摘要 本文描述了一款用三菱FX3U-48M可编程控制器设计的四路抢答器的系统构成、设计思路和功能。此抢答系统除了有基本抢答功能之外,还有计时、计算得分、亮灯提提示以及蜂鸣提醒功能。程序中设定答题时间,在主持人未按下开始抢答按钮之前,选…...

GA优化后的RBF神经网络

遗传算法(Genetic Algorithm, GA)优化后的RBF(Radial Basis Function)神经网络是一种结合进化算法与神经网络的混合模型,用于改进RBF神经网络的性能。以下是该模型的基本原理和相关公式: clear all close a…...

Scala:正则表达式

object test03 {//正则表达式def main(args: Array[String]): Unit {//定义一个正则表达式//1.[ab]:表示匹配一个字符,或者是a,或者是b//2.[a-z]:表示从a到z的26个字母中的任意一个//3.[A-Z]:表示从A到Z的26个字母中的任意一个//4.[0-9]:表示从0到9的10…...

vulnhub靶场之【hacksudo】1.0.1

前言 靶机:hacksudo 192.168.1.45 攻击:kali 192.168.1.16 都是虚拟机环境,桥接模式 主机发现 使用netdiscover或者arp-scan -l扫描 netdiscover -r 192.168.1.1/24信息收集 使用nmap扫描 因为看到2222是ssh服务,所以又扫…...

第4章:颜色和背景 --[CSS零基础入门]

在 CSS 中,颜色和背景属性是用于美化网页元素的重要工具。你可以通过多种方式定义颜色,并且可以设置元素的背景颜色、图像、渐变等。以下是关于如何在 CSS 中使用颜色和背景的一些关键点和示例。 1.颜色表示法 当然!以下是使用不同颜色表示…...

Python实现PBKDF2_SHA256加密密码

加密保存格式:pbkdf2_sha256$迭代次数$盐$哈希值 admin可能的结果:pbkdf2_sha256$10000$yzsusUJwrGfonwZzVxlnA$vgf/OgLf5C4wtQLtfNY9d68Hhxgv8eqZ0mwfxCqqeU import os import hashlib import base64 def password_encrypt(password, saltNone, iterations1000…...

React第十三节开发中常见问题之(视图更新、事件处理)

一、视图更新有哪些方案&#xff1f; 1、对于数据变量 正常的增删改查&#xff0c;只会让数据更新&#xff0c;但是不会触发 React 视图的更新&#xff1b; 如&#xff1a; <script lang"jsx">const baseTable [{name:Andy, age: 18, id: 1},{name:Jack, a…...

PyTorch 深度学习框架简介:灵活、高效的 AI 开发工具

PyTorch 深度学习框架简介&#xff1a;灵活、高效的 AI 开发工具 PyTorch 作为一个深度学习框架&#xff0c;以其灵活性、可扩展性和高效性广受欢迎。无论是在研究领域进行创新实验&#xff0c;还是在工业界构建生产级的深度学习模型&#xff0c;PyTorch 都能提供所需的工具和…...

Vue 3 中的计算属性(Computed Properties)详解

目录 Vue 3 中的计算属性&#xff08;Computed Properties&#xff09;详解 引言 什么是计算属性&#xff1f; 创建和使用计算属性 示例 1&#xff1a;基本用法 示例 2&#xff1a;带有 getter 和 setter 的计算属性 计算属性 vs 方法 Vue 3 中的计算属性&#xff08;Co…...

RocketMQ 过滤消息 基于tag过滤和SQL过滤

RocketMQ 过滤消息分为两种&#xff0c;一种tag过滤&#xff0c;另外一种是复杂的sql过滤。 tag过滤 首先创建producer然后启动&#xff0c;在这里创建了字符串的数组tags。字符串数组里面放置了多个字符串&#xff0c;然后去发送15条消息。 15条消息随着i的增长&#xff0c;…...

AI开发: 知识图谱的初识,学会制作知识图谱- Python 机器学习

一、知识图谱的概念 知识图谱是一个通过图结构来表示和组织知识的工具&#xff0c;它将事物、概念和它们之间的关系以图的形式呈现出来&#xff0c;图中的节点代表实体&#xff08;比如人物、地点、事件等&#xff09;&#xff0c;而边代表这些实体之间的各种关系&#xff08;…...

windows系统的环境变量(系统变量)不能编辑可能是这个原因

有些电脑从开始菜单那搜索“环境变量”后是没法编辑系统变量的&#xff0c;只能从设置里面进”环境变量“来进行编辑。 可以观察到系统环境变量即便是点击到了,但还是无法进行编辑...

各种服务器使用 yum 安装 nginx

1. 在Red Hat Enterprise Linux (RHEL) 及其衍生版本&#xff08;如CentOS, Oracle Linux, Rocky Linux, AlmaLinux&#xff09;上安装Nginx的步骤如下&#xff1a; 安装前提条件 首先&#xff0c;确保系统已安装yum-utils工具&#xff0c;这将有助于管理软件包和仓库&#x…...

基于BesselJ函数,构建AI中的卷积神经网络之新型卷积核

原创&#xff1a;daode3056(daode1212) BesselJ函数,来自微分方程&#xff1a; 它有通解有以下形式&#xff1a; 就取J0--J5的函数图像&#xff0c;如下&#xff1a; 现取J1(x),也就是红色的这支&#xff0c;作新的函数&#xff1a; 这一函数的导数与不定积分如下&#xff1a;…...

容器镜像仓库

文章目录 1、docker hub1_注册2_登录3_创建容器镜像仓库4_在本地登录Docker Hub5_上传容器镜像6_下载容器镜像 2、harbor1_获取 docker compose二进制文件2_获取harbor安装文件3_获取TLS文件4_修改配置文件5_执行预备脚本6_执行安装脚本7_验证运行情况8_访问harborUI界面9_harb…...

qtcanpool 知 08:Docking

文章目录 前言口味改造后语 前言 很久以前&#xff0c;作者用 Qt 仿照前端 UI 设计了一个 ministack&#xff08;https://gitee.com/icanpool/qtcanpool/blob/release-1.x/src/libs/qcanpool/ministack.h&#xff09; 控件&#xff0c;这个控件可以折叠。部分用户体验后&#…...

车载VR可视化解决方案

车载VR可视化解决方案是通过融合跟踪用户头部运动的特殊预测算法与惯性测量数据而开发的。该系统将大范围虚拟现实跟踪技术与IMU传感器相结合&#xff0c;为VR和AR应用打造了一套全面的运动跟踪与渲染流程&#xff0c;极大地方便了虚拟现实头显制造商定制可视化流程。 该车载VR…...

hhdb数据库介绍(10-43)

安全 密码安全管理 密码安全管理为用户提供了对计算节点数据库用户与存储节点的连接用户、备份用户的密码有效期监控提醒。到期后自动提示用户修改密码以提升系统的安全性。 数据库用户密码 &#xff08;一&#xff09;密码修改 用户可以在“安全->密码安全管理->数据…...

【优选算法 二分查找】二分查找入门详解:二分查找 & 在排序数组中查找元素的第一个和最后一个位置

二分查找 题目描述 题目解析 暴力解法 我们可以从左往右遍历一次数组&#xff0c;如果存在 target 则返回数组的下标&#xff0c;否则返回 -1&#xff1b; 时间复杂度 O(N)&#xff0c;因为没有利用数组有序的特点&#xff0c;每次比较只能舍弃一个要比较的数&…...

Python导入moviepy找不到editor 视频没有声音设置audio_codec参数

moviepy合成视频出错&#xff1a; 问题一&#xff1a;导入moviepy.editor找不到editor&#xff0c;No module named moviepy.editor问题二&#xff1a;合成的视频没有声音 问题一&#xff1a;导入moviepy.editor找不到editor&#xff0c;No module named moviepy.editor from …...

FreeSWITCH auto-rtp-bugs 研究

还在探索中... 抓一个现场的包&#xff0c; Fs 收 rtp 包正常&#xff0c;但 发 rtp 包有问题&#xff0c;比如上次 ts 是 1 万 &#xff0c;而这次是 1000&#xff0c;并且居然没有 marker。百思不得解。 vars.xml 增加一个全局变量的配置&#xff1a; <X-PRE-PROCESS …...

TypeScript 在 React 中的应用

文章目录 前言一、为什么要在 React 中使用 TypeScript&#xff1f;二、如何在React中使用 TypeScript三、高级类型结语 前言 随着前端开发的复杂度不断提升&#xff0c;开发者对于代码质量、可维护性和开发效率的要求也日益增高。TypeScript 作为一种为 JavaScript 添加静态类…...

汇编和C语言访问存储器

一、汇编语言访问存储器 1、读存储器 LDR R1, [R2] 2、写存储器 STR R1, [R2] 二、C语言访问存储器 1、读存储器 data *ADDR; 2、写存储器 *ADDR data;...

14.3、特洛伊木马分析与防护

目录 特洛伊木马概念与分类特洛伊木马运行机制特洛伊木马植入技术特洛伊木马隐藏技术特洛伊木马存活技术特洛伊木马防范技术Rootkit是什么? 特洛伊木马概念与分类 病毒不具备传播能力&#xff0c;但是蠕虫具备 特洛伊木马运行机制 木马攻击过程主要分为五个部分: ① 寻找攻…...

SpringBoot 分层解耦

从没有分层思想到传统 Web 分层&#xff0c;再到 Spring Boot 分层架构 1. 没有分层思想 在最初的项目开发中&#xff0c;很多开发者并没有明确的分层思想&#xff0c;所有逻辑都堆砌在一个类或一个方法中。这样的开发方式通常会导致以下问题&#xff1a; 代码混乱&#xff1…...

不一样的CSS(4)--icon图标系列之svg

序言 上一节内容我们讲解了如何利用css去画一个五角星&#xff0c;其中包括了使用svg的方法&#xff0c;有些小伙伴们对svg的使用不是很了解&#xff0c;那么本节内容我们主要来讲一下&#xff0c;关于svg标签的的使用。 目录 序言一、svg的介绍二、安装SVG扩展插件三、SVG基…...

Go-知识依赖管理2

Go-知识依赖管理2 1. go.sum1.1 go.sum 文件记录1.2 生成1.3 校验1.4 校验和数据库2. 模块代理2.1 GOPROXY 介绍2.2 代理协议2.2.1 获取模块列表2.2.2 获取模块元素数据2.2.3 获取 go.mod 文件2.2.4 获取代码压缩包2.2.5 获取模块的最新可用版本2.2.6 下载过程2.3 观察下载步骤…...

el-select的搜索功能

el-select的相关信息&#xff1a; 最基本信息 v-model的值为当前被选中的el-option的 value 属性值 :label是选择器可以看到的内容 过滤搜索 普通过滤搜索 <el-selectv-model"selectedCountry"placeholder"请选择国家"filterable:loading"lo…...

批量将不同的工作簿合并到同一个Excel文件

批量将不同的工作簿合并到同一个Excel文件 下面是一个示例&#xff0c;展示如何批量将不同的工作簿合并到同一个Excel文件&#xff0c;并生成模拟数据。我们将使用 Python 的 pandas 库来完成这个任务。具体步骤如下&#xff1a; 步骤 1: 安装必要的库 首先确保你已安装 pan…...

git遇见冲突怎么解决?

问&#xff1a; 回答&#xff1a;...

Spring和SpringBoot的关系和区别?

大家好&#xff0c;我是锋哥。今天分享关于【Spring和SpringBoot的关系和区别&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring和SpringBoot的关系和区别&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring和Spring Boot是两种相关但有所…...

python学习——字符串的编码和解码

在Python中&#xff0c;字符串的编码和解码是处理文本数据时非常重要的概念。以下是对字符串编码和解码的详细解释&#xff1a; 字符串编码 字符串编码是将字符串转换成字节序列的过程。Python中的字符串是Unicode编码的&#xff0c;所以在将字符串转换成字节序列时&#xff…...

Web游戏开发指南:在 Phaser.js 中读取和管理游戏手柄输入

前言 Phaser.js 是一个广受欢迎的 HTML5 游戏框架&#xff0c;为开发者提供了创建跨平台 2D 游戏的强大工具。在现代游戏开发中&#xff0c;支持游戏手柄已成为提升玩家体验的重要方面。本文将详细介绍如何在 Phaser.js 中监听和处理游戏手柄的输入&#xff0c;帮助开发者为他…...

HTML5系列(13)-- 微数据与结构化数据指南

前端技术探索系列&#xff1a;HTML5 微数据与结构化数据指南 &#x1f4ca; 致读者&#xff1a;探索数据语义化的世界 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 HTML5 微数据与结构化数据&#xff0c;学习如何让网页内容更易被搜索引擎理解和解析。 微数…...

MAA ADB问题

模拟器官方MUMU12 连接设置 | MaaAssistantArknights 参考文档&#xff0c;找谷歌platform ADB&#xff0c;放入MAA文件夹 选择谷歌ADB&#xff0c;选择MUMU12的ADB代码 MuMu 模拟器 12 127.0.0.1:16384 重新连接 ok...

基于VTX356语音识别合成芯片的智能语音交互闹钟方案

一、方案概述 本方案旨在利用VTX356语音识别合成芯片强大的语音处理能力&#xff0c;结合蓝牙功能、APP或小程序&#xff0c;打造一款功能全面且智能化程度高的闹钟产品。除了基本的时钟显示和闹钟提醒功能外&#xff0c;还拥有正计时、倒计时、日程安排、重要日提醒以及番茄钟…...

大语言模型应用开发框架LangChain

大语言模型应用开发框架LangChain 一、LangChain项目介绍1、简介2、LangChain的价值3、实战演练 二、LangChain提示词大语言模型应用1、简介1.1、提示词模板化的优点1.2、提示词模板LLM 的应用1.3、Prompt 2、应用实战2.1、PromptTemplate LLM2.2、PromptTemplate LLM Outpu…...

php7.4安装pg扩展-contos7

今天接到一个需求&#xff0c;就是需要用thinkphp6链接pg(postgresql)数据库。废话不多说&#xff0c;直接上操作步骤 一、安装依赖 yum install -y sqlite-devel libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-dev…...

【开源】A064—基于JAVA的民族婚纱预定系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

网络安全防护指南:筑牢网络安全防线(5/10)

一、网络安全的基本概念 &#xff08;一&#xff09;网络的定义 网络是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息收集、存储、传输、交换、处理的系统。在当今数字化时代&#xff0c;网络已经成为人们生活和工作中不可或缺的一部分。它连接了世…...