[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…...
【Python】使用Selenium的find_element模块获取网页上的大段文字和表格的方法(建议收藏!)
发现了一个使用Selenium的find_element模块,快速获取文字和表格的方法,很实在,以后爬网的时候,就不用beautifulSoup 和 pandas的read_html 混起来用了! 文字部分:实现网络节点下,某个节点下的其…...
蓝桥杯刷题——day4
蓝桥杯刷题——day4 题目一题干题目解析代码 题目二题干题目解析代码 题目一 题干 小蓝和朋友们在玩一个报数游戏。由于今年是2024 年,他们决定要从小到大轮流报出是20或24倍数的正整数。前10个被报出的数是:20,24,40,48,60,72,80,96,100,120。请问第2…...
内网是如何访问到互联网(H3C源NAT)
H3C设备NAPT配置 直接打开29篇的拓扑,之前都配置好了 「模拟器、工具合集」复制整段内容 链接:https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab7ulgil 现在是出口路由器可以直接访问61.128.1.1,下面的终端访问不了,需要做NAPT源…...
源码分析之Openlayers中的Zoom缩放控件
概述 放大或缩小是地图中最基本的功能,本文主要介绍分析 Openlayers 中Zoom缩放控件的源码实现。 源码分析 Zoom控件继承Control类,关于Control类,可以参考这篇文章源码分析之Openlayers中的控件篇Control基类介绍 如果直接实例化Zoom类&…...
k8s的ConfigMap是什么, 为什么设计ConfigMap, 如何使用ConfigMap
ConfigMap简介, 为什么设计ConfigMap 在k8s中, ConfigMap是一种API对象, 用于将非机密的配置数据存储到键值对中。 Configmap作用是, 把配置数据从应用代码中分隔开, 让镜像和配置文件解耦,实现了镜像的可移植性。 举例: 我有一个Squid(正向代理)的Pod…...
fiddler设置抓取https,还抓取不到https如何解决?
一、清楚 C:\Users\Admin\AppData\Roaming\Microsoft\Crypto\RSA 目录下所有文件(首次安装fiddler请忽略) 二、清除电脑上的根证书,WINR快捷键,输入:certmgr.msc, 然后回车,查找所有fiddler证书…...
Python高性能web框架-FastApi教程:(1)创建一个简单的FastApi
(1)创建一个简单的FastApi 1. 导入必要的库 from fastapi import FastAPI import uvicornFastAPI 是一个用于构建现代、快速(高性能)的Web API的Python框架。uvicorn 是一个ASGI服务器,用于运行异步的Python Web应用…...
Django基础之模板
一.前言 前面我们讲了视图,我们今天来讲一下模板,模板其实也就是视图中render返回的html进行的渲染,然后展示到浏览器页面上去,那我们今天就来和大家来说一下模板的基本用法 二.寻找html模板 这个也就是我们前面说了的找html&a…...
RabbitMQ Work Queues (工作队列模式) 使用案例
Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:RabbitMQ 📚本系列文章为个人学…...
C#高级:Winform桌面开发中TreeView的基础例子
一、方案一:免递归使用树 namespace WinFormsApp1 {public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 自定义树实体/// </summary>public class WinFormTree{/// <summary>/// 标签名称/// </summ…...
大模型的文件有哪些?
在大模型仓库(如Hugging Face)中,例如:https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat/files,通常会发现以下几类文件: 模型权重文件:存储训练好的模型参数,是模型推理和微调…...
QT 国际化(翻译)
QT国际化(Internationalization,简称I18N)是指将一个软件应用程序的界面、文本、日期、数字等元素转化为不同的语言和文化习惯的过程。这使得软件能够在不同的国家和地区使用,并且可以根据用户的语言和地区提供本地化的使用体验。…...
C 进阶 — 指针的使用
C 进阶 — 指针的使用 主要内容 1、字符指针 2、数组指针 3、指针数组 4、数组传参和指针传参 5、函数指针 6、函数指针数组 7、指向函数指针数组的指针 8、 回调函数 9、指针和数组练习题 前节回顾 1、指针就是个变量,用来存放地址,地址唯一…...
【经验分享】容器云运维的知识点
最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…...
MFC学习笔记专栏开篇语
MFC,是一个英文简写,全称为 Microsoft Foundation Class Library,中文翻译为微软基础类库。它是微软开发的一套C类库,是面向对象的函数库。 微软开发它,是为了给程序员提供方便,减少程序员的工作量。如果没…...
电子科技大学《高级算法设计与分析》期末复习问题汇总(客观题-选择题、判断题)
电子科技大学《高级算法设计与分析》问题汇总_已知背包问题的动态规划算法时间复杂度为o(nw),其中n为物品数目,w为背包容量。请-CSDN博客 转载自上面这个链接,古希腊掌管成电专业课的神!!为了防止他的链接失效,自己也转存一份 &…...
GPTcelltype——scRNA-seq注释
#安装包 install.packages("openai") remotes::install_github("Winnie09/GPTCelltype") #填写API Sys.setenv(OPENAI_API_KEY your_openai_API_key) #加载包 #Load packages library(GPTCelltype) library(openai) #准备文件 #Assume you have already r…...
AI与大数据的深度结合:驱动决策的革命性力量
引言:数字时代的决策挑战 在这个信息爆炸的数字时代,数据早已渗透到我们生活的方方面面。全球每天产生的数据量呈指数级增长,无论是用户的消费行为、设备的运行状态,还是社会热点的实时动态,这些信息的规模和复杂性前所…...
Java多线程与线程池技术详解(九)
面对苦难的态度:《病隙碎笔》“不断的苦难才是不断地需要信心的原因,这是信心的原则,不可稍有更动。” 孤独与心灵的成长:《我与地坛》“孤独的心必是充盈的心,充盈得要流溢出来要冲涌出去,便渴望有人呼应他…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
