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

残差连接————Kimi注意力残差/字节混合注意力 - Big-Yellow

残差连接————Kimi注意力残差/字节混合注意力

作者:HuangJie
原文链接:https://www.big-yellow-j.top/posts/2026/03/21/attention-residuals.html
发布日期:2026-03-21

转载请注明出处,感谢!

本文主要介绍最新的Kimi的注意力残差连接以及字节的“残差”连接两篇论文,在最开始的残差连接方案1中:
Image
核心过程就是 x=x+f(x),随着不断的叠加卷积层数,那么就容易导致 梯度消失以及 退化问题,残差连接就是通过跳跃连接(skip connection),允许输入信息绕过若干层直接传递到后面的层。后续也有很多去对这个过程进行改进比如说使用门控残差连接、加权残差连接、修改连接位置等。不过影响都不是很大,因此对于残差连接过程就一直没有变化还是保持最开始的计算方式了。在kimi以及字节最近新发表两篇论文都是对这个过程做的改进具体解释如下。

Kimi注意力残差连接

首先按照论文中逻辑出发,在标准的残差计算中:hl=hl−1+fl−1(hl−1) 对于这个计算方式在计算梯度传播过程中会直接将每一层的贡献是相同(直接计算上公式梯度)因此后续论文就提出做一个门控的残差连接方式 hl=αl⋅hl−1+βl⋅fl−1(hl−1),对于上述两种残差注意力方式带来最大的问题就是:所有层的贡献都是一致的,除此之外后续层只能获取前层的信息导致更加前面层的信息被稀释(比如说l层只能获取l-1层信息,虽然l-2的信息会融合到l-1层但是l-2还是对l层的作用有限)。因此kimi的attention-residual出发点就是让后续层可以看到更加前面层的信息以及通过一个合适权重去控制残差连接,基于这个论文2里面提出方案如下图c中描述:
Image
对于_第n个block我将前面的几层的输出都进加权融合作为第n层的输入_,具体融合方式为:
hl=α0→l⋅h1+∑i=1l−1αi→l⋅fi(hi)
其中 ∑i=1l−1αi→l=1那么对于权重系数 αi→l 的计算方式为:
Image
其实也就是计算softmax的注意力权重,里面的 ql=wl 通过一个学习的向量以及历史层的输出去计算softmax值去控制权重特征融合。去看代码具体过程:

PYTHON

Copy

def block_attn_res(blocks: list[Tensor], partial_block: Tensor, proj: Linear, norm: RMSNorm) -> Tensor:V = torch.stack(blocks + [partial_block]) # [N+1, B, T, D]K = norm(V)logits = torch.einsum('d, n b t d -> n b t', proj.weight.squeeze(), K)h = torch.einsum('n b t, n b t d -> b t d', logits.softmax(0), V)return hdef forward(self, blocks: list[Tensor], hidden_states: Tensor) -> tuple[list[Tensor], Tensor]:partial_block = hidden_states          # 进入当前层的初始 hidden_states(通常是上一层的输出)# 在 Attention 子层前,先做一次 Block AttnResh = block_attn_res(blocks, partial_block, self.attn_res_proj, self.attn_res_norm)# 如果当前层是 Block 的边界层 → 把当前 partial_block 作为完整 Block 保存下来if self.layer_number % (self.block_size // 2) == 0:blocks.append(partial_block)       # blocks 列表增长,新增一个完成的 Block reppartial_block = None               # 重置 partial(新 Block 从零开始?代码这里有小问题,实际可能要用 h 或重置逻辑)# 自注意力子层(标准 Transformer attention)attn_out = self.attn(self.attn_norm(h))partial_block = partial_block + attn_out if partial_block is not None else attn_out# ↑ 标准残差:partial_block += attn_out   (Block 内部用经典 +)# 在 MLP 子层前,再做一次 Block AttnRes(用不同的 proj 和 norm)h = block_attn_res(blocks, partial_block, self.mlp_res_proj, self.mlp_res_norm)# MLP 子层mlp_out = self.mlp(self.mlp_norm(h))partial_block = partial_block + mlp_out               # 再次标准残差累加return blocks, partial_block    # 返回更新后的 blocks 列表 + 当前 Block 的 partial sum

其实通过代码很容易发现在block计算过程就是,输入前将前n层的block特征进行attention-residual方式特征融合,在计算完毕之后进行一个普通的残差连接,而后在将输出进行mlp处理之前再次通过一次attention-residual连接处理。

字节混合注意力

在字节论文3中提出混合注意力去解决:随着 LLM 的深度增加,它们往往会遭遇信号衰减的问题:在浅层形成的有用特征会因反复的残差更新而逐渐被稀释,使得它们在更深的层中更难恢复(出发点和kimi的attention-residual相同)。
Image
对于上图中提到的read以及write分别表示的是残差连接方式 x=x+f(x)里面分别对于x以及连接方式,比如说对于最开始残差连接我的read就是x(不去对x进行其他处理因此论文里面将其标记为identity)而我的连接方式是add因此将write处理为add。在上图b中选择直接将所有的信息进行拼接(比如说第i层计算输出就行和输入就行concat操作),虽然在信息传播过程是无损的,可以解决上面的信号衰减问题,但是这样会带来显存占用过高。那么论文里面提出Depth Attention处理过程为,对于输入通过相面方式处理:
Image
其中对于 Ki 以及 Vi 表示的GQA过程中我的历史缓存的kv值而 Ql−1 则是上一层的Q结果,通过注意力融合方式得到最终的输入 Xlin 直接将这个结果解析attention的注意力计算得到 Xlout,在得到结果之后通过:
Image
又可以得到新的一层的输出结果(相当于替代了之前的残差连接通过相加为线性层处理方式)。除此之外进一步提出升级的 Mixture-of-Depth Attention方式:
Image
对于上述过程中depth表示所有前面层的深度 KV cache(对应深度部分),而QKV则是表示当前层的结果(对应序列部分),10-23行处理序列部分注意力(就是比较常规的注意力计算过程),24-29行处理处理深度部分注意力,在计算注意力过程中会用softmax去更新同一个(m, acc, o),相当于将cache部分信息融入到注意力中。

总结

两篇论文中都是为了解决随着层数的叠加带来的“信息遗忘”问题,Kimi中选择直接将“历史block”信息通过注意力融合方式进行加权残差连接(attention-residual)也就是 y=α⋅hl+∑i=1l−1αhi,具体过程为将历史所有的block结果和用一个可学习的向量之间计算softmax作为权重 α 具体残差发生在:1、mlp处理前;2、每一个block处理之后。在字节的mixture-of-depth attention处理方式则是直接将GQA中的kv-cache中的KV值用来计算注意力去弥补信息损失,具体过程为在序列部分直接计算常规注意力,在深度部分(KV cache历史结果)部分通过历史结果去更新在序列部分计算得到的注意力结果

参考

  1. https://arxiv.org/abs/1512.03385 ↩

  2. https://arxiv.org/abs/2603.15031 ↩

  3. https://arxiv.org/abs/2603.15619 ↩

http://www.jsqmd.com/news/525058/

相关文章:

  • 海南乐卡科技客服咨询AI流量赋能,重塑智能体验新标杆 - 王老吉弄
  • Qwen3-ASR-1.7B入门必看:Streamlit界面源码结构解析与自定义UI修改指南
  • AI写教材必备指南:专业工具助力,快速打造低查重教材!
  • 实战解密il2cpp的global-metadata.dat文件:用IDA和VS Code逆向分析技巧
  • Vue3 + Element Plus 日期选择器:开始 / 结束时间,结束时间不超过今天
  • MacBook用户必看:Cursor免费版无限续杯的3种技术方案
  • 亲测有效!论文AI率直降40%的秘密:4个指令+3个技巧+1个神器
  • 知网/维普/万方三大平台AI检测全攻略:一文搞懂怎么通过 - 我要发一区
  • MiniCPM-V-2_6科研协作:会议白板照片识别+行动项自动提取
  • 高效获取网络小说与个性化阅读的全流程指南
  • 达摩院PALM春联模型应用场景:文旅景区AI楹联互动体验设计
  • 2026四川AI企业培训避坑指南:选对路径,少走弯路
  • 数组中有两个数据,将其变成字符串
  • 毕业论文降AI率:免费额度/效果/售后全维度对比 - 我要发一区
  • 网捷顺科技客服咨询AI流量赋能,重塑智能体验新标杆 - 王老吉弄
  • Clawdbot部署实操:Qwen3-32B与LangChain/LlamaIndex生态无缝集成指南
  • Breaking the Prior Dependency: A Novel Approach to Camouflaged Object Detection with Adaptive Featur
  • 嘎嘎降AI vs 比话降AI vs 率零:2026毕业季工具横评 - 我要发一区
  • 手把手教你为STM32F103C8T6(蓝色小药丸)编译Cleanflight固件,解决Flash溢出问题
  • kubernetes学习
  • OCPI开源充电接口:解决电动汽车充电网络互操作性的技术架构实战
  • 拿云文化客服咨询AI流量赋能,重塑智能体验新标杆 - 王老吉弄
  • 密码安全那些坑:为什么你的正则表达式可能漏掉键盘连续字符?
  • DocMost 容器化部署进阶:从单机到高可用集群
  • 【杠杆】杠杆,保证金,爆仓相关计算--23
  • 苏州同宠信息科技客服咨询AI流量赋能,重塑智能体验新标杆 - 王老吉弄
  • 应届毕业生必看:降AI率工具怎么选?3款不踩坑推荐 - 我要发一区
  • 【DFT实战解析】OCC架构设计:从原理到复杂层级集成的时钟控制策略
  • 正点原子2026开发板教程——从0开始配置Linux内核(4)内核模块详解:从 Hello World 到设备驱动
  • 2026年石油石化电力电缆生产厂家推荐 中低压低压中压变频聚乙烯聚氯乙烯绝缘线缆详解 - 品牌2026