Google: 在新知识上微调大语言模型是否会鼓励产生幻觉?

摘要

当大型语言模型通过监督式微调进行对齐时,它们可能会遇到在预训练期间没有获得的新事实信息。人们经常推测,这可能会教导模型产生事实上不正确的回应的行为,因为模型被训练成生成没有基于其预先存在的知识的事实。在这项工作中,Google研究了这种暴露在新知识下对微调后模型利用其预先存在知识的能力之影响。为此,他们设计了一个受控的设置,专注于闭书问答,改变引入新知识的微调样本的比例证明,大型语言模型在通过微调获得新的事实知识方面存在困难,因为引入新知识的微调样本的学习速度明显慢于与模型知识一致的样本。然而, Google也发现,随着最终学习到具有新知识的样本,它们线性地增加了模型产生幻觉的倾向。综合起来结果凸显了通过微调引入新事实知识的风险,并支持这样的观点:大型语言模型主要通过预训练获得事实知识,而微调教导它们更有效地使用这些知识。

https://arxiv.org/pdf/2405.05904

1 引言

在文本语料库上预训练大型语言模型(LLMs)可以将大量事实知识嵌入到它们的参数中,这对于在各种下游应用中取得优异表现至关重要。这些模型通常需要进一步对齐到所需的行为,通常是通过监督式微调指令跟随任务和从人类反馈进行偏好学习来实现。

在这里插入图片描述

图1:当对50%已知和50%未知的样本进行微调时,训练和开发准确度随微调持续时间的变化。未知样本的拟合速度明显慢于已知样本。当LLM拟合大部分已知的训练样本但只有少数未知样本时,可以获得最佳的开发表现。从这一点开始,拟合未知样本会降低性能。

在微调阶段,模型通常在由人类标注者或其他LLM创建的输出上进行训练。因此,模型可能会遇到新的事实信息,超出了它在预训练期间获得的知识。这就引出了一个问题:LLMs如何整合其预先存在知识之外的新事实。一种可能性是,模型只是通过学习这些新的事实信息来适应。然而,一个常见的推测认为,这种暴露在新知识下可能会鼓励模型产生事实上不正确的回应,因为模型本质上被训练成生成没有基于其预先存在知识的事实。

在这项工作中,我们研究了通过微调学习新的事实知识如何影响模型相对于其预先存在知识产生幻觉的倾向,探索上述推测。为了研究新知识的影响,我们必须能够评估单个微调样本是否与模型的知识一致。我们提出了SliCK,一个由四个知识类别组成的层次结构,这些类别是从一个连续的度量衍生出来的,该度量量化了模型生成的答案与基本事实标签之间的一致性。在SliCK中,样本首先被分类为已知和未知两种类型,其中后者对应于包含模型最可能不知道的事实的样本。已知的样本随后被分成三个类别:高度已知、可能已知和微弱已知(图2)。

借助上述方法,我们仔细设计了一个受控的研究,专注于闭书问答(QA),我们改变了被归类为未知的微调样本的比例,同时控制其他因素。

我们的研究经验证明,从未知的微调样本中学习与模型相对于其预先存在知识产生幻觉的倾向呈线性相关(§4)。相反,从已知样本中学习与更好地利用预先存在的知识相关。

通过对训练动态的分析,我们发现LLM拟合未知的微调样本的速度明显慢于已知样本(图1顶部)。这表明,在微调期间,LLMs难以整合新的事实知识(存在于未知的微调样本中)。相反,它们主要学习如何公开其预先存在的知识(使用已知的微调样本)。

从实践的角度来看,使用提前停止(图1中的垂直虚线)来减轻过度拟合可以最大限度地降低由拟合未知样本引起的幻觉风险,因为它们主要出现在后期的训练阶段作为一种过度拟合的形式(如图1底部的开发性能下降所示) .或者,我们还表明,过滤掉未知的微调样本可以大大降低过度拟合的风险,而不会牺牲性能。

我们进一步评估了来自我们三个已知知识类别中的每一个的微调样本对性能的影响(§5)。出乎意料的是,我们发现仅在最高知识程度(表示为高度已知)的样本上微调的模型并没有产生最佳结果。我们的分析揭示,结合可能已知的微调样本(代表具有较低确定性程度的事实)在测试时正确处理此类样本方面起着重要作用。这表明微调样本的组成显著影响LLMs有效利用其预先存在知识的程度。

总而言之,我们通过设计一个隔离这个因素的受控设置来研究微调数据中新事实知识的影响。我们发现引入新知识的微调样本学习缓慢,这表明LLMs难以通过微调整合新知识,并支持这样的观点:LLMs主要通过预训练获得知识。然而,我们也发现,随着模型最终通过微调学习新知识,它变得更容易相对于其预先存在的知识产生幻觉。总的来说,我们的发现凸显了通过微调引入新知识时可能产生意想不到的后果,并暗示微调可能更有用作增强预先存在知识利用率的机制。

2 研究设置

给定一个微调数据集 D D D和一个预训练的LLM M M M,我们用 M D M_D MD 表示通过在 D D D上微调 M M M获得的模型。为了研究新知识在 D D D中如何影响 M D M_D MD 的性能,我们设计了一个受控的设置,创建具有不同比例未知样本的 D D D变体。

在构建D时,我们的目标是反映对多样化知识密集型任务的指令调整,同时保持对实验设置的控制。因此,我们专注于可以结构化为(主题,关系,对象)三元组的事实知识,这些三元组被转换为闭书QA格式。在这个设置中, D = { ( q i , a i ) } i = 1 N D = \{(q_i, a_i)\}_{i=1}^N D={(qi,ai)}i=1N,其中 q q q是一个寻求知识的问题,对应于一个特定的三元组(例如,“巴黎位于哪里?”), a a a是基本事实答案(例如,“法国”)。

在这里插入图片描述
为此,我们使用ENTITYQUESTIONS,其中来自Wikidata的各种关系的三元组被转换为QA对。这些关系包含了广泛的事实知识,包括传记信息、地理数据、所有权和作者详情、历史等。我们使用原始的开发和测试分割,并对训练分割进行子采样以创建D的不同变体。我们专注于12个不同的关系,并为out-of-distribution测试集保留7个额外的关系,该测试集(仅)在§4.5中使用。

作为 M M M,我们使用PaLM 2-M基础模型。我们专注于精确匹配(EM)作为我们的评估指标。完整技术细节在§A中。

3 量化LLMs中的知识

为了评估 D D D中的新知识对MD性能的影响,我们必须注释 D D D中的每个 ( q , a ) (q, a) (q,a)对,即M是否知道 q q q的答案是 a a a。为了估计这一点,我们定义了一个基于M的样本的连续 P Correct P_{\text{Correct}} PCorrect度量,并使用它将 ( q , a ) (q, a) (q,a)对分为四个知识类别。我们将这种方法命名为SliCK(基于采样的知识分类)。

定义 P Correct P_{\text{Correct}} PCorrect。我们采用这样的观点:如果 M M M在提示回答 q q q时生成 a a a,则 M M M知道 q q q的答案是 a a a。由于 M M M是一个尚未专门微调以遵循指令的基础模型,因此我们使用少样本示例进行上下文学习来提示 M M M

在实践中, M M M可以预测不同的答案,因为(1)示例的选择会影响个别预测,以及(2)如果使用温度采样,则会引入随机性。为了反映这一点,我们将 P Correct ( q , a ; M , T ) P_{\text{Correct}}(q, a; M, T) PCorrect(q,a;M,T)定义为一个估计,即在使用随机少样本示例提示并使用解码温度T时,M产生正确答案a到q的可能性有多大。

出于我们研究的目的,我们使用 N ex = 10 N_{\text{ex}} = 10 Nex=10不同的随机4样本提示来近似 P Correct P_{\text{Correct}} PCorrect的值。对于每个4样本提示,我们使用 T = 0 T = 0 T=0预测贪婪答案,并使用 T = 0.5 T = 0.5 T=0.5采样16个答案。 P Correct ( q , a ; M , T = 0 ) P_{\text{Correct}}(q, a; M, T = 0) PCorrect(q,a;M,T=0)通过正确的贪婪答案的比例来估计, P Correct ( q , a ; M , T > 0 ) P_{\text{Correct}}(q, a; M, T > 0) PCorrect(q,a;M,T>0)通过正确的样本答案的比例来估计。完整的细节在§C中。

P Correct P_{\text{Correct}} PCorrect衍生知识类别。
我们将未知类别(图2a和2b的底部行)定义为代表 ( q , a ) (q, a) (q,a)对的类别,对于这些 ( q , a ) (q, a) (q,a)对, M M M从不预测 q q q的正确答案。在我们的符号中,这意味着 P Correct ( q , a ; M , T ≥ 0 ) = 0 P_{\text{Correct}}(q, a; M, T \geq 0) = 0 PCorrect(q,a;M,T0)=0。另一方面,如果 P Correct ( q , a ; M , T ≥ 0 ) > 0 P_{\text{Correct}}(q, a; M, T \geq 0) > 0 PCorrect(q,a;M,T0)>0,即 M M M有时预测 q q q的正确答案,我们认为 ( q , a ) (q, a) (q,a)是已知的。在这个选择中,我们假设如果提示 M M M回答 q q q有时会产生正确的答案 a a a,那么 M M M一定对相关的事实有一些关联。

认识到知识可以在确定性和范围方面有不同的程度,我们将已知的 ( q , a ) (q, a) (q,a)对分为三个不同的类别(表2a和2b的前三行)。基于 M M M应该始终预测 a a a,如果 ( q , a ) (q, a) (q,a)是已知的这一原则,我们强调贪婪解码的结果,用 P Correct ( q , a ; M , T = 0 ) P_{\text{Correct}}(q, a; M, T = 0) PCorrect(q,a;M,T=0)表示。

高度已知代表 ( q , a ) (q, a) (q,a)对,对于这些对, M M M总是贪婪地预测 a a a。如果 M M M有时(但不总是)贪婪地预测 a a a,我们认为 ( q , a ) (q, a) (q,a)可能已知。最后,如果 M M M从不贪婪地预测 a a a,我们将 ( q , a ) (q, a) (q,a)归类为微弱已知。在这里插入图片描述
我们应用SliCK来注释我们数据集中的每个 ( q , a ) (q, a) (q,a)对,根据 M M M的知识类别。我们在§6中分析了我们类别的质量。

4 未知样本有多大危害?

在本节中,我们研究了微调数据集 D D D中的新知识对性能的影响。为了隔离这种影响,我们改变了 D D D中被归类为未知的样本的比例,同时控制了其他因素。具体而言,我们固定 ∣ D ∣ |D| D并创建具有 X X% X未知和 ( 100 − X ) (100 − X)% (100X)已知样本的 D D D变体(完整细节在§E中)。我们将已知类别集体处理(参见图2a),并在§5中提供每个类别的分析。我们将基于开发集的提前停止表示为EARLY_STOP(在5-10个epoch后发生),将50个微调epoch表示为CONVERGENCE,因为在这一点上M总是完全拟合 D D D(即100%的训练准确度)。我们测量测试性能作为幻觉的代理,因为我们处于具有不相交的训练/测试分割的闭书QA设置中,其中模型必须使用其预先存在的知识来回答测试问题(有关进一步讨论,请参见§B)。

4.1 更高的未知比例与性能下降成正比

图3a显示了对于不同的微调持续时间,性能随 D D D中未知样本百分比的变化。无论微调持续时间如何,更高的未知百分比都会导致性能下降,这表明未知样本比已知样本的用处要小。性能也受到微调持续时间的强烈影响,EARLY_STOP通常会产生最佳性能。训练更多的epoch通常会降低性能(CONVERGENCE观察到最低的性能),这可以归因于过度拟合 D D D。有趣的是,这种影响随着更大的未知百分比而增加(来自EARLY_STOP的行间距沿正x轴单调增加),这表明更高的未知百分比增加了过度拟合的风险。

4.2 未知样本:有害还是中性?

由于 ∣ D ∣ |D| D是固定的,因此更高的未知百分比会导致性能下降,这可能仅仅源于已知微调样本的数量减少。因此,仍然不清楚未知样本是有害还是中性。为了解决这个问题,我们测量了从 D D D中过滤掉所有未知样本的影响。对于每个 D D D变体,我们创建一个相应的削减变体 D Known D_{\text{Known}} DKnown,仅包含 D D D中的已知样本。例如,如果D有25%未知,我们将它们过滤掉,剩下剩余的75%已知样本,得到 ∣ D Known ∣ = 0.75 × ∣ D ∣ |D_{\text{Known}}| = 0.75 \times |D| DKnown=0.75×D

图3b显示了结果。也许令人惊讶的是,对于EARLY_STOP,D的结果与 D Known D_{\text{Known}} DKnown几乎相同,这表明未知样本对性能有中性影响(因为去除它们对性能的影响很小)。相反,CONVERGENCE结果表明,随着训练时间的延长,未知样本实际上是非常有害的。在这种情况下, D D D的表现不如 D Known D_{\text{Known}} DKnown,它们之间的差距与未知比例成正比。
在这里插入图片描述

有趣的是,对于 D Known D_{\text{Known}} DKnown,EARLY_STOP和CONVERGENCE之间的差距非常小(虚线),而对于 D D D,这个差距非常大(实线)。这表明未知样本的存在是使具有更高未知比例的变体更容易过度拟合的原因。

4.3 未知样本的拟合速度慢于已知样本

我们表明未知样本是有害的,但它们的负面影响主要体现在训练的后期阶段,因此可以通过提前停止来实证地避免。为了更好地理解这些趋势,我们通过检查M在各种微调阶段拟合了 D D D中的哪些微调样本来分析训练动态。图1显示了已知和未知子集的 D D D的训练准确度,作为微调持续时间的函数。开发准确度在底部的放大图中显示,因为它落在更窄的范围内。我们在§F中包括了每个已知类别的训练准确度细分。

M拟合未知微调样本的速度明显慢于已知样本。在EARLY_STOP(垂直虚线)中,M在开发集上达到最高性能,同时拟合大多数已知样本但只有少数未知样本。在图4中,我们表明这种行为在我们所有的 D D D变体中都是一致的。这可以解释为什么在EARLY_STOP中,未知样本对性能有中性影响(§4.2),因为在这一点上M仍然没有拟合它们中的大部分。

在这里插入图片描述
最后,由于未知样本很可能引入新的事实知识,它们的显著缓慢的拟合率表明LLMs难以通过微调获得新的事实知识,相反,它们学习使用已知样本公开其预先存在的知识。

4.4 未知与已知对准确度的影响:线性模型视角

图1表明,在开发性能在EARLY_STOP(垂直虚线)达到峰值后,随着M逐渐拟合更多的未知样本,性能会下降。在本节中,我们旨在通过评估一个简单的线性依赖关系是否可以将拟合已知和未知训练样本的影响与测试准确度联系起来,从而更准确地描述这种关系。为此,我们使用以下线性回归模型:

Accuracy = β 0 + β kn ⋅ N kn ∣ D ∣ + β unk ⋅ N unk ∣ D ∣ \text{Accuracy} = \beta_0 + \beta_{\text{kn}} \cdot \frac{N_{\text{kn}}}{|D|} + \beta_{\text{unk}} \cdot \frac{N_{\text{unk}}}{|D|} Accuracy=β0+βknDNkn+βunkDNunk (1)

其中 N Kn N_{\text{Kn}} NKn N Unk N_{\text{Unk}} NUnk是M拟合的D中的已知和未知样本的数量。

我们通过从所有 D D D变体的微调模型中收集每个epoch后的(Accuracy, N Kn N_{\text{Kn}} NKn, N Unk N_{\text{Unk}} NUnk)值来估计系数。表1显示了结果(顶行)。高 R 2 R^2 R2表明测试准确度与拟合的训练样本类型之间存在很强的线性关系。我们的模型意味着拟合未知样本会损害性能( β unk < 0 \beta_{\text{unk}} < 0 βunk<0),而拟合已知样本会改善性能( β kn > 0 \beta_{\text{kn}} > 0 βkn>0)。未知的估计负面影响大致与已知的正面影响相匹配( ∣ β ukn ∣ ≈ ∣ β kn ∣ |\beta_{\text{ukn}}| \approx |\beta_{\text{kn}}| βuknβkn)。

4.5 泛化到新关系

在上述设置中,测试集中的(q, a)对应于在D中出现的相同12个关系的三元组。我们现在研究我们观察到的动态是否对模型的知识有更广泛的影响,并转移到微调期间没有出现的关系。

为了测试这一点,我们为out-of-distribution(OOD)测试集保留了一部分关系,将它们从训练和开发分割中排除。有关详细信息,请参见§A以及表4和表5中的in-distribution与OOD关系。

我们在OOD测试集上的结果揭示了类似的关键见解:(1)更高的未知比例导致更低的OOD测试性能;(2)未知样本对OOD性能有害,但主要是在M拟合它们时。OOD测试准确度的线性模型(等式(1))显示了类似的趋势: β unk < 0 \beta_{\text{unk}} < 0 βunk<0, β kn > 0 \beta_{\text{kn}} > 0 βkn>0, ∣ β ukn ∣ ≈ ∣ β kn ∣ |\beta_{\text{ukn}}| \approx |\beta_{\text{kn}}| βuknβkn R 2 = 0.95 R^2 = 0.95 R2=0.95(见表1)。更多细节在§H中。

总的来说,我们的见解跨关系转移。这本质上表明,在诸如"[E1]位于何处?“等未知样本上进行微调,可能会在看似不相关的问题上鼓励幻觉,例如"谁创立了[E2]?”。这进一步支持了这样的结论:观察到的效应可能源于模型学习生成未基于其预先存在知识的答案的行为。

5 理解知识类型:它们的价值和影响

在解决我们关于未知微调样本效应的主要研究问题时,为了简单起见,我们将已知类别集体处理(参见图2a)。我们现在检查每个类别的影响,探讨以下问题:

Q1:每个类别的训练样本如何影响测试性能?Q2:模型在每个类别的测试样本上的性能如何?为了解决Q1,我们创建了微调数据集D的单一类别变体。仅由类别CAT的样本组成的D变体表示为 D CAT D_{\text{CAT}} DCAT。作为参考,我们包括一个具有ENTITYQUESTIONS中自然类别分布的变体,表示为 D Natural D_{\text{Natural}} DNatural ∣ D ∣ |D| D是固定的,与§4中的实验相同。为了解决Q2,我们进一步按类别细分了测试集性能。表2显示了结果。

在这里插入图片描述

可能已知样本是必不可少的。由于未知样本是有害的,人们可能期望在最典型的高度已知样本上进行微调会最好。令人惊讶的是, D HighlyKnown D_{\text{HighlyKnown}} DHighlyKnown并没有获得最佳的整体结果,因为它在高度已知的测试样本上表现出色,但在其余类别上的性能较差。 D MaybeKnown D_{\text{MaybeKnown}} DMaybeKnown产生了最佳的整体性能。与 D HighlyKnown D_{\text{HighlyKnown}} DHighlyKnown相比, D MaybeKnown D_{\text{MaybeKnown}} DMaybeKnown提高了 M D M_D MD在可能已知上的性能(60.1 → 69.9),而没有损害高度已知上的性能(98.7 → 98.4)。这表明可能已知的微调样本对于 M D M_D MD在推理期间正确处理此类样本至关重要。它还表明,通过正确的微调样本, M D M_D MD变得更有能力利用其预先存在的知识。

有限的知识增强了过度拟合。在§4.2中,我们证明了未知微调样本增加了过度拟合的风险。我们现在观察到这也适用于微弱已知,尽管程度较低。具体而言,在CONVERGENCE时, D WeaklyKnown D_{\text{WeaklyKnown}} DWeaklyKnown D Unknown D_{\text{Unknown}} DUnknown与EARLY_STOP相比经历了显著的性能下降(39.2 → 35.4和37.5 → 25.8)。随着训练时间的延长,这些变体在微弱已知和未知上显示出适度的改进,但是,它们在高度已知和可能已知上大幅下降。这突出表明,性能下降主要归因于相对于在预训练后已知的事实产生幻觉的比率增加。

有趣的是, D Natural D_{\text{Natural}} DNatural在EARLY_STOP时的表现与 D MaybeKnown D_{\text{MaybeKnown}} DMaybeKnown不相上下,这表明即使 D D D有来自其他类别的其他样本, D D D中可能已知样本的存在就足以在可能已知上获得高性能。然而, D Natural D_{\text{Natural}} DNatural的性能在CONVERGENCE后显著下降,表现不如 D MaybeKnown D_{\text{MaybeKnown}} DMaybeKnown——表明它仍然受到过度拟合的影响,最有可能是由于微弱已知和未知样本的存在。综合这些结果表明, D MaybeKnown D_{\text{MaybeKnown}} DMaybeKnown无论在顶级性能还是降低过度拟合风险方面都很突出。

6 SliCK知识类别分析

评估模型的知识仍然是一个开放的问题,特别是因为由于缺乏关于模型真正知道什么的基本事实,评估此类方法的质量具有挑战性。在这项工作中,我们提出了SliCK(§3):一个关于模型知识的四类分类的事实。我们现在进一步分析和讨论我们的设计选择,希望SliCK可以作为一个有用的分类法来指导未来关于这个主题的研究。

细粒度的已知类别 我们首先反思我们根据贪婪解码结果将已知拆分为更细粒度的类别的选择是否被证明是有意义的。如表2所示,高度已知确实捕获了高程度知识的事实,因为它在微调后始终超过95%的准确度,而可能已知和微弱已知似乎代表较弱的知识程度。正如预期的那样,微弱已知的性能比可能已知差,但优于未知。此外,我们所做的精确类别区分被证明是有用的,因为它揭示了可能已知微调样本重要性的重要见解,正如§5中详细讨论的那样。

基准测试未知测试样本 对于出现在测试集中的被归类为未知的(q, a)对,一个理想的特性是M在微调后会错误地回答q(否则它们并非真正未知)。在表2中,我们可以看到未知上的准确度非常低(3.2%或更低),这是一个有力的指标,表明大多数未知样本实际上对M是未知的。

在这里插入图片描述

图5:SliCK未知分类与将 P ( True ) < T P(\text{True}) < T P(True)<T的样本分类为未知。x轴是被分类为未知的测试样本的百分比,y轴是微调后这些样本的准确度。黄线是 T ∈ [ 0 , 1 ] T \in [0, 1] T[0,1] P ( True ) P(\text{True}) P(True)。我们的未知类别是蓝色圆圈,蓝线对应于用少于10个随机4样本示例近似 P Correct P_{\text{Correct}} PCorrect(参见§3和§C)。

作为比较的案例研究,我们分析了 P ( True ) P(\text{True}) P(True)方法:一个连续分数,估计模型分配给特定答案正确性的概率。 P ( True ) P(\text{True}) P(True)最初用于自我评估模型生成的答案,而我们使用它来评估M是否认为基本事实答案是正确的。在图5中,我们探索将 P ( True ) P(\text{True}) P(True)阈值以下的样本分类为未知,并将此方法与SliCK进行比较。我们的结果表明,至少在我们的设置中,我们的方法对未知样本进行分类,其中模型在微调后的性能显著更差。

具体而言,查看x轴上的固定值表明,如果我们使用两种方法将类似比例的测试样本标记为未知,则 P ( True ) P(\text{True}) P(True)式未知样本上的准确度将在微调后更高。

最后,蓝线表明,使用来自多个少样本提示的样本来近似 P Correct P_{\text{Correct}} PCorrect至关重要,因为使用 N ex < 10 N_{\text{ex}} < 10 Nex<10会导致SliCK未知样本上的测试准确度更高。

7 讨论

实践意义。这项工作凸显了使用监督式微调来更新LLMs知识的风险,因为我们提供了经验证据,表明通过微调获得新知识与相对于预先存在的知识产生幻觉相关。此外,这项工作提出了未来探索的重要问题,关于微调实践。我们看到,未知样本的拟合速度慢于已知样本,因此它们的负面影响表现为过度拟合的一种形式,这强调了使用提前停止而不是固定数量微调步骤的重要性。然而,当在具有不同最佳停止点的众多任务上进行微调时,提前停止可能效果较差。另一种解决方案可以是通过过滤掉未知样本来使微调数据与模型的知识保持一致。我们展示了初步证据,表明这可以在不牺牲性能的情况下降低过度拟合的风险。过滤的一个可能缺点是,未知微调样本仍然可以用于教导LLMs在未知测试样本上表达不确定性。这引发了一个问题:如果我们用不确定性表达式(例如,“我不知道”)重新标记未知微调样本,它们是否仍然有害?我们的初步实验(在§K中描述)表明答案是否定的,这表明这种方法可能是最有希望的。探索这一点是未来工作的一个有趣方向。

表层对齐假说。Zhou等人(2023)假设LLMs的知识和能力主要是在预训练期间学习的,而对齐是一个简单的过程,模型学习与用户交互的风格或格式。他们通过表明仅在1k个高质量样本上进行微调就可以产生一个有竞争力的助手LLM(名为LIMA)来证实这一假设。正如§4.3中讨论的那样,我们展示了证据表明LLMs难以获取未知样本中存在的新知识,并且主要学习如何利用其预先存在的知识。我们还表明,在高度已知样本上进行微调导致次优地利用预先存在的知识,尽管我们的任务格式比LIMA的更简单,并且我们的数据集大六倍。综合起来,我们的发现表明,即使LLM的大部分知识确实是通过预训练获得的,但模型通过微调学习的不仅仅是风格或格式,因为微调样本的选择显著影响模型在微调后利用其预先存在知识的能力。

8 相关工作

新知识和幻觉。Schulman(2023)、Goldberg(2023)和Gudibande等人(2023)提到了这样的推测,即在新的事实知识上进行微调可能会鼓励幻觉。Huang等人(2023)将幻觉原因分类,并正式将这种情况定义为能力错位。他们强调,由于定义LLMs的知识边界具有挑战性,有限的研究解决了由于能力错位造成的问题。Kang等人(2024)表明,当微调后的LLM在测试时遇到未知查询时,其回应会模仿与微调数据中的未知样本相关的回应。Yin等人(2023)表明,当LLMs在其输入上下文中面临新知识时,它们的性能并不令人满意,Lee等人(2023)分析了未知上下文学习样本的影响。据我们所知,我们的工作是第一个经验评估暴露在新知识下通过微调对微调后模型产生幻觉倾向的影响的工作。
量化LLMs中的知识。SliCK可以被视为基本事实标签的置信度引出方法(如果M确信a是q的答案,则M知道(q, a))。现有工作通过检查多个样本之间的一致性(Kuhn等人,2023;Manakul等人,2023;Tian等人,2023a;Lyu等人,2024)、探测内部表示(Azaria和Mitchell,2023;Burns等人,2022)、引出口头概率(Tian等人,2023b)或直接提示(Kadavath等人,2022)从LLMs中得出校准的置信度。Kadavath等人还训练了一个单独的 P ( IK ) P(\text{IK}) P(IK)模型来预测LLM是否知道q的答案。 P ( IK ) P(\text{IK}) P(IK)的标签通过正确样本答案的比例来近似,这在概念上与 P Correct P_{\text{Correct}} PCorrect(§3)一致。一个关键区别是我们还定义了SliCK类别,并提供证据表明我们捕获到了有意义和有用的类别。

9 结论

我们研究了通过微调整合新的事实知识对模型产生幻觉倾向的影响。我们首先提出了SliCK,一种关于LLM知识的事实分类。然后,我们设计了一个受控研究,隔离了新知识的影响并严格评估其效果。我们提供了多个关于微调动态的见解,主要发现如下:(1)通过监督式微调获得新知识的速度比利用预先存在的知识慢得多;(2)随着最终学会新知识,模型更容易相对于其预先存在的知识产生幻觉。我们的发现凸显了使用微调来引入新知识的风险,并为开发更稳健的对齐方法提供了动力。

A 数据预处理

本节扩展了§2中关于Google数据预处理步骤的其他细节。ENTITYQUESTIONS数据集(Sciavolino et al., 2021)由训练、开发和测试分割组成,涵盖24个关系。Google的训练、开发和测试集是基于ENTITYQUESTIONS的原始分割创建的。然而,Google只使用了12个关系,因为Google想为out-of-distribution测试集保留一些关系。为了避免刻意挑选,Google在训练、开发和测试集中使用的12个关系是随机抽样的。产生的关系在表3和表4中呈现。

Google为out-of-distribution测试集保留了其余的12个关系。然而,Google发现在这12个保留的关系中,有5个与Google训练的一些关系太相似(表3),因此Google怀疑这可能导致测试集不是真正的out-of-distribution。为了解决这个问题,Google过滤掉了这些关系,只剩下7个关系用于Google的out-of-distribution。具体来说,Google过滤掉了以下关系:

  • P276被过滤掉,因为它与P131直接重叠,因为对于这两个关系,ENTITYQUESTIONS中的问题都是"[E]位于何处?“的形式。P276代表"位置”,P131代表"位于行政领土实体内"。
  • P20的问题模板是"[E]在哪里去世的?“,被过滤掉,因为它可能需要与P19相关的知识,P19的问题模板是”[E]出生于何处?“。P20代表"死亡地点”,P19代表"出生地点"
  • P106的问题模板是"[E]从事什么工作?“,被过滤掉,因为它可能需要与P800相关的知识,P800的问题模板是”[E]以什么闻名?“。P106代表"职业”,P800代表"著名作品"
  • P413的问题模板是"[E]打什么位置?“,被过滤掉,因为它可能需要与P800相关的知识,P800的问题模板是”[E]以什么闻名?“。P413代表"在团队/专业中的位置”,P800代表"著名作品"。
  • P159的问题模板是"[E]的总部位于何处?“,被过滤掉,因为它可能需要与P36相关的知识,P36的问题模板是”[E]的首都是什么?“。P159代表"总部所在地”,P36代表"首都"。

用于out-of-distribution测试集的7个关系在表5中呈现。

最后,Google执行两个额外的过滤步骤:

(1)为了简化根据M的知识对样本进行分类的过程(§3),Google过滤掉了具有多个正确答案的样本。
(2)Google确保训练集和测试集之间的主题或对象不重叠,通过从训练集中过滤掉重叠的样本。

B 测试性能作为幻觉的代理

Google现在详细说明了在其设置中测试性能与幻觉之间的联系。在Google的研究中,与另一个微调模型 M D 2 M_{D2} MD2相比,微调模型 M D 1 M_{D1} MD1在测试集上的较差性能可归因于 M D 1 M_{D1} MD1中相对较高的幻觉率,相对于其预先存在的知识,由于以下解释。

测试集在概念上可以分为两种类型的问题。首先,有一些问题的答案对 M M M来说是未知的。这些问题在微调后仍将保持未知,因为Google确保训练集与测试集不相交(§A)。这意味着 M D 1 M_{D1} MD1 M D 2 M_{D2} MD2都将无法回答这些问题。因此, M D 1 M_{D1} MD1 M D 2 M_{D2} MD2之间的测试性能差异主要归因于第二种类型的问题:那些 M M M已知的问题,即 M M M可以正确回答它们,因为它拥有相关的知识。因此, M D 1 M_{D1} MD1 M D 2 M_{D2} MD2必须依赖它们预先存在的知识来回答这些问题,而在这些问题上的较低性能只能被归类为相对于预先存在的知识的幻觉。

在这里插入图片描述
在这里插入图片描述

C P Correct P_{\text{Correct}} PCorrect近似

本节扩展了§3中关于Google的 P Correct P_{\text{Correct}} PCorrect近似的其他细节。在Google的研究中,Google基于从 M M M采样的正确答案 q q q的比例来近似 P Correct ( q , a ; M , T ) P_{\text{Correct}}(q, a; M, T) PCorrect(q,a;M,T)

Google首先为其数据集中的每个关系随机采样 N ex N_{\text{ex}} Nex个不同的k-shot示例(§A)。然后,为了近似 P Correct ( q , a ; M , T ) P_{\text{Correct}}(q, a; M, T) PCorrect(q,a;M,T),Google使用 M M M为每个来自与 q q q对应的关系的 N ex N_{\text{ex}} Nex个示例生成q的答案。

Google首先对每个 N ex N_{\text{ex}} Nex示例使用温度采样 T = 0.5 T = 0.5 T=0.5来采样 N sample N_{\text{sample}} Nsample个答案。然后通过 N ex ⋅ N sample N_{\text{ex}} \cdot N_{\text{sample}} NexNsample个预测中正确答案的比例来近似 P Correct ( q , a ; M , T > 0 ) P_{\text{Correct}}(q, a; M, T > 0) PCorrect(q,a;M,T>0)。Google还为每个 N ex N_{\text{ex}} Nex示例生成贪婪解码预测( T = 0 T = 0 T=0)。然后通过 N ex N_{\text{ex}} Nex个预测中正确答案的比例来近似 P Correct ( q , a ; M , T = 0 ) P_{\text{Correct}}(q, a; M, T = 0) PCorrect(q,a;M,T=0)

Google使用 k = 4 k = 4 k=4,因为Google发现它足以让M以正确的格式输出答案。Google使用 N ex = 10 N_{\text{ex}} = 10 Nex=10 N sample = 16 N_{\text{sample}} = 16 Nsample=16。使用 T = 0.5 T = 0.5 T=0.5 N sample = 16 N_{\text{sample}} = 16 Nsample=16个样本是从Top 40中采样的。

k k k个示例是从开发分割中采样的。Google采样 N ex N_{\text{ex}} Nex个不同的样本,因为Google发现,即使按关系采样少样本示例,它们的确切选择仍会影响预测。在§6和图5中,Google展示了证据,表明这也提高了Google类别的质量。

在这里插入图片描述
在这里插入图片描述

下面是ENTITYQUESTIONS中来自关系P 106(代表职业)的4-shot提示格式的一个真实示例。在这种情况下,问题是"Ron Konopka从事什么工作?“,基本事实答案是"遗传学家”。

在这里插入图片描述

Q: Nicolas Roeg从事什么工作?
A: 电影导演

Q: Crystal Geoffré从事什么工作?
A: 演员

Q: Maurice Blondel从事什么工作?
A: 哲学家

Q: Javier de Burgos从事什么工作?
A: 政治家

Q: Ron Konopka从事什么工作?
A:

为了决定采样的答案是否正确,Google使用精确匹配(EM)指标将其与基本事实答案进行比较。这个选择的主要优点是,当EM为True时,Google知道答案是100%正确的。与此选择相关的主要潜在风险是,由于释义或不同粒度级别的答案,Google可能错误地将答案分类为不正确。为了解决这个问题,Google对100个EM为False的预测进行错误分析。Google随机采样50个贪婪预测( T = 0 T = 0 T=0)和50个样本( T = 0.5 T = 0.5 T=0.5)。

结果在表6中。该分析表明,在90%的情况下,当EM为False时,预测的答案确实是不正确的。考虑到当EM为True时,答案是100%正确的(这在任何其他指标中都不会发生),这对于Google的目的来说是一个合理的性能。

D 数据注释

Google首先使用 P Correct ( ⋅ ) P_{\text{Correct}}(\cdot) PCorrect()近似为Google预处理数据集中的每个 ( q , a ) (q, a) (q,a)对计算 P Correct ( q , a ; M , T = 0 ) P_{\text{Correct}}(q, a; M, T = 0) PCorrect(q,a;M,T=0) P Correct ( q , a ; M , T > 0 ) P_{\text{Correct}}(q, a; M, T > 0) PCorrect(q,a;M,T>0)。然后,Google使用这些值将每个 ( q , a ) (q, a) (q,a)对分类到Google的四个类别之一。

Google在表3、4和5中提供了训练集、测试集以及out-of-distribution测试集上每个关系的类别的完整统计数据。

E 关于微调数据集 ( D ) (D) (D)变体的更多细节

在§4中,Google通过改变 D D D中未知样本的比例来检查微调数据集 D D D中新知识对 M D M_D MD性能的影响。当Google创建具有X%未知和 ( 100 − X ) (100 − X) (100X)%已知样本的D的变体时,Google确保关系分布保持一致。为了实现这一点,Google从每个关系中抽取X%的未知样本。

在§5中,Google创建了 D D D的单一类别变体。由于Google希望在所有变体中使用固定的 ∣ D ∣ |D| D,因此Google要确保每个类别都有 ∣ D ∣ |D| D个样本。为了确保这一点,Google测量每个关系中最小类别的大小(参见表3中的"Min"列),并将 ∣ D ∣ |D| D定义为它们的总和。换句话说,对于每个关系,Google计算最小类别的大小,并将这些值相加。这导致 ∣ D ∣ = 6142 |D| = 6142 D=6142,如表3的最后一列所示。

在这里插入图片描述

更正式地说,对于训练分割中的每个关系 r r r,以及Google的4个SliCK类别中的每个类别CAT,Google定义 CAT r \text{CAT}_r CATr是来自类别CAT和关系 r r r的样本。因此, size ( CAT r ) \text{size}(\text{CAT}_r) size(CATr) CAT r \text{CAT}_r CATr中的样本数量。例如, size ( HighlyKnown P 131 ) = 553 \text{size}(\text{HighlyKnown}_{P131}) = 553 size(HighlyKnownP131)=553(见表3)。然后Google定义:

∣ D ∣ = ∑ r ∈ R Train min ⁡ { size ( CAT r ) ∣ CAT ∈ { HighlyKnown , MaybeKnown , WeaklyKnown , Unknown } } |D| = \sum_{r \in R_{\text{Train}}} \min \left\{ \text{size}(\text{CAT}_r) \mid \text{CAT} \in \{\text{HighlyKnown}, \text{MaybeKnown}, \text{WeaklyKnown}, \text{Unknown}\} \right\} D=rRTrainmin{size(CATr)CAT{HighlyKnown,MaybeKnown,WeaklyKnown,Unknown}}

其中 R Train R_{\text{Train}} RTrain是训练集中的12个关系。

以下是Google在训练、开发和测试集中的数据格式的一个示例,来自ENTITYQUESTIONS中表示职业的关系P106的真实示例。在这种情况下,问题是"Ron Konopka从事什么工作?“,基本事实答案是"遗传学家”。

在这里插入图片描述

F 不同已知类别的训练准确度

在§4.3中,Google分析了微调动态,并在图1中将训练准确度呈现为微调持续时间的函数。为了简单起见,Google将已知类别集体处理。为了参考,Google还在图6中包括了每个类别细分的完整情况。

G 线性模型

在§4.4和§4.5中,Google使用了一个线性模型(等式(1)),预测测试准确度和out-of-distribution测试准确度。Google基于§4中使用的所有D变体的结果估计了这个线性模型的参数。对于所有这些变体,Google在不同的微调阶段测量了测试准确度以及M拟合的已知和未知微调样本的数量。这样,Google收集了一个形式为 ( A c c u r a c y , N K n , N U n k ) (Accuracy, N_{Kn}, N_{Unk}) (Accuracy,NKn,NUnk)的数据集,Google用它来拟合线性回归模型。

H Out-of-distribution (OOD) 评估

在§4.5中,Google讨论了out-of-distribution (OOD)结果。在这些实验中,Google只是使用了Google的OOD测试集,该测试集由7个在微调期间未见过的关系组成(参见§A)。当Google执行§4.1和§4.2中讨论的分析时,Google还在OOD测试集上评估了模型。为了完整性,Google在此添加图7,它是图3的out-of-distribution版本。图7a将OOD测试性能呈现为不同微调持续时间下D中未知样本百分比的函数。相应的in-distribution结果(图3a)在§4.1中讨论。图7b显示了过滤掉未知微调样本的消融实验的OOD测试性能。相应的in-distribution结果(图3b)在§4.2中讨论。Google注意到类似的趋势,只是性能下降的总体幅度较小,in-distribution最多下降14个百分点,而OOD最多下降6个百分点。这种较小的下降幅度也反映在 ∣ β u k n ∣ |\beta_{ukn}| βukn ∣ β k n ∣ |\beta_{kn}| βkn的较小值上(见表1)。

I 统计显著性检验

在§5中,Google呈现了表2。如表格标题中所述,Google对每一列执行统计显著性检验。为此,Google将所有值与该列的最大值进行比较。

在这里插入图片描述
在这里插入图片描述

对于测试集的每个子集,Google随机打乱其中的所有样本,将它们分成100个大小大致相等的子集,并计算所有感兴趣模型的每个子集的准确度。然后,Google应用配对样本t检验, p < 0.05 p < 0.05 p<0.05 p < 0.01 p < 0.01 p<0.01

在表2中,最佳结果以粗体显示,以及与最佳结果差异在 p < 0.05 p < 0.05 p<0.05下不显著的结果。Google还包括表2的副本,其中详细注明了统计显著性检验结果,参见表7。Google可以看到,在几乎所有情况下,差异在 p < 0.01 p < 0.01 p<0.01下都是统计学显著的,除了两种情况,即 D Natural D_{\text{Natural}} DNatural Unk和 D MaybeKnown D_{\text{MaybeKnown}} DMaybeKnown Mkn,它们只在 p < 0.05 p < 0.05 p<0.05下显著。

由于Google还讨论了"水平"比较,即将EARLY_STOP与CONVERGENCE进行比较,因此Google还对All运行显著性检验(未在表2中注释),比较EARLY_STOP与CONVERGENCE。 D MaybeKnown D_{\text{MaybeKnown}} DMaybeKnown的差异不显著,而所有其他(包括 D Natural D_{\text{Natural}} DNatural)在 p < 0.01 p < 0.01 p<0.01下显著。

J P ( True ) P(\text{True}) P(True)案例研究

在§6中,Google使用了Kadavath等人(2022)的 P ( True ) P(\text{True}) P(True)指标作为比较的案例研究。在图5中,Google将Google的未知类别与基于 P ( True ) P(\text{True}) P(True)阈值将样本分类为未知进行了比较。Google使用Kadavath等人(2022)的提示计算了测试集中每个 ( q , a ) (q, a) (q,a)对的 P ( True ) P(\text{True}) P(True):

在这里插入图片描述

然后,Google将 P ( True ) P(\text{True}) P(True)低于阈值的 ( q , a ) (q, a) (q,a)对视为未知。Google尝试了 [ 0 , 1 ] [0, 1] [0,1]中的每个可能阈值T。对于每个阈值T,Google测量了(1)测试集中有多少样本被归类为未知,(2)微调后这些样本的准确度是多少。Google在图5中绘制结果,其中 P ( True ) P(\text{True}) P(True)用黄线表示,Google的未知用蓝色圆圈表示。如§C中所述,它使用10个不同的4-shot示例样本近似得到( N ex = 10 N_{\text{ex}} = 10 Nex=10)。Google还检查了较小的 N ex N_{\text{ex}} Nex值,并用蓝线绘制结果。对于所有结果,微调后的准确度是在使用 D Natural D_{\text{Natural}} DNatural(§5)微调后测量的。

在这里插入图片描述

K 用不确定性表达式重新标记未知微调样本:初步实验

在这项工作中,Google表明拟合未知微调样本会对测试性能产生负面影响。然而,这种负面影响表现为过度拟合的一种形式。从实践的角度来看,Google表明Google可以通过使用提前停止或从微调数据集中过滤掉未知的样本来缓解过度拟合。

Google现在进行一个初步实验,检查让模型在未知样本上学会弃权是否也是一种潜在的缓解方法。具体来说,Google用表达式"我不知道"替换未知微调样本的标签,并测试这是否能缓解观察到的过度拟合。

表8显示了被回答的测试问题的百分比(即 M D M_D MD没有回答"我不知道")以及这些问题的准确度。这个实验是在未知比例为50%的 D D D变体上进行的。第一行是原始结果,以 D D D作为参考,第二行是 D IDK D_{\text{IDK}} DIDK的结果,其中 D D D中50%的未知样本的基本事实标签被替换为"我不知道"。

与之前的工作(Zhang等人,2023)的发现一致,Google观察到在主动回答的测试样本上准确度有所提高(比较 D D D D IDK D_{\text{IDK}} DIDK)。当Google比较D的EARLY_STOP与CONVERGENCE时,Google观察到性能下降(43.0 → 38.8),这说明了过度拟合效应。然而,Google观察到,用不确定性表达式重新标记未知样本似乎降低了过度拟合的风险。具体来说, D IDK D_{\text{IDK}} DIDK的准确度在EARLY_STOP和CONVERGENCE都保持在61.8,而主动回答的问题的数量略有下降(58.7 → 55.6)。

通过这项研究,Google系统性地探索了向语言模型引入新知识对其产生幻觉倾向的影响。一些关键发现包括:

  1. 语言模型通过监督微调学习新知识的速度明显慢于已知知识,表明其在获取新知识方面存在内在困难。
  2. 随着模型最终通过微调学习到新知识,其产生幻觉的倾向也随之线性增加。
  3. 未知样本的危害主要体现为一种过拟合现象,在早停时影响有限,但完全训练后会显著降低性能。
  4. 通过精心设计的对照实验,Google证实了以上现象在不同关系类型间都能得到一致观察。

此外,Google还提出了SliCK方法来评估语言模型的知识状态,并通过消融实验证明了其有效性。Google还探索了不同知识类型的样本对模型行为的影响,强调了合理选择微调样本的重要性。

最后,Google讨论了这些发现的实践意义,提出了一些缓解策略,并对比了不同的知识评估方法。Google指出,引入新知识虽然是扩展语言模型能力的必经之路,但如何通过技术手段降低其负面影响,提高模型输出的可靠性,仍是一个亟需研究的开放性问题。

总的来说,这项工作对于理解语言模型的知识获取与更新机制具有重要价值,为后续研究指明了方向。在追求模型性能的同时兼顾其鲁棒性与可解释性,是实现可控可信的人工智能的关键。

以下是我对这项工作的一些想法:

  1. 该研究强调了评估语言模型知识状态的重要性。提出的SliCK方法为探索模型内在知识提供了一个有前景的框架。未来的工作可以在此基础上,开发出更精确、更全面的知识评估技术。
  2. 实验结果表明,语言模型在吸收新知识方面存在内在困难。这提示我们在通过微调等方式扩展模型能力时需要格外谨慎。在引入新知识的同时,还需要采取措施防止模型遗忘或误用已有知识。
  3. 该研究揭示了微调样本选择的重要性。恰当的样本组成不仅有助于模型学习新知识,还能增强其利用已有知识的能力。这为改进微调策略提供了一个有趣的方向。
  4. 尽管该研究聚焦于事实知识的获取,但其观察到的现象可能具有更广泛的意义。语言模型处理新信息时出现的困难,可能在其他类型的知识和任务中同样存在。这值得在更多场景下进行验证和分析。
  5. 该研究虽然没有直接解决幻觉问题,但它揭示了问题的潜在根源,并提示我们反思当前主流的微调范式。开发更稳健的知识获取和更新机制,是实现可靠、可解释的语言模型的关键。
  6. 作者提出的一些思路,如过滤未知样本、用不确定表达重新标记等,为缓解幻觉问题提供了可能的解决方案。未来研究可以在这些初步发现的基础上,设计和实施更系统的应对策略。

这项工作以实证的方式研究了语言模型的知识获取问题,取得了有价值的发现,并为未来工作指明了方向。它不仅有助于我们深入理解语言模型的行为特性,也为开发更可靠、更智能的语言模型提供了重要的见解和启示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/11144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot实现高校教师电子名片系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现高校教师电子名片系统演示 摘要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;名片信息因为其管理内容繁杂&#xff…

C++的数据结构(五):树和存储结构及示例

在计算机科学中&#xff0c;树是一种抽象数据类型&#xff08;ADT&#xff09;或是实现这种抽象数据类型的数据结构&#xff0c;用来模拟具有树状结构性质的数据集合。这种数据结构以一系列连接的节点来形成树形结构。在C中&#xff0c;树的概念和存储结构是实现各种复杂算法和…

Java--初识类和对象

前言 本篇讲解Java类和对象的入门版本。 学习目的&#xff1a; 1.理解什么是类和对象。 2.引入面向对象程序设计的概念 3.学会如何定义类和创建对象。 4.理解this引用。 5.了解构造方法的概念并学会使用 考虑到篇幅过长问题&#xff0c;作者决定分多次发布。 面向对象的引入 J…

GIAT: 蛋白质结构预测的新利器

瑞典Karolinska研究院在瑞典政府赞助下由Ben Murrell等研究团队在AlphaFold 3最新报告后提出这篇论文提出了一种非常有趣和创新的方法来生成蛋白质骨架结构,称为生成式不变角度转换器(GIAT)。与现有的主要基于扩散模型和流匹配的方法不同,GIAT采用了类似于大型语言模型(如GPT)中…

【C语言|数据结构】双向链表

文章目录 前言1、初步认识双向链表1.1 定义&#xff1a;1.2 结构1.3 节点的存储 2、双向链表的接口函数2.1 链表的节点的动态申请2.2 链表的初始化2.3 尾插2.4 头插2.5 头删2.5 尾删2.6 在pos节点后面添加数据2.6 删除pos节点 3、双向链表的实现&#xff1a; 前言 各位小伙伴大…

C控制语句:分支和跳转

1.1if语句 //colddays.c --找出0摄氏度以下的天数占总天数的百分比 #include <stdio.h>int main(void) {const int FREEZING 0;float temperature;int cold_days 0;int all_days 0;printf("Enter the list of daily low temperature.\n");printf("Use…

电子学会C/C++编程等级考试2024年03月(八级)真题解析

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 第1题&#xff1a;道路 N个以 1 … N 标号的城市通过单向的道路相连:。每条道路包含两个参数&#xff1a;道路的长度和需要为该路付的通行费&#xff08;以金币的数目来表示&#xff09; Bob and Alice 过去住在城市 1.在…

蓝海创业商机小吃配方项目,日入200+ ,小白可上手,图文创作转现快

小吃技术销售&#xff0c;一单价格从几元到几百元不等&#xff0c;行业竞争相对较小&#xff0c;是一个相对冷门的领域。只需一部手机&#xff0c;就可以发布图文并茂的内容&#xff0c;配上背景音乐&#xff08;BGM&#xff09;&#xff0c;即使是对视频剪辑不熟悉的新手&…

面试中算法(金矿)

有一位国王拥有5座金矿&#xff0c;每座金矿的黄金储量不同&#xff0c;需要参与挖掘的工人人数也不同。 例如&#xff0c;有的金矿储量是5ookg黄金&#xff0c;需要5个工人来挖掘;有的金矿储量是2ookg黄金&#xff0c;需要3个工人来挖掘...... 如果参与挖矿的工人的总数是10。…

试衣不再有界:Tunnel Try-on开启视频试衣应用新纪元

论文&#xff1a;https://arxiv.org/pdf/2404.17571 主页&#xff1a;https://mengtingchen.github.io/tunnel-try-on-page/ 一、摘要总结 随着虚拟试衣技术的发展&#xff0c;消费者和时尚行业对于能够在视频中实现高质量虚拟试衣的需求日益增长。这项技术允许用户在不实际穿…

目标检测——印度车辆数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

区块链中的APP与传统APP的区别

一、技术 区块链中的APP是基于区块链技术开发的&#xff0c;而传统APP则基于传统的应用程序商店或网页。区块链中的APP利用区块链技术的去中心化、数据不可篡改等特点&#xff0c;使得应用程序的开发和分发更加安全、透明和可信。与传统APP相比&#xff0c;区块链中的APP无需中…

Web安全:SQL注入之布尔盲注原理+步骤+实战操作

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

访客管理系统对于校园安全的重要性

校园访客办理计划是针对校园安全需求规划的安全办理体系&#xff0c;主要用于对校园外来人员的科学办理。要做好校园安全作业&#xff0c;把风险分子拒之门外尤为要害。校园访客办理计划实现访客实名制&#xff0c;并结合公安网、黑名单功用&#xff0c;对风险人员进行提前预警…

没有公网ip,如何实现外网访问内网?

目前拨号上网是最广泛的上网方式&#xff0c;这种方式优点是价格便宜&#xff0c;缺点是没有固定公网ip&#xff0c;每次重新您拨号ip地址都会变。如果有一台服务器&#xff0c;需要实现外网访问&#xff0c;在没有固定公网ip的环境下&#xff0c;该如何实现呢&#xff1f;使用…

【CTF Web】QSNCTF 文章管理系统 Writeup(SQL注入+Linux命令+RCE)

文章管理系统 题目描述 这是我们的文章管理系统&#xff0c;快来看看有什么漏洞可以拿到FLAG吧&#xff1f;注意&#xff1a;可能有个假FLAG哦 解法 SQL 注入。 ?id1 or 11 --取得假 flag。 爆库名。 ?id1 union select 1,group_concat(schema_name) from information_sch…

华为OD机试【统一限载货物数最小值】(java)(200分)

1、题目描述 火车站附近的货物中转站负责将到站货物运往仓库&#xff0c;小明在中转站负责调度 2K 辆中转车(K辆干货中转车&#xff0c;K 辆湿货中转车)货物由不同供货商从各地发来&#xff0c;各地的货物是依次进站&#xff0c;然后小明按照卸货顺序依次装货到中转车&#xf…

二维数组 和 变长数组

在上一期的内容中&#xff0c;为诸君讲解到了一维数组&#xff0c;在一维数组的基础上&#xff0c;C语言中还有着多维数组&#xff0c;其中&#xff0c;比较典型且运用较为广泛的就是我们今天的主角——二维数组 一 . 二维数组的概念 我们把单个或者多个元素组成的数组定义为一…

VScode 修改 Markdown Preview Enhanced 主题与字体

VScode 修改 Markdown Preview Enhanced 主题与字体 1. 修改前后效果对比2. 修改主题2.1 更改默认主题2.2 修改背景色 3. 修改字体 VS Code基础入门使用可查看&#xff1a; VS Code 基础入门使用&#xff08;配置&#xff09;教程 其他Vs Code 配置可关注查看&#xff1a; Vs C…

2024年如何选什么版本FL Studio才适合自己编曲?

fl studio是什么软件 水果编曲软件 FL Studio&#xff0c;全称为Fruity Loops Studio&#xff0c;是一款全能音乐制作环境或数字音频工作站&#xff08;DAW&#xff09;&#xff0c;集编曲、录音、剪辑、混音等多种功能于一身。 FL Studio最初名为Fruity Loops&#xff0c;因…