大模型算法二次开发,基本思路详细拆解

news2024/9/20 11:53:53

前言

随着众多大模型相继问世,大模型二次开发、大模型微调成为一项热门技术。本文为大家总结了大模型二次开发的基本方法与思路,希望对大家有所帮助。

转载自丨吃果冻不吐果冻皮

开发方法分类

1、领域知识注入:Continue PreTraining(增量预训练),一般垂直大模型是基于通用大模型进行二次的开发,需要用领域内的语料进行继续预训练。

2、知识召回(激发):SFT( Supervised Finetuning,有监督微调), 通过SFT可以激发大模型理解领域内的各种问题并进行回答的能力。

3、基础偏好对齐:奖励模型(RM)、强化学习(RL),可以让大模型的回答对齐人们的偏好,比如行文的风格。

4、高阶偏好对齐:RLHF(人类反馈强化学习训练)、DPO(直接偏好优化)。

开发阶段分类

模型分成3个阶段:

(1)、第一阶段:(Continue PreTraining)增量预训练,在海量领域文档数据上二次预训练GPT模型,以注入领域知识。

(2)、第二阶段: SFT(Supervised Fine-tuning)有监督微调,构造指令微调数据集,在预训练模型基础上做指令精调,以对齐指令意图。

(3)、第三阶段 : RLHF和DPO二选一。

各个阶段功能介绍

(Continue PreTraining)增量预训练

在大模型整个流程中,增量预训练是属于后期预训练(Post-pretraining)的范畴。Post-pretraining(后期预训练)是一种在模型的初始预训练和最终微调之间进行的训练方法。这种方法通常用于进一步适应模型以处理特定类型的数据或任务。以下是详细介绍,参考了之前对SFT和RLHF的描述方式:

1、后期预训练(Post-pretraining)

  • Post-pretraining是在通用预训练模型的基础上,对模型进行额外训练的过程,通常是为了使模型更好地适应特定的领域或任务。
  • 这个过程使用的数据集通常比预训练阶段的数据集更专注于某个领域或任务,但比微调阶段使用的数据集更大、更广泛。
  • 训练方法可以是监督学习,也可以是自监督学习,具体取决于可用数据的类型和训练目标。
  • Post-pretraining的目标是在不过度专化到某个特定任务的同时,提高模型对特定领域的理解和表现。

2、训练过程

  • 在Post-pretraining阶段,模型通常会在一个包含大量领域特定数据的数据集上进行训练。
  • 这个阶段的训练可以包括多种任务,如语言建模、文本分类、实体识别等,这些任务都是为了提升模型在特定领域的表现。
  • 训练过程中,模型的参数会根据领域特定数据集进行调整,以便更好地捕捉和理解领域内的语言模式和知识。

3、优势与目标

  • Post-pretraining允许模型在保持通用性的同时,增强对特定领域的理解,这有助于模型在后续的微调阶段更快速地适应特定任务。
  • 与 SFT 相比,Post-pretraining在微调之前提供了一个中间步骤,有助于模型更平滑地过渡到特定任务上。
  • 与 RLHF 相比,Post-pretraining不依赖于复杂的奖励机制或人类反馈,而是通过大量的领域特定数据来提升模型性能
  • 总结来说,Post-pretraining是一个介于预训练和微调之间的训练阶段,它使用大量的领域特定数据来进一步调整模型,使其更好地理解特定领域的语言和任务。这个阶段不需要复杂的奖励机制,而是通过传统的监督或自监督学习方法来实现模型性能的提升。

微调 (Fine-tuning)

在这个阶段,预训练模型(可能经过了Post-pretraining)被进一步训练,以优化它在一个特定任务上的表现。

微调通常在一个相对较小的、特定任务的数据集上进行,这个数据集包含了明确的标签,模型通过监督学习来进行优化。

微调的目的是调整模型的参数,使其能够在特定任务上做出准确的预测。

SFT 监督微调

SFT (Supervised Fine-Tuning) 是微调的一种形式,强调在有监督的环境下进行。

在SFT阶段,我们使用特定领域的数据或私有化数据对预训练模型进行改良。这一阶段需要指令微调数据,数据集通常由输入(用户问题)和输出(标准答案)两个字段构成。标准答案通常由专家标注获得。

1、SFT是一种简单的微调方法,它使用带有正确答案的数据集来继续训练一个预训练的模型。

2、这种方法依赖于大量的标注数据,即每个输入都有一个预先定义的正确输出。

3、微调的目的是使模型更好地适应特定的任务或领域【垂直领域】,比如特定类型的语言理解或生成任务。

4、SFT通常不涉及复杂的策略或奖励函数,只是简单地最小化预测输出和真实输出之间的差异。

RLHF 人类反馈强化学习

RLHF是一种利用人类反馈来训练强化学习模型的方法。在RLHF中,模型通过与人类交互获得反馈,这些反馈作为奖励信号来指导模型的行为。RLHF通常用于训练能够生成更自然、更符合人类偏好的文本或其他输出的模型。这种方法特别适用于需要模型理解和适应人类偏好的场景。

1、RLHF (Reinforcement Learning from Human Feedback) 是一种更复杂的训练方法,它结合了监督学习和强化学习。

2、在RLHF中,模型首先通过监督学习进行预训练,然后通过人类提供的反馈来进行强化学习。

3、人类反馈可以是对模型输出的评分,或者是在模型输出之间做出选择的偏好。

4、强化学习部分涉及到定义一个奖励函数,该函数根据人类反馈来调整模型的行为,以优化长期的奖励。

5、RLHF的目标是训练出一个在没有明确标签的复杂任务中表现良好的模型,这些任务可能需要更细致的判断和调整。

模型对齐

  • 对齐阶段目的是进一步优化模型,使其更符合实际应用需求。在这个阶段,我们收集用户反馈数据(如点赞或点踩),并基于这些数据进行模型的进一步训练。
  • 对齐阶段的数据格式与SFT阶段不同:
  • 通常包含对同一问题的接受(accept)和拒绝(reject)两种答案。

问题解决策略及部署

  • 在SFT阶段,模型被训练以识别“想要的答案”,但未明确告知“不想要的答案”。为解决这一问题,我们通过收集用户反馈和日志数据,在对齐阶段告诉模型哪些答案是不可接受的。
  • 经过SFT和对齐阶段的训练,我们可以得到一个优化后的模型,这个模型可以部署上线。在对齐过程中,我们可以使用一些常见的方法,如PPO(Proximal Policy Optimization)和DPO(Distributional Proximal Optimization)。DPO由于训练过程相对简单,已成为对齐阶段的主流算法。
  • 总的来说,SFT更侧重于直接从标注数据中学习,而RLHF则试图通过人类的反馈来引导模型学习更复杂和更细粒度的行为。RLHF通常被认为是一种更接近人类学习方式的方法,因为它不仅仅依赖于标签数据,还依赖于人类对模型输出的评价和偏好。

RLHF与模型对齐区别

总的来说,模型对齐阶段可以视为一个更广泛的概念,而RLHF是一种特定的实现方式,特别是在强化学习领域。两者在实践中可能会有交集,但它们侧重点和应用方式有所不同。

1、联系:

两者都涉及到根据反馈来调整模型的行为,以提高模型的性能和适应性。

2、区别:

技术实现:对齐阶段可能不仅限于强化学习,还可以包括监督学习或其他类型的学习;而RLHF明确使用了强化学习框架。

反馈来源:对齐阶段的反馈可以来自用户的实际使用情况,而RLHF的反馈通常来自与模型交互的人类评估者

目标:对齐阶段的目标是使模型的输出与用户期望对齐,而RLHF的目标是通过人类反馈来优化模型的决策过程。

技术创新与发展

RLHF:

利用人类指导的力量有效地训练人工智能模型。传统的强化学习模型通过与环境交互产生的奖励来学习,而 RLHF 则不同,它引入了人类反馈作为宝贵的指导来源。这种反馈可以帮助人工智能系统导航复杂的决策空间,与人类价值观保持一致,并做出更明智和道德的选择。

DPO:

RLHF 是一个复杂且经常不稳定的过程,那我们是否可以通过直接优化语言模型来实现对其行为的精确控制,而无需使用复杂的强化学习,也可以有效学习到人类偏好呢?

DPO就是通****过利用奖励函数与最优策略之间的映射关系,证明这个受限的奖励最大化问题可以通过单阶段的策略训练来精确优化来达到这个目的的。

它通过直接优化模型以生成首选响应,将问题表述为使用人类偏好对数据集的分类任务,本质上是在人类偏好数据上解决一个分类问题。DPO是稳定的、性能和计算成本轻量级的,无需拟合奖励模型,在微调期间从 LM 中采样,或执行显着的超参数调整。

图片

DPO是一种单阶段算法,可直接优化 LLM以生成首选响应。具体的实现手段是通过增加偏好样本的对数概率与减小非偏好样本响应的对数概率。DPO 最大化生成首选完成的概率并最小化生成非首选完成的概率。它不涉及多轮训练。

增量预训练(Continue Pretraining)

增量预训练也叫领域自适应预训练(domain-adapter pretraining),即在所属领域数据上继续预训练。

自适应预训练(domain-adapter pretraining)的方法可以分为三类:Prompt-based方法、representation-based方法和model mixed-based方法。

1、Prompt-based 方法

在使用模型全局tuning的方式适应下游任务时,预训练模型的泛化性能会被严重削弱,因此Prompt-based方法在保持预训练模型参数权重不变的条件下, 增加额外可学习的Prompt tuning 模块来实现对下游任务的泛化,这样就能较好地保持原模型的泛化性能。

在使用模型全局tuning的方式适应下游任务时,预训练模型的泛化性能会被严重削弱,因此Prompt-based方法在保持预训练模型参数权重不变的条件下, 增加额外可学习的Prompt tuning 模块来实现对下游任务的泛化,这样就能较好地保持原模型的泛化性能。

图片

VPT这种方式虽然可以较好地保留模型的泛化性,但是,在面对新的任务时,以往的Prompt模块的知识同样被覆盖,依旧遭遇了灾难性遗忘问题。为此,有学者提出了Prompt Pool的概念,设计了Prompt模块的集合,即P={P1,P2,…,Pm}(m表示该Pool的最大尺寸)。Prompt Pool的思想有效避免了单一Prompt的问题,但是Pool的设计使得其需要进行Prompt Selection操作,也就是需要将特定任务与其对应的Prompt模块进行索引匹配。

L2P算法是一种较为常用的Prompt selection算法,该算法设计了一种Key-Query的Prompt匹配方法,也就是为每一个Prompt提供一个可学习的索引键k,即P={(k1,P1),(k2,P2),…,(km,Pm)。L2P利用预训练模型将输入特征编码到Key对应的嵌入空间中,然后利用余弦距离损失函数在已有的Pool中搜索最近似的Key。接着,利用如交叉熵损失等方法对搜索到的Key对应的Prompt进行进行优化。

图片

类似的Prompt Selection 算法很多,如DualPrompt算法,该算法将Prompt进行解耦,分化为General Prompt和Expert Prompt。General Prompt面向所有任务,为所有任务中共享信息,而Expert Prompt针对独立任务,数量与任务量一致。其采用了和L2P相同的key-query匹配策略。

图片

Prompt Selection虽然可行,但仍是硬匹配,选项有限。基于注意力信息加权的Prompt Combination方法则有效缓解了该问题。如CODA-Prompt通过对Prompt Pool进行注意力机制嵌入,为每个注意力赋予自适应权重,进而求算全局Key-Query的加权和,实现可学习式Prompt组合。我觉得稀疏式注意力Prompt combination应该也是很有趣的研究。

图片

从根本上来说Prompt Combination仍受制于Prompt Pool的范围。为此, 许多学者则开展Prompt Generation有关的研究,如DAP,其利用MLP进行特定任务提示信息的编码生成。

图片

优点:

Prompt 有助于弥合domain gap,并可有效地对特定任务的知识进行编码。

Prompt Design 属于lightweight模块,与input feature具有相同的维度,因此保存Prompt是parameter-efficient,适用于边缘场景。

Prompt Pool作为预训练模型的外部存储器,其支持自适应知识的检索和特定实例的预测。

缺点:

一些研究]发现L2P中的prompt selection过程收敛到一个单点,使得prompt selection只集中在特定子集上。

由于key和query在整个学习过程中不断变化,这些参数的更新将会消除先前任务的参数,导致matchimg-level和prompt-level的遗忘,使prompt selection成为CL的瓶颈。

固定大小的Prompt Pool会使得模型的表示能力受限。但是,若Prompt Pool随着数据的发展而增长,可能会为旧任务检索新的提示,导致训练和测试之间的不匹配。

最后,一些研究发现prompt-based CL的性能低于简单的representation-based的baseline性能。并且批量提示有损比较的公平性。

2. Representation-based 方法

representation-based方法直接利用预训练模型强大的泛化性和通用性来实现持续学习。比如Simple-CIL方法,该算法是ADAM算法原文中提出的Baseline,Simple-CIL冻结预训练模型参数,并通过求算类别中心的方式来构建Classifier。具体来说,在面对很多类别时,计算同类的embedding或features的平均值,并将该平均值作为该类别的标准(prototype),最后结合类别标准与余弦比较的方法替换模型的原始Classifier。

虽然基于prototype的方法存在一定的作用,但是并未很好地适应下游任务。为此,一些研究在基于prototype方法的基础上结合了外置参数高效调节模块或者外置适配器来使得预训练模型更加适应下游任务,如ADAM等。

图片

ADAM等算法在进行类别标准设定时,类别标准之间的仍存在联系,导致任务效果降低。为此,RanPAC算法则采用online LDA classifier来去除原始方法prototype计算结果之间的相关性,加大类别间的分布差异。此外,RanPAC算法利用Random Projection layer将features映射到高维空间中,并在高维空间中进行prototype的计算,以使得特征分布符合高斯拟合。

图片

相较于前面将预训练模型的通用语和适应性分离处理的方式,SLCA算法采用了差异学习率调整和特征经验重播的方式进行持续学习研究。该算法使用较小的learn rate调整模型主体部分,而使用较大的learn rate 调节模型的classifier,以实现模型的逐步微调和classifier的快速适应。为了避免忘记以前的分类器,SLCA还对分类特征分布进行建模,并重播它们以校准classifier。

图片

优点:

由于class prototype代表了对应类别最常见的标准格式,因此利用其构建模型具有直观和可解释性。

Representation-based 方法主要是冻结backbone和更新classifier权重。lightweight的更新成本增加了其现实应用的可行性。

缺点:

将不同模型的特征连接起来形成class prototype,容易造成模型信息冗余。例如,不同的backbone中存在重复提取共享特征。

当下游任务涉及多个领域时,在第一阶段调整模型不足以弥合数据集之间的领域差距。在这种情况下,不断调整backbone可能更适合提取特定于任务的特征。

3. Model Mixture-based 方法

Model Mixture-based 方法在持续学习工程中构建了一组模型,然后再推理阶段通过Model Ensemble和Model Merge来进行信息综合决策。

Model Ensemble中,ESN算法凭借预训练模型强大的通用性,构建多个classifier,在面对新任务重新初始化和训练一个新的classifier。在推理时,采用投票策略来整合多个模型的结果进行最终决策。

由于Model Ensemble的核心因素取决于模型的方差,一些研究通过增强模型之间的多样性来替代使用相同的预训练模型构建不同的classifier。如PromptFusion利用预训练的ViT和CLIP,并在推理过程中动态地对logit进行组合,即f(x) = λ fvit (x) +(1−λ)fclip(x)。

图片

与多个backbone的集成不同,PROOF采用了仅使用单个CLIP的更全面的推理方法。由于CLIP支持视觉和文本特征的跨模态匹配,因此PROOF设计了一个三层集成,考虑image-to-text、image-to-image prototype、image-to-adjusted text的跨模态融合。

图片

Model Merge将多个不同的模型合并为一个统一的模型,无需要额外的训练。LAE定义了online和offline学习协议,online模型通过交叉熵损失进行更新,目的是在新的任务中获取新的知识。离线模型则通过Model Merge进行更新,例如指数移动平均(EMA): θ offline←α·θ offline +(1−α)·θ Online,其中α为权衡参数。LAE仅将EMA应用于参数高效调谐模块(如prompt),其利用online和offline模型的最大logit进行推断。

图片

与LAE一样,ZSCL将合并技术应用于CLIP模型,目的是在持续学习过程中保持其zero-shot性能。然而,随着EMA中权衡参数的改变,CLIP性能不再具有鲁棒性。因此,ZSCL建议每隔几次迭代合并参数,从而在模型训练期间创建平滑的损失轨迹。

图片

此外,CoFiMA注意到EMA在Merge过程中对每个参数的重要性是相等的,CoFiMA 在Merge过程中插入Fisher information(费雪信息)作为每个参数的估计重要性。

图片

优点:

\1. 学习多个模型可以做出不同的决策。因此,使用Model Ensemble和Model Merge自然会产生更健壮的结果。

2.由于直接合并模型进行统一预测,因此可以调整前模型和后模型的权重,以突出不同阶段之间知识共享的重要性。

3.由于模型集将在推理过程中合并,因此最终的推理成本不会随着模型集中添加更多模型而增加。

缺点:

1.Model Ensemble需要保存所有的历史模型,并消耗大量的内存缓冲区。虽然基于Model Merge不需要这么大的成本,但合并大型backbone的权重也需要大量的额外计算。

2.决定Merge哪些参数仍然是问题。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

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

相关文章

LeetCode_sql_day28(1767.寻找没有被执行的任务对)

描述:1767.寻找没有被执行的任务对 表:Tasks ------------------------- | Column Name | Type | ------------------------- | task_id | int | | subtasks_count | int | ------------------------- task_id 具有唯一值的列。 ta…

简单题88. 合并两个有序数组 (Python)20240920

问题描述: python: class Solution(object):def merge(self, nums1, m, nums2, n):""":type nums1: List[int]:type m: int:type nums2: List[int]:type n: int:rtype: None Do not return anything, modify nums1 in-place instead.&qu…

GSAP动画库:让网页动起来的艺术

GSAP动画库:让网页动起来的艺术 前言 在现代网页设计中,动画效果不仅能够提升用户体验,还能增强视觉吸引力。 GSAP(GreenSock Animation Platform)是业界领先的动画库,它提供了强大的工具和功能&#xff…

Vue3快熟

Vue3快速上手 1. Vue3简介1.1. 【性能的提升】1.2.【 源码的升级】1.3. 【拥抱TypeScript】1.4. 【新的特性】 2. 创建Vue3工程2.1. 【基于 vue-cli 创建】2.2. 【基于 vite 创建】(推荐)2.3. 【一个简单的效果】 3. Vue3核心语法3.1. 【OptionsAPI 与 CompositionAPI】Options…

医学数据分析实训 项目十 基于深度残差神经网络的皮肤癌检测

文章目录 综合实践三 基于深度残差神经网络的皮肤癌检测实现步骤1:图像数据预处理实现步骤2:模型构建实现步骤3:性能度量提交要求 1 基于深度残差神经网络的皮肤癌检测代码2 结果分析 综合实践三 基于深度残差神经网络的皮肤癌检测 皮肤镜图…

Games101学习 - 着色

本文主要讲述Games101中的着色部分。 文中将使用UE的UTexture2D接口,若不了解可以看这篇: https://blog.csdn.net/grayrail/article/details/142165442 1.面积比计算三角形坐标 通过三角形面积比可以得到三角形的坐标alpha、beta、gamma从而进行插值&a…

MATLAB画图,曲线图如何绘制美观,曲线图10种美化方法

曲线图是比较常用的图形,本文以二维曲线图为例,展示曲线的图的不同美化方法,如图1所示,是一个标准的曲线图,横坐标为x,纵坐标为y, 图1 标准曲线图 调整方法1 首先可以通过改变线的颜色,不同…

react + antDesign封装图片预览组件(支持多张图片)

需求场景:最近在开发后台系统时经常遇到图片预览问题,如果一个一个的引用antDesign的图片预览组件就有点繁琐了,于是在antDesign图片预览组件的基础上二次封装了一下,避免重复无用代码的出现 效果 公共预览组件代码 import React…

Python安装不再难!全平台保姆级教程带你轻松搞定!

Python介绍 Python是一种功能强大且灵活的编程语言,被广泛应用于各个领域。以下是Python在不同应用领域的一些常见用途: 网络开发 Python提供了丰富的库和框架,使其成为网络开发的理想选择。诸如Django、Flask和Pyramid等框架可以帮助开发人员…

从 HDFS 迁移到 MinIO 企业对象存储

云原生、面向 Kubernetes 、基于微服务的架构推动了对 MinIO 等网络存储的需求。在云原生环境中,对象存储的优势很多 - 它允许独立于存储硬件对计算硬件进行弹性扩展。它使应用程序无状态,因为状态是通过网络存储的,并且通过降低操作复杂性&a…

Vue使用组件需要加前缀而React使用组件库的区别

Vue 写在模版中的内容最终会被render&#xff0c;render时会区分标签与组件。 通过-短横线命名法 或 大驼峰命名法使用组件 <a-button><a-button/> <MyComponent></MyComponent>但是-短横线命名法容易引起歧义&#xff0c;比如组件名是一个单词(无法…

learn C++ NO.17——继承

什么是继承&#xff1f; 用冒号 : 后跟基类名称来声明一个类是从某个基类继承而来的。继承方式可以是 public、protected 或 private&#xff0c;这决定了基类成员在子类中的访问权限。 下面通过代码简单进行一下演示. 派生类Student即子类&#xff0c;而基类Person是它的父…

浏览器恢复历史记录应该怎么操作?简单几步轻松搞定

浏览器的历史记录是用户上网过程中产生的所有浏览活动的记录。这些历史记录对于查找之前访问过的网站、恢复误关闭的页面&#xff0c;以及跟踪浏览活动有很大的帮助。当然有时候我们可能会不小心将浏览器历史记录给删除了&#xff0c;那浏览器清除的历史记录可以恢复吗&#xf…

Linux 信号的产生

1. 概念 在Linux系统中&#xff0c;信号是一种进程间通信的机制&#xff0c;它允许操作系统或其他进程向特定进程发送异步通知。我们可以通过命令 kill -l来查看信号的种类&#xff1a; Linux系统中的信号可以分为两大类&#xff1a;传统信号和实时信号。从上图可以看出它们分…

代码随想录算法训练营第40天 动态规划part07| 题目: 198.打家劫舍 、 213.打家劫舍II 、 337.打家劫舍III

代码随想录算法训练营第40天 动态规划part07| 题目&#xff1a; 198.打家劫舍 、 213.打家劫舍II 、37.打家劫舍III 文章来源&#xff1a;代码随想录 题目名称&#xff1a;198.打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff…

【随手笔记】485

1. 基础知识 2线&#xff0c;半双工&#xff0c;多点通信 电压差传递信号 逻辑 1&#xff1a; 两线间电压差为 2V ~ 6V 逻辑0 &#xff1a; 两线间电压差为-2V ~ -6V 10米最高速率达 35Mbps 1200米 速率达100Kbps 抗共模干扰能力强 一般支持32个节点 推荐使用点对点线型 总线…

IDEA开发HelloWorld程序

IDEA管理Java程序的结构 project&#xff08;项目、工程&#xff09;---project中可以创建多个modulemodule&#xff08;模块&#xff09;---module中可以创建多个packagepackage&#xff08;包&#xff09;---package中可以创建多个classclass&#xff08;类&#xff09;---c…

木牛科技PMO总监关沨受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 北京木牛领航科技有限公司PMO总监关沨女士受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾&#xff0c;演讲议题为“如何培养能打胜仗的项目经理”。大会将于10月26-27日在北京举办&#xff0c;主题为&a…

图神经网络在推荐系统中的应用综述

1 研究计划 了解推荐系统的研究背景和发展历程了解为什么推荐系统需要GNN了解基于GNN的推荐的关键挑战了解基于GNN的推荐的现有方法 2 完成情况 2.1推荐系统的研究背景和发展历程 随着各种服务和平台(如电子商务、短视频等)上信息的快速爆炸&#xff0c;推荐系统在缓解信息…

UWA支持鸿蒙HarmonyOS NEXT

华为在开发者大会上&#xff0c;宣布了鸿蒙HarmonyOS NEXT将仅支持鸿蒙内核和鸿蒙系统的应用&#xff0c;不再兼容安卓应用&#xff0c;这意味着它将构建一个全新且完全独立的生态系统。 为此&#xff0c;UWA也将在最新版的UWA SDK v2.5.0中支持鸿蒙HarmonyOS NEXT&#xff0c…