【拜读】Tensor Product Attention Is All You Need姚期智团队开源TPA兼容RoPE位置编码

姚期智团队开源新型注意力:张量积注意力(Tensor Product Attention,TPA)。有点像一种「动态的LoRA」,核心思路在于利用张量分解来压缩注意力机制中的 Q、K、V 表示,同时保留上下文信息,减少内存开销。另外巧妙地兼容了RoPE,论文中还证明了流行的MHA、MQA、GQA都是TPA的特殊情况,用一个框架统一了现代注意力设计,解决MLA压缩了KV缓存但与RoPE位置编码不兼容的问题。
张量积注意力(Tensor Product Attention, TPA),用于解决语言模型在处理长序列时的内存开销问题。通过上下文张量分解来表示查询、键和值,从而在推理时显著减少了KV缓存的大小。实验结果表明,TPA在保持模型性能的同时,显著降低了内存开销,能够处理更长的序列上下文。此外,TPA与旋转位置嵌入(RoPE)兼容,便于在现代大型语言模型架构中应用。总体而言,TPA提供了一种灵活且内存高效的替代方案,推动了现代语言模型的可扩展性。
核心机制总结
具体来说,
-
张量分解:首先,TPA使用张量分解来表示查询(Q)、键(K)和值(V),从而在推理时显著减少KV缓存的大小。通过将表示分解为上下文低秩分量(contextual factorization),TPA实现了比标准多头注意力(MHA)低一个数量级的内存开销,同时降低了预训练验证损失(困惑度)并提高了下游性能。
- 张量积投影:通过两组线性层(A 投影和 B 投影)对输入进行变换,这是张量积注意力的核心操作之一。
- 缓存机制:使用缓存来存储 K 和 V 的值,以便在后续计算中使用,这有助于提高计算效率。
- 旋转位置嵌入:应用旋转位置嵌入来处理序列中的位置信息。
- 注意力计算:通过矩阵乘法计算注意力分数,并使用 softmax 进行归一化,最后得到输出。

-
与RoPE的兼容性:TPA与旋转位置嵌入(RoPE)天然兼容,可以直接替代多头注意力(MHA)层,便于在现代大型语言模型架构(如LLaMA和Gemma)中应用。
-
公式描述:具体来说,TPA的查询、键和值的分解公式如下:
Q t = 1 R Q ∑ r = 1 R Q a r Q ( x t ) ⊗ b r Q ( x t ) Q_{t}=\frac{1}{R_{Q}}\sum_{r=1}^{R_{Q}} a_{r}^{Q}\left(x_{t}\right)\otimes b_{r}^{Q}\left(x_{t}\right) Qt=RQ1r=1∑RQarQ(xt)⊗brQ(xt)
K t = 1 R K ∑ r = 1 R K a r K ( x t ) ⊗ b r K ( x t ) K_{t}=\frac{1}{R_{K}}\sum_{r=1}^{R_{K}} a_{r}^{K}\left(x_{t}\right)\otimes b_{r}^{K}\left(x_{t}\right) Kt=RK1r=1∑RKarK(xt)⊗brK(xt)
V t = 1 R V ∑ r = 1 R V a r V ( x t ) ⊗ b r V ( x t ) V_{t}=\frac{1}{R_{V}}\sum_{r=1}^{R_{V}} a_{r}^{V}\left(x_{t}\right)\otimes b_{r}^{V}\left(x_{t}\right) Vt=RV1r=1∑RVarV(xt)⊗brV(xt)
其中, a r Q ( x t ) a_{r}^{Q}(x_{t}) arQ(xt), b r Q ( x t ) b_{r}^{Q}(x_{t}) brQ(xt)是查询的因子, a r K ( x t ) a_{r}^{K}(x_{t}) arK(xt) 和 b r K ( x t ) b_{r}^{K}(x_{t}) brK(xt) 是键的因子, a r V ( x t ) a_{r}^{V}(x_{t}) arV(xt) 和 b r V ( x t ) b_{r}^{V}(x_{t}) brV(xt) 是值的因子。
实验设计
- 数据集:实验在FineWeb-Edu 100B数据集上进行,该数据集包含1000亿个训练令牌和10亿个验证令牌。
- 模型对比:实验中将T6与基线Llama架构(使用SwiGLU激活和RoPE嵌入)以及Llama变体(将多头注意力替换为多查询注意力MQA、分组查询注意力GQA或多头潜在注意力MLA)进行对比。
- 训练设置:实验采用nanoGPT训练配置,使用AdamW优化器,学习率由余弦退火调度器管理,训练阶段分别为2000步预热和全局批量大小为480。
结果与分析
-
训练和验证曲线:中等规模(353M)、大规模(773M)和超大规模(1.5B)模型的训练和验证损失曲线显示,TPA及其简化变体TPA-KVonly的收敛速度与基线MHA、MQA、GQA和MLA相当或更快,并且在整个训练过程中保持了较低的验证损失。


-
验证困惑度:中等规模和大规模模型的验证困惑度曲线显示,TPA和TPA-KVonly在大多数配置下在整个训练过程中保持了较低的困惑度。预训练结束时,TPA基线的困惑度最低。

-
下游评估:在标准基准上的零样本和两样本评估结果显示,中等规模模型中,TPA的平均准确率为51.41%,高于MHA的50.11%、MQA的50.44%和MLA的50.13%。大规模模型中,TPA-KVonly的平均准确率为53.52%,而超大规模模型中,TPA-KVonly的平均准确率为55.03%。
优点与创新
- 显著的内存效率提升:通过张量分解表示查询、键和值,显著减少了推理时的KV缓存大小,相比标准多头注意力机制(MHA)提升了10倍以上。
- 模型性能提升:在预训练验证损失(困惑度)和下游评估性能方面均优于现有的多头注意力、多查询注意力、分组查询注意力和多头潜在注意力等方法。
- 与RoPE的兼容性:TPA天然兼容旋转位置嵌入(RoPE),可以直接替代多头注意力层,便于在现代大型语言模型架构(如LLaMA和Gemma)中应用。
- 统一的注意力机制框架:揭示了多头注意力、多查询注意力和分组查询注意力都可以作为非上下文变体的TPA自然出现。
- 灵活的变体:TPA的变体包括仅分解键/值或跨标记共享基向量,展示了在平衡内存成本、计算开销和表示能力方面的多样性。
关键问题及回答
问题1:张量积注意力(TPA)是如何通过张量分解来表示查询(Q)、键(K)和值(V)的?
张量积注意力(TPA)通过将查询(Q)、键(K)和值(V)分解为多个低秩张量的和来表示。具体来说,每个头的查询、键和值被分解为多个低秩张量的和:
Q t = 1 R Q ∑ r = 1 R Q a r Q ( x t ) ⊗ b r Q ( x t ) Q_{t}=\frac{1}{R_{Q}}\sum_{r=1}^{R_{Q}} a_{r}^{Q}\left(x_{t}\right)\otimes b_{r}^{Q}\left(x_{t}\right) Qt=RQ1r=1∑RQarQ(xt)⊗brQ(xt)
K t = 1 R K ∑ r = 1 R K a r K ( x t ) ⊗ b r K ( x t ) K_{t}=\frac{1}{R_{K}}\sum_{r=1}^{R_{K}} a_{r}^{K}\left(x_{t}\right)\otimes b_{r}^{K}\left(x_{t}\right) Kt=RK1r=1∑RKarK(xt)⊗brK(xt)
V t = 1 R V ∑ r = 1 R V a r V ( x t ) ⊗ b r V ( x t ) V_{t}=\frac{1}{R_{V}}\sum_{r=1}^{R_{V}} a_{r}^{V}\left(x_{t}\right)\otimes b_{r}^{V}\left(x_{t}\right) Vt=RV1r=1∑RVarV(xt)⊗brV(xt)
其中, a r Q a_{r}^{Q} arQ, a r K a_{r}^{K} arK, a r V a_{r}^{V} arV 和 b r Q b_{r}^{Q} brQ, b r K b_{r}^{K} brK, b r V b_{r}^{V} brV 是可学习的参数矩阵, x t x_{t} xt 是第t个标记的隐藏状态向量。通过这种张量分解,TPA能够显著减少KV缓存的大小,同时提高表示能力。
问题2:张量积注意力(TPA)与旋转位置嵌入(RoPE)的兼容性如何?
张量积注意力(TPA)与旋转位置嵌入(RoPE)天然兼容。RoPE是一种用于编码位置信息的编码方式,能够在保持相对位置关系的同时进行旋转。TPA可以直接替换多头注意力(MHA)层,便于在现代大型语言模型(如LLaMA和Gemma)中应用。具体来说,RoPE可以通过以下公式进行预旋转:
B ~ K ( x t ) ⟵ RoPE t ( B K ( x t ) ) \widetilde{B}_{K}\left(x_{t}\right)\longleftarrow\operatorname{RoPE}_{t}\left(B_{K}\left(x_{t}\right)\right) B K(xt)⟵RoPEt(BK(xt))
这样,每个键在缓存之前就已经旋转,从而避免了在解码时显式进行旋转操作,加速了自回归推理过程。
问题3:张量积注意力(TPA)在实验中的性能如何?
张量积注意力(TPA)在实验中表现出色。具体来说,在FineWeb-Edu 100B数据集上的中型(353M)、大型(773M)和XL(1.5B)模型的训练和验证损失曲线显示,TPA及其简化变体TPA-KVonly收敛速度与基线MHA、MQA、GQA和MLA相当或更快,且最终损失更低。验证困惑度曲线也表明,TPA和TPA-KVonly在训练过程中始终优于MHA、MQA、GQA和MLA,并在预训练结束时达到最低的困惑度。
在下游评估中,TPA和TPA-KVonly在中型和大型模型上均表现出色。例如,中型模型在零样本情况下的平均准确率达到51.41%,在两样本情况下的平均准确率达到53.12%。这些结果表明,TPA在各种基准测试中均优于现有的多头注意力、多查询注意力和分组查询注意力机制,解决了语言模型在处理长序列时的内存开销问题。
代码
张量积注意力(TPA)机制的核心代码主要实现在TPA类中,下面对其核心代码进行详细解读。
类定义与初始化
class TPA(nn.Module):def __init__(self, args: ModelArgs):super().__init__()# 若未指定 n_kv_heads,则使用 n_heads 的值self.n_kv_heads = args.n_heads if args.n_kv_heads is None else args.n_kv_headsself.n_heads = args.n_heads# 若 head_dim 大于 0 则使用其值,否则通过计算得到self.head_dim = args.head_dim if args.head_dim > 0 else args.dim // args.n_headsself.n_head = args.n_headsself.q_rank = args.q_rankself.rank = args.rankself.dim = args.dimself.using_groupnorm = args.using_groupnorm# 定义 A 投影的线性层,用于 Q、K、Vself.W_A_q = nn.Linear(args.dim, self.n_head * self.q_rank, bias=False)self.W_A_k = nn.Linear(args.dim, self.n_head * self.rank, bias=False)self.W_A_v = nn.Linear(args.dim, self.n_head * self.rank, bias=False)# 定义 B 投影的线性层,用于 Q、K、Vself.W_B_q = nn.Linear(args.dim, self.q_rank * self.head_dim, bias=False)self.W_B_k = nn.Linear(args.dim, self.rank * self.head_dim, bias=False)self.W_B_v = nn.Linear(args.dim, self.rank * self.head_dim, bias=False)# 初始化缓存,用于存储 K 和 V 的值self.cache_kA = torch.zeros((args.max_batch_size, args.max_seq_len, self.n_heads, self.rank,)).cuda()self.cache_vA = torch.zeros((args.max_batch_size, args.max_seq_len, self.n_heads, self.rank,)).cuda()self.cache_kB = torch.zeros((args.max_batch_size, args.max_seq_len, self.rank, self.head_dim,)).cuda()self.cache_vB = torch.zeros((args.max_batch_size, args.max_seq_len, self.rank, self.head_dim,)).cuda()self.reset_parameters()if self.using_groupnorm:self.subln = T6GroupNorm(self.head_dim, eps=1e-5, elementwise_affine=True)
在初始化函数中,首先接收一个ModelArgs类型的参数args,然后设置一些必要的超参数,如头的数量、秩等。接着定义了两组线性层,分别用于 A 投影和 B 投影。同时,还初始化了缓存用于存储 K 和 V 的值,以便在后续计算中使用。最后,调用reset_parameters方法对权重进行初始化,并根据using_groupnorm参数决定是否使用组归一化。
权重初始化
def reset_parameters(self, args):# 将 W_A_q 的权重进行变形,然后使用 Xavier 均匀初始化W_A_q_tensor = self.W_A_q.weight.view(self.dim, self.n_head, self.q_rank)nn.init.xavier_uniform_(W_A_q_tensor)self.W_A_q.weight.data = W_A_q_tensor.view_as(self.W_A_q.weight)# 对 W_A_k 和 W_A_v 做同样的操作W_A_k_tensor = self.W_A_k.weight.view(self.dim, self.n_head, self.rank)nn.init.xavier_uniform_(W_A_k_tensor)self.W_A_k.weight.data = W_A_k_tensor.view_as(self.W_A_k.weight)W_A_v_tensor = self.W_A_v.weight.view(self.dim, self.n_head, self.rank)nn.init.xavier_uniform_(W_A_v_tensor)self.W_A_v.weight.data = W_A_v_tensor.view_as(self.W_A_v.weight)# 对 B 投影的权重做同样的操作W_B_q_tensor = self.W_B_q.weight.view(self.dim, self.q_rank, self.head_dim)nn.init.xavier_uniform_(W_B_q_tensor)self.W_B_q.weight.data = W_B_q_tensor.view_as(self.W_B_q.weight)W_B_k_tensor = self.W_B_k.weight.view(self.dim, self.rank, self.head_dim)nn.init.xavier_uniform_(W_B_k_tensor)self.W_B_k.weight.data = W_B_k_tensor.view_as(self.W_B_k.weight)W_B_v_tensor = self.W_B_v.weight.view(self.dim, self.rank, self.head_dim)nn.init.xavier_uniform_(W_B_v_tensor)self.W_B_v.weight.data = W_B_v_tensor.view_as(self.W_B_v.weight)
reset_parameters方法用于对线性层的权重进行初始化,采用 Xavier 均匀初始化方法,这有助于提高模型的训练稳定性。
前向传播
def forward(self,x: torch.Tensor,start_pos: int,freqs_cis: torch.Tensor,mask: Optional[torch.Tensor],):bsz, seqlen, _ = x.shape# 计算 A 投影的 Q、K、VA_q = self.W_A_q(x).view(bsz, seqlen, self.n_head, self.q_rank)A_k = self.W_A_k(x).view(bsz, seqlen, self.n_head, self.rank)A_v = self.W_A_v(x).view(bsz, seqlen, self.n_head, self.rank)# 计算 B 投影的 Q、K、VB_q = self.W_B_q(x).view(bsz, seqlen, self.q_rank, self.head_dim)B_k = self.W_B_k(x).view(bsz, seqlen, self.rank, self.head_dim)B_v = self.W_B_v(x).view(bsz, seqlen, self.rank, self.head_dim)# 缓存 A_k 和 A_vself.cache_kA = self.cache_kA.to(A_k)self.cache_vA = self.cache_vA.to(A_v)self.cache_kA[:bsz, start_pos : start_pos + seqlen] = A_kself.cache_vA[:bsz, start_pos : start_pos + seqlen] = A_vA_k = self.cache_kA[:bsz, : start_pos + seqlen]A_v = self.cache_vA[:bsz, : start_pos + seqlen]# 缓存 B_k 和 B_vself.cache_kB = self.cache_kB.to(B_k)self.cache_vB = self.cache_vB.to(B_v)self.cache_kB[:bsz, start_pos : start_pos + seqlen] = B_kself.cache_vB[:bsz, start_pos : start_pos + seqlen] = B_vB_k = self.cache_kB[:bsz, : start_pos + seqlen]B_v = self.cache_vB[:bsz, : start_pos + seqlen]# 重塑 A_q、A_k、A_vA_q = A_q.view(bsz * seqlen, self.n_head, self.q_rank)A_k = A_k.view(bsz * seqlen, self.n_head, self.rank)A_v = A_v.view(bsz * seqlen, self.n_head, self.rank)# 重塑 B_q、B_k、B_vB_q = B_q.view(bsz * seqlen, self.q_rank, self.head_dim)B_k = B_k.view(bsz * seqlen, self.rank, self.head_dim)B_v = B_v.view(bsz * seqlen, self.rank, self.head_dim)# 计算 q、k、vq = torch.bmm(A_q, B_q).div_(self.q_rank).view(bsz, seqlen, self.n_head, self.head_dim)k = torch.bmm(A_k, B_k).div_(self.rank).view(bsz, seqlen, self.n_head, self.head_dim)v = torch.bmm(A_v, B_v).div_(self.rank).view(bsz, seqlen, self.n_head, self.head_dim)# 应用旋转位置嵌入q, k = apply_rotary_emb(q, k, freqs_cis=freqs_cis)# 计算注意力分数k = k.transpose(1, 2) scores = torch.matmul(q.transpose(1, 2), k.transpose(2, 3)) / math.sqrt(self.head_dim)if mask is not None:scores = scores + mask scores = F.softmax(scores.float(), dim=-1).type_as(q)# 计算输出output = torch.matmul(scores, v.transpose(1, 2)) output = output.transpose(1, 2).contiguous().view(bsz, seqlen, -1)return self.wo(output)
在前向传播函数中,首先获取输入的形状。然后分别计算 A 投影和 B 投影的 Q、K、V,并对其进行缓存。接着对 A 和 B 投影的结果进行重塑,通过矩阵乘法计算最终的 q、k、v。之后应用旋转位置嵌入,计算注意力分数并进行归一化,最后通过矩阵乘法得到输出。
相关文章:
【拜读】Tensor Product Attention Is All You Need姚期智团队开源TPA兼容RoPE位置编码
姚期智团队开源新型注意力:张量积注意力(Tensor Product Attention,TPA)。有点像一种「动态的LoRA」,核心思路在于利用张量分解来压缩注意力机制中的 Q、K、V 表示,同时保留上下文信息,减少内存…...
【电机控制器】ESP32-C3语言模型——DeepSeek
【电机控制器】ESP32-C3语言模型——DeepSeek 文章目录 [TOC](文章目录) 前言一、简介二、代码三、实验结果四、参考资料总结 前言 使用工具: 提示:以下是本篇文章正文内容,下面案例可供参考 一、简介 二、代码 #include <Arduino.h&g…...
Linux修改主机名称
hostnamectl set-hostname 主机名称 exit 退出登录重新进入即可...
设计模式教程:解释器模式(Interpreter Pattern)
1. 什么是解释器模式? 解释器模式(Interpreter Pattern)是一种行为型设计模式,通常用于处理语言(例如数学表达式、SQL查询等)中的语法和解释。该模式定义了一个文法,并通过解释器类来解释文法中…...
STM32 看门狗
目录 背景 独立看门狗(IWDG) 寄存器访问保护 窗口看门狗(WWDG) 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…...
一种简单有效的分析qnx+android智能座舱项目中的画面闪烁的方法(8155平台)
在智能座舱项目的开发过程中,画面闪烁问题是一个常见但棘手的挑战。由于这些闪烁现象往往转瞬即逝,传统的分析工具如截图、录屏或dump图层等方法难以捕捉和定位问题根源。针对这一难题,本文介绍了一种较为有效的分析方法,能够帮助…...
ESP32 websocket-client
本文简介 ESP-IDF WebSocket-Client 实验平台 ①ESP-IDF 版本:release/v5.3.2 ③硬件平台:esp32-s3 版权声明 ①作者:coLin ②声明:问题总结,有误解,请联系纠正。 正文 1、基于 esp-idf 如何使用 …...
MacOS下使用Ollama本地构建DeepSeek并使用本地Dify构建AI应用
目录 1 大白话说一下文章内容2 作者的电脑配置3 DeepSeek的本地部署3.1 Ollamal的下载和安装3.2 选择合适的deepseek模型3.3 安转deepseek 4 DifyDeepSeek构建Al应用4.1 Dify的安装4.1.1 前置条件4.1.2 拉取代码4.1.3 启动Dify 4.2 Dify控制页面4.3 使用Dify实现个“文章标题生…...
DeepSeek写俄罗斯方块手机小游戏
DeepSeek写俄罗斯方块手机小游戏 提问 根据提的要求,让DeepSeek整理的需求,进行提问,内容如下: 请生成一个包含以下功能的可运行移动端俄罗斯方块H5文件: 核心功能要求 原生JavaScript实现,适配手机屏幕 …...
DeepSeek 冲击(含本地化部署实践)
DeepSeek无疑是春节档最火爆的话题,上线不足一月,其全球累计下载量已达4000万,反超ChatGPT成为全球增长最快的AI应用,并且完全开源。那么究竟DeepSeek有什么魔力,能够让大家趋之若鹜,他又将怎样改变世界AI格…...
2025 WE DAY品牌日| 天璇II WE X7 Pro充电桩震撼发布,能效电气开启充电革命
随着新能源产业的迅猛发展,充电桩作为电动汽车能量补给的重要基础设施,正在成为市场关注的焦点。能效电气作为充电桩领域的佼佼者,专注于研发高效、智能的充电解决方案,为电动汽车的普及与可持续发展铺设了坚实的基础。 2025年2月21日,能效电气在深圳盛大举办了以“以创新 引未…...
agent和android怎么结合:健康助手,旅游助手,学习助手
agent和android怎么结合:健康助手,旅游助手,学习助手 创新点 智能交互创新:提出全新的agent - Android交互模式,如基于手势、语音、眼动等多模态融合的交互方式。例如让agent能够同时理解用户的语音指令和手势动作,在Android设备上提供更加自然和高效的交互体验,比如在…...
Python(二十二)实现各大跨境船公司物流查询CMA船司物流查询
一、前言 本章主要实现 【之前CMA船司物流信息查询】的遗留问题 解决思路 由于CMA船司查询需要进行[机器人验证] 方法1:直接从前端跳过,用selenium实现前端自动化,查询物流信息 方法2:捕捉到接口search,但需要将返回…...
Ollama 安装
Ollama 支持多种操作系统,包括 macOS、Windows、Linux 以及通过 Docker 容器运行。 Ollama 对硬件要求不高,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。 CPU:多核处理器(推荐 4 核或以上)。GPU…...
C++ 设计模式-备忘录模式
游戏存档实现,包括撤销/重做、持久化存储、版本控制和内存管理 #include <iostream> #include <memory> #include <deque> #include <stack> #include <chrono> #include <fstream> #include <sstream> #include <ct…...
复习dddddddd
1. 思路:用队列先进先出的特性 #include <iostream> #include <vector> #include <stack> #include <cstdio> #include <algorithm> #include <cstring> #include <climits> #include <cstdlib> #include <cma…...
大数据技术Kafka详解 ⑥ | Kafka大厂面试题
目录 1、为什么要使用kafka? 2、kafka消费过的消息如何再消费? 3、kafka的数据是放在磁盘上还是内存上,为什么速度会快? 4、kafka数据怎么保障不丢失? 4.1、生产者数据的不丢失 4.2、消费者数据的不丢失 4.3、kafka集群中的broker的数据不丢失 5、采集数…...
Jupyter里面的manim编程学习
1.Jupyterlab的使用 因为我之前一直都是使用的vscode进行manim编程的,但是今天看的这个教程使用的是Jupyter,我也很是好奇这个manim在Jupyter这样的交互式下面会生成怎么样的效果,所以今天尝试了jupyter,并且对于两个进行比较和说…...
hot100_19. 删除链表的倒数第 N 个结点
hot100_19. 删除链表的倒数第 N 个结点 思路 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 示例 2: 输入:head […...
✨1.HTML、CSS 和 JavaScript 是什么?
✨✨ HTML、CSS 和 JavaScript 是构建网页的三大核心技术,它们相互协作,让网页呈现出丰富的内容、精美的样式和交互功能。以下为你详细介绍: 🦋1. HTML(超文本标记语言) 定义:HTML 是一种用于描…...
机器学习的数学基础(三)——概率与信息论
目录 1. 随机变量2. 概率分布2.1 离散型变量和概率质量函数2.2 连续型变量和概率密度函数 3. 边缘概率4. 条件概率5. 条件概率的链式法则6. 独立性和条件独立性7. 期望、方差和协方差7.1 期望7.2 方差7.3 协方差 8. 常用概率分布8.1 均匀分布 U ( a , b ) U(a, b) U(a,b)8.2 Be…...
flutter将utf-8编码的字节序列转换为中英文字符串
这里遇到的问题是,我通过某种方式拿到了utf-8编码的字节序列,我只知道他们对应的是中英文字符。怎么将其转成中英文,并打印,让我对utf-8编码有了些许许的了解。 这里记录一下转换代码: String wifiName \xE9\xA1\xB…...
IM聊天系统架构实现
一、IM系统整体架构 二、企业级IM系统如何实现心跳与断线重连机制; 1、重连机制(服务端下线) 服务端下线,客户端netty可以感知到,在感知的方法中进行重连的操作,注意重连可能连接到旧的服务器继续报错&…...
基于腾讯云大模型知识引擎×DeepSeek构建八字、六爻赛博算卦娱乐应用
引言 随着DeepSeek的火爆,其强大的思维链让不少人越用越香,由于其缜密的思维和推理能力,不少人开发出了不少花里胡哨的玩法,其中一种就是以八字、六爻为代表的玄学文化正以“赛博玄学”的新形态席卷年轻群体。 针对于八字、六爻…...
k8s ssl 漏洞修复
针对Kubernetes集群中SSL/TLS协议信息泄露漏洞(CVE-2016-2183)的修复,需重点修改涉及弱加密算法的组件配置。以下是具体修复步骤及验证方法: 一、漏洞修复步骤 1. 修复etcd服务 修改配置文件 : 编辑 /etc/kubernetes/…...
linux文件管理命令ln
linux文件管理命令ln 1、软链接2、硬链接3、命令参数3.1、必要参数3.2、选择参数 4、应用示例4.1、创建硬链接4.2、创建软链接(符号链接)4.3、 对目录创建软链接4.4、强制覆盖目标文件 5、应用场景 它的功能是为某一个文件在另外一个位置建立一个同步的链…...
CT dicom 去除床板 去除床位,检查床去除
1. 前言 医院拍摄患者CT与MRI 图像, 但是CT图像中就会出现检查床的区域,来看CT扫描设备是什么样子的,红色标出区域 可以在图中看到,在头部位置安装有固定头部的类似支架的东西,这个东西拍摄出来时什么样子呢ÿ…...
扩散模型中,Flow Matching的训练方式相比于 DDPM 训练方法有何优势?
在扩散模型中,Flow Matching(FM)相比DDPM(Denoising Diffusion Probabilistic Models)的训练方法具有以下核心优势: 1. 更简单的训练目标 DDPM:通过逐步预测噪声来间接优化数据分布的变分下界(ELBO),需要设计多步的噪声调度策略,训练目标依赖马尔可夫链的分解。Flow…...
【用deepseek和chatgpt做算法竞赛】——还得DeepSeek来 -Minimum Cost Trees_5
往期 【用deepseek和chatgpt做算法竞赛】——华为算法精英实战营第十九期-Minimum Cost Trees_0:介绍了题目和背景【用deepseek和chatgpt做算法竞赛】——华为算法精英实战营第十九期-Minimum Cost Trees_1:题目输入的格式说明,选择了邻接表…...
Python实现GO鹅优化算法优化随机森林分类模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 在当今数据驱动的世界中,机器学习技术被广泛应用于各种领域,如金融、医疗、…...
