LLM 学习(二 完结 Multi-Head Attention、Encoder、Decoder)
文章目录
- LLM 学习(二 完结 Multi-Head Attention、Encoder、Decoder)
- Self-Attention (自注意力机制)
- 结构
- 多头注意力
- Encoder
- Add & Norm 层
- Feed Forward 层
- Encoder
- Decoder的第一个Multi-Head Attention
- Masked 操作
- Teacher Forcing 概念
- Decoder 预测
- 第一个Multi-Head Attention的具体步骤
- 输入准备
- 生成 Q、K、V 矩阵并计算 (QK^T)
- Mask 操作
- 计算输出矩阵 Z
- 获取最终输出
- Decoder的第二个Multi-Head Attention
- 第二个Multi - Head Attention介绍
- Softmax 预测输出单词
- 并行训练
- 序列到序列模型的常规训练困境
- Teacher Forcing 实现并行化的原理
- 不使用教师强制
- 基础序列设定
- 解码器的输入输出过程(按时间步展开)
- 无法并行化的核心原因
- 采用教师强制
- 解码器输入与目标输出
- 并行化训练过程
- 并行化训练的关键点
- 并行化训练的核心原理
- 已知的输入序列
- 去除时间步依赖
- 并行计算所有时间步
- Transformer 架构的核心特点的总结
- 1. 并行训练能力
- 2. 位置信息的处理
- 3. Self - Attention 结构的核心性
- 4. Multi - Head Attention 的作用
- 正采样和负采样
- RNN(循环神经网络)和 LSTM(长短期记忆网络)的区别
- 结构方面:
- 处理依赖关系的能力方面:
- 复杂度方面:
- 训练方面:
- 应用场景方面:
LLM 学习(二 完结 Multi-Head Attention、Encoder、Decoder)
原视频链接
Self-Attention (自注意力机制)
这段内容主要介绍了 Transformer 的整体结构,要点如下:
- 结构:图中为论文里 Transformer 的内部结构图,左侧是 Encoder block(编码器模块),右侧是 Decoder block(解码器模块) 。
- Multi-Head Attention(多头注意力机制):
- 由多个 Self-Attention(自注意力机制)组成。
- Encoder block 包含一个 Multi-Head Attention;Decoder block 包含两个 Multi-Head Attention,其中一个使用了 Masked(掩码)。
- Add & Norm 层:位于 Multi-Head Attention 上方。Add 即残差连接,作用是防止网络退化;Norm 即 Layer Normalization(层归一化),用于对每一层的激活值进行归一化。
- 重点:Self-Attention 是 Transformer 的重点,后续将着重关注 Multi-Head Attention 和 Self-Attention,会先详细讲解 Self-Attention 逻辑 。
- 在 Transformer 架构中,左侧 Encoder 向右侧 Decoder 传递的两个箭头分别代表:
- Key(K)矩阵:由 Encoder 对输入序列(如源语言句子)编码生成,用于在 Decoder 的交叉注意力计算中,衡量源序列各位置与当前解码位置的关联权重。
- Value(V)矩阵:同样由 Encoder 输出,包含源序列各位置的语义 “值” 信息。在交叉注意力中,基于计算出的注意力权重,对 V 矩阵加权求和,为 Decoder 生成目标序列(如翻译结果)提供语义依据。
这两个矩阵是 Decoder 交叉注意力层的核心输入,配合 Decoder 自身生成的 Query(Q),实现对源序列编码信息的利用,确保目标序列生成的准确性。
结构
1.计算 Attention 公式
- 得到矩阵 Q(Query,查询矩阵)、K(Key,键矩阵)、V(Value,值矩阵)后,通过公式 ( A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dkQKT)V ) 计算 Self-Attention 的输出,其中 (d_k) 是 Q、K 矩阵的列数,也就是向量维度。除以 ( d k \sqrt{d_k} dk) 是为了防止内积过大。
- Q 乘以 K 的转置 ( K T K^T KT) 后,得到的矩阵行列数都为 n(n 为句子单词数),这个矩阵表示单词之间的 attention 强度。
2.( Q K T QK^T QKT) 的计算 - 得到( Q K T QK^T QKT) 矩阵后,对矩阵的每一行进行 Softmax 操作,使得每一行的和变为 1,这样就得到了每个单词对于其他单词的 attention 系数。
3.计算最终输出 Z - 将经过 Softmax 后的矩阵与 V 矩阵相乘,得到最终的输出 Z。以单词 1 为例,Softmax 矩阵的第 1 行表示单词 1 与其他所有单词的 attention 系数,最终单词 1 的输出( Z 1 Z_1 Z1) 等于所有单词 i 的值 ( V i V_i Vi) 根据 attention 系数的比例加和得到。
多头注意力
1.结构组成:从图中可以看到,Multi-Head Attention 包含多个 Self-Attention 层。输入 X 首先分别经过线性变换得到 Q(Query)、K(Key)、V(Value)矩阵,然后进入多个(h 个)Scaled Dot-Product Attention(缩放点积注意力,即 Self-Attention)层中。
2.计算步骤
- 以 h=8 为例,输入 X 分别传入 8 个不同的 Self-Attention 层中,每个 Self-Attention 层独立计算,得到 8 个输出矩阵 Z1 到 Z8。
- 将这 8 个输出矩阵拼接在一起(Concat 操作)。
- 拼接后的矩阵再传入一个 Linear(线性)层进行变换,最终得到 Multi-Head Attention 的输出矩阵 Z。
3.输出特点:Multi-Head Attention 输出的矩阵 Z 与其输入的矩阵 X 的维度是一样的,这保证了在模型结构中数据维度的一致性,方便后续的处理 。
Encoder
Add & Norm 层
- 组成与公式:Add & Norm 层由 Add(加法)和 Norm(归一化)两部分组成。其计算公式为 LayerNorm (X + MultiHeadAttention (X)) 或 LayerNorm (X + FeedForward (X)),其中 X 是 Multi-Head Attention 或 Feed Forward 的输入,由于它们的输出与输入 X 维度相同,所以可以相加。
- Add 操作(残差连接):X 与 MultiHeadAttention (X) 相加的操作是一种残差连接,常见于 ResNet 中。这种连接方式有助于解决多层网络训练时的问题,让网络专注于当前差异部分的学习。
- Norm 操作(层归一化):Norm 指 Layer Normalization(层归一化),常用于 RNN 结构中。它将每一层神经元的输入转化为均值和方差一致的形式,从而加快模型的收敛速度。
Feed Forward 层
- 结构与公式:Feed Forward 层是一个两层的全连接层。第一层使用激活函数 ReLU(Rectified Linear Unit),第二层不使用激活函数。对应的公式是 max (0, XW₁ + b₁) W₂ + b₂,其中 X 是输入。
- ReLU 函数:ReLU 函数定义为 ReLU (x) = max (0, x)。当输入值 x > 0 时,输出为 x;当 x ≤ 0 时,输出为 0 。
- 输出特点:Feed Forward 层最终得到的输出矩阵维度与输入 X 一致。
Encoder
Decoder的第一个Multi-Head Attention
Masked 操作
- 操作原因:在实际的翻译过程中,单词是按照顺序逐个生成的,在生成第 i 个单词时,模型不应该提前获取到第 (i+1) 个单词及之后的信息,否则就不符合真实的翻译流程,也会导致模型学习到错误的依赖关系。因此,在 Decoder block 的第一个 Multi - Head Attention 中引入了 Masked 操作,来防止信息的 “泄露”。
- 示例说明:以 “我有一只猫” 翻译成英文 “I have a cat” 为例,在进行翻译时,模型首先根据输入的起始标记 “” 预测第一个单词 “I”,然后根据 “ I” 预测下一个单词 “have”,依此类推。在这个过程中,为了模拟真实的翻译过程,需要对后续未生成的单词进行掩盖。
- 技术实现:在 Self - Attention 计算过程中,Mask 操作是在 Softmax 之前执行的。假设输入矩阵包含了 “ I have a cat” 这五个单词的表示向量,对应的 Mask 矩阵是一个 5×5 的方阵。在 Mask 矩阵中,用 0 表示不遮挡,用其他值(这里可理解为一种表示遮挡的标记)表示遮挡。从矩阵中可以看出,单词 0(即 “”)只能使用自身的信息;单词 1(即 “I”)可以使用单词 0 和自身的信息,以此类推,每个单词只能使用其之前单词的信息,从而实现了对未来信息的屏蔽。
Teacher Forcing 概念
- 训练方法:在处理像语言翻译这样的序列生成任务时,为了使模型能够有效地从输入句子逐步生成相应的翻译,经常会采用 Teacher Forcing 方法。简单来说,在模型训练过程中,每一步模型不是依据自己上一步预测的单词来生成下一步的输出,而是直接使用正确的下一个单词来辅助模型做出判断。例如,在教小朋友用英语造句时,不希望小朋友自由发挥,而是让他们按照正确的例子进行练习,这样小朋友能更快学会如何正确造句,对于模型训练也是同样的道理。
- 好处
- 加快学习速度:模型在训练时总是基于正确的信息进行学习,避免了被自己错误的预测所误导,从而能够更快地收敛,减少训练时间。
- 帮助理解语言结构:通过不断地接触正确的单词序列,模型可以更好地学习语言中单词之间的顺序、语法结构以及语义关系等重要信息。
- 使用时机
- 训练阶段:在模型训练时,使用 Teacher Forcing 可以让模型快速学习到语言的模式和规律,提高训练效率。
- 独立工作阶段:当模型在实际应用中,比如进行实时翻译时,由于没有正确答案可供参考,模型就只能根据自己上一步的输出结果继续生成后续内容,此时模型将展示其真实的学习和预测能力。
Decoder 预测
- 训练过程:在 Decoder 的训练过程中,可以采用 Teacher Forcing 方法,并且可以进行并行训练。具体做法是将正确的单词序列(如 “ I have a cat”)作为输入传递给 Decoder,同时将对应的输出(“I have a cat ”)也提供给模型,模型通过不断调整参数,使得自己的输出尽可能接近正确答案。
- 预测过程:在预测第 i 个输出时,模型会按照上文提到的 Mask 操作,将第 (i+1) 之后的单词进行掩盖,只使用之前生成的单词信息以及 Encoder 的输出信息来生成当前单词,从而逐步生成整个目标序列。
第一个Multi-Head Attention的具体步骤
输入准备
- 输入矩阵 X:包含 “ I have a cat” 这 5 个单词的表示向量,维度对应 5 个单词。
- Mask 矩阵:一个 5×5 的方阵,用于限定每个单词可获取信息的范围。从矩阵中能看出,单词 0 只能使用自身信息,单词 1 可使用单词 0 和自身的信息,依此类推,体现了单词只能利用其之前单词信息的规则。
生成 Q、K、V 矩阵并计算 (QK^T)
- 按照 Self - Attention 的常规流程,由输入矩阵 X 计算得出 Q(查询矩阵)、K(键矩阵)、V(值矩阵)。
- 将 Q 矩阵与 K 矩阵的转置 (K^T) 相乘,得到 (QK^T) 矩阵,该矩阵反映了单词间的注意力关联程度。
Mask 操作
在对 (QK^T) 进行 Softmax 计算注意力得分前,使用 Mask 矩阵进行遮挡。通过按位相乘的方式,将 (QK^T) 与 Mask 矩阵运算,得到 Mask (QK^T) 矩阵。被 Mask 矩阵中黄色(遮挡部分)对应的位置,在 Mask (QK^T) 矩阵中会被特殊处理,使其在后续计算中不起作用。
计算输出矩阵 Z
将 Mask (QK^T) 矩阵与 V 矩阵相乘,得到输出矩阵 Z。以单词 1 为例,其输出向量 (Z_1) 仅包含单词 1 及其之前单词的信息,保证了生成过程中不会提前获取未来信息。
获取最终输出
经上述步骤得到 Masked Self - Attention 的输出矩阵 (Z_1) 。和 Encoder 类似,多个这样的输出通过 Multi - Head Attention 拼接,最终得到第一个 Multi - Head Attention 的输出 Z,且 Z 与输入 X 维度一致,以便于后续模型处理。
Decoder的第二个Multi-Head Attention
Decoder的第二个Multi-Head Attention接收来自Encdoer的K和V矩阵,以及来自Decoder的第一个Multi-Head Attention发送的Q矩阵。
第二个Multi - Head Attention介绍
- 计算差异:Decoder block 的第二个 Multi - Head Attention 与第一个不同,Self - Attention 中的 K、V 矩阵并非用上一个 Decoder block 的输出计算,而是基于 Encoder 的编码信息矩阵 C 。对于 Q 矩阵,若为第一个 Decoder block,使用输入矩阵 X 计算;若非第一个,则使用上一个 Decoder block 的输出 Z 计算。
- 优势:在后续计算中,每个单词都能无掩码地利用 Encoder 中所有单词的信息,这有助于 Decoder 在生成输出时,充分借鉴 Encoder 提取的完整语义,使生成结果更精准合理。
- 中间矩阵 C 的使用:连接 Encoder 和 Decoder 的中间矩阵 C 的使用次数取决于 Decoder 的层数,有 N 层 Decoder,C 就会被使用 N 次。
Softmax 预测输出单词
- 输出矩阵 Z 的特性:经前面网络层计算得到最终输出矩阵 Z,由于 Mask 操作,每个单词的输出仅包含该单词及其之前单词的信息。比如单词 0 的输出 (Z_0) 只含单词 0 的信息,而整个矩阵 Z 涵盖单词 0 到 4 的信息。
- Softmax 预测机制:Softmax 函数对输出矩阵 Z 的每一行进行运算,将其转化为概率分布,以此来预测下一个单词。图中呈现了 Softmax 分别处理矩阵 Z 的每一行,逐个预测单词的过程。
- Decoder 的构成:Decoder 和 Encoder 相似,由多个 Decoder block 叠加组成。每个 Decoder block 执行从输入到 Softmax 预测单词的完整流程,多个 Decoder block 协同工作,增强模型处理复杂信息的能力,助力完成序列生成任务,如机器翻译 。
并行训练
序列到序列模型的常规训练困境
在序列到序列(Seq2Seq)模型训练中,若不使用 Teacher Forcing:
- 解码器(Decoder)每个时间步的输入依赖前一个时间步的输出。例如,生成句子时,下一个词的输入需基于上一个词的预测结果。
- 这种时间步间的依赖性导致计算必须按顺序进行,无法并行化处理,训练效率较低。
Teacher Forcing 实现并行化的原理
使用 Teacher Forcing 后:
- 输入替换:训练时,将解码器每个时间步的输入替换为目标序列中对应的真实词语。例如,翻译任务中直接使用正确的目标词序列作为输入,而非模型前一步的预测结果。
- 消除依赖:所有时间步的输入均为已知的真实序列,时间步之间不再有依赖关系。
- 并行计算:由于输入独立,可同时计算解码器在所有时间步的输出,利用矩阵运算和硬件加速(如 GPU)实现并行化训练,大幅提升训练效率。
Teacher Forcing 通过引入目标真实序列作为输入,打破时间步间的依赖,使 Decoder 的多时间步计算可并行执行,解决了 Seq2Seq 模型训练中的效率瓶颈。
不使用教师强制
在序列到序列模型中,不使用教师强制(Teacher Forcing)时,解码器(Decoder)无法并行化训练的原因,具体内容如下:
基础序列设定
- 输入序列(Encoder 输入):<Begin> I have a cat,包含起始标记<Begin>,作为编码器的输入。
- 目标输出序列(解码器目标输出):I have a cat <end>,是解码器需要拟合的正确输出,包含结束标记<end>。
解码器的输入输出过程(按时间步展开)
- 时间步 t=1:
- 输入:仅起始标记<Begin>。
- 输出预测:模型生成第一个词的预测结果Y1。
- 时间步 t=2:
- 输入:前一时间步的预测输出Y1。
- 输出预测:基于Y1生成第二个词的预测结果Y2。
- 时间步 t=3 至 t=5:依此类推,每个时间步的输入都是前一步的预测输出(Y2→Y3→Y4),最终生成对应时间步的预测结果(Y3→Y4→Y5)。
无法并行化的核心原因
在这种模式下,每个时间步的输入依赖前一个时间步的输出。例如,t=2 的输入Y1是 t=1 的预测结果,t=3 的输入Y2是 t=2 的预测结果。这种强依赖关系使得计算必须按顺序逐步执行,无法同时计算多个时间步的输出,因此无法实现并行化训练,训练效率较低。
采用教师强制
解码器输入与目标输出
- 解码器输入序列:以<Begin> I have a cat为例,包含起始标记<Begin>,作为解码器的输入引导。
- 解码器目标输出序列:对应I have a cat <end>,包含结束标记<end>,是模型训练需要拟合的正确输出。
并行化训练过程
- 步骤 1:准备输入和目标输出
- t=1:输入为<Begin>,目标输出为I;
- t=2:输入为<Begin> I,目标输出为have;
- 依此类推,直至 t=5,输入为完整序列<Begin> I have a cat,目标输出为<end>。
- 步骤 2:模型计算
- 输入处理:将输入词转换为词向量或嵌入表示,组织成矩阵形式。
- 并行计算:将整个输入序列一次性传入解码器,利用矩阵运算和硬件加速(如 GPU),并行计算所有时间步的输出(如 t1 到 t5 的预测结果Y1到Y5),而非逐步计算。
- 步骤 3:损失计算和反向传播
- 损失计算:并行计算每个时间步的预测输出与目标输出的损失(如交叉熵损失)。
- 梯度更新:基于并行计算的损失,同步计算模型参数的梯度并更新,提升训练效率。
并行化训练的关键点
- 时间步无依赖性:使用教师强制后,解码器的输入序列完全由真实目标序列决定,不再依赖模型前一时间步的预测结果,避免了时间步间的计算依赖,使多时间步计算可同时进行。
- 利用矩阵运算并行化:将序列数据组织成矩阵形式,借助深度学习框架(如 TensorFlow、PyTorch)的向量化计算能力,一次性完成整个序列的前向传播、损失计算和梯度更新,大幅缩短训练时间。
并行化训练的核心原理
已知的输入序列
在训练过程中,教师强制直接使用目标序列中正确的词语作为解码器的输入,而非依赖模型前一时间步的预测结果。例如在翻译任务中,直接将目标语言的正确词序列(如 “I have a cat <end>”)作为解码器输入,所有输入内容在训练前就已确定,无需等待模型逐步生成。
去除时间步依赖
传统序列生成模型中,每个时间步的输入依赖前一步的输出,导致计算必须串行。而教师强制通过输入已知的目标序列,消除了时间步之间的依赖关系。每个时间步的计算仅基于已确定的输入数据,无需等待前一步的预测结果,为并行计算创造了条件。
并行计算所有时间步
由于所有时间步的输入均为已知的目标序列,可将整个输入序列一次性提供给模型。借助深度学习框架的矩阵运算和硬件加速(如 GPU),模型能够同时计算所有时间步的输出,而非按顺序逐步生成。这种方式充分利用了并行计算能力,大幅提升训练效率。
综上,教师强制通过 “输入已知化” 和 “消除依赖”,让模型摆脱串行计算的限制,最终实现多时间步的并行化训练。
Transformer 架构的核心特点的总结
1. 并行训练能力
Transformer 与 RNN 不同,具备良好的并行训练特性。RNN 因序列处理的前后依赖关系(需按时间步依次计算),难以实现并行化;而 Transformer 通过 Self - Attention(自注意力机制),可同时处理序列中所有位置的信息,能充分利用 GPU 等硬件进行并行计算,大幅提升训练效率。
2. 位置信息的处理
Transformer 本身无法直接利用单词的顺序信息(若不处理,其效果类似 “词袋模型”,忽略词序)。因此,需在输入中添加位置 Embedding(位置嵌入),将单词的位置信息编码到输入向量中,使模型能够感知单词在序列中的位置,从而理解文本的顺序结构。
3. Self - Attention 结构的核心性
Transformer 的核心是 Self - Attention 结构。其中的 Q(Query,查询矩阵)、K(Key,键矩阵)、V(Value,值矩阵)通过对输入进行线性变换得到。通过计算 Q 与 K 的关联,再结合 V 生成注意力输出,这一机制是 Transformer 捕捉序列内部依赖关系的基础。
4. Multi - Head Attention 的作用
Multi - Head Attention(多头注意力机制)包含多个并行的 Self - Attention。每个 Self - Attention 从不同维度捕捉单词之间的关联关系(即不同的 attention score,注意力得分),最后融合多头结果。这种设计让模型能从多种视角学习序列信息,增强对复杂语义关系的表达能力。
正采样和负采样
- 正采样:是从数据集中选择正例(目标类别)样本的过程。在分类或对比学习等任务里,正例样本是期望模型能够正确分类、识别或捕获特征的样本。 例如在图像分类任务中,要训练一个识别猫的模型,那么所有猫的图片就是正例样本,从这些猫的图片中挑选样本的操作就是正采样,它能保证模型在训练过程中学习到猫的关键特征 。又如在自然语言处理的情感分析中,如果将积极情感的文本视为正例,从积极情感文本集合中选取样本用于训练,就是正采样。
- 负采样:是从数据集中选择负例(非目标类别)样本的过程。在对比学习里,负例样本与正例相对,是不属于目标类别的样本。 比如在上述猫的图像分类模型训练中,狗、汽车等非猫的图片就是负例样本,对它们进行采样即为负采样。在推荐系统中,用户点击、购买的商品可作为正样本,而用户未交互过的商品则可作为负样本进行负采样。
在实际应用中,二者常配合使用,例如在对比学习中:
1.锚定样本的选择:随机从数据集中选一个样本作为锚定样本,这是要学习的目标样本。
2.正例样本的选择:从同一类别中挑选与锚定样本相似的作为正例样本,它们应属于相同类别或有相似特征。
3.负例样本的选择:从不同类别或特征差异大的样本中选取若干作为负例样本 。
4.模型训练:模型通过计算锚定样本与正例、负例样本之间的相似性得分,并利用对比损失函数,最大化锚定样本与正例样本的相似性得分,最小化与负例样本的相似性得分,再经反向传播和参数更新,使模型学习到更好的特征表示,提升分类或相似性度量性能。
此外,负采样还有其他作用: - 提升计算效率:在推荐系统基于隐式反馈的协同过滤算法中,若不进行负采样,需将用户未交互的所有商品都作为负例优化,计算量巨大。而负采样只需优化部分负例相关向量,能减少训练负荷。
- 保证训练效果:实际中,正例数量相对有限,随机负例过多可能无效。 负采样能针对性提供高质量负例,加快收敛速度,让模型朝预期方向优化 。
RNN(循环神经网络)和 LSTM(长短期记忆网络)的区别
结构方面:
- RNN:结构较为简单,包含一个循环,允许信息从网络的一个步骤传递到下一个步骤,通过隐藏层的循环连接来处理序列数据,每个时间步的隐藏状态依赖于前一个时间步的隐藏状态和当前输入。
- LSTM:结构相对复杂,在 RNN 基础上引入了 “门”(gate)的结构,包括输入门、遗忘门和输出门,还增加了细胞状态(cell state) 。这些门和细胞状态相互配合,对信息的流动进行精准控制。
处理依赖关系的能力方面:
- RNN:理论上可以处理序列数据,能捕捉短期依赖关系,但在处理长期依赖关系时存在困难。因为在反向传播过程中,随着时间步的增加,梯度会逐渐消失(也可能出现梯度爆炸,但可通过梯度裁剪缓解),导致无法有效学习长距离的依赖信息 。
- LSTM:专门为解决 RNN 的梯度消失问题而设计,通过门控机制和细胞状态,LSTM 可以选择性地记住或者忘记信息,维持长期依赖关系,从而在处理长序列数据时能保持较好的性能,有效捕捉长距离的语义关联。
复杂度方面:
- RNN:结构简单,计算成本较低,所需的计算资源和时间相对较少。
- LSTM:由于引入了多个门和细胞状态等结构,参数更多,计算复杂度更高,训练时需要更多的计算资源和时间。
训练方面:
- RNN:通常训练速度比 LSTM 快,但由于梯度消失问题,在训练时往往需要更细致的设计,如合适的初始化、学习率调整等,以避免训练失败。
- LSTM:虽然训练时间更长,但在涉及长序列的任务上更倾向于收敛,训练过程相对更稳定可靠。
应用场景方面:
- RNN:在序列相对较短,对计算效率要求较高,且对长期依赖关系要求不高的场景中可能会被使用,不过在很多实际复杂的序列处理应用中,正逐渐被 LSTM 等改进模型取代。
- LSTM:在机器翻译、语音识别、文本生成、情感分析、时间序列预测等需要理解长期依赖关系和处理长序列数据的任务中广泛应用 。
相关文章:
LLM 学习(二 完结 Multi-Head Attention、Encoder、Decoder)
文章目录 LLM 学习(二 完结 Multi-Head Attention、Encoder、Decoder)Self-Attention (自注意力机制)结构多头注意力 EncoderAdd & Norm 层Feed Forward 层 EncoderDecoder的第一个Multi-Head AttentionMasked 操作Teacher Fo…...
GET3D:从图像中学习的高质量3D纹理形状的生成模型
【摘要】 本文提出了GET3D,这是一种新的生成模型,能够生成具有任意拓扑结构的高质量3D纹理网格,可以直接被3D渲染引擎使用并在下游应用中立即使用。现有的3D生成模型要么缺乏几何细节,要么生成的网格拓扑受限,通常不支持纹理,或者在生成过程中使用神经渲染器,使得它们在…...
JmeterHttp请求头管理出现Unsupported Media Type问题解决
JmeterHttp请求头管理出现Unsupported Media Type问题解决 大多数的app与pc端压测的时候都会出现这种情况 当我们在jemter测试当中当中遇见Unsupported Media Type,有一种可能就是我们请求的网页的content-Type的类型与我们测试的时候的类型不一致 解决方法 可以添…...
Python 性能优化:从入门到精通的实用指南
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
Vue23Web 基礎性拉滿的面試題(2025版)還沒更新完...
Vue2&3 基礎性1. 關於Vue2和Vue3生命週期的差別2. Vue2&3組件之間傳參不同點Vue2 傳遞與接收Vue3 傳遞與接收 (使用script setup語法糖)Vue3 傳遞與接收 (不使用script setup語法糖) 3. Vue2&3 keep-alive 組件Vue2 keep-aliveVue3 keep-alive 進階性爲什麽POST請求…...
Python基于Django的医用耗材网上申领系统【附源码、文档说明】
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
STM32使用无源蜂鸣器
1.1 介绍: 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定 无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同…...
9.1go结构体
Go不是完全面向对象的,没有类的概念,所以结构体应该承担了更多的责任。 结构体定义 使用 type 和 struct 关键字定义: type Person struct { Name string Age int } 字段可以是任意类型,包括其他结构体或指针。 字段名以大写…...
Ubuntu20.04本地配置IsaacLab 4.2.0的G1训练环境(一)
Ubuntu20.04本地配置IsaacLab的G1训练环境(一) 配置Omniverse环境配置IsaacSim配置IsaacLab 写在前面,如果Ubuntu剩余空间低于60G,则空间不足,除非你不需要资产包。但资产包中却包含了G1模型、Go2模型等机器人模型和代…...
全星FMEA软件:汽车电子行业研发管理高效之选
全星FMEA软件:汽车电子行业研发管理高效之选 在汽车电子行业,FMEA(失效模式与影响分析)是确保产品质量和安全的关键工具。然而,传统的FMEA分析过程往往繁琐复杂,耗费大量时间和精力。 全星FMEA软件应运而生…...
AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台
AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台 目录 AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台 一、简单介绍 二、Docker 下载安…...
OpenCV计算摄影学(18)平滑图像中的纹理区域同时保留边缘信息函数textureFlattening()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::textureFlattening 是 OpenCV 中用于图像处理的一个函数,旨在平滑图像中的纹理区域,同时保留边缘信息。该技术特别适…...
RLock类详细介绍、应用场景和示例代码
概述 org.redisson.api.RLock 是 Redisson 提供的 分布式可重入锁(类似 ReentrantLock),基于 Redis 实现,常用于 分布式环境 下的 并发控制。 1. RLock 详解 🔹 特点 基于 Redis 实现,支持 集群环境。可…...
【HeadFirst系列之HeadFirst设计模式】第16天之生成器模式(Builder Pattern):让对象构建更优雅!
🚀 生成器模式(Builder Pattern):让对象构建更优雅! “遇到复杂对象构建?试试生成器模式!” 在日常开发中,我们经常会遇到 创建对象属性过多、构造方法过长、可选参数混乱 的问题。这…...
Browser Use+DeepSeek的使用教程
browser-use webui 主要功能 提供了全新的网页界面,简单好用,方便操作。 支持更多大语言模型,比如 Gemini、OpenAI、Azure 等,还有最近爆火的国产大模型 DeepSeek,未来还会加更多。 支持用自己的浏览器,不用…...
“此电脑”中删除WPS云盘方法(百度网盘通用)
📣此方法适用于卸载WPS云盘后,WPS云盘图标依然在此电脑中显示的问题。 原理:通过注册来进行删除 步骤: WIN键R,打开运行窗口,输入regedit命令,来打开【注册表编辑器】; 从左侧,依…...
1. 树莓派上配置机器人环境(具身智能机器人套件)
1. 安装树莓派系统 镜像下载地址(windows/Mac/Ubuntu),安装Pi5. 2. 环境配置(登录Pi系统) 2.1 启用 SSH From the Preferences menu, launch Raspberry Pi Configuration. Navigate to the Interfaces tab. Select Enable…...
正则表达式(2)匹配规则
正则表达式的匹配规则定义了如何识别字符串中的特定模式。这些规则包括字符类匹配、元字符匹配、数量词、字符转义和分组。 字符类匹配 字符类匹配允许你指定一个字符集合,并匹配该集合中的任意单个字符。这是通过方括号 [] 来实现的。 简单字符类:[abc…...
Golang实践录:go发布版本信息收集
go发布版本信息收集。 背景 本文从官方、网络资料收罗有关go的发布历史概况。主要目的是能快速了解golang不同版本的变更。鉴于官方资料为英文,为方便阅读,使用工具翻译成中文,重要特性参考其它资料补充/修改。由于发布版本内容较多…...
go:windows环境下安装Go语言
1.下载 打开Go语言中文网下载页面: https://studygolang.com/dl 按照对应平台选择下载: https://studygolang.com/dl/golang/go1.19.2.windows-amd64.msi。 2.安装 双击下载好的文件 记下安装路径,删除末尾的反斜杠: C:\Program…...
遵义市招生管理信息系统的开发与实现
近年来,随着信息技术的发展,各类管理系统在教育领域得到广泛应用。本文将介绍如何开发一个基于Web的招生管理信息系统,以提高遵义市招生工作的效率和透明度。 系统架构设计 本系统采用典型的三层架构,包括表示层、业务逻辑层和数…...
Java 大视界 -- 区块链赋能 Java 大数据:数据可信与价值流转(84)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
Pytest自动化框架
目录 Pytest简单介绍 第一章:Pytest console命令 1.pytest -v 参数 -h 参数 其他一些参数:仅供参考 第二章. mark标记 pytest.mark.skip pytest.mark.skipif pytest.mark.xfail 编辑 pytest.mark.patametrize 单个参数 多个参数 直接…...
算法之 前缀和
文章目录 前缀和基础3427.变长子数组求和 前缀和与哈希表1524.和为奇数的子数组数目 距离和1685.有序数组中绝对值之和 前缀异或和1177.构建回文串检测 其他一维前缀和1310.子数组异或查询 二维前缀和1314.矩阵区域和 前缀和,就是定义pre[i] 为nums的前i个元素的和值…...
【Windows下Gitbook快速入门使用】
Windows下Gitbook快速入门使用 1 工具安装1.1 Node.js下载安装1.1 环境变量1.2 npm配置1.3 安装gitbook 2 gitbook使用2.1 gitbook 无法执行2.2 gitbook常用命令 Gitbook是一个软件,使用Git和Markdown来编排书本; GitBook helps you pushlish beautiful …...
python网络爬虫开发实战之基本库使用
目录 第二章 基本库的使用 2.1 urllib的使用 1 发送请求 2 处理异常 3 解析链接 4 分析Robots协议 2.2 requests的使用 1 准备工作 2 实例引入 3 GET请求 4 POST请求 5 响应 6 高级用法 2.3 正则表达式 1 实例引入 2 match 3 search 4 findall 5 sub 6 com…...
【hello git】git rebase、git merge、git stash、git cherry-pick
目录 一、git merge:保留了原有分支的提交结构 二、git rebase:提交分支更加整洁 三、git stash 四、git cherry-pick 共同点:将 一个分支的提交 合并到 到另一个上分支上去 一、git merge:保留了原有分支的提交结构 现有一个模型…...
deepseek、腾讯元宝deepseek R1、百度deepseekR1关系
分析与结论 区别与联系 技术基础与定制方向: DeepSeek官网R1版本:作为基础版本,通常保留通用性设计,适用于广泛的AI应用场景(如自然语言处理、数据分析等)。其优势在于技术原生性和官方直接支持。腾讯元宝…...
DeepSeek + 沉浸式翻译 打造智能翻译助手
本文详细介绍如何使用 DeepSeek API 沉浸式翻译插件打造个性化翻译助手。 一、DeepSeek API 配置 基础配置 API 基础地址:https://api.deepseek.com需要申请 API Key支持与 OpenAI SDK 兼容的调用方式 可用模型 deepseek-chat:已升级为 DeepSeek-V3&am…...
iOS 聊天 IM 消息收发管理工具
iOS 聊天 IM 消息收发管理工具 连续疯狂加班告一段落,趁着离职前夕的空闲时间,整理一下重构相关的文档。之前写过两篇文章 iOS 客户端 IM 以及列表 UI 框架 、iOS 客户端 IM 消息卡片插件化,突然发现时间过的真的很快,这都已经是…...
从零开始学习Slam--数学概念
正交矩阵 矩阵的转置等于它的逆矩阵,这样的矩阵称之为正交矩阵 即: Q T Q I Q^T Q I QTQI, 这样的矩阵列向量都是单位向量且两两正交。 旋转矩阵属于特殊的正交群,即SO(n),这里n通常是3,所以SO(3)就是…...
3.使用ElementUI搭建侧边栏及顶部栏
1. 安装ElementUI ElementUI是基于 Vue 2.0 的桌面端组件库。使用之前,需要在项目文件夹中安装ElementUI,在终端中输入以下命令,进行安装。 npm i element-ui -S并在main.js中引入ElementUI 2. 使用elmentUI组件进行页面布局 2.1 清空原…...
pandas-基础(数据结构及文件访问)
1 Pandas的数据结构 1.1 Series 特点:一维的数据型对象,包含一个值序列和数据标签(即索引) 创建Series: pandas.Series(dataNone, indexNone, dtypeNone, nameNone, copyFalse, fastpathFalse) 参数说明: data&a…...
windows下使用msys2编译ffmpeg
三种方法: 1、在msys2中使用gcc编译 2、在msys2中使用visual studio编译(有环境变量) 3、在msys2中使用visual studio编译(无环境变量) 我的环境: 1、msys2-x86_64-20250221 2、vs2015 3、ffmpeg-7.1…...
Linux驱动开发(1.基础创建)
序言:从高层逻辑到底层硬件的回归 在当今的软件开发中,我们习惯于用高级语言构建抽象层——通过框架、库和云服务快速实现功能。这种“软逻辑”的便利性让开发效率倍增,却也逐渐模糊了我们对计算机本质的认知:一切代码终将落地为…...
长短期记忆网络(LSTM)学习指南
长短期记忆网络(LSTM)学习指南 1. 定义和背景 长短期记忆网络(Long Short-Term Memory, LSTM)是一种递归神经网络(RNN)的变体,旨在解决传统RNN在处理长期依赖关系时遇到的梯度消失或爆炸问题。…...
蓝耘智算平台助力阿里万相2.1:文生图创作攻略
声明:非广告,为用户体验文章 目录 引言 一、认识蓝耘智算平台与阿里万相 2.1 (一)蓝耘智算平台概述 (二)阿里万相 2.1 文生图技术解析 二、蓝耘智算平台注册与环境准备 (一)注…...
HarmonyOS ArkTS声明式UI开发实战教程
引言:为何选择ArkTS? 在HarmonyOS生态快速发展的当下,ArkTS作为新一代声明式UI开发框架,正在引发移动应用开发范式的变革。笔者曾在多个跨平台框架开发中经历过"命令式编程之痛",直到接触ArkTS后才发现&…...
电脑总显示串口正在被占用处理方法
1.现象 在嵌入式开发过程中,有很多情况下要使用串口调试,其中485/422/232转usb串口是非常常见的做法。 根据协议,接口芯片不同,需要安装对应的驱动程序,比如ch340,cp2102,CDM212364等驱动。可…...
linux 安装nvidia 驱动所有发行版通用
之前有写过Ubuntu安装驱动的手册: https://blog.csdn.net/qq_50247813/article/details/146062785 到官网寻找合适的驱动: https://www.nvidia.cn/drivers/lookup 直接选择 linux 64-bit 适用于所有x86构架的linux,arm需要选择arm架构。 这次…...
PHP之数组
在你有别的编程语言的基础下,你想学习PHP,可能要了解的一些关于数组的信息。 PHP中的数组不用指定数据类型,同时索引不一定是数字。 与其说是数组,其实更像map。 创建和输出 $arr array(1, 2, 3); $arr1 [1, 2, 3]; var_dump(…...
【js逆向】图灵爬虫练习平台 第十五题
地址:aHR0cHM6Ly9zdHUudHVsaW5ncHl0b24uY24vcHJvYmxlbS1kZXRhaWwvMTUv 不一样的两个值 hook cookie两次执行出现密文v值 最主要是这个函数 直接扣整个js代码,然后补环境即可,可以参考 同花顺那篇文章,有讲 关键代码 var rt;!funct…...
LeetCode 1328.破坏回文串:贪心
【LetMeFly】1328.破坏回文串:贪心 力扣题目链接:https://leetcode.cn/problems/break-a-palindrome/ 给你一个由小写英文字母组成的回文字符串 palindrome ,请你将其中 一个 字符用任意小写英文字母替换,使得结果字符串的 字典…...
【商城实战(11)】解锁商品搜索与筛选功能,提升用户购物体验
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
Android AudioFlinger(五)—— 揭开AudioMixer面纱
前言: 在 Android 音频系统中,AudioMixer 是音频框架中一个关键的组件,用于处理多路音频流的混音操作。它主要存在于音频回放路径中,是 AudioFlinger 服务的一部分。 上一节我们讲threadloop的时候,提到了一个函数pr…...
HTML-05NPM使用踩坑
2025-03-04-NPM使用踩坑 本文讲述了一个苦逼程序员在使用NPM的时候突然来了一记nmp login天雷,然后一番折腾之后,终究还是没有解决npm的问题😞😞😞,最终使用cnpm完美解决的故事。 文章目录 2025-03-04-NPM使用踩坑[toc…...
并发编程——累加器
目录 1 AtomicLong 1.1 核心功能 1.2 实现原理: (1)基于 Unsafe 的底层操作 (2) volatile字段的内存可见性 (3)CAS 操作与 ABA 问题 1.3 性能分析 1.4 使用场景 2 LongAdder 核心设计原理 1 分段存储 2 分散更新策略 3.处理高竞…...
LeetCode - 28 找出字符串中第一个匹配项的下标
题目来源 28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode) 题目解析 暴力解法 本题如果采用暴力解法的话,可以定义两个指针 i,j,其中 i 指针用于扫描 S(haystack)串,j 指针…...
人机交互革命:从触屏到脑波的13维战争
人机交互革命:从触屏到脑波的13维战争 一、交互维度大爆炸:重新定义人机沟通边界 当ChatGPT开始解析你的微表情,当Neuralink芯片能读取皮层信号,人机交互已突破【键鼠】的次元壁。我们正经历人类史上最大规模的感官革命ÿ…...
如何查看Elastic-Job在Zookeeper中的注册信息
目录 使用zkCli.sh脚本 1. 连接ZooKeeper 2. 查看根目录 3. 查看具体作业的注册信息 4. 退出ZooKeeper客户端 使用ZooInspector工具 1.下载并安装ZooInspector: 2.连接到Zookeeper服务器: 3.浏览服务节点: 4.查看服务实例数据: 注…...