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

(2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少

LoRA Learns Less and Forgets Less

公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群)

目录

0. 摘要

1. 引言

2. 背景

3. 实验设置

3.2 使用编码和数学基准测试来衡量学习(目标域评估)

3.3 遗忘度量(源域评估)

4. 结果

4.1 在编程和数学任务中,LoRA的表现不如全量微调

4.2 LoRA 的遗忘程度低于全量微调

4.3 学习与遗忘的权衡

4.4 LoRA 的正则化特性

4.5 在代码和数学上的全量微调不学习低秩扰动

4.6 LoRA的最佳配置实用建议

4.6.1 LoRA 对学习率非常敏感

4.6.2 目标模块的选择比秩更重要

6. 讨论

7. 结论


0. 摘要

低秩适配(Low-Rank Adaptation,LoRA)是一种广泛使用的参数高效微调(parameter-efficient fine-tuning)方法,适用于大型语言模型。LoRA 通过仅训练选定权重矩阵的低秩扰动来节省内存。在本研究中,我们比较了 LoRA 和全量微调(full finetuning)在两个目标领域(编程和数学)中的性能。我们考虑了指令微调(≈10 万对提示-响应对)和持续预训练(≈100 亿非结构化标记)这两种数据模式。我们的结果显示,在大多数情况下,LoRA 的性能显著低于全量微调。然而,LoRA 表现出一种理想的正则化形式:它能更好地保持基模型在目标领域之外任务上的性能。我们发现,与常见的正则化技术如权重衰减和 dropout 相比,LoRA 提供了更强的正则化效果;它还有助于保持更多样化的生成结果。我们展示了全量微调学习的扰动,其秩比典型的 LoRA 配置高 10-100 倍,这可能解释了一些报告中的差距。最后,我们提出了使用 LoRA 进行微调的最佳实践建议。 

1. 引言

微调具有数十亿参数的大型语言模型(LLM)需要大量的 GPU 内存。参数高效微调方法通过冻结预训练的 LLM,仅训练少量额外的参数(通常称为适配器,adapter)来减少训练期间的内存占用。低秩适配(LoRA;Hu等,2021)训练的是选定权重矩阵的低秩扰动适配器。

自引入以来,LoRA 被宣传为一种严格的效率改进方法,不会在新目标领域上妥协准确性(Hu等,2021;Dettmers等,2024;Raschka,2023;Zhao等,2024b)。然而,只有少数研究将 LoRA 与具有数十亿参数的 LLM 的全量微调进行基准测试(Ivison等,2023;Zhuo等,2024;Dettmers等,2024),且报告的结果喜忧参半。这些研究中有些依赖于较老的模型(例如 RoBERTa)或粗糙的评估基准(如 GLUE 或 ROUGE),这些基准对于当代 LLM 的相关性较低。相比之下,更为敏感的特定领域评估(例如代码)揭示了 LoRA 在某些情况下劣于全量微调(Ivison等,2023;Zhuo等,2024)。在此,我们问:在何种条件下,LoRA 能在代码和数学等具有挑战性的目标领域上接近全量微调的准确性?

通过训练更少的参数,LoRA 被认为提供了一种正则化形式,限制微调模型的行为保持接近基础模型(Sun等,2023;Du等,2024)。我们还问:LoRA 是否作为一种正则化器,减轻了源领域的“遗忘”?

在本研究中,我们严格比较了 LoRA 和全量微调在 Llama-2 7B(在某些情况下是 13B)模型上在代码和数学这两个具有挑战性的目标领域的表现。在每个领域内,我们探索了两种训练模式。

  • 指令微调(instruction finetuning),这是 LoRA 的常见情境,涉及数千万到数亿 token 的问题回答数据集。在这里,我们使用 Magicoder-Evol-Instruct-110K(Wei等,2023)和MetaMathQA(Yu等,2023)。
  • 持续预训练(continued pretraining),这是 LoRA 较少见的应用,涉及数十亿未标记标记的训练;在这里我们使用 StarCoder-Python(Li等,2023)和 OpenWebMath(Paster等,2023)数据集(表 1)。

我们通过具有挑战性的编码和数学基准(HumanEval;Chen等,2021和GSM8K;Cobbe等,2021)评估目标领域性能(即学习)。我们通过语言理解、世界知识和常识推理任务(Zellers等,2019;Sakaguchi等,2019;Clark等,2018)评估源领域遗忘性能。我们发现,对于代码,LoRA 的表现显著低于全量微调,而对于数学,LoRA 缩小了更多的差距(第 4.1 节),但需要更长的训练时间。尽管存在性能差距,我们展示了 LoRA 在保持源领域性能方面优于全量微调(第4.2节)。此外,我们刻画了目标域和源域之间性能的权衡(学习与遗忘)。对于给定的模型大小和数据集,我们发现 LoRA 和全量微调形成了相似的学习-遗忘权衡曲线:LoRA 的学习更多时遗忘程度与全量微调相同,尽管我们发现某些情况下(例如代码),LoRA 可以实现类似的学习但遗忘更少(第 4.3 节)。

我们随后展示,即使在较不严格的秩条件下,LoRA 在与经典正则化方法如 dropout(Srivastava等,2014)和权重衰减(Goodfellow等,2016)相比时提供了更强的正则化效果。我们还展示了 LoRA 在输出层面的正则化:我们分析了 HumanEval 问题生成的解决方案,发现全量微调收敛于有限的解决方案集,而 LoRA 保持了与基础模型更为相似的多样化解决方案(Sun等,2023;Du等,2024)。

为什么 LoRA 的表现低于全量微调?LoRA 最初的动机部分是基于这样一个假设:微调会导致基础模型权重矩阵的低秩扰动(Li等,2018;Aghajanyan等,2020;Hu等,2021)。然而,这些研究所探讨的任务对于现代 LLM 来说相对容易,肯定比这里研究的代码和数学领域要容易。因此,我们进行奇异值分解,表明全量微调几乎不改变基础模型权重矩阵的谱,但两者之间的差异(即扰动)是高秩的。随着训练的进行,扰动的秩增长,达到典型 LoRA 配置的 10-100倍(图7)。

我们最后提出了使用 LoRA 训练模型的最佳实践。我们发现 LoRA 对学习率尤其敏感,其性能主要受目标模块的选择影响,秩的影响较小。

总结起来,我们贡献了以下结果:

  • 在代码和数学领域,全量微调在准确性和样本效率上优于 LoRA(第4.1节)。
  • LoRA 在源领域的遗忘较少,提供了一种正则化形式(第4.2和4.3节)。
  • LoRA 的正则化效果比常见的正则化技术更强;它还帮助保持生成结果的多样性(第4.4节)。
  • 全量微调找到的是高秩的权重扰动(第4.5节)。
  • 与全量微调相比,LoRA 对超参数(即学习率、目标模块和秩,依次递减)更敏感(第4.6节)。

2. 背景

(2021|ICLR,LoRA,秩分解矩阵,更少的可训练参数)LoRA:大语言模型的低秩自适应 

LoRA 涉及冻结预训练的权重矩阵 W_pretrained ∈ R^(d×k),并仅学习其低秩扰动,这里记作 Δ,如下所示:

用户选择要适配的 W_pretrained​(“目标模块”)和秩 r≪d,k。通过这种方式,仅训练 d×r+r×k 参数,而不是 d×k,从而减少计算梯度所需的内存和浮点运算次数。举个例子,将 r=16 的 LoRA 应用于一个具有 d=k=4096 的 7B 权重矩阵,训练的参数数量不到原始参数数量的 1%。第 D 节列出了 LoRA 的大致内存节省量。

LoRA 还可以通过共享单一基础模型并使用个性化适配器为多个用户提供高效的多租户服务(multi-tenant serving)(Sheng 等,2023)。

在此,我们通过将模块分为三类来简化对目标模块的组合搜索:注意力矩阵

多层感知器(“MLP”)矩阵

以及 “All”——它们的并集,适用于 L 层。需要注意的是,尽管在原始研究中 LoRA 仅应用于注意力矩阵(Hu 等,2021),但目前的标准是针对更多的模块(Raschka,2023;Dettmers 等,2024)。

3. 实验设置

3.2 使用编码和数学基准测试来衡量学习(目标域评估)

编码 - HumanEval。这个基准测试(Chen等,2021)包含了 164 个问题,涉及根据文档字符串和函数签名生成 Python 程序。如果生成的程序通过了所有提供的单元测试,则认为生成是正确的。我们使用代码生成 LM 评估工具(Ben Allal等,2022),配置为每个问题输出 50 个生成结果,使用 softmax 温度为 0.2 进行采样,并计算 “pass@1”。

数学 - GSM8K。这个基准测试(Cobbe等,2021)包含了 8500 个小学数学单词问题。我们在 GSM8K 的测试集上进行评估(1319 个样本),采用 LM 评估工具(Gao等,2023)中的默认生成参数(温度=0,5 few-shot,pass@1)。

3.3 遗忘度量(源域评估)

HellaSwag。这个基准测试(Zellers等,2019)包含了 70,000 个问题,每个问题描述了一个事件,并有多种可能的延续。任务是选择最合理的延续,这需要对微妙的日常情况进行推理。

WinoGrande。这个基准测试(Sakaguchi等,2019)也评估了常识推理能力。它包括 44,000 个句子问题,需要解决歧义代词的问题。

ARC-Challenge。这个基准测试(Clark等,2018)包含了 7,787 个小学级别的多项选择科学问题,测试了复杂推理和科学概念理解的能力。

4. 结果

4.1 在编程和数学任务中,LoRA的表现不如全量微调

在图 2 中,我们总结了六个 LoRA 模型在每个训练时长下的最小、平均和最大性能(以紫色表示),并将它们与全量微调(实线黑色)和基础模型(虚线水平线)进行比较;结果在图 S2 中进一步按 LoRA 配置细分。首先需要注意的是,对于这两个领域,指令微调(IFT)相比持续预训练(CPT)带来了更显著的改进,这是预料之中的,因为 IFT 的问题更类似于评估问题(例如,对于代码,IFT 的最高 HumanEval 得分为 0.50,而 CPT 为 0.26)。

对于代码 CPT(图 2A),我们发现全量微调与 LoRA 之间的差距随着数据量的增加而扩大。整体上,表现最好的 LoRA 在 16B tokens 时达到峰值(rank=256,“All”),HumanEval 得分为0.175,大致相当于全量微调在 1B tokens 时的表现(HumanEval=0.172)。全量微调在 20B tokens 时达到其最高 HumanEval 得分 0.263。对于代码 IFT(图 2B),表现最好的 LoRA(r = 256,“All”)在第 4 个 epoch 时达到 HumanEval 得分 0.407,显著低于全量微调在第 2 个 epoch 时的 HumanEval 得分 0.464 和其在第 8 个 epoc h时的最高 HumanEval 得分 0.497。

数学 CPT(图2C)的结果显示,训练 1B tokens 或更少会使 GSM8K 结果低于基线(GSM8K=0.145)。随着数据量的增加,性能有所提升,表现最好的 LoRA(rank=256,“All”)在 8.6B tokens 时达到 GSM8K 得分 0.187,低于全量微调在 4.3B tokens 时的 GSM8K 得分 0.191 和在 8.6B tokens 时的 GSM8K 得分 0.230。在数学 IFT(图2D)数据集中,LoRA 在大多数情况下缩小了与全量微调的差距。然而,LoRA 仍然不如全量微调高效。LoRA(r = 256,“All”)在第 4 个 epoch 时达到峰值(GSM8K=0.622),而全量微调在第 2 个 epoch 时达到 GSM8K 得分 0.640 并在第 4 个 epoch 时达到峰值 GSM8K 得分 0.642。两种方法的性能均大大超过了基础模型。我们推测,这里的差距较小可能对应于数学问题与预训练数据之间的领域转变较小,不同于代码中的较大转变。

总之,跨 LoRA 配置和训练时长来看,LoRA 的表现仍然不如全量微调。这些效果在编程领域比在数学领域更为显著。对于这两个领域,指令微调比持续预训练带来了更大的准确性提升。

4.2 LoRA 的遗忘程度低于全量微调

我们将遗忘定义为 HellaSwag、ARC-challenge 和 WinoGrande 基准测试平均成绩的下降,并在图 3 中探讨其随数据量的变化。总体而言,我们观察到以下几点:(1) 指令微调(IFT)比持续预训练(CPT)引起更多的遗忘,(2) 编程引起的遗忘比数学更多,(3) 遗忘随着数据量的增加而增加。最重要的是,LoRA 的遗忘程度低于全量微调,且如 4.1 中所述,这种效果在编程领域更加显著。在代码 CPT 中,LoRA 的遗忘曲线大致保持不变,而全量微调的性能随着数据量增加而下降(在 HumanEval 达到峰值时的遗忘指标:全量微调在 20B tokens 时为 0.54,LoRA 在 16B tokens 时为 0.64)。在编程 IFT 中,两种方法在训练更多 epochs 时都出现了性能下降,在其峰值性能(4 和 8 个 epochs)时,LoRA 的得分为 0.63,而全量微调的得分为 0.45。

对于数学任务,在 OpenWebMath CPT 数据集中没有明显的趋势,LoRA 和全量微调均未表现出遗忘。这可能是因为 OpenWebMath 数据集中以英语句子为主,而 StarCoder-Python 数据集则以 Python 代码为主(详见 3.1)。在数学IFT中,LoRA的遗忘程度再次低于全量微调(在第 4 个 epoch 时分别为 0.63 和 0.57)。

4.3 学习与遗忘的权衡

显然,模型在微调到新的目标领域时改变越少,就会遗忘源领域的内容越少。非平凡的问题是: LoRA 和全量微调在如何权衡学习和遗忘方面有何不同?LoRA 能否实现类似的目标域性能,但遗忘减少?

我们通过绘制遗忘指标与学习指标(GSM8K 和 HumanEval)的聚合曲线来形成一个学习-遗忘帕累托曲线,在这个空间中,不同模型(在不同训练时长下训练)分布为点(图 4)。LoRA 和全量微调似乎占据同一帕累托曲线,LoRA 模型位于右下方 - 学习和遗忘都更少。然而,我们能够找到一些情况,特别是对于代码 IFT,LoRA 在具有可比目标域性能水平时,表现出更高的源域性能,呈现出更好的权衡。在补充图 S5 中,我们展示了每个模型的原始评估分数。在补充图 S3 中,我们将 Llama-2-13B 结果与 Llama-2-7B 的结果在代码 CPT 中绘制在同一图中。

4.4 LoRA 的正则化特性

在这里,我们将正则化(宽泛地)定义为一种训练机制,使微调后的 LLM 保持与基础 LLM 相似。我们首先分析学习-遗忘权衡中的相似性,然后分析生成的文本。

与权重衰减(weight decay)和注意力丢弃(dropout)相比,LoRA 是一种更强的正则化方法。我们使用在 Magicoder-Evol-Instruct-110K 数据集上训练的 Llama-2-7B 模型,并将 LoRA(r = 16, 256,“All”)与权重衰减(Goodfellow等,2016)和注意力丢弃(Srivastava等,2014)进行比较,权重衰减的值为 5e−5、1e−4,注意力丢弃的值为 0.05、0.1。我们发现 LoRA 提供了更强的正则化:它学习和遗忘更少。

LoRA 有助于保持标记生成的多样性。我们再次使用在 Magicoder-Evol-Instruct-110K 数据集上训练的 Llama-2-7B 模型,来审查 HumanEval 期间生成的字符串。我们计算了每个模型的 50 个生成中的独特字符串数量,作为预测多样性的粗略代理。在图 6 中,我们分别展示了正确和错误答案的结果。正如在来自人类反馈的强化学习文献中所提到的(Du等,2024;Sun等,2023),我们发现全量微调导致的独特生成数量较少(“分布崩溃”),与基础模型相比,无论是通过还是失败的生成都是如此。我们发现 LoRA 在两者之间提供了一种折衷,就生成水平而言。以上工作还表明,LoRA 甚至可以替代一个常见的正则化项,使得微调后的生成文本的概率与基础模型保持相似。

4.5 在代码和数学上的全量微调不学习低秩扰动

在本节中,我们试图研究是否应该预期低秩训练是对全量微调的良好近似,并且如果是这样,必要的秩是多少。回想一下,全量微调可以写成 W_finetuned = W_pretrained + Δ;在这里,我们计算方程中所有三个项的奇异值分解。我们专注于代码的持续预训练,在 LoRA 和全量微调之间存在巨大差异。我们分析了在 0.25、0.5、1、2、4、8、16 和 20 亿训练 token 时获得的检查点。

首先,在补充图 S6 中,我们展示了 Llama-2-7B(维度为4096×4096)第 26 层的 W_q 投影的结果。我们显示,微调后的权重矩阵的谱与基础权重矩阵的谱非常相似,两者都缓慢衰减,并且需要保留 ≈50% 的奇异向量(≈2000/4096)来解释权重矩阵中 90% 的方差。关键是,差异 Δ 的谱与微调后的以及基础权重矩阵的谱也非常相似(多个因子的缩放)。我们认为,全量微调谱没有什么特别之处;通过向权重矩阵添加低幅度的高斯独立同分布噪声,可以实现类似的谱(图 S7)。

接下来,我们询问在训练过程中,扰动何时变为高秩,并且在模块类型和层之间是否有意义地变化。我们估计解释矩阵中 90% 方差所需的秩。结果见图 7。我们发现:(1)在 0.25B CPT token 处的最早检查点显示 Δ 矩阵的秩比典型的 LoRA 秩大 10-100倍;(2)当使用更多数据进行训练时,Δ 的秩会增加;(3)MLP 模块的秩比注意力模块高;(4)第一层和最后一层的秩似乎比中间层低。

4.6 LoRA的最佳配置实用建议

尽管优化 LoRA 超参数无法弥补与全量微调之间的差距,但我们在下面强调一些超参数选择比其他超参数更有效的情况。

4.6.1 LoRA 对学习率非常敏感

我们对 Llama-2-7B 进行了学习率敏感性分析,它们在代码和数学 IFT 数据集上训练了两个周期,然后分别进行了 HumanEval 和 GSM8K 评估。对于 LoRA,我们将 r = 64,目标模块设置为“All”。图 8 显示,LoRA 随着学习率的增加而单调改善,直到训练发散,最佳学习率分别为 5e−4 和 2e−4,分别用于代码和数学。在这两个数据集上,这些最佳 LoRA 学习率都被四种备选全量微调学习率表现。最佳全量微调学习率分别为 5e−5 和 1e−5,比 LoRA 小一个数量级。对于 LoRA,我们找不到能够达到最佳学习率性能 90% 的替代学习率。对于全量微调,代码和数学分别有两种可行的替代学习率。

4.6.2 目标模块的选择比秩更重要

有了最佳学习率后,我们继续分析秩(r = 16, 256)和目标模块的影响。我们发现 “All” > “MLP” > “Attention”,尽管秩的影响更轻微,r = 256 > r = 16。因此,我们得出结论,针对 “All” 模块选择相对较低的秩(例如,r = 16)提供了性能和准确性之间的良好平衡

总的来说,我们建议将 LoRA 用于 IFT 而不是 CPT;确定能够实现稳定训练的最高学习率;针对 “All” 模块进行目标设置,并根据内存约束选择秩,16 是一个不错的选择;探索至少进行四个周期的训练。

6. 讨论

LoRA 和全量微调之间的差异是否随着模型大小的增加而减小?过去的研究曾暗示了微调效果和模型大小之间的关系。虽然最近的研究已成功地将 LoRA 应用于 70 亿参数模型,但我们将对这些有趣的扩展性属性进行严格的研究留给未来的工作。

谱分析的局限性。全量微调倾向于找到高秩解决方案并不排除低秩解决方案的可能性;相反,它显示通常找不到低秩解决方案。另一种解释是,重构权重矩阵所需的秩高于下游任务所需的秩。

为什么 LoRA 在数学上表现良好而在编码上表现不佳?一个假设是数学数据集涉及的领域变化较小;它们包含的英语比例较大,并导致遗忘减少。第二个假设是 GSM8K 评估过于简单,无法捕捉到微调中学到的新的大学水平数学知识。

7. 结论

本文阐明了使用 LoRA 训练的当代 LLM(具有 70 亿和 130 亿参数)在下游任务中的表现。与大多数先前的工作不同,我们在代码和数学领域使用了特定领域的数据集,并使用了敏感的评估指标。我们展示了 LoRA 在两个领域中表现不及全量微调。我们还展示了 LoRA 使微调模型的行为保持接近基础模型,避免了源域的遗忘,并在推理时生成更多样化的结果。我们调查了 LoRA 的正则化属性,并展示了全量微调找到的权重扰动远非低秩。最后,我们分析了 LoRA 对超参数的敏感性,并强调了最佳实践。

相关文章:

(2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少

LoRA Learns Less and Forgets Less 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 引言 2. 背景 3. 实验设置 3.2 使用编码和数学基准测试来衡量学习(目标域…...

【Java】面向对象的三大特征:封装、继承、多态

封装 什么叫封装? 在我们写代码的时候经常会涉及两种角色: 类的实现者 和 类的调用者。 封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了,这样就降低了类使用者的学习和使用成本&a…...

请问Java8进阶水平中,常用的设计模式有哪些?

设计模式通常被分为三大类:创建型(Creational)、结构型(Structural)和行为型(Behavioral)。以下是这20个设计模式的分类: 创建型(Creational)设计模式&#…...

力扣--最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4] 输出:…...

C# 中的字符与字符串

简介 在C#编程语言中,字符和字符串是处理文本数据的基础。字符是单个的字母或符号,而字符串是字符的集合。本篇博客将详细介绍C#中的字符类型 char 和字符串类型 string,以及它们的基本操作。 字符类型 char char 类型在C#中用于表示单个字…...

TPM之VMK密封

本篇文章主要介绍基于TPM的Bitlocker全盘加密时,VMK密钥的密封(Seal)流程,至于TPM、Bitlocker、密钥保护器、VMK密钥等这些东西是什么,这里不做解释,需要自己脑补一下(╮(╯▽╰)╭)…...

Fastjson 反序列化漏洞[1.2.24-rce]

漏洞复现环境搭建请参考 http://t.csdnimg.cn/vSaaw kali切换jdk版本请参考 Kali安装JAVA8和切换JDK版本的详细过程_kali安装jdk8-CSDN博客 漏洞原理 Fastjson提供的com.sun.rowset.JdbcRowSetImpl类下的dataSourceName方法支持传入一个RMI/LDAP源,支持远程调用。…...

【面试宝藏】Go基础面试题其一

探索Go语言:特性、用法与最佳实践 Go语言(Golang)自发布以来迅速成为开发者社区中的热门选择。本文将探讨Go语言的优势、数据类型、包管理、类型转换、并发处理、同步机制、通道特性及其使用中的注意事项等内容,并回答一些常见的…...

python如何安装pyqt4

第一步,下载.whl文件,地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4,这里可以下载不同的python版本对应的包。 第二步,选择一个目录,将下载好的文件放到该目录下,然后cmd下&#xff…...

调用上传文件接口出现格式错误

一、造成这种错误的可能有很多 1.检查一下传递格式 2.检查一下接口要求的格式 二、举个例子 这两个有什么区别? 那就是json、和form-data,一定要看仔细接口 如果还是按照json的方式去传就会报错 三、更改header里Content-Type的类型 json等的heade…...

leetcode148. 排序链表,归并法,分治的集大成之作

leetcode148. 排序链表 题目链接 给你链表的头结点 head ,请将其按升序排列并返回排序后的链表。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5] 示例 3&…...

一维时间序列信号的小波模极大值分解与重建(matlab R2018A)

数学上称无限次可导函数是光滑的或没有奇异性,若函数在某处有间断或某阶导数不连续,则称函数在此处有奇异性,该点就是奇异点。奇异性反映了信号的不规则程度,因为信号的奇异点和突变部分往往携带者重要信息,因此信号的…...

五分钟“手撕”栈

实现代码放开头,供大家学习与查阅 目录 一、实现代码 二、什么是栈 三、栈的常见操作 底层实现是链表。 入栈 出栈 四、Stack的使用 五、栈的习题 第一题 第二题 第三题 第四题 第五题 第六题 第七题 六、栈、虚拟机栈、栈帧的区别 目录 一、…...

MAC也能玩转3A大作 Crossover使用指南 crossover运行战地5

众所周知,在Mac上你本不该玩游戏。但是如果你实在犯了这个瘾了,你可以使用Parallel Desktop来运行所有Windows程序。但是繁重的虚拟机对磁盘容量提出了较高的要求,(可能虚拟机用了大概半年就会到60-80GB这样的大小)&am…...

docker私有镜像仓库的搭建及认证

简介: docker私有镜像仓库的搭建及认证 前言 在生产上使用的 Docker 镜像可能包含我们的代码、配置信息等,不想被外部人员获取,只允许内 网的开发人员下载。 Docker 官方提供了一个叫做 registry 的镜像用于搭建本地私有仓库使用。在内部网…...

simCSE句子向量表示(1)-使用transformers API

SimCSE SimCSE: Simple Contrastive Learning of Sentence Embeddings. Gao, T., Yao, X., & Chen, D. (2021). SimCSE: Simple Contrastive Learning of Sentence Embeddings. arXiv preprint arXiv:2104.08821. 1、huggingface官网下载模型 官网手动下载:pri…...

网络运维的重要性

一、介绍 网络运维,英文名为Network Operations (NetOps),指的是负责维护和管理企业或组织内部网络设备和系统的团队或个人。网络运维的主要目标是确保网络的稳定运行和高效性能,以满足企业或组织的需求。 网络运维工作涵盖了多个方面&…...

还不会使用多线程优化代码执行效率?codefun教你在业务场景中使用CompletableFuture进行优化!

业务场景 我们先来从场景入手,具体的业务是这样的:我们需要从某的省的id去查询这个省份所有的县区,至于什么是县区呢?在DB中我们是这样定义的,也就是字段level 3 的时候,就代表一个县的信息,然后呢&#…...

数据结构-堆(带图)详解

前言 本篇博客我们来仔细说一下二叉树顺序存储的堆的结构,我们来看看堆到底如何实现,以及所谓的堆排序到底是什么 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:数据结构_普通young man的博客-CSDN博客 若有问题 评…...

React Native 之 react-native-share(分享)库 (二十三)

react-native-share 是一个流行的 React Native库,它允许你在移动应用中分享文本、链接、图片等内容到各种社交网络和消息应用。以下是对其原理的简要概述以及代码示例的解析。 代码示例解析 1. 安装 npm install react-native-share # 或者 yarn add react-n…...

JCR一区级 | Matlab实现TCN-BiGRU-MATT时间卷积双向门控循环单元多特征分类预测

JCR一区级 | Matlab实现TCN-BiGRU-MATT时间卷积双向门控循环单元多特征分类预测 目录 JCR一区级 | Matlab实现TCN-BiGRU-MATT时间卷积双向门控循环单元多特征分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现TCN-BiGRU-MATT时间卷积双向门控循环单元多…...

游戏心理学Day01

心理学 心理学是一门研究心理过程和行为及其如何受有机体的生理,心理状态和外部影响的科学 心理学不是常识的代名词,心理学分为基础,心理学和应用心理学基础,心理学研究的目的在于描述,解释,预测和控制行…...

错误模块路径: ...\v4.0.30319\clr.dll,v4.0.30319 .NET 运行时中出现内部错误,进程终止,退出代码为 80131506。

全网唯一解决此BUG的文章!!! 你是否碰到了以下几种问题?先说原因解决思路具体操作1、首先将你C:\Windows\Microsoft.NET\文件夹的所有者修改为你当前用户,我的是administrator。2、修改当前用户权限。3、重启电脑4、删…...

005 CentOS 7.9 RabbitMQ安装及配置

https://github.com/rabbitmq/rabbitmq-server/releases https://www.rabbitmq.com/docs/download https://packagecloud.io/rabbitmq/rabbitmq-server https://www.erlang-solutions.com/downloads/ https://www.erlang.org/ 文章目录 卸载erlerl版本安装与下载版本不匹配正…...

Xcode 15 libarclite 缺失问题

升级到Xcode 15运行项目报错,报错信息如下: SDK does not contain libarclite at the path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a; try increasing the minimum d…...

绘画智能体分享

这是您请求的故宫雪景图,角落有一只可爱的胖猫,采用了水墨画风格,类似于张大千的作品。希望您喜欢这幅画! 🎨 选项 1【转变风格】——将这幅画转变为梵高的后印象派风格,增添一些梵高特有的笔触和色彩。 &…...

7_2、C++程序设计进阶:数据共享

数据与函数 数据与函数局部变量全局变量类的数据成员 类的静态成员静态数据成员静态函数成员 友元友元函数友元类 函数之间实现数据共享有以下几种方式:局部变量、全局变量、类的数据成员、类的静态成员和友元。 如何共享局部变量呢? 在主调函数和被调…...

d2-crud-plus 使用小技巧(五)—— 搜索时间(或下拉列表)后,点击X清除按钮后返回值为null,导致异常

问题 使用vue2elementUId2-crud-plus,时间组件自动清除按钮,点击清除按钮后对应的值被设置为null,原本应该是空数组([]),导致数据传到后端后报错。不仅适用于搜索,表单一样有效果。 解决方法 …...

ChatGPT成知名度最高生成式AI产品,使用频率却不高

5月29日,牛津大学、路透社新闻研究所联合发布了一份生成式AI(AIGC)调查报告。 在今年3月28日—4月30日对美国、英国、法国、日本、丹麦和阿根廷的大约12,217人进行了调查,深度调研他们对生成式AI产品的应用情况。 结果显示&…...

R19 NR移动性增强概况

随着5G/5G-A技术不断发展和业务需求的持续增强,未来网络的部署将不断向高频演进。高频小区的覆盖范围小,用户将面临更为频繁的小区选择、重选、切换等移动性过程。 为了提升网络移动性能和保障用户体验,移动性增强一直是3GPP的热点课题。从NR…...

C语言:如何写文档注释、内嵌注释、行块注释?

技术答疑流程 扫描二维码,添加个人微信;支付一半费用,获取答案;如果满意,则支付另一半费用; 知识点费用:10元 项目费用:如果有项目任务外包需求,可以微信私聊...

Turtle中circle用法详解

在Python的Turtle图形库中,circle方法是一个非常灵活的工具,它允许我们以简单的方式绘制圆或圆的一部分。本文将深入探讨circle方法,特别关注radius和extent参数的用途及其正负值的意义。 一、circle方法概览 首先,让我们了解一…...

stack和queue(1)

一、stack的简单介绍和使用 1.1 stack的介绍 1.stack是一种容器适配器,专门用在具有先进后出,后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入和弹出操作。 2.stack是作为容器适配器被实现的,容器适配器即是…...

前端3剑客(第1篇)-初识HTML

100编程书屋_孔夫子旧书网 当今主流的技术中,可以分为前端和后端两个门类。 前端:简单的理解就是和用户打交道 后端:主要用于组织数据 而前端就Web开发方向来说, 分为三门语言, HTML、CSS、JavaScript 语言作用HT…...

植被变化趋势线性回归以及可视化

目录 植被变化线性回归ee.Reducer.linearFit().reduce()案例:天水市2004-2023年EVI线性回归趋势在该图中,使用了从红色到蓝色的渐变来表示负趋势到正趋势。红色代表在某段时间中,植被覆盖减少,绿色表示持平,蓝色表示植被覆盖增加。 植被变化线性回归 该部分参考Google…...

大话设计模式学习笔记

目录 工厂模式策略模式备忘录模式(快照模式)代理模式单例模式迭代器模式访问者模式观察者模式解释器模式命令模式模板方法模式桥接模式适配器模式外观模式享元模式原型模式责任链模式中介者模式装饰模式状态模式 工厂模式 策略模式 核心:封装…...

MiniMax公司介绍

MiniMax是一家专注于通用人工智能技术的科技公司,成立于2021年12月。公司致力于成为通用人工智能时代基础设施建设者和内容应用创造者,积极投身于中国人工智能技术高速发展的时代大潮。MiniMax的团队由多位在人工智能领域有着丰富经验的专家组成&#xf…...

lucene 9.10向量检索基本用法

Lucene 9.10 中的 KnnFloatVectorQuery 是用来执行最近邻(k-Nearest Neighbors,kNN)搜索的查询类,它可以在一个字段中搜索与目标向量最相似的k个向量。以下是 KnnFloatVectorQuery 的基本用法和代码示例。 1. 索引向量字段 首先…...

【2023百度之星初赛】跑步,夏日漫步,糖果促销,第五维度,公园,新材料,星际航行,蛋糕划分

目录 题目:跑步 思路: 题目:夏日漫步 思路: 题目:糖果促销 思路: 题目:第五维度 思路: 题目:公园 思路: 新材料 思路: 星际航行 思路…...

vs2019 QT UI 添加新成员或者控件代码不提示问题解决方法

右键点击头文件,添加ui的头文件 添加现有项 找到uic目录的头文件 打开ui,QtWidgetsApplication2.ui,进行测试 修改一个名字: 重点: 设置一个布局: 点击生成解决方案: 以后每次添加控件后,记得点击保存 这样…...

【面试八股总结】MySQL事务:事务特性、事务并行、事务的隔离级别

参考资料:小林coding 一、事务的特性ACID 原子性(Atomicity) 一个事务是一个不可分割的工作单位,事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。原子性是通过 undo …...

STL用法总结

文章目录 vector构造常用函数遍历适用情形注意事项使用迭代器删除可能会出现的错误 Set & MultiSet(不能用sort,会自动排序)构造常用函数删除,查找遍历 unordered_set(不排序集合),unordered_multiset Map & M…...

他人项目二次开发——慎接

接了一个朋友的项目——开发及运营迭代差不多2年多了,整体样子移动端和PC都能正常使用,但后期的扩展性及新功能添加出现瓶颈。 因此给了一部分钱,让我接手来开发——重构架构。 背景说明 朋友公司的技术人员是我帮忙招聘的,相关技…...

k8s之PV、PVC

文章目录 k8s之PV、PVC一、存储卷1、存储卷定义2、存储卷的作用2.1 数据持久化2.2 数据共享2.3 解耦2.4 灵活性 3、存储卷的分类3.1 emptyDir存储卷3.1.1 定义3.1.2 特点3.1.3 用途3.1.4 示例 3.2 hostPath存储卷3.2.1 定义3.2.2 特点3.2.3 用途3.2.4 示例 3.3 NFS存储卷3.3.1 …...

新人学习笔记之(JavaScript作用域)

一、作用域 1.通常来说,一段程序代码中所用的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突 二、变量的作用域 1.变…...

图论第一天

在单位摸鱼,地铁上看了个开始,图论开了个头,后面也希望能往这个方向上转,努努力吧。 一周没做题啦,后面坚持继续做题+二刷,接着记录每一天!!!加油&#xff0…...

革新风暴来袭:报事报修系统小程序如何重塑报事报修体验?

随着数字化、智能化的发展,已经应用在我们日常生活和工作的方方面面。那么,你还在为物业报修而头疼吗?想象一下,家里的水管突然爆裂,你急忙联系物业,时常面临物业电话忙音、接听后才进行登记繁琐的报修单、…...

linux各个日志的含义 以及使用方法

在Linux系统上,系统日志文件通常存储在/var/log/目录下。可以通过查看这些日志文件来了解系统的操作记录、错误信息和其他相关信息。以下是一些常见的系统日志文件以及它们包含的信息: /var/log/messages:这是一个常见的系统日志文件&#xf…...

详解 Spark 核心编程之 RDD 持久化

一、问题引出 /** 案例:对同一份数据文件分别做 WordCount 聚合操作和 Word 分组操作 期望:针对数据文件只进行一次分词、转换操作得到 RDD 对象,然后再对该对象分别进行聚合和分组,实现数据重用 */ object TestRDDPersist {def …...

创新融合,5G+工业操作系统引领未来工厂

为加速企业完成生产制造自动化和经营管理自动化,从而走向未来工厂,蓝卓不断探索supOS工业操作系统与前沿技术的的创新融合,而5G技术为工业操作系统提供了更多元化的赋能手段和想象空间。目前,supOS围绕生产、安全、质检、监控等领…...