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

编码器型与解码器型语言模型的比较

编码器型与解码器型语言模型的比较

1. 引言

自然语言处理(NLP)领域近年来取得了革命性进展,这在很大程度上归功于基于Transformer架构的语言模型。在这一技术生态中,编码器型(Encoder-only)和解码器型(Decoder-only)语言模型代表了两种根本不同的架构范式。这两类模型在设计理念、信息处理方式和适用场景上存在本质差异,理解它们的深层理论区别对于选择合适的技术路线、优化模型性能以及推动未来创新至关重要。

本文将从理论基础、架构原理、表征机制、学习动态等多个维度深入探讨这两类模型的本质区别,帮助读者全面理解它们的工作原理、优势局限和适用场景。

2. 理论基础与信息流动机制

2.1 信息论视角下的模型架构

从信息论的角度看,编码器和解码器模型可被视为解决不同信息处理问题的优化方案。

编码器模型本质上是一个最大互信息(Maximizing Mutual Information,MMI)问题的解决方案,其目标函数可表示为:

I ( X ; Z ) = H ( X ) − H ( X ∣ Z ) I(X; Z) = H(X) - H(X|Z) I(X;Z)=H(X)H(XZ)

其中 X X X是输入序列, Z Z Z是学习到的表征, H ( X ) H(X) H(X)是输入熵, H ( X ∣ Z ) H(X|Z) H(XZ)是给定表征后的条件熵。编码器致力于最大化输入与表征之间的互信息,在保留必要信息的同时进行有效压缩。

解码器模型则解决的是序列概率最大化问题:

P ( X ) = ∏ t = 1 T P ( x t ∣ x < t ) P(X) = \prod_{t=1}^{T} P(x_t|x_{<t}) P(X)=t=1TP(xtx<t)

这种数学框架反映了解码器的根本特性:每个决策都依赖于之前的所有决策,形成严格的单向信息流。

从信息论视角看,编码器能够最大化利用香农熵中的全部可用信息,而解码器则刻意引入信息不对称性,以模拟人类语言生成的顺序依赖过程。这种根本性差异决定了两类模型在语义表征与生成推理上的不同长处。

2.2 注意力机制的理论深化

虽然两类模型都使用注意力机制,但其实现方式存在本质区别。注意力机制可以通过能量模型(Energy-Based Model)视角进行更深入理解:

编码器自注意力的能量函数

E ( Q , K ) = Q K T d k E(Q, K) = \frac{QK^T}{\sqrt{d_k}} E(Q,K)=dk QKT

解码器掩码自注意力的能量函数

E m a s k e d ( Q , K , M ) = Q K T + M d k E_{masked}(Q, K, M) = \frac{QK^T + M}{\sqrt{d_k}} Emasked(Q,K,M)=dk QKT+M

其中 M M M是掩码矩阵,通过将上三角部分设为 − ∞ -\infty 来强制信息沿特定方向流动。掩码 M M M可被视为在能量景观中引入无限势垒,这种信息流动的不对称性是解码器模型生成能力的理论基础。

编码器中,Q、K、V矩阵来自同一输入序列的不同线性投影,且不应用因果掩码,允许每个位置自由地与序列中的任何其他位置进行信息交换。而解码器的掩码矩阵确保位置i只能关注位置j≤i的信息,人为引入了信息不对称性。

3. 编码器与解码器的架构与组件

3.1 编码器型语言模型架构

在这里插入图片描述

如上图左侧所示,编码器型语言模型主要由Transformer的编码器部分组成,其关键特点包括:

  1. 双向自注意力:每个token可以关注序列中的任何其他token,不受位置限制
  2. 并行计算:所有token的表征同时计算,提高处理效率
  3. 位置编码:由于自注意力本身不包含位置信息,需要显式的位置编码
  4. 多层堆叠:典型编码器如BERT通常有12-24层
  5. 残差连接和层归一化:保证梯度稳定传播
  6. 输出是上下文化表征:每个token的最终表征包含完整的上下文信息

代表性模型包括BERT(Bidirectional Encoder Representations from Transformers)及其变种,如RoBERTa、DistilBERT、ALBERT等,以及特定领域的编码器模型,如医疗领域的BioBERT和金融领域的FinBERT。

3.2 解码器型语言模型架构

如上图右侧所示,解码器型语言模型主要由Transformer的解码器部分组成,其关键特点包括:

  1. 掩码自注意力:每个token只能关注自身及其前面的token
  2. 自回归生成:每次只生成一个新token,然后将其添加到输入序列
  3. 因果注意力掩码:数学上通过掩码矩阵实现单向信息流
  4. 深层堆叠:现代解码器如GPT-3/4往往更深(最多可达100层以上)
  5. 输出是概率分布:最终输出是词表上的概率分布,用于预测下一个token
  6. KV缓存:推理时保存之前计算的Key和Value以提高生成效率

代表性模型包括GPT(Generative Pre-trained Transformer)系列,如GPT-2、GPT-3、GPT-4,以及Claude和Llama等。

3.3 工作原理与信息流动

编码器工作流程

  1. 接收完整的输入序列
  2. 对序列中的每个token同时进行处理,生成考虑了整个上下文的表示
  3. 输出每个token的上下文化向量表示

解码器工作流程

  1. 接收已有的输入序列
  2. 基于现有序列,预测下一个最可能出现的token
  3. 将新预测的token添加到序列末尾
  4. 重复步骤2和3,直到生成完整输出或达到停止条件

4. 深层表征机制分析

4.1 表征空间的几何与拓扑特性

研究表明,编码器和解码器模型构建了具有不同几何特性的表征空间:

编码器表征空间

  • 呈现球形分布(spherical distribution)特性
  • 特征向量在高维空间中更均匀分布
  • 表征熵(representation entropy)较高,信息分布更均衡
  • 结构类似于完备度量空间(complete metric space)
  • 语义相似度遵循三角不等式
  • 空间曲率(curvature)较低,接近欧几里得空间

解码器表征空间

  • 呈现锥形分布(conical distribution)特性
  • 表征向量倾向于在特定方向上聚集
  • 表征熵较低,但具有更高的方向性信息密度
  • 结构类似于带有奇点的非欧几里得空间
  • 语义距离在某些区域违反三角不等式
  • 展现明显的超双曲(hyperbolic)特性,适合表示层级结构

这种几何特性差异反映了两种模型对语言结构的不同理解方式:编码器倾向于构建均衡的语义关系网络,而解码器则形成了更为层级化的表征结构,有利于预测性任务。

4.2 上下文混合机制的层级分析

深入分析两类模型的Transformer层,可以发现不同层级承担的功能存在系统性差异:

编码器层级功能分化

  • 浅层:主要捕获词法和局部语法特征
  • 中层:处理句法结构和短程语义依赖
  • 深层:建立全局语义联系和抽象表征

解码器层级功能分化

  • 浅层:与编码器类似,处理词法和初级语法特征
  • 中层:构建预测所需的上下文依赖关系
  • 深层:专注于生成决策,将抽象表征映射到具体词汇分布

4.3 谱分析与动力学特性

从动力学系统角度,两类模型也展现出不同特性:

编码器谱特性

  • 注意力矩阵特征值分布更为均匀
  • 具有较低的谱范数(spectral norm)
  • 信息流呈现"扩散式"传播模式

解码器谱特性

  • 注意力矩阵特征值呈现幂律分布
  • 具有较高的谱范数
  • 信息流呈现"聚焦式"传播模式

这些谱特性直接影响模型的优化难度和泛化能力。解码器模型的高谱范数使其更容易过度拟合训练数据,但同时也增强了其记忆长序列模式的能力。

5. 优化目标与学习动态

5.1 预训练目标的深层影响

编码器和解码器模型的预训练目标函数差异不仅是技术实现上的不同,更深层次上塑造了模型的认知偏好:

编码器掩码语言建模

L MLM = − E x ∈ X E m ∈ M [ log ⁡ P ( x m ∣ x \ m ) ] L_{\text{MLM}} = -\mathbb{E}_{x \in X} \mathbb{E}_{m \in M} [\log P(x_m | x_{\backslash m})] LMLM=ExXEmM[logP(xmx\m)]

其中, x m x_m xm表示被掩码的token, x m x_{m} xm表示未被掩码的上下文。这一目标函数促使模型形成"填空"式思维,侧重于从已知信息中提取和推断缺失部分。

解码器自回归语言建模

L AR = − E x ∈ X [ ∑ t = 1 T log ⁡ P ( x t ∣ x < t ) ] L_{\text{AR}} = -\mathbb{E}_{x \in X} \left[ \sum_{t=1}^{T} \log P(x_t | x_{<t}) \right] LAR=ExX[t=1TlogP(xtx<t)]

此目标函数引导模型发展"续写"式思维,专注于基于已有信息预测未来内容的能力。

这两种目标函数本质上培养了不同的"认知习惯",直接影响模型在下游任务中的表现。

5.2 损失景观与优化路径

两类模型的损失函数景观(loss landscape)存在根本差异:

编码器损失景观

  • 呈现多个局部最优解
  • 优化路径通常需要穿越多个势垒
  • Hessian矩阵的特征值分布更为均匀

解码器损失景观

  • 更平滑但维度更高
  • 存在明显的低能量通道(low-energy channel)
  • Hessian矩阵的条件数(condition number)较大

这种差异解释了为何解码器模型通常需要更精细的优化器设置和学习率调度策略,而编码器模型对初始化和优化器选择的敏感度较低。

5.3 梯度流动与表征学习

在训练动态上,两类模型也存在显著差异:

编码器的梯度传播

  • 梯度可双向流动,每个token的表征同时受到左右上下文的影响
  • 梯度信号更为均衡,有利于学习对称性语言特征

解码器的梯度传播

  • 单向梯度流,主要从右向左传播
  • 近期token比远期token接收更丰富的梯度信号
  • 存在"递减关注"现象,模型对序列开始部分的学习不如末尾充分

这种梯度流动模式的差异对长序列处理能力有直接影响,也解释了为何某些解码器模型在长文本处理中存在"遗忘"早期内容的现象。

5.4 归纳偏置的形式化表征

两类模型的架构体现了不同的归纳偏置(inductive bias),可通过核函数(kernel function)理论形式化表示:

编码器的归纳偏置
K e n c o d e r ( x , y ) = E z ∼ p ( z ∣ x , y ) [ ϕ ( z ) ] K_{encoder}(x, y) = \mathbb{E}_{z \sim p(z|x,y)}[\phi(z)] Kencoder(x,y)=Ezp(zx,y)[ϕ(z)]

其中 ϕ \phi ϕ是特征映射函数, p ( z ∣ x , y ) p(z|x,y) p(zx,y)是给定输入对 ( x , y ) (x,y) (x,y)的条件表征分布。

解码器的归纳偏置
K d e c o d e r ( x , y ) = E z ∼ p ( z ∣ x ) [ ϕ ( z ∣ y ) ] K_{decoder}(x, y) = \mathbb{E}_{z \sim p(z|x)}[\phi(z|y)] Kdecoder(x,y)=Ezp(zx)[ϕ(zy)]

其中 ϕ ( z ∣ y ) \phi(z|y) ϕ(zy)是条件特征映射。

这种形式化表达揭示了编码器偏向于学习全局统计模式,而解码器偏向于学习条件转移动态。

6. 计算复杂度与扩展性分析

6.1 时空复杂度的理论分析

编码器计算复杂度

  • 训练阶段:O(N²d),其中N是序列长度,d是隐藏维度
  • 推理阶段:O(N²d),可并行计算整个序列

解码器计算复杂度

  • 训练阶段:O(N²d),理论上与编码器相当
  • 推理阶段:O(Nd + N²d),由于自回归特性,需要N步顺序生成

这种复杂度差异对大规模模型尤为显著。例如,对于参数量相同的编码器和解码器模型,在处理长文本生成任务时,解码器的实际计算成本可能高出数个数量级。

6.2 注意力机制的稀疏化策略

为应对二次方复杂度挑战,两类模型发展了不同的注意力稀疏化策略:

编码器优化方向

  • 局部窗口注意力(如Longformer)
  • 全局-局部混合注意力(如BigBird)
  • 结构化稀疏注意力(如Reformer)

解码器优化方向

  • KV缓存技术(显著减少重复计算)
  • 滑动窗口注意力(如Transformer-XL)
  • 分层注意力机制(如Compressive Transformer)

这些优化策略的差异反映了两类模型架构面临的不同瓶颈,也影响了它们在实际应用中的部署决策。

6.3 多头注意力的理论解析

多头注意力可以通过子空间分解(subspace decomposition)理论进行解释:

编码器多头注意力
MultiHead ( Q , K , V ) = Concat ( h e a d 1 , . . . , h e a d h ) W O \text{MultiHead}(Q, K, V) = \text{Concat}(head_1, ..., head_h)W^O MultiHead(Q,K,V)=Concat(head1,...,headh)WO

每个注意力头可视为在不同子空间中执行的特征提取器。编码器中,这些子空间通常具有较高的正交性,能够捕获互补信息。

解码器多头注意力
由于因果掩码的约束,解码器的多头注意力中,不同头之间的相关性通常更高,子空间重叠现象更为明显。这导致了有效注意力维度(effective attention dimension)的降低,但增强了模型对关键序列模式的检测能力。

7. 语言理解与生成的认知机制

7.1 长距离依赖处理能力

在长距离依赖处理上,两种模型展现出不同的认知模式:

编码器长距离依赖处理

  • 通过全局注意力直接建立远距离token间的联系
  • 对称式注意力分布,无距离衰减偏置
  • 结构化语言现象(如嵌套从句)处理能力强

解码器长距离依赖处理

  • 通过迭代累积的方式间接建立长距离依赖
  • 存在天然的"注意力衰减"现象
  • 依赖KV缓存等机制维持长期记忆

研究发现,在结构化语言理解任务(如配对括号匹配、长距离指代消解)中,编码器通常表现出更高的准确性;而在自然流畅的长文本生成中,解码器则具有明显优势。

7.2 语言推理模式差异

两类模型在语言推理中采用不同的认知策略:

编码器推理模式

  • 并行整体推理,一次性考虑所有可用信息
  • 适合复杂条件下的分类判断
  • 推理过程隐式,难以追踪中间步骤

解码器推理模式

  • 序列化思考(chain-of-thought)
  • 逐步推理,每一步基于之前的结果
  • 推理过程可显式表达,便于追踪和解释

这种推理模式差异解释了为何编码器在某些分类任务上表现出色,而解码器在需要多步推理的复杂问题上具有优势。

7.3 注意力熵与信息动态

注意力权重分布的熵是衡量模型注意力聚焦程度的重要指标:

H ( A ) = − ∑ i = 1 n a i log ⁡ a i H(A) = -\sum_{i=1}^{n} a_i \log a_i H(A)=i=1nailogai

其中 a i a_i ai是归一化后的注意力权重。研究表明:

编码器注意力熵

  • 平均熵值较高,呈现广泛关注模式
  • 层与层之间的熵变化较小
  • 不同头之间的熵差异显著

解码器注意力熵

  • 平均熵值较低,呈现聚焦关注模式
  • 深层注意力熵显著低于浅层
  • 存在明显的"注意力坍缩"(attention collapse)现象

这种注意力熵的差异直接影响了两类模型的信息提取策略和表征质量。

8. 高级理论视角与统一框架

8.1 信息瓶颈理论视角

从信息瓶颈理论(Information Bottleneck Theory)视角看,两类模型代表了不同的信息压缩-保留策略:

编码器信息处理

  • 构建最小充分统计量,压缩输入的同时保留所有必要信息
  • 形成"双向信息瓶颈",平衡上下文信息提取

解码器信息处理

  • 建立动态信息瓶颈,随着生成过程不断调整信息保留策略
  • 采用"单向累积信息瓶颈",优化预测下一token所需的信息表征

这种理论视角解释了为何编码器在特征提取任务中表现优异,而解码器在生成任务中更为出色。

8.2 统一计算表征理论

从计算表征理论(Computational Representation Theory)角度,可以建立描述这两类模型的统一数学框架:

M ( X ) = f out ( f body L ∘ . . . ∘ f body 1 ∘ f in ( X ) ) \mathcal{M}(\mathbf{X}) = f_{\text{out}}(f_{\text{body}}^L \circ ... \circ f_{\text{body}}^1 \circ f_{\text{in}}(\mathbf{X})) M(X)=fout(fbodyL...fbody1fin(X))

差异在于:

编码器的函数构成

  • f in f_{\text{in}} fin:全序列嵌入
  • f body l f_{\text{body}}^l fbodyl:双向信息融合
  • f out f_{\text{out}} fout:特征提取映射

解码器的函数构成

  • f in f_{\text{in}} fin:序列前缀嵌入
  • f body l f_{\text{body}}^l fbodyl:单向信息累积
  • f out f_{\text{out}} fout:预测分布映射

这种统一视角使我们能够更清晰地理解两类模型的本质区别:编码器是一种映射函数 f : X → Z f: \mathcal{X} \rightarrow \mathcal{Z} f:XZ,从输入空间到表征空间;解码器是一种条件概率函数 P : X < t → Δ ( X ) P: \mathcal{X}_{<t} \rightarrow \Delta(\mathcal{X}) P:X<tΔ(X),从历史映射到未来概率分布。

8.3 动态系统视角

从动态系统理论视角,两类模型可被视为不同类型的动力学系统:

编码器动力学
h t ( l ) = h t ( l − 1 ) + f ( h t ( l − 1 ) , H ( l − 1 ) ) \mathbf{h}_t^{(l)} = \mathbf{h}_t^{(l-1)} + f(\mathbf{h}_t^{(l-1)}, \mathbf{H}^{(l-1)}) ht(l)=ht(l1)+f(ht(l1),H(l1))

其中 H ( l − 1 ) \mathbf{H}^{(l-1)} H(l1)代表所有位置的表征,系统演化不受方向限制。

解码器动力学
h t ( l ) = h t ( l − 1 ) + f ( h t ( l − 1 ) , H < t ( l − 1 ) ) \mathbf{h}_t^{(l)} = \mathbf{h}_t^{(l-1)} + f(\mathbf{h}_t^{(l-1)}, \mathbf{H}_{<t}^{(l-1)}) ht(l)=ht(l1)+f(ht(l1),H<t(l1))

系统演化受到前向因果约束。

这种动力学差异导致两类模型表现出不同的稳定性和吸引子(attractor)特性。编码器通常具有更多稳定的平衡点,而解码器则倾向于形成循环轨道(cyclic orbits)和混沌吸引子(chaotic attractors),这解释了为何解码器在生成长文本时容易出现重复或离题现象。

9. 多模态与领域迁移能力

9.1 多模态融合能力分析

在多模态任务中,两类模型展现出不同的适应性:

编码器多模态扩展

  • 擅长融合多模态信息构建统一表征(如CLIP、ViLBERT)
  • 适合判别性多模态任务(如视觉问答、图像-文本匹配)
  • 多模态对齐能力强,可建立不同模态间的精确映射

解码器多模态扩展

  • 擅长基于多模态输入生成单模态输出(如图像描述生成)
  • 在多模态对话和创意生成任务中表现突出
  • 通常需要先构建多模态编码器,再连接解码器(如BLIP-2架构)

研究表明,编码器在多模态对齐上的优势源于其全局上下文处理能力,而解码器在多模态生成上的优势则来自其自回归特性。

9.2 领域迁移与适应能力

在领域适应性方面:

编码器领域迁移特点

  • 通常需要较少的领域适应数据
  • 低资源语言和领域适应能力较强
  • 表征空间更加通用,跨领域知识迁移效率高

解码器领域迁移特点

  • 大规模预训练后展现出更强的零样本迁移能力
  • 通过少量示例学习能力(in-context learning)优于编码器
  • 在特定领域微调时,通常需要更多参数高效技术(如LoRA、P-tuning)

这种领域适应性差异直接影响了两类模型在实际应用中的部署策略,特别是在资源受限场景下。

10. 错误模式与认知偏差

两类模型表现出不同的系统性错误模式:

编码器典型错误

  • 上下文过度依赖(过度依赖局部线索而忽视全局语义)
  • 结构化推理不足(难以执行多步骤结构化推理)
  • 频率偏差(倾向于选择训练数据中高频答案)

解码器典型错误

  • 幻觉生成(生成看似流畅但事实错误的内容)
  • 自我矛盾(在长文本生成中出现前后矛盾)
  • 注意力漂移(随着生成过程推进逐渐偏离原主题)

这些系统性错误模式深刻反映了两类模型的认知机制差异,也为模型改进提供了方向。

11. 未来发展趋势与研究方向

11.1 架构进化趋势

未来语言模型架构可能呈现以下发展趋势:

模块化与可重构性

  • 动态切换注意力模式,根据任务需求调整信息流动方向
  • 任务特定的注意力掩码策略,平衡理解与生成能力

超越自注意力

  • 线性注意力机制(如Performer、Linear Transformer)
  • 状态空间模型(如Mamba、H3)融合循环与注意力的优势

多粒度表征

  • 同时维护token、短语、句子和文档级别的表征
  • 层级化注意力机制,捕获不同尺度的语言模式

11.2 混合架构的前沿探索

前沿研究正在探索混合两种架构优势的创新模型:

预训练-微调分离架构

  • UL2模型采用混合目标函数,同时学习掩码预测和自回归生成
  • GLM架构引入二维注意力机制,允许模型灵活切换处理模式

动态注意力掩码

  • BART和T5采用双向编码器和单向解码器组合
  • MASS引入可变注意力掩码策略,平衡理解与生成能力

统一框架探索

  • UniLM提出统一语言模型框架,通过不同的注意力掩码模式实现多种任务
  • X-MOD和mT0探索多语言多任务统一架构

这些混合架构研究表明,未来模型可能会逐渐弱化编码器/解码器的严格界限,转向更灵活的配置。

12. 实际应用选择考量

在实际应用中选择合适的模型架构需要考虑以下因素:

12.1 任务类型

  • 理解型任务(分类、标注、抽取等):优先考虑编码器型模型
  • 生成型任务(写作、对话、翻译等):优先考虑解码器型或编码器-解码器模型

12.2 资源限制

  • 如果计算资源有限,需要高效批处理大量文本,编码器型模型可能更合适
  • 如果需要处理非常长的文本,特定的长文本解码器模型可能更合适

12.3 上下文理解要求

  • 如果任务需要深度理解文本含义和结构,编码器型模型通常表现更好
  • 如果任务更注重生成连贯、自然的文本,解码器型模型更合适

12.4 微调成本

  • 编码器模型通常参数量较小,微调成本较低
  • 大型解码器模型参数量庞大,完整微调成本高昂,通常采用提示工程或参数高效微调方法

13. 结论:超越二元对立的整体视角

编码器型与解码器型语言模型并非简单的技术选择,而是反映了语言处理的两种根本范式。编码器模型体现了对语言的整体把握与深度理解,而解码器模型则反映了语言的生成本质与顺序特性。

从系统视角看,理想的语言处理系统可能需要兼具两种能力:编码器的双向深度理解与解码器的灵活生成能力。未来的研究将不断打破这两种架构间的界限,走向更加统一、灵活的模型设计。

理解这两类模型的深层差异,不仅有助于选择合适的技术路线,也为语言模型的未来发展提供了理论基础和实践指导。在这个快速发展的领域中,深入理解基础原理比追随特定技术路线更为重要。

通过从信息论、计算表征理论、几何特性、优化动态等多维度的分析,我们可以看到这两类模型的本质区别远超表面的架构差异,它们代表了解决自然语言处理问题的两种根本范式。随着研究的深入,我们期待看到更多融合两种架构优势的创新模型,推动自然语言处理技术迈向新的高度。

相关文章:

编码器型与解码器型语言模型的比较

编码器型与解码器型语言模型的比较 1. 引言 自然语言处理&#xff08;NLP&#xff09;领域近年来取得了革命性进展&#xff0c;这在很大程度上归功于基于Transformer架构的语言模型。在这一技术生态中&#xff0c;编码器型&#xff08;Encoder-only&#xff09;和解码器型&am…...

Java 函数式编程

函数式编程的意义 函数式编程理念强调函数纯粹性和不可变性&#xff0c;这有助于写出更稳定、更易测试的代码&#xff0c;尤其在并发环境下减少 bug lambda 表达式 import java.util.function.Function;public class Strategize {Function<String, String> getString …...

MySQL初阶:基础增删改查(CRUD)

创建&#xff08;Create&#xff09; 先创建一个表 1&#xff09;单独插入一条 insert into 表名 values &#xff08;列名 类型&#xff09;...&#xff1b; 插入的记录要和表一开始创建记录的类型&#xff0c;个数&#xff0c;结构一样。 如果不一样&#xff0c;就会报错。…...

yolo训练用的数据集的数据结构

Football Players Detection using YOLOV11 可以在roboflow上标注 Sign in to Roboflow 训练数据集只看这个data.yaml 里面是train的image地址和classnames 每个image一一对应一个label 第一个位是分类&#xff0c;0是classnames[0]对应的物体&#xff0c;现在是cuboid &…...

vue3+ts继续学习

我们再写点东西&#xff0c;这里面都是vue2的语法&#xff0c;应该都能看明白&#xff01;我们写完直接去运行一下代码&#xff01; 发现什么都没有发生&#xff01;为什么呢&#xff1f;因为我们在App.vue中没有引入&#xff01;哈哈哈哈&#xff01;这样就好了&#xff01;注…...

Oracle01-入门

零、文章目录 Oracle01-入门 1、Oracle简介 &#xff08;1&#xff09;数据库基础 数据库基础请参考&#xff1a;https://blog.csdn.net/liyou123456789/article/details/131207068 &#xff08;2&#xff09;Oracle是什么 ORACLE 数据库系统是美国 ORACLE 公司&#xff…...

即开即用,封装 Flask 项目为 exe 文件实操步骤

见字如面&#xff0c;朋友们&#xff01; 嗨&#xff0c;这里是 AIGC 创意人_竹相左边&#xff01; 正如你们所知&#xff0c;我正在通过 AI 自学软硬件工程师&#xff0c;目标是手搓一台可回收火箭玩具&#xff01; 最近&#xff0c;我被《流浪地球 2》中马兆的那句“没有硬…...

【STM32单片机】#14 PWR电源控制

主要参考学习资料&#xff1a; B站江协科技 STM32入门教程-2023版 细致讲解 中文字幕 开发资料下载链接&#xff1a;https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 单片机套装&#xff1a;STM32F103C8T6开发板单片机C6T6核心板 实验板最小系统板套件科协 目录 PWR…...

FastComposer论文问题与解决

在FastComposer中&#xff0c;跨注意力定位监督&#xff08;Cross-Attention Localization Supervision&#xff09; 的实现是通过以下步骤完成的&#xff0c;核心思想是利用分割掩码约束扩散模型中跨注意力图的分布&#xff0c;确保每个主体的特征仅影响图像中对应的区域。具体…...

51单片机同一个timer 作为定时器和波特率发生器么?

在51单片机中&#xff0c;同一个Timer&#xff08;定时器&#xff09;不能同时作为普通定时器和波特率发生器。这是因为这两种功能都需要对Timer的寄存器进行配置和操作&#xff0c;而它们的配置要求是冲突的。具体来说&#xff1a; 1. 普通定时器功能 配置要求&#xff1a;需…...

爱情的本质是什么--deepseek

爱情的本质是一个跨越生物学、心理学、哲学和社会学的复杂命题。不同学科视角下&#xff0c;爱情呈现出多层次的真相&#xff0c;但核心可以归结为&#xff1a; “爱情是进化塑造的生存策略、神经化学的短暂狂欢&#xff0c;以及人类对抗存在孤独的精神创造。” 以下从四个维…...

Leetcode 刷题记录 07 —— 链表

本系列为笔者的 Leetcode 刷题记录&#xff0c;顺序为 Hot 100 题官方顺序&#xff0c;根据标签命名&#xff0c;记录笔者总结的做题思路&#xff0c;附部分代码解释和疑问解答。 01 相交链表 /*** Definition for singly-linked list.* struct ListNode {* int val;* …...

Android View#post()源码分析

文章目录 Android View#post()源码分析概述onCreate和onResume不能获取View的宽高post可以获取View的宽高总结 Android View#post()源码分析 概述 在 Activity 中&#xff0c;在 onCreate() 和 onResume() 中是无法获取 View 的宽高&#xff0c;可以通过 View#post() 获取 Vi…...

dubbo限流

单机限流 限流过滤器 package com.doudou.filter;import org.apache.dubbo.common.URL; import org.apache.dubbo.common.constants.CommonConstants; import org.apache.dubbo.common.extension.Activate; import org.apache.dubbo.rpc.*;import java.util.concurrent.Concu…...

IBM BAW(原BPM升级版)使用教程:基本概念

本部分为“IBM BAW&#xff08;原BPM升级版&#xff09;使用教程系列”内容的补充。 一、IBM BAW中的流程概念 在IBM Business Automation Workflow&#xff08;BAW&#xff09;中&#xff0c;流程定义是流程设计的核心组成部分&#xff0c;它涵盖了流程的结构、任务、数据流…...

1. 视频基础知识

1. 图像基础概念 像素&#xff1a;像素是一个图片的基本单位&#xff0c;pix是英语单词picture&#xff0c;加上英语单词“元素element”&#xff0c;就得到了pixel&#xff0c;简称px。所以“像素”有“图像元素”之意。分辨率&#xff1a;指的是图像的大小或者尺寸。比如 19…...

docker + K3S + Jenkins + Harbor自动化部署

最近公司在研究自动化部署的一套流程&#xff0c;下面记录一下配置流程 需要提前准备好Jenkins Harbor Git(其他管理工具也可以) 我这里的打包编译流程是Jenkins上配置打包任务-->自动到git目录下找打包文件---->项目编译后打镜像包------>打完镜像包将镜像上传到…...

【算法专题十】哈希表

文章目录 0.哈希表简介1. 两数之和1.1 题目1.2 思路1.3 代码 2.判断是否为字符重排2.1 题目2.2 思路2.3 代码 3. leetcode.217.存在重复元素3.1 题目3.2 思路3.3 代码 4. leetcode.219.存在重复的元素Ⅱ4.1 题目4.2 思路4.3 代码 5. leetcode.49.字母异位词分组5.1 题目5.2 思路…...

鸿蒙系统被抹黑的深层解析:技术、商业与地缘政治的复杂博弈-优雅草卓伊凡

鸿蒙系统被抹黑的深层解析&#xff1a;技术、商业与地缘政治的复杂博弈-优雅草卓伊凡 一、技术过渡期的必然误解 1.1 兼容性设计的双刃剑效应 鸿蒙系统早期版本的兼容性策略为后续争议埋下了伏笔。2019年华为被列入实体清单后&#xff0c;面临着生死存亡的技术断供危机。在这…...

Nginx 安全防护与 HTTPS 安全部署

目录 Nginx 安全防护与 HTTPS 安全部署 一、引言 二、Nginx 安全防护措施 2.1 关闭不必要的服务和端口 2.2 限制访问频率 2.3 防止 SQL 注入和 XSS 攻击 2.4 隐藏 Nginx 版本信息 三、HTTPS 安全部署 3.1 HTTPS 简介 3.2 申请 SSL/TLS 证书 3.3 配置 Nginx 启用 HTTP…...

告别异步复杂性?JDK 21 虚拟线程让高并发编程重回简单

长期以来&#xff0c;Java 的并发编程主要围绕平台线程&#xff08;Platform Threads&#xff09;构建。然而&#xff0c;在现代应用对海量并发的巨大需求面前&#xff0c;传统模型面临着可伸缩性的挑战。JDK 21 引入了一项突破性的特性——虚拟线程&#xff08;Virtual Thread…...

Marin说PCB之POC电路layout设计仿真案例---08

Layers –stackup: RX1_96724F_FAKRA_1仿真原理图信息如下&#xff0c;设计中采用了6Gbps/187Mbps的速率配置&#xff1a; IL的limited&#xff1a; RL的limited&#xff1a; RX1_96724F_FAKRA_1--Return Loss:结果显示&#xff0c;板级设计裕量不是很充足,很接近限值曲线了。 …...

【Python系列】Python 中的 HTTP 请求处理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

【BUG】mmdetection ValueError: need at least one array to concatenate

问题&#xff1a; 使用mmdetection框架使用COCO格式训练自定义数据集时出现如下错误&#xff1a; ValueError: need at least one array to concatenate 解决方法&#xff1a; 修改mmdet/datasets/coco.py文件&#xff0c;将CocoDataset类中的METAINFO修改为自己数据集的类别信…...

GLIBC:GLIBCXX not found

更多内容&#xff1a;XiaoJ的知识星球 目录 1. GLIBCXX not found2.解决方法&#xff1a;&#xff08;使用预编译库&#xff09;2.1 获取预编译libstdc库2.2 获取预编译libc库 注意&#xff1a;涉及到修改GLIBC库是个危险操作&#xff0c;可能会影响到系统。请谨慎操作&#xf…...

初步认识java

目录 1. java语言概述 1.1 java是什么 1.2 Java语言重要性 1.2.1 语言广泛使用程度 1.2.2 使用领域 1.3 Java语言发展简史 1.4 Java语言的特点 2. Java开发环境安装 2.1 什么是JDK 2.2 什么是JRE 2.3 什么是JVM 2.4 JDK、JRE 和 JVM的包含关系 2.5 JDK的安装和环…...

ShardingJdbc-水平分库

ShardingJdbc-水平分库 水平分库 表结构相同、记录不同、所属库不同多个库中表记录数和才是总的记录数通常根据主键ID进行分表&#xff0c;这里采用奇偶策略 案例 建立库 sharding_demo-1、sharding_demo-2每个库建立表 user_1、user_2 表结构相同id 为主键&#xff0c;big…...

模板模式 VS 建造者模式

模板模式和建造者模式是两种不同的设计模式&#xff0c;下面从定义、结构、应用场景等方面介绍它们的区别&#xff0c;并给出 Python 示例代码。 定义 模板模式&#xff1a;定义了一个操作中的算法骨架&#xff0c;将一些步骤的实现延迟到子类中。这样&#xff0c;子类可以在…...

模态编码器

1.CLIP的textEncoder能输入多少个单词? CLIP 模型中的 context_length 设置为 77&#xff0c;表示每个输入句子会被 tokenized 成最多 77 个token。这个 77 并不是直接对应到 77 个单词&#xff0c; 因为一个单词可能会被拆分成多个 token&#xff0c;特别是对于较长的或不常…...

Python-map从基础到进阶

无论你是打打算法比赛还是做项目map函数肯定都是你必学内置函数&#xff0c;这篇文章小白也能轻松掌握map函数&#xff0c;学习map&#xff0c;理解map&#xff0c;进阶用法map 描述 map() 函数会根据提供的函数对指定序列做映射。 第一个参数 function 以参数序列中的每一个…...

大数据产品销售数据分析:基于Python机器学习产品销售数据爬虫可视化分析预测系统设计与实现

文章目录 大数据产品销售数据分析&#xff1a;基于Python机器学习产品销售数据爬虫可视化分析预测系统设计与实现一、项目概述二、项目说明三、研究意义四、系统总体架构设计总体框架技术架构数据可视化模块设计图后台管理模块设计数据库设计 五、开发技术介绍Flask框架Python爬…...

「Mac畅玩AIGC与多模态21」开发篇17 - 多字段判断与多路径分支工作流示例

一、概述 本篇在结构化输出字段控制流程的基础上&#xff0c;进一步引入多字段联合判断与多路径分支控制。通过综合分析用户输入的情绪类型和紧急程度&#xff0c;实现三分支路径执行逻辑&#xff0c;开发人员将掌握复杂流程中多条件判断节点的配置技巧。 二、环境准备 macO…...

网页截图指南

截取网页截图看似是一项简单的任务&#xff0c;但当你真正动手去做的时候&#xff0c;就会发现事情远没有那么容易。我在尝试截取一篇很长的 Reddit 帖子时就深有体会。一开始我以为只要调用 browser.TakeImage() 就万事大吉&#xff0c;结果却陷入了浏览器视口、动态内容加载、…...

作为主动唤醒的节点,ECU上电如何请求通讯

一个ECU如果作为主动唤醒的节点&#xff0c;ECU上电时可以通过以下方式请求通信 如上图所示&#xff0c;ECU在上电后&#xff0c;在OS起来后&#xff0c;可以通过在BSWM模块中完成NvM_ReadAll和相关BSW 模块初始化以及Rte_Start后&#xff0c;这个时候周期性Task已经可以正常调…...

应用服务器Tomcat

启动两给tomcat apache-tomcat-9.0.60\bin——> 启动tomcat startup.bat (Windows) / startup.sh&#xff08;Linux&#xff09; 关闭tomcat shutdown.bat&#xff08;Windows&#xff09;/shutdown.sh &#xff08;Linux&#xff09; 复制一个Tomcat为2&#xff0c;先启…...

【安全】端口保护技术--端口敲门和单包授权

【安全】端口保护技术--端口敲门和单包授权 备注一、端口保护二、端口敲门三、单包授权 备注 2025/05/06 星期二 最近学习了端口保护技术总结一下 一、端口保护 为了保护联网设备的安全&#xff0c;一般会尽量减小暴露的攻击面&#xff0c;开放的端口就是最常见的攻击面&…...

金升阳科技:配套AC/DC砖类电源的高性能滤波器

金升阳推出的FC-L15HB是为我司AC砖类电源配套使用的EMC辅助器。将FC-L15HB加装在金升阳AC/DC砖类电源的前端&#xff0c;可以提高电源产品IEC/EN61000—4系列及CISPR32/EN55032标准的EMC性能。 01 产品优势 &#xff08;1&#xff09;高共差模插入损耗 ①DM&CM&#xff1…...

浅谈 - GPTQ为啥按列量化

前言 曾在游戏世界挥洒创意&#xff0c;也曾在前端和后端的浪潮间穿梭&#xff0c;如今&#xff0c;而立的我仰望AI的璀璨星空&#xff0c;心潮澎湃&#xff0c;步履不停&#xff01;愿你我皆乘风破浪&#xff0c;逐梦星辰&#xff01; 先说结论 GPTQ 按列量化 W&#xff0c;…...

引用第三方自定义组件——微信小程序学习笔记

1. 使用 npm 安装第三方包 1.1 下载安装Node.js 工具 下载地址&#xff1a;Node.js — Download Node.js 1.2 安装 npm 包 在项目空白处右键弹出菜单&#xff0c;选择“在外部终端窗口打开”&#xff0c;打开命令行工具&#xff0c;输入以下指令&#xff1a; 1> 初始化:…...

解决android studio 中gradle 出现task list not built

点击 file 选择settings...

UE5 材质淡入淡出

混合模式选择半透明,灯光照明模式选择Surface TranslucencyVolume...

如何用Java读取PDF

在本文中&#xff0c;我将向您展示如何使用JPedal&#xff08;一个用于转换、打印、查看PDF文件的Java库&#xff09;在Java中读取PDF。 如何在Java中读取PDF文件 • 将JPedal添加到您的类或模块路径中&#xff08;下载试用版jar包&#xff09;。 • 使用JPedal库中的&q…...

tinyrenderer笔记(中)

tinyrenderer个人代码仓库&#xff1a;tinyrenderer个人练习代码 前言 原教程的第 4 课与第 5 课主要介绍了坐标变换的一些知识点&#xff0c;但这一篇文章的内容主要是手动构建 MVP 矩阵&#xff0c;LookAt 矩阵以及原教程涉及到的一些知识点&#xff0c;不是从一个图形学小白…...

人工智能对人类的影响

人工智能对人类的影响 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术以惊人的速度发展&#xff0c;深刻改变了人类社会的方方面面。从医疗、教育到交通、制造业&#xff0c;AI的应用正在重塑我们的生活方式。然而&#xff0c;这一技术革命也带来了机遇与挑战并存…...

LeetCode 220 存在重复元素 III 题解

LeetCode 220 存在重复元素 III 题解 题目描述 给定一个整数数组 nums 和两个整数 k 和 t&#xff0c;请判断数组中是否存在两个不同的索引 i 和 j&#xff0c;使得&#xff1a; abs(nums[i] - nums[j]) < tabs(i - j) < k 方法思路&#xff1a;桶排序 滑动窗口 核…...

0506--01-DA

36. 单选题 在娱乐方式多元化的今天&#xff0c;“ ”是不少人&#xff08;特别是中青年群体&#xff09;对待戏曲的态度。这里面固然存在 的偏见、难以静下心来欣赏戏曲之美等因素&#xff0c;却也有另一个无法回避的原因&#xff1a;一些戏曲虽然与观众…...

单应性估计

单应性估计是计算机视觉中的核心技术&#xff0c;主要用于描述同一平面在不同视角下的投影变换关系。以下从定义、数学原理、估计方法及应用场景等方面进行综合解析&#xff1a; 一、单应性的定义与核心特性 单应性&#xff08;Homography&#xff09;是射影几何中的概念&…...

Missashe考研日记-day33

Missashe考研日记-day33 1 专业课408 学习时间&#xff1a;2h30min学习内容&#xff1a; 今天开始学习OS最后一章I/O管理的内容&#xff0c;听了第一小节的内容&#xff0c;然后把课后习题也做了。知识点回顾&#xff1a; 1.I/O设备分类&#xff1a;按信息交换单位、按设备传…...

YOLO8之学习指南

一、引言 在计算机视觉领域,目标检测是一项核心任务,其应用范围广泛,涵盖安防监控、自动驾驶、智能医疗等众多领域。YOLO(You Only Look Once)系列算法凭借其高效、快速的特点,在目标检测领域占据重要地位。YOLO8 作为 YOLO 系列的最新版本,进一步提升了检测精度和速度…...

中达瑞和便携式高光谱相机:珠宝鉴定领域的“光谱之眼”

在珠宝行业中&#xff0c;真伪鉴定始终是核心需求。随着合成技术与优化处理手段的日益精进&#xff0c;传统鉴定方法逐渐面临挑战。中达瑞和推出的便携式高光谱相机&#xff0c;凭借其独特的“图谱合一”技术&#xff0c;为珠宝真假鉴定提供了科学、高效且无损的解决方案&#…...