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

[COLM 2024] V-STaR: Training Verifiers for Self-Taught Reasoners

  • 本文是对 STaR 的改进方法,COLM 是 Conference On Language Models,大模型领域新出的会议,在国际上很知名,不过目前还没有被列入 ccf list(新会议一般不会列入);
  • 作者来自高校、微软研究院和 Google Deepmind;

读完STaR后,最直观的想法,1)数据利用率不够,合理化依然没有利用好剩下的数据,而剩下的数据对提高模型性能可能很重要(硬骨头),此外,模型没有一次性答对的样本也没有用上(即剩下的样本),这些一次没答对的数据中,可能部分步骤是有益的,能否利用上?或者错误的步骤能否也利用上?
2)由于LLM有随机性,应该让它多次输出,然后选最好的答案。如何选最好,比起用分类任务来做,不如用排序任务来做。因此可能需要QA模型多次输出,然后让一个模型来对答案排序。

背景知识

  • STaR:参考另一篇我写的 blog

  • DPO

  • RFT/ORM

  • 参考策略(Reference Policy):一个已经训练好的基础模型,作为行为的参考标准

  • 代理(Proxy):在机器学习中,当我们难以直接优化某个目标时,可以优化一个相关的、更容易计算的替代目标

  • causal language modeling objective:指的就是 GPT 这种注意力,next token prediction时注意力只能基于前面的token,(与之相对的 BERT 是双向的,可以利用后面的token)。

Abstract

大型语言模型 (LLMs) 的常见自我改进方法(例如 STaR)会在自我生成的解决方案上迭代微调 LLMs,以提高其解决问题的能力。然而,这些方法丢弃了在此过程中生成的大量不正确的解决方案,可能忽略了此类解决方案中的有价值的信息。为了解决这个缺点,我们提出了 V-STaR,它利用自我改进过程中生成的所有正确和错误的解决方案来训练使用 DPO 的验证器,以判断模型生成的解决方案的正确性。该验证器用于在推理时从许多候选解决方案中选择一个解决方案。运行 V-STaR 进行多次迭代会产生逐渐更好的推理器和验证器,与使用 LLaMA2 模型的常见代码生成和数学推理基准的现有自我改进和验证方法相比,测试精度提高了 4% 到 17%。

1 Introduction

学习识别和纠正错误是人类智力的一个特征(Metcalfe,2017)。在处理复杂的任务时,例如编码或解决数学问题,我们可以识别推理中的错误并探索解决方案的替代路径。为了提高 LLMs 的推理性能,有几种方法利用 LLMs 的能力来生成解决方案并在训练期间检查这些解决方案的正确性,例如使用测试用例进行代码生成。这些自我完善的方法,例如 STaR Zelikman 等人 (2022)、RFT (Yuan et al., 2023) 和 ReST EM (Singh et al., 2023),通过对它们的自生成的解法进行微调来改进 LLMs并可选地迭代运行此过程。然而,所有这些方法都是数据效率低下的,因为它们只使用正确的解决方案,并丢弃不正确的解决方案,这通常是模型生成的解决方案的很大一部分,特别是对于具有挑战性的推理任务。

与自我改进正交,改进 LLM 推理的另一个有希望的方向是在测试时使用学习好的 LLM 验证器(Cobbe 等人,2021;Wang 等人,2023b)。具体来说,LLM生成多个候选解决方案,验证者对这些解决方案进行排名并选择最佳的一个。此类验证器通过在从冻结 LLM 生成的解决方案数据集上微调 LLM 进行训练,并标有最终正确性(ORM,Cobbe 等人,2021)或步骤分步人工注释(Lightman 等人,2024)。使用此类验证器允许 LLMs 权衡额外的测试时计算以获得更好的性能。

本文提出了 Verification for Self-Taught Reasoners (V-STaR)。 V-STaR 的关键思想是在迭代自我改进过程中利用正确和错误的 LLM 生成的解决方案来训练使用 DPO 的验证者。此外还使用正确的解决方案将 LLM 训练为生成器。迭代的自我改进过程产生了逐步改进的生成器,并在增强数据上进行了训练,从而为验证者训练带来了更高质量的完成结果和更具挑战性的负面示例。在测试时,验证者对生成器中的多个候选解决方案进行排序,并选择最佳的一个。

我们根据经验评估 V-STaR 提高 LLMs 的推理能力:(1)数学问题: GSM8K 和 MATH 子集, (2) 代码生成问题:MBPP 和 HumanEval。微调 LLaMA2 和 CodeLLaMA ,我们将 V-STaR 与其他自我改进(RFT、STaR)和基于验证的方法(ORM)、self-consistency 进行比较,以及使用非迭代 V-STaR 基线(RFT + Verifier)相同数量的生成样本来引导生成器和验证器。 V-STaR 的效果非常好,与之前的自我改进和基于验证的数学推理方法相比,测试准确率在数学推理上提高了 6% 到 17%,代码生成上提高了 4% 到 12%。值得注意的是,7B V-STaR 在 GSM8K 上超越了基础 LLaMA2 70B(8-shot),并且几乎与 HumanEval 上的 CodeLLaMA 34B(zero-shot)相匹配。

本文贡献:

  • 提出V-STaR,一种简单而有效的方法,它使用从LLM迭代生成的正确和错误解决方案来训练更好的生成器和验证器。 V-STaR 在数学推理和代码生成方面优于先前的自我改进方法(RFT、STaR)以及 ORM 验证。
  • 作为次要贡献,我们发现 DPO 对于训练验证者而言比 ORM 方法更有效。我们还提出了 Best-of-k 公式,类似于 Pass@k,通过验证可靠地评估测试性能。

2 Preliminaries

2.1 Self-improvement approaches

Self-Taught Reasoner: STaR 略。

Rejection Sampling Fine-tuning: RFT 方法(非迭代方法),先在 SFT 数据上微调,然后每个问题采样k个solution,只保留正确的,然后在这周方法增强的数据集上微调(只进行一次)。

STaR†:相比 STaR 的一次回答变为多次回答,并且保持迭代。单次迭代里类似 RFT。

2.2 Test-time verification

Cobbe 训练了 verifiers,也就是 outcome-supervised reward model (ORM),用于评估候选解决方案对于给定问题的正确概率。在测试时,语言模型 G 生成许多候选解决方案,并选择验证者排名最高的一个,也称为 best-of-k。类似 RFT,每个问题生成k个回答,然后对其标注 z i , j z_{i,j} zi,j是一个二元标签(0,1),表示正确与否。然后V在Dver上微调,给定(x,y)后预测(z)。

2.3 Preference learning with DPO

利用人类反馈微调预训练 LLMs 可以在下游任务中带来巨大的性能提升。DPO 改进了上述方法,在微调过程中不使用单独训练的奖励模型。(详细看 DPO 解读论文,本文略)。

3 V-STaR: Verifiers for self-taught reasoners

现有的自我改进方法,丢弃了模型生成的不正确的解决方案。然而,不正确的解决方案也可能包含有价值的信息,语言模型可以从给定问题的正确和错误解决方案之间的差异中学习,并识别生成中的错误模式,从而增强其提供更准确解决方案的能力。在这项工作中,我们提出了 V-STaR,它在迭代过程中利用错误和正确生成的解决方案来训练更好的生成器和验证器。

V-STaR 训练和 ORM 等之间的区别是我们的验证者训练数据是迭代收集的,每次迭代都来自更好的生成器,而 ORM 仅从固定生成器收集数据,该固定生成器仅在原始 SFT 数据上进行微调。我们将此 ORM 方法作为基线进行比较,如第 4.1 节中所述。

3.1Training verifiers with DPO

一些补充:训练 verifier 有两个思路,把 next token prediction 和二元分类损失加权做多任务学习,另一个思路是,二元分类本质上是想要鼓励模型输出分类正确的答案,这个其实本质上是鼓励模型按照二元分类正确的方向回答,是一种偏好。所以也可以视为 preference learning(偏好学习)。通过偏好学习可以直接统一这个多任务目标。这本质上变成了一种 alignment (对齐)。

当前的 LLM 验证者是通过语言建模和二元分类损失相结合的方式进行训练的,这两个目标可以通过离线偏好学习方法来统一,例如 DPO。其中近似参考策略是语言建模目标的 proxy,而分类损失是奖励建模的 proxy。根据经验,我们发现使用 LoRA 适配器时,DPO 验证器比 ORM 形式的验证器更好。

  • 偏好对数据集:正确答案和错误答案的笛卡尔积构成的 preference pair;

4 Empirical results

为了证明 V-STaR 的有效性,我们在两个广泛使用的数据集上进行了实验:用于解决数学问题的 GSM8K (Cobbe et al., 2021) 和用于解决代码生成问题的 MBPP (Austin et al., 2021)。们还使用 Hendrycks’ MATH (Hendrycks et al., 2021) 和 HumanEval (Chen et al., 2021) 评估 V-STaR 的迁移泛化性能。具体来说,对于数学推理,我们仅使用 GSM8K 训练数据训练生成器和验证器,并在整个 GSM8K 测试集和 MATH 测试集的子集上对其进行评估。对于代码生成,我们使用 MBPP 训练数据训练模型,并在 MBPP 和 HumanEval 的完整测试集上对其进行评估。

Models

在实验中,我们使用 LoRA (Hu et al., 2022) 微调 LLaMA2 (Touvron et al., 2023) 和 CodeLLaMA (Rozière et al., 2023) 7B 和 13B 模型。生成器使用因果语言建模目标进行训练,我们的基线 (V-STaR[1 Iter]) 和 V-STaR 验证器使用 DPO 进行训练。 DPO 的参考策略 G S F T G_{SFT} GSFT 分别在 GSM8K 和 MBPP 的 2 和 3 epoch 的原始训练数据上进行训练。

Data generation
对于每次迭代, k=16 补全是从前一次迭代的生成器中对每个查询进行采样的。对于 GSM8K,第一个迭代样本来自仅在原始 GSM8K 训练数据上训练 2 个 epochs 的生成器。对于 MBPP,此数据来自 3 次预训练的 CodeLLaMA(参见 §B)。通过检查数学问题的最终答案和运行编码问题的测试用例来标记完成的正确性。

4.1 Baselines and metrics


在推理时,我们使用生成器为每个测试问题生成 128 个候选解决方案。我们报告生成器的 Pass@1准确度,它估计从生成器随机采样的答案正确的概率。所有基于验证者的方法都使用 best-of-64 精度,使用(eq 3)中的公式以及 self-consistency baseline。

生成了128个,只用了 best-of-64,有意思

4.2 Reliable estimation of Best-of-k accuracy

  • 原本的方法:生成k个回答,用 V 排序,选最高分作为答案,重复这个过程多次取平均值。
  • 优化:【主要是去掉了多次重复】,生成一组固定的 N (N>k,本文N=128,k=64),然后不放回抽取 k 个样本,直接采用其中 V 打分最高的作为结果。best-of-k 通过重复这个过程 M 次取平均得到(等效数学公式 eq3)。
    【这里是个组合公式:这个公式大概思路是,先统计 N choose k 有多少 case,然后再来计算从 N 中 选 k 能选对的 case 数量,得到 k 次抽样能正确的概率,然后分子大意是,因为k个里面每次都是以score最大作为最终answer,所以不妨先按V的分数降序排序,然后进行组合,先假设一定会选中最大的,然后通过剩下的里面抽(k-1)个,来计算这种 k 抽样的 case 有多少次,同理,固定第二大的,然后从剩下的中抽样(k-1)个,之所以不抽样比他大的,是因为如果选到比他大的,情况就退化为第一种情况,最终结果选最大的。。通过这个公式计算可以避免M次重复实验】
    请添加图片描述

4.3 V-STaR on Math Reasoning and Code Generation

质疑1:哥们,你这里就用了几十条样本微调?V-STaR 难道不是数据量更大才能体现出优越性吗?STaR用了1w条,这里差了这么多?
如图 2 所示,V-STaR 在 LLaMA2 7B 和 13B 模型的 GSM8K、MBPP、MATH 子集和 HumanEval 测试集上相比 baseline 显示出增益。在数学方面,我们报告测试精度比 STaR† 和 Verification 提高了 6% 到 17%,代码生成任务提高了 4% 到 12%。图 3 中 V-STaR [1 iter] 的增益表明,与具有相同生成预算的非迭代方法相比,迭代生成收集验证者训练数据的解决方案可带来更好的分布和质量。我们在图 7 中显示了 MBPP 上生成器和验证器每次迭代的增益。我们还在 MBPP 上训练了生成器和验证器的四次迭代,这导致了 0.3% 的边际增益。


Out-of-domain performance of V-STaR 在 MBPP 上训练的生成器和验证者在 HumanEval 上进行评估,而在 GSM8K 上训练的生成器和验证者在 MATH 测试集的子集上进行评估(见图 2 和图 4)。一般来说,我们观察到所有方法的绝对 Pass@1 和 Best-of-64 分数较低,因为这两个任务被认为比 GSM8K 和 MBPP 更难。也就是说,迭代 V-STaR 在任务和跨模型大小上都优于基线 和 V-STaR [1 iter]。利用不正确的解决方案来训练验证器比仅使用使用正确的模型生成的解决方案(STaR or RFT)来 bootstrap 有很大的改进。虽然由于计算约束,我们使用 LoRA 适配器,但我们假设 V-STaR 的增益可能会因完全参数微调而更大。

Best-of-k accuracy. 图 5 显示了 k = 1 到 k = 64 的测试准确度,每个测试问题计算 128 个候选解决方案。Best-of-1 等价于 Pass@1 并忽略验证者分数。k ≥ 16 的最佳 k 饱和,V-STaR [1 Iter] 和 V-STaR 之间的差距保持一致。

4.4 Comparing DPO vs. ORM verifiers

我们使用 LoRA 适配器训练了 ORM-style 验证器,如 §2.2 中所述。与基于 DPO 的验证器相比,这些验证器的性能似乎确实相对较差。图 5(a) 显示了在相同训练数据上使用 DPO 训练的 V-STaR [1 Iter] 和 ORM 风格验证器之间的比较。在 GSM8K 任务中,ORM 无法有效地搜索生成的候选解决方案,以获取候选数量超过 4 的候选解决方案。对于超过 16 的候选解决方案数量,ORM 样式验证器的性能也比 MBPP 中基于 DPO 的验证器差。

4.5 How many completions can V-STaR be extended to?


图 6 显示了 V-STaR 7B 在 GSM8K 上的最佳 K 准确度,由方程 eq3 计算。V-STaR 在搜索大量候选解决方案时优于多数投票 (Wang et al., 2023c)(参见附录中的 §F)。虽然V-STaR在k≤64时比多数投票更有效,但对于较大的k值,性能差距开始略有下降,类似于Cobbe等人(2021)报告中的性能下降。此外,V-STaR 可用于任何问题解决任务,我们可以在其中验证正确性,而多数投票不适用于代码生成等任务。我们还尝试将验证者分数与重新排序策略相结合,例如加权重新排序和加权多数投票 Liu et al. (2023),但没有观察到性能提升。

4.6 Evaluating DPO verifier as a generator

由于 DPO 微调模型也可以用作生成器,我们评估了 DPO 验证器的生成能力。图 6 显示了 V-STaR 验证器在训练更新上的 Pass@1 和 Best-of-64, β 系数代表与 DPO 目标中的 SFT 策略接近程度。验证者的解决能力在仅少量训练更新之后便开始下降。相比之下,使用 DPO 目标进行验证似乎是有效的,因为模型的 Best-of-64 仅通过 2k 训练更新显着增加。

4.7 Should the verifier be in the training loop?

这一节感觉完全是为了应付审稿人加的。你写了个寂寞啊,这个图根本看不懂
可以在每次迭代时训练中间验证者并过滤正确的解决方案。我们尝试将验证器放入训练循环中,以从生成器中筛选出正确的解决方案,以进行下一次训练迭代。为此,我们从生成器中对每个查询k=64 完成进行了采样,标记其正确性,并根据验证者分数仅选取前 8 个,从错误集中抽取尽可能多的样本,以便每个查询的正确和错误完成总数为 16 或更少。在 MBPP 循环中使用验证器运行 3 次迭代后,最终的 Best-of-64准确度和 Pass@1分别为 53.2 和 46.34。

我们的结果表明,让验证者参与训练循环并不能为这项任务带来实质性的好处。 V-STaR 更简单,循环中没有验证器,并且不需要在每次迭代时训练验证器;然而,我们没有在每次迭代时尝试其他任务和生成器的不同采样策略。我们将这个问题的更详细的研究留给未来的工作。

4.8 Gains across V-STaR iteration

图 7 显示了 MBPP 上生成器和验证器每次迭代所取得的改进。验证者迭代(从 Ver.1 到 Ver.3)的增益比生成器迭代更大,这凸显了验证者的重要性。

5 Related work

具有挑战性的多步推理任务推动了LLMs的创新研究,例如通过中间步骤来回答给定问题(Wei等人,2022;Kojima等人,2022)。最近的大量工作研究了如何提高这些中间步骤的正确性并降低获得正确解决方案的成本。

Self-training and self-improvement. STaR、reinforced self-training (Gulcehre et al., 2023)、rejection fine-tuning (Yuan et al., 2023) 等等。

  • 对比损失来使正确的解决方案比错误的解决方案更有可能
  • 使用成功解决方案的中间状态作为监督来改进 credit 分配
  • 基于强化学习的 LLM 微调是很困难的,除非它通过一些监督微调步骤进行初始化
  • 使用更强大的LLM来编辑较小模型生成的不正确的基本原理,并为其微调提供积极的数据

Training verifiers

  • 为数学推理任务引入了验证器——对推理链进行评分或排名的模型,
  • 过程监督(rationale的正确性)相对于结果监督(无论答案是否正确)增强了微调LLMs的性能
  • 为单个推理步骤导出奖励信号的方法,结合解决solution-level and step-level验证器,并用辅助信息(例如程序执行结果)增强验证器
  • rationale generation 被视为图搜索问题,要么使用 stepwise verifier 来指导搜索,要么通过蒙特卡洛来估计步骤的质量

验证者可以被视为基于人类注释训练的奖励模型——通过人类反馈来训练满足验证者需求的 RL 实例(Ziegler 等人,2019)——或者基于合成数据,从而形成 RL 的形式具有人工智能反馈(Bai et al., 2022;Yang et al., 2023)。验证者也可以被视为生成模型,例如通过以指示解决方案的正标签或负标签的控制令牌为条件(Korbak 等人,2023)或通过提取分数作为候选者之后特殊令牌的可能性解决方案(Liu 等人,2023)。

6 Conclusion

略。

Appendix

A Algorithm

相关文章:

[COLM 2024] V-STaR: Training Verifiers for Self-Taught Reasoners

本文是对 STaR 的改进方法,COLM 是 Conference On Language Models,大模型领域新出的会议,在国际上很知名,不过目前还没有被列入 ccf list(新会议一般不会列入);作者来自高校、微软研究院和 Goo…...

【C++】string的主要功能模拟复现

经常调用的短小函数直接定义在头文件中&#xff0c;可以节省时间开销 #include<iostream> #include<assert.h> using namespace std; namespace mumu {class string{friend ostream& operator<<(ostream& _cout, const mumu::string& s);friend…...

Linux环境安装Jenkins

Linux环境安装Jenkins Jenkins和JDK的版本 Jenkins和JDK的版本需要对应&#xff0c;不然无法正常启动。 Jenkins稳定版下载地址 Jenkins服务 手动使用命令启动和关闭Jenkins比较麻烦&#xff0c;所以可以把Jenkins设置成开机启动。 创建Jenkins.sh文件 JAVA_HOME和jenk…...

Elasticsearch:ES|QL 中的全文搜索 - 8.17

细心的开发者如果已经阅读我前两天发布的文章 “Elastic 8.17&#xff1a;Elasticsearch logsdb 索引模式、Elastic Rerank 等”&#xff0c;你就会发现在 8.17 的发布版中&#xff0c;有一个重要的功能发布。那就是 ES|QL 开始支持全文搜索了。在今天的文章中我们来尝试一下。…...

Leetcode 3387. Maximize Amount After Two Days of Conversions

Leetcode 3387. Maximize Amount After Two Days of Conversions 1. 解题思路2. 代码实现 题目链接&#xff1a;3387. Maximize Amount After Two Days of Conversions 1. 解题思路 这一题思路上其实就是要分别求出day 1以及day 2中原始货币与其他各个货币之间的成交价&…...

Lumos学习王佩丰Excel第二十一讲:经典Excel动态图表实现原理

一、动态图表实现原理 1、理解图表中的数据系列 在Excel图表中&#xff0c;系列指的是图表中的数据集合&#xff0c;它通常代表着一个数据源。每个系列都可以包含多个数据点&#xff0c;这些数据点在图表中以特定的形式展现&#xff0c;如柱状图中的柱子&#xff0c;折线图中…...

静态路由、RIP、OSPF、BGP的区别

静态路由&#xff1a;是管理员手动将路由写入到路由器中&#xff0c;配置简单开销小&#xff0c;但不能适应网络变化&#xff0c;只用于小型的网络 RIP&#xff0c;路由信息协议&#xff0c;属于距离矢量路由协议的一种&#xff0c;根据跳数来判断最优路由&#xff0c;如果跳数…...

解决 Flutter 在 Mac 上的编译错误

解决 Flutter 在 Mac 上的编译错误 在使用 Flutter 进行项目开发并尝试在 Mac 设备上进行编译时&#xff0c;遇到了一系列的错误信息&#xff0c;这些错误信息给项目的构建与部署带来了阻碍。 一、错误详情 在编译过程中&#xff0c;Xcode 输出了大量的信息&#xff0c;其中…...

ECharts实现数据可视化入门详解

文章目录 ECharts实现数据可视化入门详解一、引言二、基础配置1.1、代码示例 三、动态数据与交互2.1、代码示例 四、高级用法1、多图表组合1.1、在同一容器中绘制多个图表1.2、创建多个容器并分别初始化 ECharts 实例1.3、实现多图联动 五、总结 ECharts实现数据可视化入门详解…...

LRM-典型 Transformer 在视觉领域的应用,单个图像生成3D图像

https://yiconghong.me/LRM. 一、Abstract 第一个大型重建模型&#xff08;LRM&#xff09;&#xff0c;它可以在5秒内从单个输入图像预测物体的3D模型。LRM采用了高度可扩展的基于transformer的架构&#xff0c;具有5亿个可学习参数&#xff0c;可以直接从输入图像中预测神经…...

Stream– ESP8266物联网应用,(客户端向服务器发送数据信息 客户端向服务器请求数据信息)

Stream– ESP8266物联网应用 Stream对于ESP8266-Arduino语言来说指的是数据序列。请留意&#xff1a;在C编程中Stream常被翻译作“流”。我们认为将Stream称为数据序列更加直观。因为数据序列这一概念有两个很关键特点。 第一个特点是“序”&#xff0c;即数据序列不能是杂乱…...

win10系统右下角没有显示网络图标 , 打开或关闭系统图标网络灰色

win10系统右下角没有显示网络图标 / 打开或关闭系统图标网络灰色 win10系统右下角没有显示网络图标, 并且打开或关闭系统图标网络灰色 解决方案: 首先&#xff0c;按【Ctrl Alt Del】组合键&#xff0c;然后点击【任务管理器】。任务管理器窗口&#xff0c;找到并选择【Wind…...

Python使用Selenium库获取 网页节点元素、名称、内容的方法

我们要用到一些网页源码信息&#xff0c;例如获取一些节点的class内容&#xff0c; 除了使用Beautifulsoup来解析&#xff0c;还可以直接用Selenium库打印节点&#xff08;元素&#xff09;名称&#xff0c;用来获取元素的文本内容或者标签名。 例如获取下面的class的内容&am…...

onnx文件转pytorch pt模型文件

onnx文件转pytorch pt模型文件 1.onnx2torch转换及测试2.存在问题参考文献 从pytorch格式转onnx格式&#xff0c;官方有成熟的API&#xff1b;那么假如只有onnx格式的模型文件&#xff0c;该怎样转回pytorch格式&#xff1f; https://github.com/ENOT-AutoDL/onnx2torch提供了…...

计算机网络中的SIP协议是什么?

SIP&#xff08;Session Initiation Protocol&#xff0c;会话初始化协议&#xff09;是由IETF&#xff08;Internet Engineering Task Force&#xff0c;因特网工程任务组&#xff09;制定的多媒体通信协议。以下是对SIP的详细简述&#xff1a; 一、SIP的基本概念 SIP是一个…...

Apache Kylin最简单的解析、了解

官网&#xff1a;Overview | Apache Kylin 一、Apache Kylin是什么&#xff1f; 由中国团队研发具有浓厚的中国韵味&#xff0c;使用神兽麒麟&#xff08;kylin&#xff09;为名 的一个OLAP多维数据分析引擎:&#xff08;据官方给出的数据&#xff09; 亚秒级响应&#xff…...

axfbinhexelf文件区别

0 Preface/Foreword axf,bin,hex,elf四个都能存在于嵌入式软件领域。 1 文件介绍 嵌入式软件中常见的文件包含&#xff1a; axf&#xff0c;包含调试信息&#xff0c;文件最大。调试信息放在机器码前面。elfhex&#xff0c;包含地址信息&#xff0c;文件内容较大。bin&#x…...

MySQL表自增id溢出的故障复盘,你是如何解决与监控的

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

03、SpirngMVC核心(下)

一、关于RESTful编程风格 什么是RESTful RESTful的英文全称是:Representational State Transfer(表述性状态转移) RESTful是Web服务接口的一种设计风格。它定了一组约束和规范,可以让Web服务接口更加简洁、易于理解、易于扩展、安全可靠。 RESTful对于请求的约束如下:…...

【游戏设计原理】10 - 科斯特的游戏理论

科斯特的游戏理论强调了游戏与学习之间的关系&#xff0c;认为“玩得开心”与“学习”是紧密相连的。换句话说&#xff0c;游戏的核心魅力在于通过适当的挑战和不断的学习进程激发玩家的内啡肽循环&#xff0c;这让玩家在不断的探索和进步中找到乐趣。 科斯特的理论通过游戏是…...

【JAVA】Java项目实战—Java EE项目:客户关系管理(CRM)系统

Java EE项目&#xff1a;客户关系管理&#xff08;CRM&#xff09;系统 一、背景介绍 1.1 Java语言的重要性 Java是一种广泛使用的编程语言&#xff0c;因其跨平台性、面向对象特性以及丰富的生态系统而受到开发者的青睐。Java EE&#xff08;Enterprise Edition&#xff09…...

JAVA 零拷贝技术和主流中间件零拷贝技术应用

目录 介绍Java代码里面有哪些零拷贝技术java 中文件读写方式主要分为什么是FileChannelmmap实现sendfile实现 文件IO实战需求代码编写实战IOTest.java 文件上传阿里云&#xff0c;测试运行代码看耗时为啥带buffer的IO比普通IO性能高&#xff1f;BufferedInputStream为啥性能高点…...

STM32软件IIC驱动TCA9548A多路测量AHT10

STM32软件IIC驱动TCA9548多路测量AHT10 TCA9548AAHT10代码逻辑代码展示现象总结 TCA9548A TCA9548A 有八个可通过 I2C 总线控制的双向转换开关&#xff0c;SCL/SDA 上行对扩展到八个下行对&#xff0c;或者通道&#xff0c;适用于系统中存在I2C目标地址冲突的情况。8路双向转换…...

博弈论3:图游戏SG函数(Graph Games)

目录 一、图游戏是什么 1.游戏特征 2.游戏实例 二、图游戏的必胜策略 1.SG 函数&#xff08;Sprague-Grundy Function&#xff09; 2.必胜策略&#xff08;利用SG函数&#xff09; 3.拿走游戏转化成图游戏&#xff08;Take-away Game -> Graph Game&#xff09; 一、图…...

音视频入门基础:MPEG2-TS专题(17)——FFmpeg源码中,解析TS program map section的实现

一、引言 由《音视频入门基础&#xff1a;MPEG2-TS专题&#xff08;16&#xff09;——PMT简介》可以知道&#xff0c;PMT表&#xff08;Program map table&#xff09;由一个或多个段&#xff08;Transport stream program map section&#xff0c;简称TS program map sectio…...

SQL server学习05-查询数据表中的数据(上)

目录 一&#xff0c;基本格式 1&#xff0c;简单的SQL查询语句 2&#xff0c;关键字TOP 3&#xff0c;关键字DISTINCT 二&#xff0c;模糊查询 1&#xff0c;通配符 三&#xff0c;对结果集排序 1&#xff0c;不含关键字DISTINCT 2&#xff0c;含关键字DISTINCT 3&…...

Transformer记录Attention is all you need

视频&#xff1a; Transformer 原理详解_哔哩哔哩_bilibili 代码&#xff1a; harvardnlp/annotated-transformer: An annotated implementation of the Transformer paper....

JAVA入门:使用IDE开发

JAVA入门&#xff1a;使用IDE开发 什么是IDE IDE&#xff08;Integrated Development Environment&#xff0c;集成开发环境&#xff09;是一种软件应用程序&#xff0c;它为程序开发、软件设计、项目管理等提供全面的设施。 简单来说就是简化开发过程&#xff0c;让编程更加…...

汽车嵌入式软件构建高效技术团队的全面思考

在汽车嵌入式软件开发领域&#xff0c;构建一支高效的通用技术团队至关重要。这类团队负责为各种项目提供可复用、标准化的技术基石&#xff0c;从而提高开发效率、降低成本并确保产品质量。构建这样的团队需要从技术能力、角色分工、标准化与复用、流程管理与质量保证、工具和…...

Debezium源码分析: TopicSelector实现原理与应用

Debezium源码分析: TopicSelector实现原理与应用 Debezium源码分析: TopicSelector实现原理与应用文章目录背景介绍主要功能应用场景实现原理DataCollectionId 接口核心设计工作流程源码分析基础实现默认选择器创建应用示例1. 分库分表场景2. 多租户场景3. 业务领域分组总结设计…...

SpringCloud微服务实战系列:03spring-cloud-gateway业务网关灰度发布

目录 spring-cloud-gateway 和zuul spring webflux 和 spring mvc spring-cloud-gateway 的两种模式 spring-cloud-gateway server 模式下配置说明 grayLb://system-server 灰度发布代码实现 spring-cloud-gateway 和zuul zuul 是spring全家桶的第一代网关组件&#x…...

【恶意软件检测论文】通过提取 API 语义来实现的一个新颖的安卓恶意软件检测方法

目录 摘要1. 引言2. 相关工作2.1. 基于重新训练的恶意软件检测2.2. 基于应用关系图的恶意软件检测2.3. 基于异常样本识别的恶意软件检测2.4. 基于API聚类的恶意软件检测 3. AMDASE概述4. 基于语义距离的API聚类4.1. API特征提取4.2. API句子生成4.3. API句子编码4.4.聚类中心生…...

大模型系列4--开源大模型本地部署到微调(WIP)

背景 一直想真正了解大模型对硬件资源的需求&#xff0c;于是准备详细看一篇视频&#xff0c;将核心要点总结记录下。本文内容参考视频&#xff1a;保姆级教程&#xff1a;6小时掌握开源大模型本地部署到微调&#xff0c;感谢up主 训练成本 训练 > 微调 > 推理训练GPT…...

Linux 磁盘满了怎么办?快速排查和清理方法

当 Linux 磁盘满了&#xff0c;会导致系统无法正常运行&#xff0c;比如无法写入文件、服务停止、甚至系统崩溃。因此&#xff0c;快速排查并清理磁盘空间是非常重要的。以下是详细的排查和解决步骤&#xff1a; 一、快速定位磁盘占用原因 1. 检查磁盘使用情况 使用 df 命令查…...

go 协程练习例题

go 协程练习例题 例1&#xff1a;统计 1-200000 的数字中&#xff0c;哪些是素数例2&#xff1a;使用单通道、2个协程交替读取字符串例3&#xff1a;使用1个管道&#xff0c;2个协程写数据、1个协程读例4&#xff1a;完成一个并发任务调度器&#xff0c;按照指定顺序执行一系列…...

JAVA:访问者模式(Visitor Pattern)的技术指南

1、简述 访问者模式(Visitor Pattern)是一种行为型设计模式,允许你将操作分离到不同的对象中,而无需修改对象本身的结构。这种模式特别适合复杂对象结构中对其元素进行操作的场景。 本文将介绍访问者模式的核心概念、优缺点,并通过详细代码示例展示如何在实际应用中实现…...

如何实现邮箱+验证码登录功能(express+vue+MySQL版)

目录 1. 初始化项目2. 配置环境变量3. 更新数据库4. 编写路由函数5. 前端调用接口 1. 初始化项目 前端根目录&#xff1a;/web 后端根目录&#xff1a;/api_server 安装依赖&#xff1a; npm install express mysql nodemailer randomstring dotenv其中&#xff0c;nodemaile…...

Pycharm访问MySQL数据库·上

1.MySQL驱动模块Connector #导入数据库的驱动工具 import mysql.connector #连接数据库必备的条件 config {"host": "localhost","port": 3306,"user": "root","password": "888888","database&…...

vscode+msys2+clang+xmake c++开发环境搭建

转载请标明出处&#xff1a;小帆的帆的专栏 安装msys2 下载msys2安装包&#xff1a;清华源下载地址安装msys2&#xff1a;安装目录&#xff0c;C:\Softwares\msys64 安装cling工具链&#xff0c;xmake &#xff01;&#xff01;&#xff01;在开始菜单中启动MSYS2 CLANG64,…...

Python面试常见问题及答案5

一、基础语法相关 问题1&#xff1a; Python的可变数据类型和不可变数据类型有哪些&#xff1f; 答案&#xff1a; 在Python中&#xff0c;可变数据类型有列表&#xff08;list&#xff09;、字典&#xff08;dict&#xff09;、集合&#xff08;set&#xff09;。这些数据类型…...

威联通docker无法拉取镜像

链接:威联通TS-464C 折腾--Container Station国内无法拉取镜像_docker_wangguanghe-开放原子开发者工作坊我这里用的是IPV6 ,没有公网资源啊。 wangguanghe...

3D 生成重建034-NerfDiff借助扩散模型直接生成nerf

3D 生成重建034-NerfDiff借助扩散模型直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 感觉这个论文可能能shapE差不多同时期工作&#xff0c;但是shapE是生成任意种类。 本文提出了一种新颖的单图像视图合成方法NerfDiff&#xff0c;该方法利用神经辐射场 …...

ASP.net Core EntityFramework Code EF code 汇总

Entity FrameWork EF 总结 EF Core EF Core 如果实体模型很多&#xff0c;全部放在 上下文中的 OnModelCreating(ModelBuilder modelBuilder) 不太好维护 可以把实体模型 分离出去&#xff0c;每个类创建一个实体模型 public class BookConfiguration &#xff1a;IEntityT…...

AtCoder Beginner Contest 384 Solution

文章目录 ABCDEFG A void solve() {string s; char x, y;qr(n, x, y, s);for(auto i: s) {if(i ! x) i y;cout << i;} }B void solve() {qr(n, m);for (int i 1; i < n; i) {int x, y;qr(x, y);x--;if(1600 - x * 400 < m && m < 2799 - x * 400) m…...

c# TaskScheduler

这里记录下 TaskScheduler 的简单用法。 使用场景&#xff1a; 使用 Task 的时候&#xff0c;大家知道用 TaskFactory.StartNew 可以用来创建一个 Task 。这里如果创建了 3 个&#xff0c;那么这3个 Task 就各自放飞直接运行了。 class Program {private static TaskFactory…...

FFMPEG视频转图片

用FFMPEG视频转图片&#xff0c;并且for循环 import os import subprocess# 输入文件夹和输出文件夹路径 input_folder r"I:\xxx" output_base_folder r"D:\xxx\YOLO\data\video" output_subfolder_name "20240609"# 创建输出子文件夹 output…...

激活函数-swiGLU

swiGLU&#xff08;Switch Gated Linear Unit&#xff09;简介 swiGLU 是一种改进的激活函数模块&#xff0c;主要用于深度学习中的 Transformer 模型和其他神经网络架构。它在 GLU&#xff08;Gated Linear Unit&#xff09; 的基础上进行了修改&#xff0c;以提升模型的表现…...

PCIe学习笔记

PCIE高速串行数据总线 当拿到一块板子 比如你要用到PCIE 首先要看这块板子的原理图 一般原理图写的是 PCI express 表示PCIE 以下是Netfpga为例下的PCIE插口元件原理图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/01dc604fbdc847e8998a978c83c7b2eb.png 一般主…...

制作容器镜像

容器基础镜像制作 由于项目使用麒麟操作系统&#xff0c;需要在麒麟桌面操作系统和服务器操作系统里编译代码&#xff0c;如果每次都在物理机和虚拟机里编译太不方便&#xff0c;也无法使用常用的 jenkins k8s 组成的 CI/CD 编译环境&#xff0c;如果基于整个ISO太大了&#…...

mysql系列4—mysql数据库设计和查询优化

背景 数据库作为持久层需要从磁盘读写数据&#xff0c;是整个系统的短板&#xff0c;其性能会直接体现在产品性能上。因此数据库的设计和优化再怎么强调也不为过。本文将从数据库设计和查询优化两个角度思考如何提高数据库性能&#xff0c;内容包括数据库范式与表设计、基本字…...