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…...
计算机网络软考
1.物理层 1.两个主机之间发送数据的过程 自上而下的封装数据,自下而上的解封装数据,实现数据的传输 2.数据、信号、码元 码元就是数字通信里用来表示信息的基本信号单元。比如在二进制中,用高电平代表 “1”、低电平代表 “0”,…...
从高资源到低资源语言的全覆盖:Manus AI的数据革命与迁移学习策略
在全球化语境下,多语言手写识别的最大挑战并非技术本身的复杂性,而是语言资源的极度不均衡——英语、中文等高资源语言拥有海量标注数据,而藏语、斯瓦希里语等低资源语言往往仅有零星样本。Manus AI通过数据生态构建与知识迁移技术,打破了这一资源垄断,实现了从高资源到低…...
《白帽子讲 Web 安全》之身份认证
目录 引言 一、概述 二、密码安全性 三、认证方式 (一)HTTP 认证 (二)表单登录 (三)客户端证书 (四)一次性密码(OTP) (五)多因…...
VBA 数据库同一表的当前行与其他行的主键重复判断实现方案
目的,判断是否主键重复,不重复则登录新数据,重复则不登录。 定义类型: DataRecord tableName 表名 rowNumber 行号 columnName 列名 data 数据 想要实现的代码逻辑如下: 模拟数据库的登录过程。假设…...
FreeRTOS第17篇:FreeRTOS链表实现细节05_MiniListItem_t:FreeRTOS内存优化
文/指尖动听知识库-星愿 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:深入FreeRTOS内核:从原理到实战的嵌入式开发指南 1 为什么需要迷你列表项? 在嵌入式系统中,内存资源极其宝贵。FreeRTOS为满足不同场景需求,设计了标准列表项(ListItem_…...
2025最新群智能优化算法:山羊优化算法(Goat Optimization Algorithm, GOA)求解23个经典函数测试集,MATLAB
一、山羊优化算法 山羊优化算法(Goat Optimization Algorithm, GOA)是2025年提出的一种新型生物启发式元启发式算法,灵感来源于山羊在恶劣和资源有限环境中的适应性行为。该算法旨在通过模拟山羊的觅食策略、移动模式和躲避寄生虫的能力&…...
网络基础(一)【网络发展/认识协议/网络 VS 系统/以太网通信原理/重谈协议/网络中的地址管理】
网络基础(一) 1. 网络的发展2. 认识协议3. 网络 VS 系统4. 以太网通信原理5. 重谈协议6. 网络中的地址管理 1. 网络的发展 最开始时,计算机之间相互独立。 但是为了协作完成一些任务,就产生了计算机之间相互通讯的需求,…...
支付宝当面付java,php,sdk下载
SDK & Demo 获取 - 支付宝文档中心 开放平台服务端 SDK 为了帮助开发者调用开放接口,支付宝提供了开放平台服务端 SDK,包含 Java、PHP、NodeJS、Python 和 .NET 等语言版本,DEMO 中封装了签名 & 验签、HTTP 接口请求等基础功能。 详…...
学习threejs,Animation、Core、CustomBlendingEquation、Renderer常量汇总
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️Animation常量汇总1.1.1 循…...
常用无功功率算法的C语言实现(二)
0 前言 尽管数字延迟法和积分移相法在不间断采样的无功功率计算中得到了广泛应用,但它们仍存在一些固有缺陷。 对于数字延迟法而言,其需要额外存储至少1/4周期的采样点,在高采样频率的场景下,这对存储资源的需求不可忽视。而积分移相法虽然避免了额外的存储开销,但为了抑制…...
易基因特异性R-loop检测整体研究方案
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 01.技术简述 R-loop是由DNA:RNA 杂交体和被置换的单链DNA组成的三链核酸结构,广泛参与基因转录、表观遗传调控及DNA修复等关键生物学过程。异常的R-loop积累会导致基因组不稳…...
装饰器模式--RequestWrapper、请求流request无法被重复读取
目录 前言一、场景二、原因分析三、解决四、更多 前言 曾经遇见这么一段代码,能看出来是把request又重新包装了一下,核心信息都不会改变 后面了解到这叫 装饰器模式(Decorator Pattern) :也称为包装模式(Wrapper Pat…...
STM32-I2C通信协议
目录 一:什么是I2C通信协议 二:I2C通信 三:I2C时序图 四:面试常见问题 一:什么是I2C通信协议 I2C(Inter-Integrated Circuit)协议是一种串口通信协议,用于在集成电路之间传输数…...
Unity开发——CanvasGroup组件介绍和应用
CanvasGroup是Unity中用于控制UI的透明度、交互性和渲染顺序的组件。 一、常用属性的解释 1、alpha:控制UI的透明度 类型:float,0.0 ~1.0, 其中 0.0 完全透明,1.0 完全不透明。 通过调整alpha值可以实现UI的淡入淡…...
头歌作业-mysql数据库系统(全部)
每个作业只包含重要的建表代码,需要先进入数据库,创建基本的数据库之后才能使用下述命令创建表结构 MySql数据库-初识MySql 第一关:创建数据库 create database MyDb;第二关:创建表 create table t_emp(id int,name varchar(32…...
DeepSeek开启AI办公新模式,WPS/Office集成DeepSeek-R1本地大模型!
从央视到地方媒体,已有多家媒体机构推出AI主播,最近杭州文化广播电视集团的《杭州新闻联播》节目,使用AI主持人进行新闻播报,且做到了0失误率,可见AI正在逐渐取代部分行业和一些重复性的工作,这一现象引发很…...
mitt 依赖库详解
一、概述 mitt 是一个极其轻量级的 JavaScript 事件发射器库,实现了发布-订阅模式。该模式允许对象间松散耦合,一个对象(发布者)可以发布事件,而其他对象(订阅者)可以监听这些事件并作出响应。…...
C语言100天练习题【记录本】
C语言经典100题(手把手 编程) 可以在哔哩哔哩找到(url:C语言经典100题(手把手 编程)_哔哩哔哩_bilibili) 已解决的天数:一,二,五,六,八…...
DeepSeek【部署 03】客户端应用ChatBox、AnythingLLM及OpenWebUI部署使用详细步骤
DeepSeek客户端应用 1.ChatBox2.AnythingLLM3.OpenWebUI4.总结 客户端软件提供可视化的模型及参数配置,人性化的对话窗口及文件上传功能,大大降低了大模型的使用门槛。 1.ChatBox Chatbox AI 是一款 AI 客户端应用和智能助手,支持众多先进的…...
Python图形编程之EasyGUI: msgbox的用法
1 EasyGUI: msgbox的用法 1.1 基础用法:只显示信息 示例代码: from easygui import * msgbox("Hello, world!")效果: 1.2 扩展用法1:设置标题 示例代码: from easygui import * msgbox("Hello, …...
计算机底层知识一——从编程语言到可执行程序
好久没写博客了,近段时间事情比较杂,最近终于有时间回归了。其余代码写久了就会遇到许多奇奇怪怪的问题,这些问题绕不开许多底层知识,比如缺少动态依赖库、idea编译失败等等,虽然通过百度等搜索引擎,亦或是…...
中性点直接接地电网接地故障Simulink仿真
1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2017Ra)软件。建议采用matlab2017 Ra及以上版本打开。(若需要其他版本可联系代为转换) 2.系统仿真图: 3.中性点直接接地电网接地故障基本概念(本仿…...
解决Jenkins默认终止Shell产生服务进程的问题
1、Windows环境 Jenkins进行Build steps的使用Execute Windows batch command启动微服务(Jar包),Jenkins会默认终止Shell产生的服务进程,而在命令行能够正常运行的服务进程。 1.1 使用命令行启动服务是正常 使用命令行执行 正常…...
Spring Boot 项目中 Redis 常见问题及解决方案
目录 缓存穿透缓存雪崩缓存击穿Redis 连接池耗尽Redis 序列化问题总结 1. 缓存穿透 问题描述 缓存穿透是指查询一个不存在的数据,由于缓存中没有该数据,请求会直接打到数据库上,导致数据库压力过大。 解决方案 缓存空值:即使…...
STM32 I2C驱动开发全解析:从理论到实战 | 零基础入门STM32第五十步
主题内容教学目的/扩展视频I2C总线电路原理,跳线设置,I2C协议分析。驱动程序与调用。熟悉I2C总线协议,熟练调用。 师从洋桃电子,杜洋老师 📑文章目录 引言一、I2C驱动分层架构二、I2C总线驱动代码精析2.1 初始化配置&a…...
RuleOS:区块链开发的“破局者”,开启Web3新纪元
RuleOS:区块链开发的“破冰船”,驶向Web3的星辰大海 在区块链技术的浩瀚宇宙中,一群勇敢的探索者正驾驶着一艘名为RuleOS的“破冰船”,冲破传统开发的冰层,驶向Web3的星辰大海。这艘船,正以一种前所未有的姿…...
manus本地部署使用体验
manus部署 https://github.com/mannaandpoem/OpenManus git clone https://github.com/mannaandpoem/OpenManus.git 或者手工下载zip包解压,包很小,只有几百K。 cd OpenManus-main #创建python环境,有python3的可以用python3 python -m ven…...
OpenCV 拆分、合并图像通道方法及复现
视频讲解 OpenCV 拆分、合并图像通道方法及复现 环境准备:安装 OpenCV 库(pip install opencv-python) 内容: 1. 读取任意图片(支持 jpg/png 等格式) 2. 使用 split () 函数拆解成 3 个单色通道…...
manus本地部署方法研究测试
Manus本地部署方法,Manus邀请码实在太难搞了,昨晚看到有一个团队,5个人3个小时,一个完全免费、无需排队等待的OpenManus就做好了。 由于也是新手,找了好几轮,实在是没有找到合适的部署方法,自己…...
