Transformer 数学原理

上一篇笔记建立了 Transformer 的直觉和代码实现,这篇深入每个组件背后的数学原理。每个主题都标注了出处论文或博客,方便查阅原文。 一、Scaled Dot-Product:为什么除以 √dk? 出处:Vaswani et al. (2017) “Attention Is All You Need”, Section 3.2.1 上一篇笔记里我们知道 Attention 的计算公式是: $$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V$$其中: $Q$:Query 矩阵 $K$:Key 矩阵 $V$:Value 矩阵 $d_k$:Key 向量的维度 $\text{softmax}$:归一化函数(将分数转为概率分布) 但为什么要除以 $\sqrt{d_k}$?Vaswani et al. 在论文中给出了一句关键解释:“We suspect that for large values of $d_k$, the dot products grow large in magnitude, pushing the softmax function into regions where it has extremely small gradients.” 下面把这句话拆成严格的数学推导。 1.1 方差推导 假设 $q$ 和 $k$ 的每个分量都是独立同分布的随机变量,均值为 0,方差为 1。点积 $q^T k = \sum_{i=1}^{d_k} q_i k_i$。 ...

April 13, 2026 · 13 min

Self-Attention & Transformer 学习笔记

一、为什么要学 Transformer? Transformer 是当前深度学习的基础架构。NLP 领域的 BERT、GPT 系列,计算机视觉的 ViT,多模态模型 CLIP、Stable Diffusion——底层全是 Transformer。不理解 Transformer,后续读任何相关论文都会卡在架构细节上。 学完本笔记后,应该能回答:Q/K/V 怎么算?Multi-Head 为什么有用?Positional Encoding 干什么的?Encoder 和 Decoder 有什么区别? 二、Self-Attention(自注意力机制) 2.1 核心问题:如何处理变长序列? 输入可能是一句话(5个词)、一段语音(200帧)、一张图(196个patch),长度不固定。传统 FC 层要求固定输入维度,无法处理这种情况。 生活类比:你在教室里坐着,老师点名提问。FC 层相当于老师只看你一个人;Self-Attention 相当于老师让全班每个人都互相看一眼,综合所有人的信息后再做判断。 2.2 Self-Attention 的计算流程 假设输入序列有 T 个 token,每个 token 是一个 d 维向量: 输入:X = [x₁, x₂, ..., xT],shape = [T, d] 第1步:生成 Q, K, V(三个"角色") Q = X @ Wq # Query: "我在找什么?" shape = [T, dk] K = X @ Wk # Key: "我能提供什么?" shape = [T, dk] V = X @ Wv # Value: "我的实际内容" shape = [T, dv] 第2步:算 Attention Score(谁和谁最相关?) Score = Q @ K^T # shape = [T, T],每对 token 之间的相关性 Score = Score / √dk # 缩放,防止数值过大导致 softmax 梯度消失 第3步:Softmax 归一化 Attention = softmax(Score, dim=-1) # 每行和为1,变成概率分布 第4步:加权求和 Output = Attention @ V # shape = [T, dv] 生活类比: ...

March 13, 2026 · 14 min

Domain adaptation入门笔记(1.超基础知识篇)

本文为我入门域适应的一些随手记,按照时间顺序进行排序,包含了一些思考和反馈。 摘录我阅读的文章原文部分使用斜体,关于思考总结的部分使用正常字体。 第一次阅读 阅读材料:迁移学习入门之一:域适应的背景,理论与方法 在机器学习中,Domain Shift是一个很常见的问题,即在训练数据与真实场景来自于不同的分布。 如在医学深度学习模型中,用A医院的数据(Source Domain)训练的模型往往在B医院(Target Domain)预测不准。在摄像头行人重识别(Re-ID)问题中,多个摄像头捕捉的场景分布完全不一致,导致单个行人在多个摄像头中的"重识别"变得较为困难。在联邦学习中,不同客户的数据分布不一致(non-iid)也是最常见的全局模型训练问题。 而domain adaptation即是对于domain shift的一种解决方案。与其他流派(如迁移学习和微调)不同的点在于,domain adaptation保留了在source domain上的高精度, 并通过一些方法缩小表示空间(将数据从原始输入形式“如图像、文本”转换后得到的特征向量所在的抽象空间,在当前语境下,它是源域与目标域数据通过特征提取层映射后的空间)上Source与target模型特征的距离。 在了解大方向后,文章给出了一些数学推导,我感觉有点难以理解,这里先记录一些定义和简单的公式: 文章定义一个domain由两个部分组成:$D,f$ $D$(分布函数):可以理解为“画风“或数据长什么样。比如源域$D_S$是高清图,目标域$D_T$是高斯模糊图。 $f$(标签函数):是数据的标签,如在二分类问题中输入一张图$x$,它到底是猫还是狗(0或1)。 在 Domain Adaptation 中,我们通常假设物体的本质不变,只是画风变了。 也就是说,一张猫的图片,无论变多模糊,它依然是猫。也就是: $f_S \approx f_T$, 但是 $D_s \neq D_T$ 什么是误差? 公式 : $$ \epsilon(h, f; \mathcal{D}) = \mathbf{E}_{\mathbf{x} \sim \mathcal{D}}|h(\mathbf{x}) - f(\mathbf{x})| $$ $h$ (hypothesis,假设):学习函数,就是我们训练的模型网络。 $f$:真实标签。 $\epsilon$ (error):误差。 这个公式大概是代码里写的 Loss 函数(或者说测试集上的错误率)。 它表示:在某种画风 $\mathcal{D}$ 下,你的模型 $h$ 预测的结果,和真实答案 $f$ 之间相差多少。 $\epsilon_S(h)$:模型在源域(清晰图)上的错误率。 $\epsilon_T(h)$:模型在目标域(模糊图)上的错误率。 我们手里只有源域的标签,所以我们只能把 $\epsilon_S(h)$ 训练得很小。但我们真正想要的是,$\epsilon_T(h)$ 也很小。 关键公式:泛化误差上界 $$ \epsilon_T(h) \le \epsilon_S(h) + d_1(\mathcal{D}_S, \mathcal{D}_T) + \text{常量} $$我们把这个公式拆成三块来看: 你要想让目标域错误率 $\epsilon_T(h)$ 很小(等号左边),你必须让等号右边的三项都很小: ...

March 6, 2026 · 4 min