LLM中的transformer结构学习(二 完结 Multi-Head Attention、Encoder、Decoder)
文章目录
- LLM中的transformer结构学习(二 完结 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中的transformer结构学习(二 完结 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中的transformer结构学习(二 完结 Multi-Head Attention、Encoder、Decoder)
文章目录 LLM中的transformer结构学习(二 完结 Multi-Head Attention、Encoder、Decoder)Self-Attention (自注意力机制)结构多头注意力 EncoderAdd & Norm 层Feed Forward 层 EncoderDecoder的第一个Multi-Head AttentionMas…...
FreeSWITCH 之 chat
要把 FreeSWITCH 之 chat 完全研究清楚,似乎不容易 发送,路由,接收 跟哪些模块有关 等等 咱一边查资料,一边整理,不着急 先看看 Kamalio 怎么发 MESSAGE loadmodule "uac.so"route[uac_send_message] {…...
本地fake server,
C# 制作的系统级tcp 重定向,整个系统只要有访问指定url,返回自定义内容到访问端。不局限在浏览器单一方面。 再者请理解这个图的含金量,服务器down机都可以模拟。 用途那就太多了,当然很多用途都不正当。嘿嘿 如果你很想要源代…...
用Deepseek写一个 HTML 和 JavaScript 实现一个简单的飞机游戏
大家好!今天我将分享如何使用 HTML 和 JavaScript 编写一个简单的飞机游戏。这个游戏的核心功能包括:控制飞机移动、发射子弹、敌机生成、碰撞检测和得分统计。代码简洁易懂,适合初学者学习和实践。 游戏功能概述 玩家控制:使用键…...
解析 SQL,就用 sqlparse!
文章目录 解析 SQL,就用 sqlparse!一、背景:为什么你需要 sqlparse?二、什么是 sqlparse?三、如何安装 sqlparse?四、简单易用的库函数1\. parse(sql)2\. format(sql, **options)3\. split(sql)4\. get_typ…...
Flask 全栈学习指南
一、Flask 基础核心 1. 核心概念与启动流程 WSGI 与 Werkzeug Flask 基于 Werkzeug 实现 WSGI 协议,处理 HTTP 请求到响应的全流程。手动实现 WSGI 应用示例:def simple_app(environ, start_response):status 200 OKheaders [(Content-type, text/pla…...
git的使用
1、git的安装(windows10) 网址:Git - Downloading Package全部默认安装就好。在任意文件夹中右击,列表中出现git即为安装成功。 2、git的基本配置 右击打开git bash设置用户信息 git config --global user.name "username…...
MQTT协议下温度数据上报观测云最佳实践
MQTT 介绍 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级的、基于发布/订阅模式的消息传输协议,专为低带宽、高延迟或不可靠的网络环境设计,广泛应用于物联网(IoT…...
什么是Flask
Flask是Python中一个简单、灵活和易用的Web框架,适合初学者使用。它提供了丰富的功能和扩展性,可以帮助开发者快速构建功能完善的Web应用程序。 以下是Python Flask框架的一些特点和功能: Flask 是一个使用 Python 编写的轻量级 WSGI 微 Web…...
数字投屏叫号器-发射端python窗口定制
窗口 本系列前章介绍,叫号器的显示端,完成了视频音频的形成和传输的介绍。本章节开始定制小窗口。 最终实现,处于桌面最前端,发送指令,集合前篇即可完成: 处理本地text.txt更新,随之被rtsp采集…...
文本转语音-音画适时推送rtsp并播放
文本语音 rtsp适时播放叫号系统的底层逻辑 发布Linux, unix socket 和window win32做为音频源的 python10下的(ffmpeg version 7.1) 可运行版本. 这两天在弄这个,前2篇是通过虚拟声卡,达到了最简单的一个逻辑,播放文本就从声卡发声࿰…...
clickhouse修改和删除数据
标题:ClickHouse中修改和删除数据的简易指南 在大数据时代,数据库技术的发展日新月异。作为一款专为实时分析设计的列式数据库管理系统,ClickHouse因其高效的查询性能而受到欢迎。照这么推测的话,对于那些习惯于传统SQL操作&…...
2025CSP-J 冲刺训练(1):二分
2025CSP-J 冲刺训练 1 一、二分查找函数1. 头文件2. 前提条件3. 功能函数3.1 lower_bound3.2 upper_bound 二、二分答案模板1. 前提条件2. 模板 三、典型例题1. 寻找固定的和1.1 审题1.2 分析1.3 参考答案 2. Snuke Festival2.1 审题2.2 分析2.3 参考答案 四、拓展例题1. 晒衣服…...
无公网IP也能远程控制Windows:Linux rdesktop内网穿透实战
文章目录 前言1. Windows 开启远程桌面2. Linux安装rdesktop工具3. Win安装Cpolar工具4. 配置远程桌面地址5. 远程桌面连接测试6. 设置固定远程地址7. 固定地址连接测试 前言 如今远程办公已经从一种选择变成了许多企业和个人的必修课,而如何在Linux系统上高效地访…...
Win10 访问 Ubuntu 18 硬盘
目录 方案一:使用Samba共享服务Ubuntu 18 端配置Windows 10 端访问 方案二:使用 SSHFS(需在 Windows 上安装 SSH 客户端)Ubuntu 18 端配置Windows 10 端配置 方案三:使用 FTP 服务Ubuntu 18 端配置Windows 10 端访问 方…...
算法.习题篇
算法 — 地大复试 模拟 while循环和MOD循环计数 1.约瑟夫问题 http://bailian.openjudge.cn/practice/3254 using namespace std;bool isNoPeople(vector<bool> c)//判断当前数组是否一个小孩都没有了 {bool nopeople true;for (bool ival : c){if ( ival true)nop…...
upload-labs文件上传
第一关 上传一个1.jpg的文件,在里面写好一句webshell 保留一个数据包,将其中截获的1.jpg改为1.php后重新发送 可以看到,已经成功上传 第二关 写一个webshell如图,为2.php 第二关在过滤tpye的属性,在上传2.php后使用b…...
一二三应用开发平台——能力扩展:多数据源支持
背景 随着项目规模的扩大,单一数据源已无法满足复杂业务需求,多数据源应运而生。 技术选型 MyBatis-Plus 的官网提供了两种多数据源扩展插件:开源生态的 <font style"color:rgb(53, 56, 65);">dynamic-datasource</fon…...
【Python】整数除法不正确,少1的问题,以及有关浮点数转换的精度问题
1. 问题 今天在做leetcode 不同路径 的时候发现了个问题 对于m53 n4class Solution:def uniquePaths(self, m: int, n: int) -> int:rlt 1for i in range(0, m-1):rlt * (m n - 2 - i)for i in range(0, m-1):rlt / (i 1)return int(rlt)为什么这个结果是 26234class S…...
【贪心算法】简介
1.贪心算法 贪心策略:解决问题的策略,局部最优----》全局最优 (1)把解决问题的过程分成若干步 (2)解决每一步的时候,都选择当前看起来的“最优”的算法 (3)“希望”得…...
狮子座大数据分析(python爬虫版)
十二星座爱情性格 - 星座屋 首先找到一个星座网站,作为基础内容,来获取信息 网页爬取与信息提取 我们首先利用爬虫技术(如 Python 中的 requests 与 BeautifulSoup 库)获取页面内容。该页面(xzw.com/astro/leo/&…...
【商城实战(20)】商品管理功能深化实战
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
YC 孵化项目 Pinch:实时语音翻译视频会议平台;Mistral OCR:能处理多语言多模态复杂文档丨日报
开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 …...
数据库原理6
1.数据是信息的载体 2.数据库应用程序人员的主要职责:编写应用系统的程序模块 3.关系规范化理论主要属于数据库理论的研究范畴 4.数据库主要有检索和修改(包括插入,删除,更新)两大操作 5.概念模型又称为语义模型。…...
深度学习与大模型基础-向量
大家好!今天我们来聊聊向量(Vector)。别被这个词吓到,其实向量在我们的生活中无处不在,只是我们没注意罢了。 1. 向量是什么? 简单来说,向量就是有大小和方向的量。比如你从家走到学校&#x…...
OpenManus:3小时复刻 Manus(OpenManus安装指南)
项目地址:GitHub - mannaandpoem/OpenManus: No fortress, purely open ground. OpenManus is Coming. 安装指南 我们提供两种安装方式。推荐使用方式二(uv),因为它能提供更快的安装速度和更好的依赖管理。 方式一:使…...
2025年渗透测试面试题总结-快某手-安全实习生(一面、二面)(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 快某手-安全实习生 一面 一、Linux操作:查看进程PID的5种方法 二、Elasticsearch&#x…...
【微信小程序】uniapp开发微信小程序
uniapp开发微信小程序 1、上拉加载 下拉刷新 import { onReachBottom, onPullDownRefresh } from dcloudio/uni-app;配置允许下拉刷新: {"path" : "pages/pet/pet","style" : {"navigationBarTitleText" : ""…...
动态规划_最大子数组和
53. 最大子数组和 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 示例 1:输入:nums [-2,1,-3,4,-1,2,1,-5,4] …...
从零开始的python学习(五)P71+P72+P73+P74
本文章记录观看B站python教程学习笔记和实践感悟,视频链接:【花了2万多买的Python教程全套,现在分享给大家,入门到精通(Python全栈开发教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p6&share_sourcecopy_web&v…...
Vue3实战学习(Element-Plus常用组件的使用(输入框、下拉框、单选框多选框、el-image图片))(上)(5)
目录 一、Vue3工程环境配置、项目基础脚手架搭建、Vue3基础语法、Vue3集成Element-Plus的详细教程。(博客链接如下) 二、Element-Plus常用组件使用。 (1)el-input。(input输入框) <1>正常状态的el-input。 <2>el-input的disable状态。 <3…...
HarmonyOS学习第18天:多媒体功能全解析
一、开篇引入 在当今数字化时代,多媒体已经深度融入我们的日常生活。无论是在工作中通过视频会议进行沟通协作,还是在学习时借助在线课程的音频讲解加深理解,亦或是在休闲时光用手机播放音乐放松身心、观看视频打发时间,多媒体功…...
多模态融合的分类、跨模态对齐的方法
两者的主要区别 维度扩模态对齐扩模态融合目标对齐模态间的表示,使其语义一致融合模态间的信息,生成联合表示关注点模态间的相似性和语义一致性模态间的互补性和信息整合空间映射到共享的公共语义空间生成新的联合特征空间方法对比学习、共享空间、注意…...
软件高级架构师 - 软件工程
补充中 测试 测试类型 静态测试 动态测试 测试阶段 单元测试中,包含性能测试,如下: 集成测试中,包含以下: 维护 遗留系统处置 高水平低价值:采取集成 对于这类系统,采取 集成 的方式&…...
Uniapp项目运行到微信小程序、H5、APP等多个平台教程
摘要:Uniapp作为一款基于Vue.js的跨平台开发框架,支持“一次开发,多端部署”。本文将手把手教你如何将Uniapp项目运行到微信小程序、H5、APP等多个平台,并解析常见问题。 一、环境准备 在开始前,请确保已安装以下工具…...
【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?
文章目录 🌍一. 数据交换--JSON❄️1. JSON介绍❄️2. JSON 快速入门❄️3. JSON 对象和字符串对象转换❄️4. JSON 在 java 中使用❄️5. 代码演示 🌍二. 异步请求--Ajax❄️1. 基本介绍❄️2. JavaScript 原生 Ajax 请求❄️3. JQuery 的 Ajax 请求 &a…...
2025-03-10 吴恩达机器学习1——机器学习概述
文章目录 1 监督学习1.1 回归1.2 分类 2 无监督学习2.1 聚类2.2 异常检测2.3 降维 3 使用 Jupyter Notebook 1959 年,Arthur Samuel 将机器学习定义如下: Field of study that gives computers the ability to learn without being explicitly pro…...
Spring Boot整合WebSocket
目录 ?引言 1.WebSocket 基础知识 ?1.1 什么是 WebSocket? ?1.2 WebSocket 的应用场景 ?2.Spring Boot WebSocket 整合步骤 2.1 创建 Spring Boot 项目 2.2 添加 Maven 依赖 2.3 配置 WebSocket 2.4 创建 WebSocket 控制器 2.5 创建前端页面 引言 在…...
PostgreSQL - Windows PostgreSQL 下载与安装
Windows PostgreSQL 下载与安装 1、PostgreSQL 下载 下载地址:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 2、PostgreSQL 安装 启动安装程序 -> 点击 【Next】 指定安装路径 -> 点击 【Next】 默认勾选 -> 点击 【Next】 指…...
【Java面试题汇总】Java面试100道最新合集!
1.说说你对面向对象的理解 得分点 封装,继承,多态、概念、实现方式和优缺点 面向对象的三大基本特征是:封装、继承、多态。 封装:将对象的状态和行为包装在一个类中并对外界隐藏实现的细节,可以通过访问修饰符控制成员的访问权限,…...
【LLM】kimi 1.5模型架构和训练流程
note 推出两个多模态模型,深度思考模型 long-CoT 对标 o1,通用模型 short-CoT 模型对标 gpt-4o。 文章目录 note一、kimi 1.5模型训练流程预训练SFT训练long-CoT SFTRL训练long2short 小结Reference 一、kimi 1.5模型训练流程 推出两个多模态模型&…...
Android Studio 配置国内镜像源
Android Studio版本号:2022.1.1 Patch 2 1、配置gradle国内镜像,用腾讯云 镜像源地址:https\://mirrors.cloud.tencent.com/gradle 2、配置Android SDK国内镜像 地址:Index of /AndroidSDK/...
永洪科技深度分析实战,零售企业的销量预测
随着人工智能技术的不断发展,智能预测已经成为各个领域的重要应用之一。现在,智能预测技术已经广泛应用于金融、零售、医疗、能源等领域,为企业和个人提供决策支持。 智能预测技术通过分析大量的数据,利用机器学习和深度学习算法…...
Pytorch实现之利用CGAN鉴别真假图像
简介 简介:利用生成对抗网络来鉴别是真图像还是假图像。 论文题目:Detection and Identification of Fake Images Using Conditional Generative Adversarial Networks (CGANs) (基于条件生成对抗网络(CGAN)的假图像检测与识别) 会议:16th IEEE International Confer…...
开源模型时代的 AI 开发革命:Dify 技术深度解析
开源模型时代的AI开发革命:Dify技术深度解析 引言:AI开发的开源新纪元 在生成式AI技术突飞猛进的2025年,开源模型正成为推动行业创新的核心力量。据统计,全球超过80%的AI开发者正在使用开源模型构建应用,这一趋势不仅…...
网络DNS怎么更改?
访问速度慢或某些网站无法打开?改变网络DNS设置可能会帮助解决这些问题。本文将详细介绍如何更改网络DNS,包括更改的原因、具体步骤。 一、为什么要更改DNS? 更改DNS的原因有很多,以下是一些主要的考虑因素:某些公共DNS服务器的响应速度比…...
计算机网络篇:基础知识总结与基于长期主义的内容更新
基础知识总结 和 MySQL 类似,我同样花了一周左右的时间根据 csview 对计算机网络部分的八股文进行了整理,主要的内容包括:概述、TCP 与 UDP、IP、HTTP,其中我个人认为最重要的是 TCP 这部分的内容。 在此做一篇目录索引…...
使用miniforge安装python并用pycharm打开使用
1.安装miniforge 参考文章:https://blog.csdn.net/loujiand/article/details/119976302 https://blog.csdn.net/qq_41946216/article/details/129481760 下载地址: 先从github下载miniforge:https://github.com/conda-forge/miniforge 2.使用conda命令…...
如何实现wordpress搜索自字义字段内容
有些网站需要根据自定义段字的内容来做为搜索项,比如,房产中介公司wordpress网站,需要搜索同一区域内容的楼盘,然后展示出内容。 不废话了,在function.php直接加上代码 add_action(posts_search, function($search, …...
【华为OD机考真题】- 星际篮球争霸赛(Java)
1. 题目描述 具体题目描述如下: 在星球争霸篮球赛对抗赛中,最大的宇宙战队希望每个人都能拿到 MVP,MVP 的条件是单场最高分得分获得者。 可以并列,所以宇宙战队决定在比赛中,尽可能让更多队员上场,并且让所有得分的选手…...