当前位置: 首页 > news >正文

datawhale组队学习-大语言模型-task5:主流模型架构及新型架构

目录

5.3  主流架构

5.3.1  编码器-解码器架构

5.3.2  因果解码器架构

5.3.3  前缀解码器架构

5.4   长上下文模型

5.4.1  扩展位置编码

5.4.2  调整上下文窗口

5.4.3  长文本数据

5.5   新型模型架构

5.5.1  参数化状态空间模型

5.5.2  状态空间模型变种


5.3  主流架构

在预训练语言模型时代,自然语言处理领域广泛采用了预训练 + 微调的范式, 并诞生了以 BERT 为代表的编码器(Encoder-only)架构、以 GPT 为代表的解码 器(Decoder-only)架构和以 T5 为代表的编码器-解码器(Encoder-decoder)架构的 大规模预训练语言模型。随着 GPT 系列模型的成功发展,当前自然语言处理领域 走向了生成式大语言模型的道路,解码器架构已经成为了目前大语言模型的主流架构。进一步,解码器架构还可以细分为两个变种架构,包括因果解码器(Causal Decoder)架构和前缀解码器(Prefix Decoder)架构。学术界所提到解码器架构时,通常指的都是因果解码器架构。图 5.6 针对这三种架构进行了对 比。

 因果解码器                               前缀解码器                                编码器-解码器

5.6 三种主流架构的注意力模式比较示意图(蓝色、绿色、黄色和灰色的圆角矩形分别表示前缀词元之间的注意力、前缀词元和目标词元之间的注意力、目标词元之间的注意力以及掩码注意力)

5.3.2  因果解码器架构

当前,绝大部分主流的大语言模型采用了因果解码器架构。因果解码器采用 了 Transformer 中的解码器组件,同时做出了几点重要改动。首先,因果解码器没 有显式地区分输入和输出部分。如图 5.6 所示,该架构采用了单向的掩码注意力机 制,使得每个输入的词元只关注序列中位于它前面的词元和它本身,进而自回归 地预测输出的词元。此外,由于不含有编码器部分,因果解码器删除了关注编码 器表示的交叉注意力模块。经过自注意力模块后的词元表示将直接送入到前馈神 经网络中。在因果解码器架构中,最具有代表性的模型就是 OpenAI 推出的 GPT 系列。其中,GPT-3 将模型参数拓展到了 100B 级别,并展现出了强大的零样本和 少样本学习能力。伴随着 GPT-3 的成功,因果解码器被广泛采用于各种大语言模 型中,包括 BLOOM、LLaMA 和 Mistral 等。

5.3.3  前缀解码器架构

前缀解码器架构也被称为非因果解码器架构,对于因果解码器的掩码机制进 行了修改。该架构和因果解码器一样,仅仅使用了解码器组件。与之不同的是,该 架构参考了编码器-解码器的设计,对于输入和输出部分进行了特定处理。如图 5.6 所示,前缀解码器对于输入(前缀)部分使用双向注意力进行编码,而对于输出 部分利用单向的掩码注意力利用该词元本身和前面的词元进行自回归地预测。与 编码器-解码器不同的是,前缀解码器在编码和解码过程中是共享参数的,并没有 划分为独立的解码器和编码器。对于前缀解码器,也可以由现有的因果解码器继 续预训练转换而来,进而加速该模型的训练。

5.4   长上下文模型

        在实际应用中,大语言模型对于长文本数据的处理需求日益凸显,尤其在长 文档分析、多轮对话、故事创作等场景下。在这些情况下,模型需要处理的文本的 长度常常超出预定义上下文窗口大小。例如,LLaMA-2 的上下文窗口限制为 4,096个词元。为了支持长文本处理,多家机构均已推出面向具有超长上下文窗口的大 语言模型或 API。例如,OpenAI 发布了支持 128K 上下文窗口的 GPT-4 Turbo,而 Anthropic 则推出了具有 200K 上下文窗口的 Claude-2.1。

        给定一个预训练后的大语言模型,如何有效拓展其上下文窗口以应对更长的 文本数据成为当前学术界的研究焦点。目前,增强大语言模型长文本建模能力的 研究主要集中在两个方向:一是扩展位置编码,二是调整上下文窗口。除了探讨拓展上下文窗口的方法外,本部分将在最后探讨训练长上下文模型所需的长文本数据。

5.4.1  扩展位置编码

        在基于 Transformer 架构的大语言模型中,模型的上下文建模能力通常受到训练集中文本数据长度分布的限制。一旦超出这个分布范围,模型的位置编码往往无法得到充分训练,从而导致模型处理长文本的性能下降。因此,当大语言模型面临超出其最大训练长度的任务时,需要对于位置编码进行扩展,以适应更长的绝对或相对位置。

        实际上,某些特定的位置编码在超出原始上下文窗口的文本上,也能够表现 出较好的建模能力,这种能力通常被称为外推(Extrapolation)能力。在已有的基于相对位置的位置编码方法中,T5 偏置、ALiBi以及xPos等方法 都展现出了不同程度的外推能力。

        然而,目前比较主流的位置编码方法 RoPE在未经特殊修改的情况下并不具备良好的外推能力。具体来说,在处理更长的文本时,RoPE在每个子空间上需要处理更大的旋转角度,而这些旋转角度可能会超过其训练中的角度分布范围。因此,很多研究工作在RoPE的基础上进行了重要改进,旨在提升其在不经过训练或继续训练的情况下对于长文本的建模能力。

直接微调

        为了使大语言模型适应更长的上下文长度,一种直接的策略是使用相应的长文本数据对于模型进行微调。在这种情况下,模型可以直接根据相对位置计算出 对应的位置编码,而无需对 RoPE 本身进行任何修改。

        在模型进行微调前,这些超出原始窗口的位置对应的注意力值会远大于窗口内的值。因此,如果不修改RoPE 而直接在长文本数据上进行微调,通常会导致收敛缓慢,并需要大量数据进行继续预训练。

位置索引修改

       鉴于直接微调可能引发旋转角度增大和注意力值爆炸的问题,有必要对旋转 角度施加限制,以确保拓展后的上下文窗口中的旋转角度得到充分且有效的训练。为实现这一目标,可以通过修改位置索引来调整所有子空间的旋转角度,从而保证其不超过原始上下文窗口所允许的最大值。具体来说,位置索引的修改可采用以下两种方法:

  • • 位置内插. 位置内插方法对于位置索引进行特定比例的缩放,以保证旋转角度不会超过原始上下文窗口的最大值。具体来说,该策略将所有位置索引上下文窗口和拓展后的上下文窗口的长度。通常来说,使用位置内插方法进行微调的训练代价较小。例如,只需要一千步左右的训练就可以将 LLaMA (33B) 的模型的上下文窗口长度从 2,048 拓展到 8,192 个词元。然而在处理较短的文本时,由于位置索引的缩放,可能会对模型的性能产生一定的负面影响。
  • • 位置截断不同于位置内插,位置截断针对不同距离采用了不同的处理方式。该方法依据语言建模的局部性原理,对模型中近距离敏感的位置索引进行保留,同时截断或插值处理远距离的位置索引,确保其不超出预设的最大旋转角度。采用位置截断的ReRoPE和LeakyReRoPE方法首先设定一个不大于原始上下文窗口长度的窗口大小。在此窗口范围内的部分,仍使用原始相对位置索引;对于超出此窗口的部分,位置索引则会被截断至窗口大小,或通过线性插值方式,将目标上下文窗口长度的位置索引映射回原始上下文窗口长度。上述位置截断方法可通过以下通过这种方法对RoPE进行修改后,模型能够直接应用于更长的上下文而无需重新训练,并且依然保持对短文本的建模能力。然而,这种方法需要对注意力矩阵进行二次计算,进而增加了额外的计算开销。

基修改

 RoPE:每个子空间都有一个对应的波长,表示在该子空间上旋转一周所需要的距离。然而,某些子空间的波长可能会超过上下文窗口的长度,导致模型在这些子空间上无法对完整的旋转周期进 行训练。这些子空间通常被称为关键子空间。在面临更长的文本时,RoPE 关键子空间的旋转角度对应的正余弦函数值并没有在训练阶段出现过,这就容易导致注意力值出现异常。因此,如果想要调整这些子空间的旋转角度分布,另一种方法是针对这些子空间的基进行缩放。对基的修改可以通过对基的底数修改以及对基的截断实现。

  • • 底数调整.  通过调整底数可以改变旋转的角度。具体来说,按照一定比例增大底数可以对基进行缩小,从而缩小旋转的角度,使得模型在不经过额外训练的情况下能够处理更长的上下文窗口。其中,是一个大于等于放缩比例的数,通过对底数进行增大,实现缩小基来处理更长文本的能力。在实践中,不同方法通常会采用不同的值。例如,NTK-RoPE基于目标上下文窗口,将设置为;而 Dynamic-NTK-RoPE 则根据输入文本长度动态地将窗口大小进行调整 。如果要进一步提升模型的长文本建模能力,还可以在长文本数据上进行微调。此时,使用较大的底数通常能够获得更好的性能。
  • • 基截断. 与底数调整相似,基截断方法通过修改关键子空间来避免产生过大的旋转角度。这种方法首先设定两个阈值和。根据每个子空间上的基与这两个阈值的比较结果,可以选择相应的调整策略来对基进行调整:当时,基的值会被保持不变;当 时,基会被设置为零;当时,基会被截断为一个较小的固定数值。通过上述的基截断操作,可以有效地防止在位置索引较大时出现超出预期分布的旋转角度,从而有助于实现更好的模型外推性能。然而,这种方法在一定程度上削弱了某些子空间对不同位置索引的区分能力,进而可能对模型的性能产生不利影响。

5.4.2  调整上下文窗口

为了解决Transformer架构对于上下文窗口的限制,除了使用扩展位置编码来拓宽上下文窗口外,另一种行之有效的策略是采用受限的注意力机制来调整原始的上下文窗口,从而实现对更长文本的有效建模。下面将详细介绍三种调整上下文窗口的方法。

并行上下文窗口

并行上下文窗口方法采用了一种分而治之的策略来处理输入文本。具体来说,该方法将输入文本划分为若干个片段,每个片段都进行独立的编码处理, 并共享相同的位置编码信息。在生成阶段,通过调整注意力掩码,使得后续生成的词元能够访问到前序的所有词元。然而,该方法无法有效地区分不同段落之间 的顺序关系,在某些特定任务上可能会限制模型的表现能力。

Λ 形上下文窗口

(a) 并行上下文窗口        (b) Λ形上下文窗口            (c) 词元选择

5.7 三种调整上下文窗口方法的示意图(白色表示被掩盖的词元,蓝色表示进行注意力计算的词元,块上面的数字表示位置编码的相对位置)

在处理长文本时,大语言模型有时会表现出一种不均匀关注的现象:它们 倾向于对序列起始位置以及邻近的词元赋予更高的注意力权重。基于这一观察, StreamingLLM等工作引入了 “Λ 形” 注意力掩码方法,能够有选择性地关注 每个查询的邻近词元以及序列起始的词元,同时忽略超出这一范围的其他词元。在 给定的有限内存资源下,这种方法能够生成几乎无限长的流畅文本。然而,由于无法有效利用被忽略的词元信息,这种方法无法充分利用所有的上下文信息。

词元选择

在Transformer的注意力模块中,对于每个词元的预测,并非所有先前词元都提供等量的贡献。实际上,小部分紧密相关词元的注意力分数总和就能够接近所 有词元的注意力分数总和。基于这样的一个实践观察,相关研究工作提出了词元选择方法,旨在挑选出最重要的k个词元,以实现对于完整注意力的有效拟合。词元选择方法可以通过查询与词元相似度和查询与词元所在分块的相似度实现。

• 查询与词元相似度. 在此类方法中,根据位置索引和上下文窗口,词元被划 分为窗口内的近距离词元和窗口外的远距离词元。对于窗口外的远距离词元,通常利用外部存储保存它们的键值对,并采用k近邻搜索方法来获取当前生成所需的T_{max}个最相关词元。具体来说,在Transformer模型中,可以首先选定若干层,针对这些层从外部存储中检索到最相关词元的键值对,进一步将其送入注 意力计算模块中,为模型补充远程语义信息;而在其他层中,模型仍然针对上下 文窗口内的词元进行注意力计算。

• 查询与分块相似度. 分块级别的词元选择将序列划分为不同的长度固定的分块,并从分块序列中选择出最相关的部分分块。具体来说,模型首先将每个分块中所有的隐状态压缩为一个键向量表示,然后利用k近邻方法选出与查询最 相关的k个分块,并保证这些块中的总词元数目至多为T_{max} 。这些分块中所有的 词元将按照它们在整个输入序列中的出现的顺序进行排序,并按照排序后的位置 赋予位置编码。随后,这些词元被送入注意力模块中处理。与词元级别的方法不同,分块级别的选择通常不需要外部存储,而是将所有数据存储在内存中。此外,不同的层和头可以根据自身的特性选择不同的词元集合,从而更为灵活地利用整个长序列的信息。因此,分块级别的词元选择能够在保证性能的同时降低计算复杂度和内存需求。

5.4.3  长文本数据

为了有效拓展模型的长文本建模能力,通常需要使用特殊准备的数据对于模 型进行继续预训练。本节将详细介绍如何确定所需的长文本数据量,以及如何合 理分布长文本数据的领域,以确保模型的长文本建模能力。

• 长文本数据量. 标准的预训练任务通常需要使用大量的文本数据。而对于面 向长文本建模的继续预训练来说,可以采用少量长文本数据进行轻量化的继续预训练。这一方法需要模型在初始预训练阶段已经学会了利用远程词元信息的能力, 仅需使模型适应更长的上下文窗口。一般而来说,只需在约 1B 级别的词元上执行 数百步的训练,就可以将 7B 或者 13B 大小的 LLaMA 系列模型的上下文窗口至 100K 词元以上的长度,并具有较好的长上下文利用能力。

• 长文本数据混合. 除了数据总量外,训练数据集中不同数据的混合也是影响 模型性能的关键因素,主要包括长文本的领域分布和长文本的类型。在预训练数据中,不同领域长文本的比例存在差异。一般而言,书籍、科学论文、代码仓库等领域包含较多的长文本数据。直接对这些长文本数据采样进行进一步继续预训练可能会导致与预训练数据分布的不匹配,导致模型过多的学习了某一领域长文本的特征,从而损害了在其他领域的影响。为了提升模型的泛化能力,长文本数据的领域应尽可能多样化,并且与预训练数据集的分布保持相似。除了数据的领域分布外,数据本身的语义特性也是数据混合需要考虑的问题。在 LongWanjuan中,研究人员基于连贯性、衔接性和复杂性将长文本数据分为整体型(完整的有意义的长文)、聚合型(多篇相关文本的聚合)和杂乱型(杂乱无章的文本)。实验结果显示,通过去除杂乱型的文本,并在保留整体型文本的同时对聚合型文本进行上采样构建的训练集,可以更好地提升模型的长文本建模能力。

5.5   新型模型架构

Transformer 模型自问世以来,在自然语言处理、计算机视觉等多个领域得到 了广泛应用,并展现出卓越的数据表示与建模能力。然而,Transformer 的自注意 力机制在计算每个词元时都需要利用到序列中所有词元的信息,这导致计算和存 储复杂度随输入序列长度的平方级别增长。在处理长序列时,这种复杂性会消耗 大量的计算资源与存储空间。为了解决这个问题,研究人员致力于新型模型架构 的设计。这些新型模型大多基于参数化状态空间模型(State Space Model, SSM)进 行设计,在长文本建模效率方面相比 Transformer 有了大幅改进,同时也保持了较 好的序列建模能力。在本节中,我们将首先对于参数化状态空间模型展开讨论,然 后针对状态空间模型的各种变种模型进行介绍。为了帮助读者更好地理解这些模 型之间的区别,我们在表 5.2 中对于它们进行了比较。

5.2 不同模型的比较(T 表示序列长度,H 表示输入表示的维度,N 表示状态 空间模型压缩后的维度,M 表示 Hyena 每个模块的层数)

模型

可并行性

解码复杂度

训练复杂度

Transformer

O(TH+H^{2})

O(T^{2}H+TH^{2})

标准 SSM

O(NH^{2}+H^{2})O(TH\log T+THN^{2}+TH^{2})

Mamba

×

O(NH^{2}+H^{2})O(TN^{2}H+TH^{2})

RWKV

×

O(H^{2})O(TH^{2})

RetNet

O(H^{2})O(TH^{2})

Hyena

O(TMH+MH^{2})O(TMH\log T+TMH^{2})

5.5.1  参数化状态空间模型

状态空间模型是一种动态时域模型,在控制系统、经济学等多个领域都有着 广泛应用。近年来,深度学习领域也开始引入参数化状态空间模型对于序列数据 进行建模。通俗来说,参数化状态空间模型可以看作是循环神经网络和卷积神经 网络的“结合体”。一方面,该模型可以利用卷积计算对输入进行并行化编码。另 一方面,该模型在计算中不需要访问前序的所有词元,仅仅利用前一个词元就可 以自回归地进行预测。因此,该模型在解码时展现出了更高的计算效率。由于自然语言文本本质上是离散型序列数据。为了同时实现并行化计算和循环解码,状态空间模型在输入和输出之间引入了额外的状态变量。在使用卷积计算时,状态空间模型可以利用快速傅里叶变换加速计算效率,从而通过O(TH\log T+THN^{2}+TH^{2})的复杂度建模整个序列。在 循环计算的时候,状态空间模型不需要和 Transformer 一样对前面所有时刻的状态 进行访问,而是仅仅需要前一个时刻的状态。因此,该模型仅仅需要 O(NH^{2}+H^{2})的复杂度就可以完成对整个序列的建模。由于具有更优的计算效率,状态空间模 型常常被用来对长序列数据进行建模。

5.5.2  状态空间模型变种

尽管状态空间模型计算效率较高,但是在文本任务上的表现相比 Transformer 模型仍有一定的差距。为此,一系列研究工作对于状态空间模型进行了性能改进, 在保证计算效率的同时提高其语言建模的能力。代表性模型包括 Mamba、 RWKV(Receptance Weighted Key Value)、RetNet(Retentive Network)和 Hyena 等。

  • Mamba. Mamba是一种状态空间模型的变种,主要思想是在状态空间模型的状态更新中引入了基于当前输入的信息选择(Selection)机制, 来确定当前时刻状态如何从前一时刻状态以及当前输入中提取信息,从而提升其 在语言建模上的性能。对于文本建模而言,模型需要能够自适应地基于输入和之前状态来实现更好的上下文表示效果。模型能够基于当前时刻的输入对上一时刻的状态 和当前时刻输入中的信息进行选择性过滤,从而实现更为有效的上下文表示。相比于标准状态空间模型,Mamba 展现出了更好的文 本建模性能,但是由于引入了关于 的非线性关系,Mamba 无法利用快速傅里叶 变换实现高效卷积计算。
  • RWKV. RWKV尝试将 RNN 和 Transformer 的优点进行结合,继承了 Transformer 的建模优势和 RNN 的计算效率。作为一个主要技术创新,RWKV 在 每层的计算中使用词元偏移(Token Shift)来代替词元表示。在每一步的状态计 算中,它显示地引入了上一个词元,通过两个相邻的词元和进行线 性插值来代替作为后续模块的输入。进一步,RWKV 将 Transformer 中的多头 注意力模块和前馈网络模块分别替换为时间混合(Time-mixing)模块和频道混合(Channel-mixing)模块。其中,时间混合模块是一个类似于门控的 RNN 的网络, 并使用词元偏移对状态进行更新;频道混合模块是在前馈网络的基础上引入了词 元偏移进行映射。类似于 Mamba,RWKV 在解码过程中可以像 RNN 一样只参考 前一时刻的状态,但是在训练过程中缺乏并行计算的能力。
  • RetNet. RetNet提出使用多尺度保留(Multi-scale Retention, MSR)机制 来代替多头注意力模块,从而提升计算效率。多尺度保留机制是在标准状态空间模 型的基础上,在状态更新的线性映射中引入了输入相关信息来提升序列建模能力。RetNet 还可以通过类似注意力操作的矩阵乘法,对所有词元的状态进行并行化计算。因此类似于标准状态空间模型,RetNet同时保留了循环计算和并行计算的优点。
  • Hyena. Hyena 提出使用长卷积模块(Long Convolution)来替换 Transformer 架构中的注意力模块,从而借助卷积的快速傅里叶变换来提高计算效率。由于使用了卷积计算可以使用快速傅 里叶变换进行加速,在训练中,Hyena 可以实现 O(TMH\log T+TMH^{2})的计算复 杂度。但是在解码时,每次计算必须对前面所有的词元进行卷积,因此解码复杂度为O(TMH+MH^{2})

参考:

Datawhale-学用 AI,从此开始

配套代码库: 配套代码

GitHub - RUCAIBox/LLMSurvey: The official GitHub page for the survey paper "A Survey of Large Language Models".

相关文章:

datawhale组队学习-大语言模型-task5:主流模型架构及新型架构

目录 5.3 主流架构 5.3.1 编码器-解码器架构 5.3.2 因果解码器架构 5.3.3 前缀解码器架构 5.4 长上下文模型 5.4.1 扩展位置编码 5.4.2 调整上下文窗口 5.4.3 长文本数据 5.5 新型模型架构 5.5.1 参数化状态空间模型 5.5.2 状态空间模型变种 5.3 主流架构 在预训…...

《Matplotlib三维可视化工业实践——从分子模拟到流体力学》

目录 ​编辑 一、工业三维可视化挑战 1.1 典型工业场景需求 1.2 技术痛点分析 二、Matplotlib三维可视化基础 2.1 三维坐标体系构建 2.2 核心三维绘图API 三、分子模拟可视化实战 3.1 晶体结构渲染 3.2 分子轨迹动态演示 四、流体力学场数据优化渲染 4.1 矢量场高效…...

【neo4j数据导出并在其他电脑导入】

停止服务 neo4j stop 导出 neo4j-admin database dump neo4j --to-path"C:\Users\12901\Downloads\test folder" 导入 将 .dump 文件放在一个目录中 mkdir /root/dump-directory mv /root/neo4j.dump /root/dump-directory/ 使用包含 .dump 文件的目录路径作为 …...

多智能体融合(Multi-Agent Fusion)

多智能体融合(Multi-Agent Fusion)是指在多智能体系统(MAS, Multi-Agent System)中,多个智能体(Agent)通过协作、竞争或共享信息,实现全局最优的智能决策和任务执行。该方法广泛应用…...

状态模式(State Pattern)

状态模式(State Pattern) 如果任务的执行过程是有多个不同状态的(比如初始化、运行中、完成等),你可以使用状态模式。每个状态可以有不同的行为,使得任务的状态管理更加清晰和可维护。 示例: …...

Linux网站搭建(新手必看)

1.宝塔Linux面板的功能 宝塔面板是一款服务器管理软件,可以帮助用户建立网站,一键配置服务器环境,使得用户通过web界面就可以轻松的管理安装所用的服务器软件。 2. 宝塔Linux面板的安装 宝塔官网地址:宝塔面板 - 简单好用的Linu…...

JavaEE进阶---Mybatis(预编译SQL即时SQL动态SQL标签池化技术说明)

文章目录 1.经典面试题(#{}和${}的区别)1.1关于#1.2关于$1.3情况下需要使用$ 2.数据库连接池2.1池化技术图解 3.动态SQL3.1if标签的使用3.2where标签的使用3.3set标签的使用 1.经典面试题(#{}和${}的区别) 1.1关于# 预编译SQL&a…...

Object.defineProperty()Proxy详解(Vue23数据劫持实现)

底层原理👇🏿 总结一下,结构应该包括: 1. 方法的基本作用和参数。 2. 数据描述符和存取描述符的区别。 3. 属性定义的内部处理流程。 4. 在Vue中的应用实例。 5. 常见错误和正确实践。 每个部分都要结合搜索结果的信息&…...

网页的性能优化

面试中如何回答"前端性能优化"问题 在面试中回答性能优化问题时,建议采用结构化表达方式,展示你的系统化思维和实战经验。以下是一个推荐的回答框架: 1. 开场概述 “前端性能优化是一个系统工程,我通常会从加载性能、…...

Vue 3中的Teleport:超越组件边界的渲染

Vue 3引入了许多新特性,其中之一便是Teleport。它为开发者提供了一种强有力的方式来控制组件的渲染位置,使得我们可以将组件的内容“传送”到DOM树的任何地方,而不仅仅局限于其父级组件的边界内。这在创建模态框、通知系统或任何需要脱离当前…...

JVM垃圾回收笔记01-垃圾回收算法

文章目录 前言1. 如何判断对象可以回收1.1 引用计数法1.2 可达性分析算法查看根对象哪些对象可以作为 GC Root ?对象可以被回收,就代表一定会被回收吗? 1.3 引用类型1.强引用(StrongReference)2.软引用(SoftReference…...

3.26学习总结

今天主要学习了内部类,但总感觉有点混乱,和之前的抽象啊,接口,多态等概念联系在一起感觉更混乱了,所以打算先把最近学的理清一遍,敲一遍代码再往后学...

京东--数据开发实习生--保险业务部门--一面凉经

Base: 本人投递的是后台开发岗位,调剂到数据开发岗位,京东的数据开发也做后台开发方面的工作,还包括算法、策略、数据挖掘和数据平台搭建之类的职责。面试内容基本只会问简历上的,在此基础上再去考察岗位职责相关的内…...

【Hugging Face 开源库】Diffusers 库 —— 扩散模型

Diffusers 的三个主要组件1. DiffusionPipeline:端到端推理工具__call__ 函数callback_on_step_end 管道回调函数 2. 预训练模型架构和模块UNetVAE(Variational AutoEncoder)图像尺寸与 UNet 和 VAE 的关系EMA(Exponential Moving…...

TypeScript(TS) 的使用初识

我将详细讲解 TypeScript(TS) 的使用。TypeScript 是由微软开发的一种开源编程语言,它是 JavaScript 的超集,通过引入静态类型和面向对象编程特性,增强了 JavaScript 的开发体验和代码质量。TypeScript 最终会被编译成…...

QTcpSocket多线程连接慢问题

20250325记录 环境:Qt5.14.2 64位 msvc编译 在多线程环境下,使用QTcpSocket实现客户端,发现在少部分电脑上,连接时间过长,定时器检查套接字状态时,发现连接处于QAbstractSocket::ConnectingState状态。 …...

Vue的实例

Every Vue application starts with a single Vue component instance as the application root. Any other Vue component created in the same application needs to be nested inside this root component. 每个 Vue 应用都以一个 Vue 组件实例作为应用的根开始。在同一个应…...

[AI绘图] ComfyUI 中自定义节点插件安装方法

ComfyUI 是一个强大的 AI 图像生成工具,支持自定义节点插件扩展其功能。本文介绍 ComfyUI 中安装自定义节点插件的三种方法,包括 Git Clone 方式、插件管理器安装方式,以及手动解压 ZIP 文件的方法,并分析它们的优缺点。 1. Git Clone 方法 使用 git clone 是最稳定且推荐…...

数据库第二周作业

数据库约束、常见语句等 数据库约束 主键约束 #创建表,把id设为主键 mysql> create table test02(-> id int primary key, #----主键约束-> name varchar(50)-> ); Query OK, 0 rows affected (0.02 sec) ​ #插入数据测试 mysql> insert into te…...

Appium Inspector使用教程

1.下载最新版本 https://github.com/appium/appium-inspector/releases 2.本地启动一个Appium服务 若Android SDK已安装Appium服务,则在任意terminal使用appium启动服务即可 3.Appium Inspector客户端配置连接到Appium服务 Configuring and Starting a Session…...

【QT继承QLabel实现绘制矩形、椭圆、直线、多边形功能,并且支持修改大小,移动位置,复制,粘贴,删除功能】

文章目录 介绍绘制一个矩形(椭圆)roi绘制一个多边形roi对矩形roi的缩放:对多边形rio的缩放(移动点的位置) 介绍 绘制矩形,椭圆,直线实际用的都是是同一个思路:鼠标第一次点击就确定…...

Elasticsearch未授权访问漏洞

1、编辑elasticsearch.yml配置文件,添加认证相关配置 vim elasticsearch.ymlxpack.security.enabled: true xpack.license.self_generated.type: basic xpack.security.transport.ssl.enabled: true2、重启ElasticSearch # 重启方式可能略微不同 systemctl restar…...

怎么处理 Vue 项目中的错误的?

一、错误类型 任何一个框架,对于错误的处理都是一种必备的能力 在Vue 中,则是定义了一套对应的错误处理规则给到使用者,且在源代码级别,对部分必要的过程做了一定的错误处理。 主要的错误来源包括: 后端接口错误代码中本身逻辑错误二、如何处理 后端接口错误 通过axi…...

Elasticsearch原生linux部署集群 和docker部署集群

Easticsearch 是一个分布式的搜索和分析引擎,广泛应用于日志分析、全文检索、实时数据分析等场景。为了满足高可用性和高性能的需求,Elasticsearch 通常以集群的方式部署。部署 Elasticsearch 集群时,可以选择两种主要方式:原生 L…...

缓存设计模式

缓存设计模式(Cache Design Pattern)是一种用于存储和管理频繁访问数据的技术,旨在提高系统性能、降低数据库或后端服务的负载,并减少数据访问延迟。以下是几种常见的缓存设计模式,并用 Python Redis 进行示例代码实现…...

详解TCP的四次握手和三次挥手,以及里面每个阶段的状态

TCP 三次握手(连接建立) TCP 连接建立通过三次握手完成,确保双方同步初始序列号并确认可达性。 阶段说明 第一次握手 客户端 → 服务器:发送 SYN(同步请求),携带初始序列号 seq x。客户端状态…...

Linux文件目录管理指令详解(上篇)

Linux文件目录管理指令详解(上篇) 在Linux操作系统中,文件目录管理是基础且重要的技能。通过一系列指令,用户可以高效地浏览、创建、修改和删除文件及目录。本文将详细介绍Linux中常用的文件目录管理类指令,包括pwd、…...

BCC-应用程序组件分析

libbpf-tools/gethostlatency 追踪glibc中的getaddrinfo、gethostbyname、gethostbyname2函数用时 # /usr/share/bcc/libbpf-tools/gethostlatency TIME PID COMM LATms HOST 14:58:32 8418 curl 313.635 www.taobao.com以# cur…...

无参数读文件和RCE

什么是无参数? 无参数(No-Argument)的概念,顾名思义,就是在PHP中调用函数时,不传递任何参数。我们需要利用仅靠函数本身的返回值或嵌套无参数函数的方式,达到读取文件或远程命令执行&#xff0…...

SpringMVC_day02

一、SSM 整合 核心步骤 依赖管理 包含 SpringMVC、Spring JDBC、MyBatis、Druid 数据源、Jackson 等依赖。注意点:确保版本兼容性(如 Spring 5.x 与 MyBatis 3.5.x)。 配置类 SpringConfig:扫描 Service 层、启用事务管理、导入…...

在Linux、Windows系统上安装开源InfluxDB——InfluxDB OSS v2并设置开机自启的保姆级图文教程

一、进入InfluxDB下载官网 InfluxData 文档https://docs.influxdata.com/Install InfluxDB OSS v2 | InfluxDB OSS v2 Documentation...

LinkedIn数据抓取零风险指南:亮数据住宅代理实现企业级合规采集

亮数据住宅代理实现企业级合规采集 一、前言二、尝试使用三、使用体验高效稳定易用性:合规与安全:技术支持: 四、适用场景五、推荐程度六、试用地址 一、前言 最近一位猎头小伙伴找到我,说目前很多公司的出海业务都在招人&#x…...

ROS2的发展历史、核心架构和应用场景

以下是对**ROS2(Robot Operating System 2)**的发展历史、核心架构和应用场景的详细解析,覆盖其技术演变、关键特性和生态系统: 一、ROS2的诞生背景:从ROS1到ROS2 1. ROS1的历史与局限 ROS1的起源: 2007年…...

PHP eval 长度限制绕过与 Webshell 获取

在 PHP 代码中&#xff0c;如果 eval($param); 存在且长度受限&#xff0c;并且过滤了 eval 和 assert&#xff0c;仍然可以通过多种方法绕过限制&#xff0c;获取 Webshell。 源码 <?php $param $_REQUEST[param]; if(strlen($param)<17 && stripos($param,…...

自然语言处理(14:处理时序数据的层的实现)

系列文章目录 第一章 1:同义词词典和基于计数方法语料库预处理 第一章 2:基于计数方法的分布式表示和假设&#xff0c;共现矩阵&#xff0c;向量相似度 第一章 3:基于计数方法的改进以及总结 第二章 1:word2vec 第二章 2:word2vec和CBOW模型的初步实现 第二章 3:CBOW模型…...

Pytest的Fixture使用

概述 Pytest中的Fixture可以使得测试代码高度复用,同时对资源进行安全的管理,以及在复杂的测试场景用进行灵活的组合。 概念 Fixture:可重用的函数,用@pytest.fixture来进行装饰,用于为测试提供数据、环境或者服务作用域:控制Fixture的生命周期,默认是function,可设置…...

【蓝桥杯】每日练习 Day13

前言 今天做了不少题&#xff0c;但是感觉都太水了&#xff0c;深思熟虑之下主播决定拿出两道相对不那么水的题来说一下&#xff08;其实还是很水&#xff09;。 两道问题&#xff0c;一道是日期问题&#xff08;模拟&#xff09;&#xff0c;一道是区间合并问题。 日期差值 …...

Vue3 中使用 vuedraggable 实现拖拽排序功能,分组拖拽

Vue3 中使用 vuedraggable 实现拖拽排序功能&#xff0c;分组拖拽 安装draggable npm install vuedraggablenext --save基础用法示例 <template><div class"app-container"><draggable v-model"list" item-key"id":group"…...

husky的简介以及如果想要放飞自我的解决方案

husky 是一个 Git Hooks 管理工具&#xff0c;它的主要作用是 在 Git 提交&#xff08;commit&#xff09;、推送&#xff08;push&#xff09;等操作时执行自定义脚本&#xff0c;比如代码检查&#xff08;Lint&#xff09;、单元测试&#xff08;Test&#xff09;、格式化代码…...

Maven工具学习使用(四)——仓库

仓库分类 对于Mavne来说,仓库只分为两类:本地仓库和远程仓库。当Maven根据坐标查询寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven就会去远程仓库查找,发现需要的构件之后…...

【BFS】《单源、多源 BFS:图搜索算法的双生力量》

文章目录 前言单源BFS例题一、迷宫中离入口最近的出口二、 最小基因变化三、单词接龙四、为高尔夫比赛砍树 多源BFS例题一、 01 矩阵二、飞地的数量三、地图中的最高点四、地图分析 结语 前言 什么是单源、多源BFS算法问题呢&#xff1f; BFS&#xff08;Breadth - First Sear…...

批量取消 PDF 文档中的所有超链接

在 PDF 文档中我们可以插入各种各样的文本也可以给文本设置字体&#xff0c;颜色等多种样式&#xff0c;同时还可以给文字或者图片添加上超链接&#xff0c;当我们点击超链接之后&#xff0c;就会跳转到对应的网页。有时候这会对我们的阅读或者使用形成一定的干扰&#xff0c;今…...

13.2 kubelet containerRuntime接口定义和初始化

本节重点总结 &#xff1a; containerRuntime 需要实现3类接口 管理容器的接口管理镜像的接口Streaming API 用于客户端与容器进行交互 type KubeGenericRuntime interface {kubecontainer.Runtimekubecontainer.StreamingRuntimekubecontainer.CommandRunner }containerRun…...

使用 gone.WrapFunctionProvider 快速接入第三方服务

项目地址&#xff1a;https://github.com/gone-io/gone 本文中源代码&#xff1a; esexamples/es 文章目录 1. gone.WrapFunctionProvider 简介2. 配置注入实现3. 实战示例&#xff1a;Elasticsearch 集成4. 使用方式5. 最佳实践6. 总结 在如何给Gone框架编写Goner组件&#xf…...

git 标签学习笔记

目录 轻量级标签 带注释的标签&#xff08;推荐&#xff09; 给指定 commit 打标签 推送单个标签&#xff0c;需要单独推送&#xff0c;代码推送不会推送标签 推送所有标签 删除标签 轻量级标签 git tag v1.0.0 只是简单地给当前 commit 打上 v1.0.0 标签。 带注释的标…...

【论文阅读】基于思维链提示的大语言模型软件漏洞发现与修复方法研究

这篇文章来自于 Chain-of-Thought Prompting of Large Language Models for Discovering and Fixing Software Vulnerabilities 摘要 软件安全漏洞在现代系统中呈现泛在化趋势&#xff0c;其引发的社会影响日益显著。尽管已有多种防御技术被提出&#xff0c;基于深度学习&…...

企业在人工智能创新与安全之间走钢丝

2025 年全球 AI/ML 工具使用量将激增&#xff0c;企业将 AI 融入运营之中&#xff0c;员工也将 AI 嵌入日常工作流程中。报告显示&#xff0c;企业对 AI/ML 工具的使用同比增长 3,000% 以上&#xff0c;凸显了各行各业迅速采用 AI 技术&#xff0c;以提升生产力、效率和创新水平…...

CSS动画

目录 一、核心概念与语法 1. keyframes 关键帧 2. animation 属性 二、动画调速函数&#xff08;animation-timing-function&#xff09; 1. 预设值 2. 贝塞尔曲线 3. 步进函数&#xff08;steps()&#xff09; 三、动画控制与交互 1. 暂停与恢复 2. JavaScript 控制…...

计算机视觉(CV)技术的优势和挑战

计算机视觉&#xff08;CV&#xff09;技术是人工智能领域中的一个重要分支&#xff0c;它主要通过让机器学会“看”和“理解”图像或视频来模拟人类视觉系统。以下是计算机视觉技术的一些优势和挑战&#xff1a; 优势&#xff1a; 自动化&#xff1a;计算机视觉技术可以实现…...

动态IP与静态IP该如何选?

一、当IP地址成为"网络身份" 2023年亚马逊封号潮中&#xff0c;某杭州卖家因登录IP频繁切换&#xff08;早8点在纽约&#xff0c;午间瞬移到东京&#xff09;&#xff0c;触发平台风控导致账号冻结。这类"时空错乱症"揭示了跨境电商的生存法则&#xff1a…...