news 2026/6/10 13:31:05

训练时,位置编码、Q、K 是怎么被优化成具有空间信息的?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
训练时,位置编码、Q、K 是怎么被优化成具有空间信息的?

下面我会给你一个完全贴近真实代码、从反向传播梯度角度、把训练如何“优化出空间结构”讲得最清楚的版本

这是很多人搞不明白的位置:
ViT 的可学习位置编码、Q/K 的方向、Multi-Head 空间关系,到底是怎么在训练中“自动学到”的?

我们一步一步来:


❤️ 核心问题:

“我在训练时,位置编码、Q、K 是怎么被优化成具有空间信息的?”

答案是:

梯度强迫它们形成空间结构。不是人工添加,是损失函数逼出来的。

下面我们从数学上看它怎么发生。


📌 Step 1:前向传播 (Forward)

输入一个 batch 的图像
→ 切 patch
→ patch + pos_encoding
→ 得到 patch token

然后:

Q = XW_Q K = XW_K V = XW_V

Attention:

[
A_{ij} = \frac{Q_i \cdot K_j}{\sqrt{d}}
]

然后经过 Softmax、加权求和、LayerNorm、MLP 等等。

最后输出分类结果:

[
y_{pred} = f(\text{Attention(…)}
]


📌 Step 2:计算损失 (Loss)

主要是分类任务:

[
Loss = -\log(p(\text{真实类别}))
]


📌 Step 3:反向传播(真正的魔法发生)

损失对 Q,K 的梯度如下:

🎯 反向传播会产生以下目标:

✔(1)相邻 patch 的 Q_i、K_j 必须方向相似

因为它们通常属于同一个物体局部区域。

这会导致梯度:

dLoss/dQ_i 指向 让 Q_i 靠近 K_j dLoss/dK_j 指向 让 K_j 靠近 Q_i

数学形式:

[
\frac{\partial Loss}{\partial Q_i} \propto \sum_j (A_{ij} - T_{ij}) K_j
]

其中 T 是“理想注意力矩阵”(来自 label 和任务结构)。

对于图像分类任务来说,
通常:

  • 相邻 patch → 对同一个语义最重要 → T_ij 高
  • 远处 patch → T_ij 低

因此:

相邻 patch 被迫让 Q_i 和 K_j 更对齐(θ 变小)。


✔(2)远处 patch 必须方向不同

否则注意力会把远离区域错误地混进计算。

梯度会使:

[
\frac{\partial Loss}{\partial Q_i} \text{ 让 } Q_i \text{ 远离 } K_{\text{远}}
]

→ 使角度变大(方向差远)。


✔(3)位置编码 pos_i 被迫区分不同 patch

因为:

X_i = patch_i + pos_i

所以:

[
\frac{\partial Loss}{\partial pos_i} = \frac{\partial Loss}{\partial X_i}
]

而此梯度来源于 Q,K 的优化。

因此:

  • 相邻 pos_i 和 pos_j 会被梯度推向相似方向
  • 远处 pos_i 和 pos_j 会被推向不同方向

这就是为什么 pos embedding 训练后呈现“空间坐标结构”。

有论文直接把 pos embedding 打印成二维图,看起来像一个(x,y)平面。


📌 Step 4:Multi-Head 如何被优化成不同空间关系?

因为每个 head 有独立的 Q/K 权重:

Q_h = X W_Q^(h) K_h = X W_K^(h)

损失对每个头的梯度不同。

导致:

⭐ Head 1:更容易捕获局部关系

梯度发现:邻近 patch 的注意力强 →
于是 W_Q1、W_K1 被调整为强调局部方向一致性。


⭐ Head 2:被梯度推向捕获“水平”结构

例如猫的身体在水平方向延展 →
这个 head 学会类似卷积的“水平核”。


⭐ Head 3:捕获全局轮廓

因为分类任务中,整体轮廓更重要,
梯度逼它学习 long-range attention。


⭐ Head 4:捕获纹理

训练中,对纹理敏感更有利,
梯度就把这个头调成高频检测器。


这些都是梯度流造成的自然“角色分化”,不需要人设定!

这称为:

🧠 Emergent specialization(多头注意力自然分工)


🎯 Step 5:如果你改变 head 数量,会怎样?

⭐ 头更多:

  • 每个头维度更小(d/head)
  • 梯度更容易让不同头 specialize
  • 几何关系的分解更细腻
  • 模型性能变好(到一定程度)

⭐ 头更少:

  • 每个头负担更大
  • 多种几何关系混合在一个空间 → 更难训练
  • 性能下降

🎉 最终大总结(你必须记住这 5 句)

🥇 1. 注意力分数最大化必须让 Q·K 最大 → θ 小 → 方向一致

(数学必然)

🥈 2. 相邻 patch 在任务中最相关 → 梯度强迫 Q/K 方向接近

🥉 3. 远处 patch 影响小 → 梯度强迫 Q/K 方向远离

🟩 4. pos embedding 的方向结构完全来自梯度驱动

🟦 5. Multi-Head 因为参数独立 → 梯度自然让它们学习不同几何关系


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 18:15:25

ShellCheck VS Code扩展终极配置指南

ShellCheck VS Code扩展终极配置指南 【免费下载链接】vscode-shellcheck Integrates ShellCheck into VS Code, a linter for Shell scripts. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-shellcheck Shell脚本开发中常常遇到语法错误、潜在问题难以发现&…

作者头像 李华
网站建设 2026/6/10 16:43:23

9 个继续教育文献综述工具,AI 写作降重推荐

9 个继续教育文献综述工具,AI 写作降重推荐 论文写作的“重灾区”:文献综述与降重的双重挑战 在继续教育的学习过程中,撰写文献综述是一项既重要又令人头疼的任务。它不仅是对已有研究成果的梳理和总结,更是展现学术思维与研究能力…

作者头像 李华
网站建设 2026/6/9 10:26:07

Spark命令行工具终极指南:如何在Shell中快速生成数据可视化图表

Spark命令行工具终极指南:如何在Shell中快速生成数据可视化图表 【免费下载链接】spark ▁▂▃▅▂▇ in your shell. 项目地址: https://gitcode.com/gh_mirrors/spark/spark Spark是一个轻量级的命令行工具,专门用于在终端中生成简洁的Sparkli…

作者头像 李华
网站建设 2026/6/10 16:36:36

IT68051:支持3D的双端口HDMI 2.0b接收器

IT68051为双端口HDMI 2.0b接收器,支持6.0 Gbps/通道速度,每个端口最高18 Gb/s带宽。它完全兼容HDMI 1.4b/HDMI 2.0b、HDCP 1.4/HDCP 2.2,并且向下兼容DVI 1.0规范。IT68051具备深色(最高36位)功能,确保高质…

作者头像 李华
网站建设 2026/6/10 16:50:17

PyFluent 实战指南:构建Python驱动的CFD工作流

PyFluent 实战指南:构建Python驱动的CFD工作流 【免费下载链接】pyfluent Pythonic interface to Ansys Fluent 项目地址: https://gitcode.com/gh_mirrors/py/pyfluent 在当今工程仿真领域,将Python编程能力与专业CFD工具相结合已成为提升工作效…

作者头像 李华
网站建设 2026/6/10 11:21:22

终极Marlin固件配置指南:从零开始快速上手

终极Marlin固件配置指南:从零开始快速上手 【免费下载链接】Marlin Marlin 是一款针对 RepRap 3D 打印机的优化固件,基于 Arduino 平台。 项目地址: https://gitcode.com/GitHub_Trending/ma/Marlin 还在为3D打印机固件配置头疼吗?每次…

作者头像 李华