在大型语言模型(LLM)框架内Transformer架构与混合专家(MoE)策略的概念整合
文章目录
- 传统的神经网络框架存在的问题
- 一. Transformer架构综述
- 1.1 transformer的输入
- 1.1.1 词向量
- 1.1.2 位置编码(Positional Encoding)
- 1.1.3 编码器与解码器结构
- 1.1.4 多头自注意力机制
- 二.Transformer分步详解
- 2.1 传统词向量存在的问题
- 2.2 详解编解码器中自注意力机制
- 2.2.1 缩放点积注意力机制
- 计算步骤
- 矩阵形式
- 2.2.2 softmax函数
- 2.2.3 多头机制
- 三.FNN与MoE策略
- 四.论文参考
- 4.1 迈向终极专家专业化-Mixture-of-Expert 语言模型
- 4.2 模型越狱-拒绝由LLMs单一方向调解
- 4.3 LLM MOE策略的演化
文章学习b站
Transformer模型详解,Attention is all you need
【Transformer速通指南】三天掌握自注意力机制!
- Transformer 是模型架构,是 LLM 和 MoE 的基础。其核心是自注意力机制(Self-Attention),摒弃了传统 RNN 和 CNN 的序列处理方式。作用实现不同维度领域的数据归一化。
- LLM 是基于 Transformer 的大规模应用模型。
- MoE 是一种优化架构的策略,用于扩展模型规模。
传统的神经网络框架存在的问题
传统神经网络框架存在一些局限性,具体如下:
-
循环神经网络(RNN):RNN在处理序列数据时,需要按照时间顺序逐步迭代计算每个时间步的结果。这种串行处理方式限制了模型的并行化能力,导致训练和推理过程相对缓慢。此外,RNN在捕捉长距离依赖关系时面临挑战,如梯度消失或爆炸问题,这进一步限制了其性能。
-
卷积神经网络(CNN):虽然CNN在处理具有局部结构的数据(如图像)方面表现出色,但在处理序列数据时存在一定的局限性。CNN通过滑动窗口机制捕捉局部特征,但难以直接建模长距离依赖关系,因为它们本质上是基于局部感受野的设计,缺乏全局视角。尽管可以通过堆叠多层卷积层来部分缓解这一问题,但这通常伴随着计算成本的增加和参数数量的增长。
-
Transformer模型:与上述两种架构不同,Transformer通过引入自注意力机制彻底改变了序列数据的处理方式。自注意力机制允许模型直接访问输入序列中的所有位置,并为每个位置分配不同的权重,即所谓的“关注度”。这种方式使得Transformer能够高效地捕捉长距离依赖关系,同时支持高度的并行化计算,从而显著提高了训练效率。在Transformer中,每个词都通过Q(查询)、K(键)和V(值)向量来计算与其他词的相关性,进而确定在整个上下文中该词的重要性。
综上所述,每种传统的神经网络架构都有其特定的应用场景和局限性。RNN擅长处理序列数据但受限于其串行特性;CNN在图像处理领域表现优异但对长距离依赖关系的支持有限;而Transformer则通过创新的自注意力机制解决了这些问题,提供了更强大的序列建模能力和更高的计算效率。这些特点使Transformer成为现代自然语言处理和其他涉及序列数据领域的首选架构之一。
一. Transformer架构综述
图1-1 transformer整体流程图
图1-2 transformer模型子结构示意图
整体分为下方输入单元、左侧编码器、右侧解码器、上侧推演结果,其中图1-1描述了transformer大致组件。图1-2描述了每个组件中重要的核心处理方法。
- Transformer的输入和输出是什么?
输入: Inputs,Outputs(shifted right)
输出:Output Probabilities
下列以模型处理英译汉为例解释transformer模型的整体运作过程。
1.1 transformer的输入
例如Are you OK ?
待翻译句子和标注数据 你好吗?
进入模型,经模型处理后输出 你干什么?
,如图1-3所示。
图1-3 数据输入输出示意图
1.1.1 词向量
在 Are you OK ?
和 你好吗?
进入模型时,具体会被模型的第一个组件词向量
处理,如图1-4所示。
图1-4 词向量层示意图
假设每个单词用4维向量表示,则["Are","you","OK","?"]
四个词的句子可以用4 * 4的词向量矩阵表示,每一行是一个词的词向量,如图1-5所示。
图1-5 待译数据词向量
同理,标注词["你","好吗","?"]
也会被处理成 3* 4的词向量矩阵,如图1-6所示。
图1-6 标注数据词向量
1.1.2 位置编码(Positional Encoding)
得到Input Embedding和Output Embedding的词向量后,transformer会对其进行位置编码。目的是把位置信息附加到原始的信息上。如图1-7所示。
图1-7 从词嵌入到位置编码示意图
在没有位置编码时
图1-8 词向量示意图
即模型可能当成You are OK ?
,OK ? you are
等进行处理。那么这样子就可能违背本意,如图1-8所示。
对于初学者而言,下面的讨论可能会显得晦涩难懂,不清楚其目的和实施的理由。这并不意外,因为这部分内容旨在提供一个整体框架或概览,而不会深入探讨每一个细节。现阶段,您无需过分担忧具体的实现步骤或背后的原理。当前的重点在于理解这种方法的大致轮廓以及它试图达成的目标。具体的操作细节、技术术语以及每一步骤背后的原因将会在后续章节中详细展开。
为了帮助您更好地跟随学习进度,这里将给出一个高层次的概念性描述。首先,我们采取一种系统化的方法来解决问题,这种方法依赖于一系列预先设定的步骤和规则。这些步骤被设计成能够引导用户从问题的起始点顺利到达解决方案。虽然此时您可能对其中的具体操作流程感到困惑,但随着逐步深入的学习,每一个环节都将得到清晰的解释和实例说明。
位置编码会用正弦函数和余弦函数的计算实现
位置编码的正余弦公式
其中:
-
pos
表示词在序列中的位置。 -
i
表示编码向量中的维度索引。 -
d_model
表示模型嵌入维度大小。 -
对于偶数维度(即
i
是偶数),使用正弦函数:P E pos , 2 i = sin ( p o s 1000 0 2 i / d model ) PE_{\text{pos}, 2i} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) PEpos,2i=sin(100002i/dmodelpos)
-
对于奇数维度(即
i
是奇数),使用余弦函数:P E pos , 2 i + 1 = cos ( p o s 1000 0 2 i / d model ) PE_{\text{pos}, 2i+1} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) PEpos,2i+1=cos(100002i/dmodelpos)
其中,pos
表示词语在序列中的位置,i
表示该词语向量中的第 i
维度。d_model
表示总维度数
例如["Are","you","OK","?"]
中, "you"的索引下标为1,且前文假设词向量有4个维度(现设4个维度分别为维度0,维度1,维度2,维度3)。因此"you"的位置编码为PE(1,0),PE(1,1),PE(1,2),PE(1,3),如图1-9所示。
图1-9 位置编码示意图
再次说明,如上你可能看不懂为什么要这么做,后续在章节2中介绍自注意力机制,你会有所理解
1.1.3 编码器与解码器结构
图1-10 输入序列经过位置编码进入编解码器图
经过位置编码后,英文的待译数据和中文的标注数据分别输入到编码器和解码器中,会经过三个计算过程。如图1-11
图1-11 编解码器整体处理流程图
-
① 编码器会基于
自注意力机制(Multi-Head Attention)
,前馈神经网络(Feed Forward)
对"英文的待译数据"进行编码,如图1-12所示
图1-12 编码器处理流程图 -
② 解码器会基于 带有掩码的(Masked)自注意力机制(Multi-Head Attention)对"中文的标注数据"进行编码,如图1-13
图1-13 解码器处理流程图 -
③ 编码器-解码器注意力层: 对两组数据一起解码,得到解码器最终输出。如图1-14 所示。
图1-14 从编码器-解码器注意力层到解码器最终输出图
总体来说编解码器通过自注意力机制,和前馈神经网络将输入数据中的全局信息附加到解码结果并最终输出。如图1-15所示。
1.1.4 多头自注意力机制
图1-16 多头自注意力机制整体示意图
其中自注意力机制(Muti Head Self Attention)会分别使用多个自注意力机制对Q,K,V 三个线性层(Linear)对输入数据进行线性变换并使用缩放点积注意力机制(Scaled Dot Product Attention)将特征变换后的Q,K,V进行结合,最后使用fc线形层整合多头结果。 如图1-17所示。
图1-17 自注意力机制计算流程图
图1-18 自注意力机制源码实现图
在章节2,我们会详细介绍Q,K,V参数的作用,为什么是这样搞。
以编码器中的自注意力机制层,说明自注意力机制是如何工作的。首先输入的数据是经过位置编码后的["Are","you","ok","?"]
,其黄色表示["Are","you","ok","?"]
的词向量矩阵,分别于Q,K,V进行线性变换得到,三组结果qx,kx,vx。如图1-19所示。
图1-19 举例说明自注意力机制计算流程图
接着将三组结果交给缩放点积注意力机制
整合成最终结果。
关于自注意力机制和缩放点积注意力机制将在第二章详细介绍。
二.Transformer分步详解
在之前的概述中,您可能对编码器与解码器之间的映射关系感到困惑,不明白为何需要通过Q(查询)、K(键)和V(值)来进行信息处理和统一归一化为啥是softmax函数处理,以及为何位置编码采用了正余弦函数的形式,。接下来,我们将详细探讨这些问题,以期为您提供清晰的理解。
首先,让我们明确编码器和解码器在序列到序列(Seq2Seq)任务中的角色。编码器的任务是将输入序列转换为一个固定长度的内部表示形式,通常称为上下文向量或特征向量。这个内部表示捕捉了输入序列的关键信息,并将其压缩成一个抽象表达。而解码器则接收这个内部表示,并逐步生成输出序列,每一步都可能依赖于前一步的输出以及从编码器传递过来的上下文信息。这种结构使得模型能够处理不同长度的输入和输出序列,适用于如机器翻译、文本摘要等任务。
接下来,讨论Q、K、V的概念及其在自注意力机制中的应用。在Transformer架构中,为了有效处理输入序列中不同位置之间的关系,每个输入都需要经过线性变换,从而生成Q、K、V三个不同的向量。这些向量分别代表查询、键和值,它们的作用在于计算序列中元素间的相似度并确定权重,以便实现对不同位置信息的有效区分。
最后,我们来解释为什么位置编码采用正余弦函数。由于Transformer模型缺乏像循环神经网络(RNNs)那样的递归结构或卷积神经网络(CNNs)那样的卷积结构,它无法直接识别序列中元素的位置信息。因此,位置编码被引入,其目的是赋予模型关于序列中各元素相对位置的知识。位置编码通常由正弦和余弦函数生成,确保每个位置都有独特的表示。选择正余弦函数的原因在于,这种方法可以保证对于任何给定的位置偏移,都可以通过固定的数学运算获得对应的编码,这有助于模型学习到位置间的相对距离关系。此外,正余弦函数的周期性特性允许模型处理任意长度的序列,而不会因为位置过远而导致位置信息丢失或混淆。
综上所述,通过对编码器和解码器的工作原理、QKV在自注意力机制中的作用以及位置编码为何采用正余弦函数的深入解析,希望能帮助您更准确地理解这些概念背后的逻辑和技术细节。
2.1 传统词向量存在的问题
预训练好的词向量一旦生成就保持不变,这意味着它们无法根据不同的语境灵活调整。例如:
- “它无法通过这条河,因为它太累了。” 在这句话中,“它”指的是某个行动者,比如一个人或动物,表明是由于疲劳导致无法过河。
- “它无法通过这条河,因为它太窄了。” 而在这句话里,“它”指的是河流本身,表示由于河道狭窄而不能通过。
如果词向量固定不变,那么在处理这两个句子时就会遇到问题,因为“它”这个词在两个句子中的含义完全不同。第一个句子中的“它”指的是执行动作的主体,而在第二个句子中则是指物体(河流)的一个属性(宽度)。这种情况下,固定的词向量无法准确捕捉到“它”在不同语境下的具体含义。
因此,虽然预训练词向量能够提供一个良好的起点,为词汇赋予基于大规模文本数据学习得到的通用意义,但它们并不足以应对所有情况。为了更好地理解和区分词语在不同上下文中的意义,我们需要采用更先进的模型,如ELMo、BERT等,这些模型可以根据词语所在的特定环境动态调整词向量,从而更加精准地反映词语的实际用法和意义
。这样,即使是像“它”这样的代词,在不同的句子中也能被正确理解。
2.2 详解编解码器中自注意力机制
主要目标是使计算机能够在处理文本时,从上下文语句中识别并关注最关键的信息。Transformer模型通过其自注意力机制实现了这一目标,该机制允许模型根据输入序列的上下文动态地为每个词分配相应的权重。这意味着在解析一个句子或段落时,Transformer能够自动判断哪些词语对于理解整体意义最为重要,并给予这些词语在上下文词语中的关注度。如图2-1所示。
图2-1 transformer的自注意力词热度权重图
具体来说,在Transformer架构中,每个词首先被转化为三个向量:查询(Query)、键(Key)和值(Value)。通过计算查询向量与所有键向量之间的相似度得分,模型可以确定当前词与其他词的相关性,从而形成一个注意力分布。这个分布随后用于加权求和所有值向量,生成一个反映整个上下文中关键信息的新表示形式。这样,Transformer不仅能够捕捉到词汇间的直接联系,还能够理解更为复杂的依赖关系,确保了对文本深层次含义的准确把握。因此,借助于这种机制,Transformer可以在各种自然语言处理任务中更有效地利用信息,提高理解和生成文本的能力。
2.2.1 缩放点积注意力机制
Q用于“查找”,即寻找与当前位置相关的信息;K存储序列中每个位置的信息,供Q进行查询时使用(每个词的Q会跟整个序列中每一个K计算得分,然后基于得分再分配特征,如图2-2);V包含了实际的信息内容,根据Q和K的相似度(即注意力权重)进行加权求和。通过这种方式,模型能够动态地聚焦于输入序列中最相关的部分,从而更好地捕捉序列数据中的复杂依赖关系。
图2-2 与Q,K,V线性变换的关系图
假设我们有一个输入序列,其对应的查询向量为 Q Q Q,键向量为 K K K,值向量为 V V V。这些向量通常由线性变换从原始输入嵌入得到。
计算步骤
-
计算点积:对于每个查询 q i ∈ Q q_i \in Q qi∈Q,计算它与所有键 k j ∈ K k_j \in K kj∈K的点积。获取当前词与每个词的相关程度。
score ( q i , k j ) = q i T k j \text{score}(q_i, k_j) = q_i^T k_j score(qi,kj)=qiTkj
-
缩放分数:由于点积的结果大小与向量维度 d k d_k dk有关,为了防止梯度消失或爆炸,我们需要将得分除以 d k \sqrt{d_k} dk进行缩放。
scaled score ( q i , k j ) = q i T k j d k \text{scaled score}(q_i, k_j) = \frac{q_i^T k_j}{\sqrt{d_k}} scaled score(qi,kj)=dkqiTkj
-
应用softmax函数:对每个查询 q i q_i qi对应的键分数应用softmax函数,以获得最终的注意力权重 α i j \alpha_{ij} αij。
α i j = softmax j ( q i T k j d k ) = exp ( q i T k j d k ) ∑ k exp ( q i T k d k ) \alpha_{ij} = \text{softmax}_j\left(\frac{q_i^T k_j}{\sqrt{d_k}}\right) = \frac{\exp\left(\frac{q_i^T k_j}{\sqrt{d_k}}\right)}{\sum_{k}\exp\left(\frac{q_i^T k}{\sqrt{d_k}}\right)} αij=softmaxj(dkqiTkj)=∑kexp(dkqiTk)exp(dkqiTkj)
-
加权求和:最后,利用注意力权重对值向量 V V V进行加权求和,得到上下文向量 c i c_i ci。
c i = ∑ j α i j v j c_i = \sum_{j} \alpha_{ij} v_j ci=j∑αijvj
矩阵形式
在实践中,我们通常会同时处理多个查询,因此上述操作可以表示为矩阵运算的形式:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dkQKT)V
其中, Q ∈ R n × d k Q \in \mathbb{R}^{n \times d_k} Q∈Rn×dk, K ∈ R m × d k K \in \mathbb{R}^{m \times d_k} K∈Rm×dk, V ∈ R m × d v V \in \mathbb{R}^{m \times d_v} V∈Rm×dv分别是查询、键和值的矩阵, n n n是查询的数量, m m m是键/值的数量, d k d_k dk和 d v d_v dv分别是键和值的维度。
2.2.2 softmax函数
Softmax函数是一种归一化指数函数,它能够将一个K维向量z“压缩”到另一个K维实向量σ(z),使得每一个元素的范围都在(0,1)之间,并且所有元素的和为1。这样,输出就可以被解释为概率分布 1,即百分率占比,可以得出当前词与其余词的关系热度占比。
对于输入向量 Z = [ z 1 , z 2 , z 3 . . . . . z k ] Z = [z_1,z_2,z_3.....z_k] Z=[z1,z2,z3.....zk],Softmax函数定义如下
σ ( z ) i = e z i ∑ j = 1 K e z j \sigma(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} σ(z)i=∑j=1Kezjezi
数值稳定性的改进
为了避免数值溢出问题(例如上溢或下溢),通常会对输入进行平移操作,即从每个 z i z_i zi中减去最大值 max ( z ) \max(z) max(z):
σ ( z ) i = e z i − max ( z ) ∑ j = 1 K e z j − max ( z ) \sigma(\mathbf{z})_i = \frac{e^{z_i - \max(\mathbf{z})}}{\sum_{j=1}^{K} e^{z_j - \max(\mathbf{z})}} σ(z)i=∑j=1Kezj−max(z)ezi−max(z)
示例代码块
import numpy as npdef softmax(x):"""Compute softmax values for each sets of scores in x."""e_x = np.exp(x - np.max(x)) # 防止溢出return e_x / e_x.sum()# 测试数据
x = np.array([-3, 2, -1, 0])
print(softmax(x))
2.2.3 多头机制
在Transformer架构中,为了模拟CNN能够从不同角度提取多种特征的能力,采用了“多头注意力机制”(Multi-Head Attention)。这一机制通过不同的注意力头(Attention Head)并行地执行多个独立的自注意力过程。每个头都使用各自的学习参数来处理输入数据的不同子空间,从而允许模型捕捉到输入序列内的各种复杂依赖关系 。通常情况下,设置8个这样的头已经足够有效。
在完成多头注意力计算后,每个头会输出一个特征表示。这些独立的特征表示随后会被拼接在一起,形成一个综合的特征表示。接下来,为了整合这些信息并减少维度,通常会在拼接后的特征上应用一个全连接层(Fully Connected Layer),这一步骤有时也被称为降维处理。这样做的目的是将多头注意力机制得到的高维特征映射回模型需要的较低维度,以便后续处理或预测任务的执行。
三.FNN与MoE策略
MoE模型中的每个专家(Expert)通常采用前馈神经网络结构( FeadFoward Network 如全连接网络或卷积网络)。例如,在Transformer模型中,MoE层替换了传统的前馈子层,每个专家独立处理输入数据的子集,通过并行计算提升模型容量。门控网络(Gating Network)负责动态分配输入到不同专家,其本身也是一个前馈网络,通常包含Softmax或Gating Tree结构,用于生成专家选择的概率分布。
混合专家模型(Mixture of Experts,MoE)是一种先进的机器学习策略,它通过将多个专门训练的子模型(称为“专家”)结合起来,并使用一个或多个门控网络来控制这些专家输出的权重。这种方法旨在提高模型性能和效率,特别是在处理复杂数据模式时的大模型训练。
在MoE架构中,有三个关键组件:专家、门控网络和稀疏激活。每个专家都是针对特定任务或数据特征而训练的子模型。例如,在图像分类任务中,一个专家可能专门识别纹理,而另一个专家可能识别边缘或形状。这种分工有助于整个模型更高效地处理问题,因为每个专家只处理它最适合的数据类型。
图3-1 Figure 2 | DeepSeekMoE的示意图
由于论发表已经非常详尽,因此不再赘述。以下将会给出论文地址
四.论文参考
4.1 迈向终极专家专业化-Mixture-of-Expert 语言模型
DeepSeekMoE: Towards Ultimate Expert Specialization in
Mixture-of-Experts Language Models
4.2 模型越狱-拒绝由LLMs单一方向调解
Refusal in LLMs is mediated by a single direction
4.3 LLM MOE策略的演化
LLM MOE的进化之路,从普通简化 MOE,到 sparse moe,再到 deepseek 使用的 share_expert sparse moe
相关文章:
在大型语言模型(LLM)框架内Transformer架构与混合专家(MoE)策略的概念整合
文章目录 传统的神经网络框架存在的问题一. Transformer架构综述1.1 transformer的输入1.1.1 词向量1.1.2 位置编码(Positional Encoding)1.1.3 编码器与解码器结构1.1.4 多头自注意力机制 二.Transformer分步详解2.1 传统词向量存在的问题2.2 详解编解码…...
tolua[一]框架搭建,运行example
一.安装tolua https://github.com/topameng/tolua 下载LuaFramework_UGUI的zip 将Assets目录拷贝到项目根目录下 提示确认注册,遇到这个对话框点确定即可 生成如下目录 二.LuaFramework->Build Windows Resource 接下来的目标是将这个main场景跑起来 需要先执行…...
大数据项目4:基于spark的智慧交通项目设计与实现
项目概述 项目直达 www.baiyuntu.com 随着交通数据的快速增长,传统的交通管理方式已无法满足现代城市的需求。交通大数据分析系统通过整合各类交通数据,利用大数据技术解决交通瓶颈问题,提升交通管理效率。本项目旨在通过大数据技术&#…...
Vue 响应式渲染 - 条件渲染
Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue响应式渲染 - 条件渲染 目录 条件渲染 v-if v-if-else 模版template 物流状态显示判断 设置数据 不同状态渲染 总结 条件渲染 v-if 使用Vue条件判断显示和 隐藏。 示例如下: <!DOCTYPE html> …...
活动预告 |【Part1】Microsoft Azure 在线技术公开课:AI 基础知识
课程介绍 参加“Azure 在线技术公开课:AI 基础知识”活动,了解 AI 核心概念。参加我们举办的本次免费培训活动,了解组织如何使用 AI 技术克服实际挑战,以及如何借助 Azure AI 服务构建智能应用程序。本次培训适用于任何对 AI 解决…...
OpenSIPS-Dispatcher模块详解:优化SIP流量分发的利器
在 OpenSIPS 中,dispatcher 模块用于实现负载均衡和故障转移。通过 dispatcher 模块,你可以将 SIP 请求分发到一组后端服务器(如媒体服务器、代理服务器等),并根据配置的算法和策略动态调整分发逻辑。 模块功能使用样…...
深入理解linux中的文件(下)
目录 一、语言级缓冲区和内核级缓冲区 二、C语音中的FILE* fp fopen(“./file.txt”,"w"): 四、理解磁盘结构: 物理结构 逻辑结构 五、未被打开的文件: 六、更加深入理解inode编号怎么找到文件: 七、对路径结构进行…...
Deepseek系列从v3到R易背面经版
deepseek v3 base要点 MTP : Multi-Token Prediction 训练时: 1. 把前一个block中input tokens经过embedding layer和transformer block的输出,进入output head之前的内容记为h,与下一个block的input tokens经过embedding layer输出的内容都…...
SQLAlchemy 的内存消耗
为何要研究SQLAlchemy 的内存消耗问题?因为SQLAlchemy在应用中,绝大多数问题体现在应用人员对SQLAlchemy 的内存消耗问题不认知、不重视、不处理,最终造成整个系统的大问题,使SQLAlchemy 的性能大打折扣,最终影响了SQL…...
Centos Ollama + Deepseek-r1+Chatbox运行环境搭建
Centos Ollama Deepseek-r1Chatbox运行环境搭建 内容介绍下载ollama在Ollama运行DeepSeek-r1模型使用chatbox连接ollama api 内容介绍 你好! 这篇文章简单讲述一下如何在linux环境搭建 Ollama Deepseek-r1。并在本地安装的Chatbox中进行远程调用 下载ollama 登…...
vscode和pycharm的区别
VSCode(Visual Studio Code)和 PyCharm 是两款常用的 Python 开发工具,它们在功能和使用体验上有一些关键区别: 1. 核心定位 VSCode:轻量级、多语言支持的代码编辑器,依靠插件扩展 Python 开发能力。PyCh…...
【0403】Postgres内核 检查(procArray )给定 db 是否有其他 backend process 正在运行
文章目录 1. 给定 db 是否有其他 backend 正在运行1.1 获取 allPgXact[] 索引1.1.1 MyProc 中 databaseId 初始化实现1.2 allProcs[] 中各 databaseId 判断1. 给定 db 是否有其他 backend 正在运行 CREATE DATABASE 语句创建用户指定 数据库名(database-name)时候, 会通过 …...
MySQL 数据库的体系架构
MySQL 数据库的体系架构是其高效、灵活和可扩展性的核心基础。其设计采用 分层模块化 结构,主要分为以下四层: 1. 连接层(Connectors & Connection Pool) 功能:负责处理客户端连接、认证和权限管理。 连接管理&a…...
【C++高并发服务器WebServer】-14:Select详解及实现
本文目录 一、BIO模型二、非阻塞NIO忙轮询三、IO多路复用四、Select()多路复用实现 明确一下IO多路复用的概念:IO多路复用能够使得程序同时监听多个文件描述符(文件描述符fd对应的是内核读写缓冲区),能够提升程序的性能。 Linux下…...
apisix网关ip-restriction插件使用说明
ip-restriction插件可以在网关层进行客户端请求ip拦截。 当然了,一般不推荐使用该方法,专业的事专业工具做。建议有条件,还是上防火墙或者waf来做。 官方文档:ip-restriction | Apache APISIX -- Cloud-Native API Gateway whit…...
15vue3实战-----props和emit传值
15vue3实战-----props和emit传值 1.emit的使用2.配合props实现完整父子通信 vue3中props和emit的使用有点不一样,但万变不离其宗。 1.emit的使用 子组件: <script setup lang"ts"> // 定义触发的事件及其数据类型 const emit defineEmits([update, delete]…...
第二节 docker基础之---镜像构建及挂载
查看当前镜像: [rootdocker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [rootdocker ~]#很明显docker是咱们新搭建的所以目前还没有镜像 1,搜索镜像: [rootdocker ~]# docker search centos 搜索镜像并过滤是官…...
Android性能优化
Android性能优化 如何优化一个包含大量图片加载的Android应用,以提高性能和用户体验? 优化一个包含大量图片加载的Android应用,可以从以下几个方面入手,以提高性能和用户体验: 选择合适的图片加载库 使用成熟的图片…...
scikit-learn简介
scikit-learn 是一个广泛使用的 Python 库,主要用于 机器学习(ML)。它提供了一些简单高效的工具,适用于 数据挖掘 和 数据分析。scikit-learn 基于 NumPy、SciPy 和 matplotlib 等科学计算库,具有 易于使用的接口 和 高…...
查询已经运行的 Docker 容器启动命令
一、导语 使用 get_command_4_run_container 查询 docker 容器的启动命令 获取镜像 docker pull cucker/get_command_4_run_container 查看容器命令 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock cucker/get_command_4_run_container 容器id或容器名 …...
ssti学习笔记(服务器端模板注入)
目录 一,ssti是什么 二,原理 所谓模板引擎(三列,可滑动查看) 三,漏洞复现 1,如何判断其所属的模板引擎? 2,判断清楚后开始注入 (1)Jinja2&a…...
Docker 部署 RabbitMQ | 自带延时队列
一、获取镜像 docker pull farerboy/rabbitmq:3.9.9 二、运行镜像 docker run -d --name rabbitmq \n --hostname rabbitmq \n -p 15672:15672/tcp \n -p 5672:5672/tcp \n -v /wwwroot/opt/docker/rabbitmq:/var/lib/rabbitmq \n farerboy/rabbitmq:3.9.9 备注:…...
如何使用deepseek创建钉钉收费AI助理
1、打开deepseek,简单描述下自己的问题,勾选深度思考 2、deepseek给我生成了一大段提示词模板 3、打开钉钉-应用中心-找AI助理 4、点击立即创作 5、创作 默认创建的是免费上网,需要创建收费的话需要先申请,填一个表单内容和价格&…...
【STM32系列】利用MATLAB配合ARM-DSP库设计FIR数字滤波器(保姆级教程)
ps.源码放在最后面 设计IIR数字滤波器可以看这里:利用MATLAB配合ARM-DSP库设计IIR数字滤波器(保姆级教程) 前言 本篇文章将介绍如何利用MATLAB与STM32的ARM-DSP库相结合,简明易懂地实现FIR低通滤波器的设计与应用。文章重点不在…...
2025年日祭
本文将同步发表于洛谷(暂无法访问)、CSDN 与 Github 个人博客(暂未发布) 本蒟自2025.2.8开始半停课。 以下是题目格式: [题目OJ 题号] [来源(选填)] 名称 …… 题号 - 名称 题目:……...
torch_bmm验算及代码测试
文章目录 1. torch_bmm2. pytorch源码 1. torch_bmm torch.bmm的作用是基于batch_size的矩阵乘法,torch.bmm的作用是对应batch位置的矩阵相乘,比如, mat1的第1个位置和mat2的第1个位置进行矩阵相乘得到mat3的第1个位置mat1的第2个位置和mat2的第2个位置…...
ChatGPT提问技巧:行业热门应用提示词案例-文案写作
ChatGPT 作为强大的 AI 语言模型,已经成为文案写作的得力助手。但要让它写出真正符合你需求的文案,关键在于如何与它“沟通”,也就是如何设计提示词(Prompt)。以下是一些实用的提示词案例,帮助你解锁 ChatG…...
k8s中,一.service发布服务,二.dashboard:基于网页的k8s管理插件,三.资源服务与帐号权限
一.service资源对内发布服务Cluster IP对外发布服务NodePortIngress 二.dashboard:基于网页的k8s管理插件 三.资源服务与帐号权限一.service:用户无法预知pod的ip地址以及所在的节点,多个相同的pod如何访问他们上面的服务功能:1.服务自动感知:pod迁移后访问service的ip,不受影响…...
Python的那些事第十六篇:Python的网络爬虫技术
基于Python的网络爬虫技术研究与应用 摘要 随着互联网的飞速发展,网络爬虫技术在数据采集、信息挖掘等领域发挥着重要作用。本文详细介绍了Python环境下常用的网络爬虫技术,包括Requests库、BeautifulSoup库以及Scrapy框架。通过对这些工具的使用方法、…...
Linux第106步_Linux内核RTC驱动实验
1、了解rtc_device结构体 1)、打开“include/linux/rtc.h” rtc_class_ops是需要用户根据所使用的RTC设备编写的,其结构体如下: struct rtc_class_ops { int (*ioctl)(struct device *, unsigned int, unsigned long);/*函数指针ioctl*/ int (*read_time)(struct device *,…...
《XSS跨站脚本攻击》
一、XSS简介 XSS全称(Cross Site Scripting)跨站脚本攻击,为了避免和CSS层叠样式表名称冲突,所以改为了XSS,是最常见的Web应用程序安全漏洞之一,位于OWASP top 10 2013/2017年度分别为第三名和第七名&…...
康谋方案 | BEV感知技术:多相机数据采集与高精度时间同步方案
随着自动驾驶技术的快速发展,车辆准确感知周围环境的能力变得至关重要。BEV(Birds-Eye-View,鸟瞰图)感知技术,以其独特的视角和强大的数据处理能力,正成为自动驾驶领域的一大研究热点。 一、BEV感知技术概…...
堆详解及C语言实现
堆结构与最大堆详解:从原理到C语言实现 1. 堆结构概述 1.1 定义与性质 堆(Heap)是一种特殊的完全二叉树数据结构,满足以下性质: 结构性:完全二叉树结构有序性:每个结点的值都≥(…...
基于STM32的智能鱼缸水质净化系统设计
🤞🤞大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是智能鱼缸水质净化系统。 目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 1、设计要求…...
python:csv文件批量导入mysql
1.导入sql文件到数据库中 mysql -u username -p要先创建一个空的数据库 CREATE DATABASE your_database_name;USE your_database_name;导入sql文件 source /path/to/your/file.sql;查看某个表格的结构,为后续数据插入做准备 DESCRIBE table_name;2.插入假数据到对应…...
第三十二周:Informer学习笔记
目录 摘要Abstract1 Informer1.1 预备知识1.2 模型框架1.3 实验分析 总结 摘要 本周学习的主要内容是Informer模型,Informer是一种专为长序列时间序列预测(LSTF) 设计的Transformer模型。相较于传统的Transformer,Informer采用Pr…...
计算机视觉核心任务
1. 计算机视频重要分类 计算机视觉的重要任务可以大致分为以下几类: 1. 图像分类(Image Classification) 识别图像属于哪个类别,例如猫、狗、汽车等。 应用场景:物品识别、人脸识别、医疗影像分类。代表模型&#…...
【python】matplotlib(animation)
文章目录 1、matplotlib.animation1.1、FuncAnimation1.2、修改 matplotlib 背景 2、matplotlib imageio2.1、折线图2.2、条形图2.3、散点图 3、参考 1、matplotlib.animation 1.1、FuncAnimation matplotlib.animation.FuncAnimation 是 Matplotlib 库中用于创建动画的一个…...
【Linux网络编程】之守护进程
【Linux网络编程】之守护进程 进程组进程组的概念组长进程 会话会话的概念会话ID 控制终端控制终端的概念控制终端的作用会话、终端、bash三者的关系 前台进程与后台进程概念特点查看当前终端的后台进程前台进程与后台进程的切换 作业控制相关概念作业状态(一般指后…...
Vue.js如何根据访问路径切换页面
Vue Router 在前端工程中,路由指的是,根据不同的访问路径,展示不同组件的内容。 Vue Router是Vue.js的官方路由。 Vue Router介绍。 要使用vue Router,得先安装 npm install vue-router4这里的4,指的是第4个版本 在s…...
Vue与Konva:解锁Canvas绘图的无限可能
前言 在现代Web开发中,动态、交互式的图形界面已成为提升用户体验的关键要素。Vue.js,作为一款轻量级且高效的前端框架,凭借其响应式数据绑定和组件化开发模式,赢得了众多开发者的青睐。而当Vue.js邂逅Konva.js,两者结…...
collabora online+nextcloud+mariadb在线文档协助
1、环境 龙蜥os 8.9 docker 2、安装docker dnf -y install dnf-plugins-core dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sed -i shttps://download.docker.comhttps://mirrors.tuna.tsinghua.edu.cn/docker-ce /etc/yum.repos.…...
linux基础命令1
1、linux目录结构——树型结构 根目录:/ 用户主目录(家目录):~或者 /home/edu 根目录下常见的文件夹: 2、常见的命令 1、pwd 查看当前目录 cd 切换目录 cd ~ 切换到家目录 2、ls 查看当前目录的文件信息 语法:ls [选项] [参…...
[LVGL] 在VC_MFC中移植LVGL
前言: 0. 在MFC中开发LVGL的优点是可以用多个Window界面做辅助扩展【类似GUIguider】 1.本文基于VC2022-MFC单文档框架移植lvgl8 2. gitee上下载lvgl8.3 源码,并将其文件夹改名为lvgl lvgl: LVGL 是一个开源图形库,提供您创建具有易于使用…...
Spring Boot整合MQTT
MQTT是基于代理的轻量级的消息发布订阅传输协议。 1、下载安装代理 进入mosquitto下载地址:Download | Eclipse Mosquitto,进行下载,以win版本为例 下载完成后,在本地文件夹找到下载的代理安装文件 使用管理员身份打开安装 安装…...
elasticsearch实战三 elasticsearch与mysql数据实时同步
一 介绍 elasticsearch数据不是一直不变的,需要与mysql、oracle等数据库的数据做同步。 本博客里涉及到的项目地址:https://www.aliyundrive.com/s/7bRWpTYsxWV 方案一: 同步调用,即操作mysql数据后,接着操作elastic…...
netcore openTelemetry+prometheus+grafana
一、netcore项目 二、openTelemetry 三、prometheus 四、grafana添加Dashborad aspire/src/Grafana/dashboards at main dotnet/aspire GitHub 导入:aspnetcore.json和aspnetcore-endpoint.json 效果:...
StochSync:可在任意空间中生成360°全景图和3D网格纹理
StochSync方法可以用于在任意空间中生成图像,尤其是360全景图和3D网格纹理。该方法利用了预训练的图像扩散模型,以实现零-shot生成,消除了对新数据收集和单独训练生成模型的需求。StochSync 结合了 Diffusion Synchronization(DS&…...
MybatisPlus较全常用复杂查询引例(limit、orderby、groupby、having、like...)
MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。以下是 MyBatis-Plus 中常用复杂查询(如 LIMIT、ORDER BY、GROUP BY、HAVING、LIKE 等)的引例: 1. 环境准备…...
大数据项目2:基于hadoop的电影推荐和分析系统设计和实现
前言 大数据项目源码资料说明: 大数据项目资料来自我多年工作中的开发积累与沉淀。 我分享的每个项目都有完整代码、数据、文档、效果图、部署文档及讲解视频。 可用于毕设、课设、学习、工作或者二次开发等,极大提升效率! 1、项目目标 本…...