GPT-1, GPT-2, GPT-3, InstructGPT / ChatGPT and GPT-4 总结

1. GPT-1

What the problem GPT-1 solve?

    在 GPT-1 之前,NLP 通常是一种监督模型。 对于每个任务,都有一些标记数据,然后根据这些标记数据开发监督模型。 这种方法存在几个问题:首先,需要标记数据。 但 NLP 不像 CV,它有一个标记良好的数据imagenet。 其次,这些不同任务训练的模型并不是很通用。 例如,翻译训练出来的模型很难直接用于分类。

    GPT-1提出了一些想法:首先,现实中有大量没有标签的文本,我们可以利用这些大量的无标签数据吗? 其次,是否可以预训练一个可以转移来处理不同任务的通用模型? 然而,由于两个主要原因,利用未标记的数据具有挑战性。 首先,应该使用什么目标函数来优化学习可迁移的文本表示? 其次,对于将这些学习到的表示转移到目标任务的模型还没有达成共识。

    GPT-1使用半监督的方法来实现这一目标:它使用自监督(论文中称为无监督)预训练模型从大量的子标签数据中学习文本表示,并使用监督 使用带注释的训练数据对每个子任务进行微调的模型。 我将其称为自我监督,而不是机器学习中的无监督,无监督模型通常意味着数据没有标签,任务更像是聚类。 这里的半监督仅意味着它不需要手动标记数据,而只需根据当前时间的标记(单词)来预测下一个标记(单词)。 更多细节将在下面的型号详情中介绍。

    对于模型结构,GPT-1 使用 Transformer 解码器,因为他们认为它提供了更结构化的内存来处理文本中的长期依赖性,从而在不同任务之间实现稳健的传输性能。 与同样基于 Transformer 的 BERT 相比,它使用 Transformer 编码器。 这意味着 GPT-1 选择了比 BERT 更困难的方法,因为解码仅使用信息,直到 t预测 t+1 时的下一个标记,而编码器将利用屏蔽令牌之前和之后的信息进行预测,这更容易并且性能可能会更好,因为之后的令牌已经被视为进行了预测。 这就是为什么 GPT 被称为单向(从左到右),而 BERT 被称为双向(使用屏蔽标记之前和之后的单词进行预测)。

How does GPT-1 work (model framework)?

如上所述,GPT-1包括两个阶段。 第一阶段是在大型文本语料库上学习高容量语言模型。 接下来是微调阶段,我们使模型适应带有标记数据的判别任务。

1. Unsupervisded (self-supervised) pre-trained model

上面可以得到GPT1的输入是 token的embedding 和position .

2. Supervised fine-tuning

辅助训练目标:作者发现,将语言建模作为微调的辅助目标,而不是单独最大化似然函数,有助于提高监督模型的泛化性并加速收敛。 所以最终的目标是最大化添加的两个带有参数的目标函数(这里跟CV的任务就有点像了,我们有了预训练模型在fine-tuning的时候,是只更新后边我们添加层的参数? 还是更新所有网络的参数呢? 这里作者是选用的第二个方面)

3. Supervised model tasks and input transformation

Analysis and discussion

这里忽略实验结果。 但在分析部分,作者提供了一些有用的信息,说明为什么他们选择 Transformer 而不是 LSTM 等其他语言模型。

第一个观察结果是,从预训练模型转移到微调任务的层数越多,性能(准确性)就越好。 也就是说,提高模型性能的一种方法是增加模型层数(层大小 = d_model)。 这就是 GPT-2/3/4 要做的事情。

第二个观察结果是,Transformer 可以通过更加结构化的注意力记忆来学习提高其语言模型能力(我的理解是 Transformer 有更多的参数,注意力机制可以帮助选择性地记住有用的信息)。 作者通过零样本学习验证了这一点。 即直接使用预训练的模型,无需对子任务进行微调。 Transformer的性能比LSTM更稳定、更好。 这也是 GPT-2 将重点关注的内容。

2. GPT-2

Language Models are Unsupervised Multitask Learners

What the problem GPT-2 solve?

正如 GPT-1 末尾所讨论的(也受到 BERT 的刺激?),预训练模型的性能可以通过更复杂的模型(更多层 - 更深,更高层大小 - 更宽)来提高。 它还可以直接用于目标任务(零样本学习)并击败 LSTM 的性能。 那就是GPT-2。 与 GPT-1 类似,GPT-2 也是带有 Transformer 解码器的自监督模型,但参数更多。 而GPT-2主要关注零样本学习。

为什么要零射击? GPT-1 之后推出的 BERT 在许多任务中表现优于 GPT-1。 在 GPT-1 的最后一部分中,它表明可以通过更大的模型来提高预训练模型的性能。 但如果只是纯粹增加参数的话,GPT-2论文的价值可能并没有太大意义。 所以GPT-2想从另一个方面讨论模型可以做到零样本:无需额外训练,模型就可以在某些任务中表现良好。 这也说明gpt模型具有很强的泛化能力,而这实际上是BERT所缺乏的。

How does GPT-2 work (model framework)?

因为它没有微调任务,所以 GPT-2 不需要像 GPT-1 那样使用 (<BOS>, <EOS> 等特殊标记。相反,GPT-2 使用 promot 来控制模型的输入 提示是提供给模型的一小段文本,模型将根据此输入生成附加文本。提示是特定于任务的,取决于具体的输入序列和任务。

相比之下,GPT-2 使用提示来控制模型的输入。 提示是作为初始输入提供给模型的一小段文本,模型根据此输入生成其他文本。 提示是特定于任务的,取决于特定的输入顺序和任务。 例如,要翻译成法语,提示是“翻译成法语”,然后是英语句子,然后是法语句子。 因此示例数据是一个类似的序列(翻译为法语,英语文本,法语文本)。

1. Data

由于GPT-2的参数比GPT-1多得多,因此需要更多的训练数据。 为了构建一个大型且多样化的数据集来收集任务的自然语言演示,作者使用了 Common Crawl 数据。 但这个数据集的质量很低,所以他们从这个数据中选择了质量相对较高的子集:来自reddit的帖子,至少有3个业力。 另一个数据集是 WenText,它是从 Dragnet 和报纸内容中提取的。 数据通过字节对编码 (BPE) 进行清理和分割。

2. Model

该模型与 GPT-1 几乎相同,GPT-1 是 Transformer 解码器,层范数被移动到每个子块,并在最终的自注意力块之后添加了一个额外的层范数。

Transformer 层数和 d_model 有不同的设置。

3. Zero-shot learning performance on the NLP tasks

实验表明:1)零样本的 GPT-2 在 NLP 任务(具有相应的数据集)上可以优于大多数其他 SOTA 零样本模型。 2)随着参数数量的增加,GPT-2性能也随之提高。 在这些任务上,最大的模型几乎击败了所有 SOTA 模型。

Analysis and discussion

GPT-2 在阅读理解等一些任务上与监督模型的性能相似,其性能与人的性能相差不远,但在 QA 等其他任务上它仍然表现不佳,并不比随机模型好,尤其是相差很远。 远离人类的表现。 与具有相似参数数量的 BERT 等其他自监督预训练模型相比,GPT-2 在子任务上的表现并不好。 这意味着虽然零样本学习可以提供强大的预训练模型,但它可能仍然需要对特定任务进行一些微调以提高其在特定任务上的性能。 问题是,每个子任务中是否需要与微调一样多的标记数据,还是只需要少量的标记数据? 下面的论文 GPT-3 仅显示了少量数据(少样本学习甚至单样本学习)对提高性能有很大帮助。

第二个观察结果是,随着参数数量的增加(更多的层和更大的层大小),模型性能仍然会提高。 如上图所示,随着 LM 的参数数量从 117M 增加到 1542M,训练数据和测试数据的困惑度都下降了。 这也是 GPT-3 要做的:增加模型参数的数量,同时增加训练数据的大小。

最后的发现是GPT-2可以写新闻文章。 虽然笔者没有花太多的篇幅来讨论这个功能,但这个功能却是GPT系列在未来大放异彩的主要原因之一——它可以生成内容。 我们将在下面讨论这个问题。

3. GPT-3

What the problem GPT-3 solve?

针对特定目标任务训练的模型通常需要特定于任务的数据集和特定于任务的微调,因此需要一些标记数据。 这样做有一些限制:1)每个任务的特定数据限制了训练模型的泛化。 对于许多任务来说,收集大型监督训练数据集是很困难的; 2)模型性能可能取决于数据:训练模型的潜力与模型的表达能力和训练分布的窄度有关。 当大型模型在 parrow 任务分布上进行微调时,大型模型不一定具有更好的泛化能力。 换句话说,微调模型表现更好并不意味着大型预训练模型更好。 这可能只是因为微调训练数据与评估数据有重叠; 3)人类无需大量数据就可以更有效地学习。

To solve these concerns, GPT-3 proposed these ideas:

第一:它在训练时训练了一个具有广泛技能和模式识别能力的模型,并在推理时依赖这种能力来完成新任务。 具体来说,GPT-3 训练了一个具有强大泛化能力(元学习)的良好模型,并且它不会更新子任务的大型预训练模型中的参数(上下文学习),而仅更新该子任务的输出权重 具有一些数据样本的任务(通常是最后一层)(少样本学习)。

这就像为特定任务添加一个层。 在少样本学习中,大模型参数不会更新,从而保留预训练模型的泛化能力和模式识别能力。 它仅使用该特定任务的一些样本更新该特定任务的最后一层的参数。 例如,如果它是一个分类任务,它将有一个用于分类的层,并且该层的参数将由分类任务数据更新。 预训练模型中的其他参数被冻结。

例如上图中,大训练数据可能已经有很多情况,例如数学求和、文本修正或从一种语言翻译成另一种语言。 在预训练模型中,它将从这些数据中学习以理解任务并开发一系列广泛的技能和模式识别能力(此处使用 SGD 进行自我监督)。 学习完成后,预训练的大模型参数将不再更新。 它学习这种能力并在空闲时间快速适应或识别任务。

其次:它用 100 倍的数据和 10 倍的参数来训练一个大模型来学习。 GPT-3 拥有 1750 亿个参数,并在 3 种条件下进行评估:1)小样本学习,它使用 10 到 100 个数据点来针对特定任务进行调整。 2)一次性学习,仅使用一个数据; 3)零样本学习,不使用额外的数据。

How does GPT-3 work (model framework)?

1. Data

GPT-2 使用来自 Common Crawl (CW) 数据集的 reddit 数据。 在 GPT-3 中,随着模型增加 10 倍,使用了整个 Common Crawl 数据集。 他们还通过比较两组数据集来删除数据的重复项。 由于这些数据的质量较低,作者使用了一个模型来过滤掉低质量的数据。

最终数据包括过滤后的 Common Crawl、WebText2、Books1、Books2 和 Wikipedia。 由于CW数据质量不高,与它的大数据相比,CW的采样权重设置得较低。

2. Model and Approach

GPT-3 使用的模型仍然是 Transformer Decoder,它根据先前的 token 来预测下一个 token。 它类似于 GPT-2 结构,但在 Transformer 层中使用交替的密集和局部带状稀疏注意力模式。

作者解释了他们使用的方法的细节,包括少样本、单样本和零样本,以及他们没有使用的微调,如下图所示。

微调:微调是为每个任务收集数千个数据点来刷新模型中的参数。 它通常在基准数据上具有很强的性能,但每个任务都需要一个新的大型数据集。 GPT-3可以进行微调,可能是未来一个值得推广的方向。 事实上,在 InstructGPT 的后续工作中,作者开始根据人类注释的反馈来调整参数。

Few-shot:模型在推理时会获得任务的少量样本数据,但不会更新预训练模型的权重。 例如,在从英语翻译成法语的推理过程中,首先会给出任务描述,然后给出一些从英语到法语的示例(10到100个)。 然后会给出提示,模型会根据提示中的输入自动生成法语翻译。 这里的优点是只需要有限数量的输入数据。 缺点是few-shot学习的性能通常不如SOTA微调模型。

One-shot:与few-shot设置类似,但任务描述后仅给出一个样本数据。 这与将任务传达给人类的方式很接近。 当要求人们做某事时,通常会给出任务的例子。

零样本:任务描述后没有数据。 从模型使用方面来看,这是最简单的方法。 但这也是模型理解任务最具挑战性的设置,因为没有给出示例。少样本或单样本的一个潜在问题是:当有新的输入数据时,它如何记住或理解先前的输入数据信息? 例如,如果第一次在few-shot中使用10个数据点,如果第二次还有另外15个数据点,那么few-shot学习的设置似乎无法链接前10个和后10个数据点的输入信息。 第二个 15 个数据点。

实验结果部分将被忽略。 一般来说,它讨论了 GPT-3 在 10 多个任务上的性能。

Limitations

讨论了 GPT-3 的一些局限性,并讨论了未来工作的潜在改进。

首先,考虑到大量的参数和训练数据集,训练非常困难且昂贵。 训练模型需要大量的计算资源和时间。

其次,GPT-3 在一些 NLP 任务(例如文本合成)和一些比较任务(例如两个单词在句子中是否以相同的方式使用)方面存在弱点。 GPT-3对于人类的一些常识性物理问题有困难。 例如,GPR-3很难回答“如果我把奶酪放进冰箱,它会融化吗”?

使用单向方法的 GPT-3 可能具有与双向方法相关的结构和算法限制。 正如 GPT-1 中所介绍的,这可能会影响某些任务中的 GPT 性能,例如填空任务、涉及回顾和比较两个内容的任务或需要重新阅读的任务。 当令牌前后的上下文信息已知时,所有这些任务都会变得更容易。 因此扩展GPT模型中的双向功能将是未来研究的一个有前途的方向(向BERT学习?)。

GPT-3 的一个更根本的限制是它是基于文本数据的语言模型,因此预训练的模型不知道其他经验领域。 就像它无法处理视频数据或现实世界的物理交互一样。 一个有前途的方向是纳入人类的学习目标并通过强化学习进行微调(这就是 InstructGPT/ChatGPT 将会做的事情),并添加其他模式,例如图像和视频(这就是 GPT-4 将会做的事情,它将 接受图像或 pdf 文件来描述或总结输入文件)。

4. InstructGPT / ChatGPT

What the problem InstructGPT solve?

GPT3 的局限性:首先,它不记得之前的几次输入。 ChatGPT 可以持续记住您之前与其聊天的内容,并根据该上下文信息继续与您进行多轮聊天。

其次,随着模型变得越来越大,GPT-3的输出有时很难控制。 例如,如果您询问什么是高斯过程,它可能会向您生成一些低质量的文本。 或者有时模型可能会生成一些有害信息,例如偏见、种族主义或性别歧视文本。

第三,语言模型使用自监督方法来预训练大泛化模型。 由于自监督模型中没有标记数据,如果您希望模型回答诸如“什么是高斯过程”之类的问题,训练数据应该包含这些信息,以便模型可以学习它。 因此,为了让模型具有足够的泛化能力,训练数据文本应该足够大。

造成这些意外行为的原因主要是因为语言模型的目标是尝试预测下一个标记(即 GPT-1/2/3 所做的,使用 Transformer 解码器在给定先前标记的情况下预测下一个单词),这是不同的 从目标出发,有效且安全地遵循用户的指示。 为了克服这些限制,InstructGPT 使用标记数据来微调 GPT-3 模型,使语言模型与人类反馈的强化学习 (RLHF) 保持一致,以微调 GPT-3 以遵循人类书面指令并使用人类偏好作为 用于微调模型的奖励信号。

How does InstructGPT work (model setup)?

InstructGPT 包括使用标记数据微调 GPT-3 以训练监督微调(SFT 模型)以生成输出、奖励模型(RM)以比较 SFT 生成的不同答案,以及奖励模型上的强化学习以指导 SFT一代。

步骤 1. 从提示数据集中采样提示,然后人类(或模型)为采样的提示编写答案。 促销和答案准备好后,将发送到带有监督学习(SFT)的 GPT-3 微调。 这里的挑战是让人类准备提示答案的成本很高。 通过这个模型,它可以学习如何根据 SFT 生成答案。

步骤 2. 当给出促销时,它首先使用 GPT-3 为给定的促销生成几个答案。 例如,如果生成 4 个答案,它们将被标记为 A、B、C、D。然后人类只需要对答案进行排名(例如,A>B>C=D)。 这样,人类不需要写出答案,而只需对模型生成的答案进行排名即可。 利用这些比较数据,InstructGPT 训练奖励模型来比较 4 个<提示,答案>对,以便可以在奖励模型(RM)中了解排名关系。 通过这个模型,它可以用来比较生成的答案并计算奖励。

步骤3.现在他们可以使用RM来指导SFT模型产生更好的结果以获得更高的RM奖励。 InstructGPT 使用 RM 的输出作为标量奖励,并微调监督策略以优化该奖励。 训练后的模型称为 InstructGPT。

因此,有3个数据集:1)SFT数据集(13k提示)用于训练SFT模型; 2)RM数据集(33k提示),带有模型输出的标签排名,用于训练RM模型; 3) 没有人工标签的 PPO 数据集(31k 提示)作为 RLHF 微调的输入。

More details about the models

SFT:它是通过在 SFT 数据上微调 GPT-3 来实现的监督模型,其中 eash 数据点是促销,并且由标记者给出答案。 由于只有 13k 数据,模型在 1 个 epoch 后就会过度拟合。 然而,训练更多的 epoch 将有助于 RM 评分模型。

RM:首先,它用线性层替换SFT模型的最后一层(即softmax层)以输出标量奖励。 因此,对于修改后的 SFT 模型的每个输入 <prompt, answer>,它将输出一个标量值(奖励)。 如果一个提示有 K

  答案,两两比较,有 C(K,2)

  组合。 对于两个答案 yw

  和基尔

,如果 yw

  比yl好

,目的是尽可能区分两个答案,因此损失函数是两个奖励的 delta 的 logit 损失 (r(x,yw)−r(x,yl))

。 作者提到他们使用了成对答案比较(其中有 C(K,2)

  数据对)而不是选择最佳答案将有助于避免过度拟合。

ChatGPT 做了什么? ChatGPT 使用与 InstructGPT 相同的方法,但数据收集设置略有不同。 ChatGPT 使用多轮对话数据并根据 GPT-3.5 中的模型进行微调。

5. GPT-4

https://arxiv.org/pdf/2303.08774.pdf  (OpenAI GPT-4 Technical Report)

GPT-4 是一种经过预训练的 Transformer 式模型,用于预测文档中的下一个标记。 GPT-4是一个大型多模型模型,可以接受图像和文本输入提示并输出文本。 它通过 RLHF(参见上文 InstructGPT)进行了微调,以提高模型更广泛的常识和高级推理能力

GPT-4 训练稳定。 由于模型非常大,在训练过程中可能会因为多种原因而失败:损失不收敛、梯度爆炸、机器故障、网络连接中断等硬件问题。 这些都将为模型训练带来大量的工程挑战。

训练表现可以提前预测。 OpenAI 开发了基础设施和优化,这些基础设施和优化在多个尺度上具有非常可预测的行为,这样他们就可以通过从使用相同方法但使用 10−4 训练的模型进行推断来预测非常大的模型 GPT-4 的最终损失

x 减少计算。

能力。 GPT-4 与 GPT-3.5 相比有显着改进。 它在大多数专业和学术考试中表现出了人类水平的表现。 该模型的考试能力似乎主要源于预训练过程,并且不受 RLHF 的显着影响。

操纵性。 GPT-4 允许用户使用“系统”消息来定制范围内的体验。 一般来说,“系统”消息告诉 GPT-4 按照用户的指示在对话期间提供附加信息、说明或上下文。

总体而言,该技术报告没有涉及太多有关模型、训练数据以及 OpenAI 如何训练复杂模型的细节。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从嵌套事务的日志看MyBatis的sqlSession生命周期

service层业务代码 Override public void test(){QueryWrapper<StoreRebateCalculateLog> queryWrapper;queryWrapper new QueryWrapper<>();queryWrapper.eq("delete_flag", 0);//执行查询A,A事务开启List<StoreRebateCalculateLog> storeRebat…

区块链推广海外市场怎么做,CloudNEO服务商免费为您定制个性化营销方案

随着区块链技术的不断发展和应用场景的扩大&#xff0c;区块链项目希望能够进入海外市场并取得成功已成为越来越多公司的目标之一。然而&#xff0c;要在海外市场推广区块链项目&#xff0c;需要采取有效的营销策略和措施。作为您的区块链项目营销服务商&#xff0c;CloudNEO将…

深度学习——SAM(Segment-Anything)代码详解

目录 引言代码目录segment-anything 代码详解build_sam.pypredictor.pyautomatic_mask_generator.py 引言 从去年年初至今&#xff0c;SAM(Segment Anything )已经问世快一年了&#xff0c;SAM凭借其强大而突出的泛化性能在各项任务上取得了优异的表现&#xff0c;广大的研究者…

详解MySql索引

目录 一 、概念 二、使用场景 三、索引使用 四、索引存在问题 五、命中索引问题 六、索引执行原理 一 、概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。暂时可以理解成C语言的指针,文章后面详解 二、使用场景 数据量较大&#xff0c;且…

【图像分割】使用Otsu 算法及迭代计算最佳全局阈值估计并实现图像分割(代码实现与分析)

本实验要求理解全局阈值分割的概念&#xff0c;并实现文本图像分割。需要大家深入理解Ostu 算法的实现过程及其迭代原理&#xff0c;同时通过学习使用Otsu 算法及其迭代&#xff0c;实践图像分割技术在文本图像处理中的应用。 以下将从实验原理、实验实现、实验结果分析三部分对…

老阳视频号带货项目,究竟是一个怎样的选择呢?

近年来&#xff0c;随着网络技术的飞速发展&#xff0c;直播带货已经成为电商行业的新宠。其中&#xff0c;网红老阳以其独特的风格和专业度&#xff0c;成功吸引了大量粉丝的关注&#xff0c;并带动了一波视频号带货的热潮。那么&#xff0c;现在跟随老阳的步伐&#xff0c;投…

sqllab第二十七A关通关笔记

知识点&#xff1a; 双引号闭合union select 大小写绕过 Union Select这里不能进行错误注入&#xff0c;无回显 经过测试发现这是一个双引号闭合 构造payload:id1"%09and%091"1 页面成功回显 构造payload:id0"%09uNion%09SElect%091,2,3%09"1 页面成功…

AI论文速读 | TPLLM:基于预训练语言模型的交通预测框架

论文标题&#xff1a;TPLLM: A Traffic Prediction Framework Based on Pretrained Large Language Models 作者&#xff1a;Yilong Ren&#xff08;任毅龙&#xff09;, Yue Chen, Shuai Liu, Boyue Wang&#xff08;王博岳&#xff09;,Haiyang Yu&#xff08;于海洋&#x…

Mysql 索引、锁与MVCC等相关知识点

文章目录 Mysql锁的类型锁使用MVCC快照读和当前读读视图【Read View】串行化的解决 索引类型存储方式区分逻辑区分实际使用区分索引失效情况 索引建立规范SQL编写规范exlpain字段解析ACID的原理日志引擎慢SQL整合SpringBoot博客记录 Mysql锁的类型 MySQL中有哪些锁&#xff1a…

2024-3-13,14(CSS)

1.复合选择器 有两个或者多个基础选择器&#xff0c;通过不同的方式组合而成。 目的是更加准确高效的选择目标元素&#xff08;标签&#xff09; 分类&#xff1a; 后代选择器&#xff1a;选中某个元素的所有后代元素 写法&#xff1a;父选择器 子选择器 {CSS属性}&#x…

软考高级:软件工程单元测试(驱动模块、被测模块、桩模块)概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

爱奇艺 CTR 场景下的 GPU 推理性能优化

01 背景介绍 GPU 目前大量应用在了爱奇艺深度学习平台上。GPU 拥有成百上千个处理核心&#xff0c;能够并行的执行大量指令&#xff0c;非常适合用来做深度学习相关的计算。在 CV&#xff08;计算机视觉&#xff09;&#xff0c;NLP&#xff08;自然语言处理&#xff09;的模型…

Spring炼气之路(炼气一层)

目录 一、IOC 1.1 控制反转是什么&#xff1f; 1.2 什么是IOC容器&#xff1f; 1.3 IOC容器的作用 1.4 IOC容器存放的是什么&#xff1f; 二、DI 2.1 依赖注入是什么&#xff1f; 2.2 依赖注入的作用 三、IOC案例实现 3.1下载Maven 3.2 配置Maven中的settings.xml文…

考研C语言复习进阶(2)

目录 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 4. 函数指针 5. 函数指针数组 6. 指向函数指针数组的指针 7. 回调函数 8.三步辗转法 9. 指针和数组笔试题解析 10. 指针笔试题 指针的主题&#xff0c;我们在初级阶段的《指…

​​SQLiteC/C++接口详细介绍之sqlite3类(十一)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;​​SQLiteC/C接口详细介绍之sqlite3类&#xff08;十&#xff09; 下一篇&#xff1a;​​SQLiteC/C接口详细介绍之sqlite3类&#xff08;十二&#xff09;&#xff08;未发表&#xff09; 33.sq…

JavaWeb07-会话

目录 一、会话跟踪技术 1.概述 2.实现方式 3.Cookie &#xff08;1&#xff09;基本使用 &#xff08;2&#xff09;原理 &#xff08;3&#xff09;存活时间 &#xff08;4&#xff09;存储中文 4.Session &#xff08;1&#xff09;基本使用 &#xff08;2&#x…

C#,图论与图算法,寻找图(Graph)中的桥(Bridge)算法与源代码

1 图(Graph)中的桥(Bridge) 如果删除无向连通图中的边会断开该图的连接,则该边就是桥。对于断开连接的无向图,定义类似,桥接是一种边移除,它增加了断开连接的组件的数量。 与连接点一样,网桥代表连接网络中的漏洞,对于设计可靠的网络非常有用。例如,在有线计算机网…

哪些视频编辑软件最好用?会声会影怎么样?2024会声会影激活

随着数字化时代的到来&#xff0c;视频编辑软件的需求量也逐渐增加。为了满足用户的需求&#xff0c;市面上涌现了很多的视频编辑软件&#xff0c;让用户不知道该如何选择。今天我们来聊聊哪些视频编辑软件最好用&#xff0c;以及会声会影怎么样&#xff1f; 视频编辑软件的选…

分布式事务基础理论解析

一、概述 1.1 定义 为了解决java 多个节点之间数据一致性问题。产生的核心原因是&#xff1a;资源存储的分布性。比如多个数据库&#xff0c;或者Mysql和Redis的数据一致性等。 1.2 产生场景 跨JVM进程产生分布式事务。即服务A和服务B分别有对应的数据库跨数据库实例产生分…

Qt QTableWidget 实现行选中及行悬浮高亮

表格整行的 selected、hover 高亮需求很常见&#xff0c;但使用 Qt 提供的开箱即用的方法根本无法实现这个需求&#xff08;至少在当前的时间节点是不行的&#xff09;&#xff1b;想要实现这个效果必须要费一点点力气&#xff0c;我们尽量选择较为简单的方法。 话不多说&…