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

news2024/12/23 7:46:37

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 如何训练复杂模型的细节。

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

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

相关文章

[ Linux ] vim的使用(附:命令模式的常见命令列表)

1.下载安装 这里是在通过yum进行下载安装 yum install -y vim 2.了解 vim是一款编辑器&#xff0c;它具有多模式的特点 主要有&#xff1a;插入模式&#xff0c;命令模式&#xff0c;底行模式 3.使用 打开 vim 文件名 命令模式的常见命令列表 插入模式 按「 i 」切换…

MQ组件之RabbitMQ学习

MQ组件之RabbitMQ入门 同步调用和异步调用 在微服务架构中&#xff0c;服务之间的调用有同步调用和异步调用两种方式。 我们使用OpenFeign去调用是同步调用&#xff0c;同步调用的缺点很明显&#xff0c;在下图的场景中&#xff0c;支付完成后需要调用订单服务、仓库服务、短…

echarts实践总结(常用二):折线图(特点:渐变、面积区域)

目录 第一章 echarts基本使用 第二章 echarts实践——折线图 效果展示 第一章 echarts基本使用 Echarts常用配置项(详细入门)_echarts配置项手册-CSDN博客 柱状图案例&#xff1a; echarts实践总结(常用一)&#xff1a;柱状图&#xff08;特点&#xff1a;渐变色、点击缩放、…

JavaScript Object对象

创建object类型对象的三种方式 ES中object类型的对象大致由三种创建方式&#xff1a; 直接使用花括号创建使用function创建使用Object.create方法创建。 直接使用花括号创建 代码示例&#xff1a; var obj {v: 6,innerObj: {v: 7,},logV: function() {console.log(this.v…

C#求水仙花数

目录 1.何谓水仙花数 2.求三位数的水仙花数 3.在遍历中使用Math.DivRem方法再求水仙花数 1.何谓水仙花数 水仙花数&#xff08;Narcissistic number&#xff09;是指一个 n 位正整数&#xff0c;它的每个位上的数字的 n 次幂之和等于它本身。例如&#xff0c;153 是一个 3 …

慢sql优化

1.避免使用select *&#xff0c;而是明确列出需要的列&#xff0c; 2.小表驱动大表&#xff0c;in适用于左边大表&#xff0c;右边小表。 exists适用于左边小表&#xff0c;右边大表。 3.批量操作&#xff1a;如果每次插入数据库数据&#xff0c;都要连接一次数据库&#xf…

【LeetCode每日一题】2684. 矩阵中移动的最大次数

文章目录 [2684. 矩阵中移动的最大次数](https://leetcode.cn/problems/maximum-number-of-moves-in-a-grid/)思虑&#xff1a;代码&#xff1a; 2684. 矩阵中移动的最大次数 思虑&#xff1a; 1.将第一列的所有行坐标&#xff0c;用IntStream 来生成一个范围 [0, m) 内的整数…

一命通关递归

递归 简介 递归是我们在学C语言的时候&#xff0c;就已经接触到了的一个概念&#xff0c;相信大家的递归都是从这里开始的&#xff1a; 但是&#xff0c;在老师念ppt的时候&#xff0c;伴随着一些前轱辘不转后轱辘转的语言&#xff0c;我们往往都没有太去了解递归的工作原理和…

【C语言】字符函数与字符串函数以及内存函数 { 超详细攻略,一篇学会 }

今日分享&#xff1a;字符、字符串函数和内存函数 内存函数就是对内存进行操作的函数 字符串函数就是对字符串进行操作的函数 字符函数就是对字符进行操作的函数 str前缀的函数是字符串函数&#xff0c;头文件string.h mem前缀的函数是内存函数&#xff0c;头文件stdlib.h 字符…

【pynput】监控是否打开百度贴吧网页

文章目录 简介Demo 简介 有网友提过一个要求&#xff0c;用 Python 实现一个 电脑打开某网站就自动关机的功能。 想到的思路有两个&#xff1a; 【windows 平台】, 获取活动的窗口标题&#xff0c;如果标题里包含了某些网站名称, 那就使用关机命令 可以定时拉取标题, 也可以使…

代码算法训练营day9 | 28. 实现 strStr() 、459.重复的子字符串

day9&#xff1a; 28. 实现 strStr()KMP的主要应用&#xff1a;什么是前缀表&#xff1a;前缀表是如何记录的&#xff1a; 如何计算前缀表&#xff1a;构造next数组&#xff1a;1、初始化2、处理前后缀不相同的情况3、处理前后缀相同的情况 代码&#xff1a; 459.重复的子字符串…

P1303 A*B Problem(高精度乘法)

题目描述&#xff1a; 图解&#xff1a; 此图来源于ACwing一位大佬的题解 AC代码&#xff1a; #include<iostream> #include<vector>using namespace std;vector<int> mul(vector<int> &A,vector<int> &B) {vector<int> C(A.…

C#创建第一个PIESDK模版的项目

目录 环境配置创建项目方式 环境配置 1软件安装 通过安装光盘或者U盘等介质读取PIE软件的安装程序和使用文档。程序安装过程比较简单&#xff0c;软件本身不借助与任何第三方程序&#xff0c;直接双击安装程序【PIESDK.Net_V6.3_Windows_X64.exe】安装文件&#xff0c;即可安装…

Java Swing游戏开发学习12

内容来自RyiSnow视频讲解 这一节讲的是实现游戏中的NPC(Non Player Character)非玩家角色。 添加了一个老人NPC&#xff0c;一个简单的AI&#xff08;人工智能&#xff09;拄着拐杖四处走。老人与树木、玩家的碰撞检测。 NPC四处走动 实现NPC四处走动 一开始&#xff0c;每一…

掌握Go语言:深入encoding/gob包的高效数据序列化

掌握Go语言&#xff1a;深入encoding/gob包的高效数据序列化 引言理解Gob和它的使用场景Gob的概念和设计目标Gob的适用场景和优势 开始使用Gob基本的Gob编码和解码示例代码编码&#xff08;序列化&#xff09;解码&#xff08;反序列化&#xff09; Gob编码高级应用自定义类型的…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Tabs)

通过页签进行内容视图切换的容器组件&#xff0c;每个页签对应一个内容视图。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件从API Version 11开始默认支持安全区避让特性(默认值为&#x…

炸裂!全球首个AI程序员!

近年来&#xff0c;人工智能&#xff08;AI&#xff09;在多个领域取得了显著进展&#xff0c;不断拓展其能力边界。一个引人注目的突破是全球首个AI程序员——Devin的诞生。 这一创新不仅展示了AI技术的快速进步&#xff0c;而且对软件开发领域和未来的工作场景产生了深远的影…

【重新定义matlab强大系列十八】Matlab深度学习长短期记忆 (LSTM) 网络生成文本

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

嵌入式开发基础总结

学习目标 1.了解嵌入式开发 2.开发环境的搭建 3.Linux操作系统的基本操作 一、了解嵌入式开发 以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软硬件可裁剪&#xff0c;适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 1.嵌入式可以干…

【C++算法模板】预处理算法:一维前缀和、二维前缀和总结,详解带例题

文章目录 0&#xff09;概述1&#xff09;一维前缀和2&#xff09;二维前缀和 0&#xff09;概述 因为前缀和这个板子的推导比较简单&#xff0c;因此本博客重点在于知识点归纳而不在于证明 1&#xff09;一维前缀和 一维数组的前缀和计算公式&#xff1a; s [ i ] ∑ i 1…