矩阵向量求导速查手册:工程师的梯度推导实战指南
1. 这不是数学课是工程师手边的“求导速查手册”你打开一份机器学习模型的推导文档第一页就卡在了 $\frac{\partial}{\partial \mathbf{W}} \left( \mathbf{x}^\top \mathbf{W} \mathbf{y} \right)$ —— 符号密密麻麻下标横飞连括号都分不清是矩阵乘还是转置。你翻遍教材发现线性代数讲的是行列式和特征值微积分讲的是单变量函数中间那块“矩阵对矩阵求导”的空白像一道没焊上的电路板逻辑断开信号不通整个反向传播流程直接死机。这就是绝大多数人在接触深度学习底层、优化算法推导、或者自定义损失函数时的真实困境。它不考智商只考工具——而矩阵向量求导就是那个被长期低估、却高频使用的工程工具。刘建平Pinard老师的笔记之所以被反复搬运、截图、收藏根本原因不是它多“学术”而是它把一套混乱的符号体系整理成了可检索、可套用、可验证的操作型知识库。它不教你如何证明链式法则而是告诉你当你的损失是 $\mathcal{L} |\mathbf{A}\mathbf{x} - \mathbf{b}|^2_2$想算 $\frac{\partial \mathcal{L}}{\partial \mathbf{x}}$三步就能写出答案且每一步都有对应规则编号、适用条件和常见变形。我带过不少刚从学校出来的算法实习生他们能手推SVM的拉格朗日对偶但一碰到PyTorch里.backward()报出的梯度形状不对就陷入无解循环。后来我发现问题不在框架而在他们脑中缺少一张“求导映射表”不知道一个标量对列向量求导结果该是行向量还是列向量不清楚 $\frac{\partial \mathbf{y}}{\partial \mathbf{x}}$ 的雅可比矩阵到底是按“输出维度×输入维度”排还是反过来更别说 $\frac{\partial}{\partial \mathbf{X}} \text{tr}(\mathbf{A}\mathbf{X}\mathbf{B})$ 这种带迹运算的复合结构了。这些不是理论缺陷是工程接口缺失——就像你有台好车但说明书丢了油门刹车标反了再强的驾驶技术也白搭。这篇笔记的核心价值恰恰在于它彻底放弃了“从定义出发”的教学路径转而采用“场景驱动模式匹配”的工程师思维。它默认你已经知道偏导数是什么现在要解决的是在真实代码推导中如何不犯错、不查维基、不重推三遍直接写出正确梯度表达式。它把抽象的张量运算压缩成一组带编号的“求导公式卡片”每张卡片背面印着使用前提比如“$\mathbf{a}$为常向量$\mathbf{x}$为变量向量”、左侧是原始表达式、右侧是化简结果、右下角还标注了结果的维度形状。这不是数学笔记这是写在IDE注释里的“梯度速查API文档”。所以如果你正面临以下任一场景这篇内容就是为你准备的正在手推一个新损失函数的梯度但卡在某一步矩阵转置上不确定该不该加$^\top$在调试自定义Layer时torch.autograd.gradcheck报错怀疑是自己写的backward函数维度不匹配阅读某篇论文的附录推导看到 $\nabla_{\mathbf{W}} \text{tr}(\mathbf{W}^\top \mathbf{A} \mathbf{W} \mathbf{B})$ 就头皮发麻想真正理解为什么全连接层权重更新是 $\Delta \mathbf{W} -\eta \cdot \frac{\partial \mathcal{L}}{\partial \mathbf{y}} \mathbf{x}^\top$而不是 $\mathbf{x} \frac{\partial \mathcal{L}}{\partial \mathbf{y}}^\top$。它不承诺让你成为矩阵微积分专家但它能确保你在下次遇到类似问题时打开这份笔记30秒内定位到对应规则5分钟内完成推导10分钟内把结果写进代码并跑通。这才是工程实践中最稀缺的能力把模糊的数学直觉转化为确定的、可执行的、零歧义的操作步骤。2. 为什么不能照搬标量求导矩阵求导的三大“反直觉陷阱”很多人试图用标量微积分的经验去硬套矩阵求导结果屡试屡败。这不是你不够聪明而是矩阵求导本身存在三类根本性差异它们像三道隐形墙把习惯于单变量思维的人挡在外面。我见过太多人花一整天推导最后发现错在其中一个基础约定上——而这个约定教材里往往一笔带过笔记里却必须前置强调。2.1 陷阱一求导结果的“方向性”不再天然唯一标量对单变量求导结果永远是一个数没有方向问题。但标量对向量求导结果是一个向量而这个向量是行向量还是列向量取决于你采用的“分子布局”numerator layout还是“分母布局”denominator layout。这绝非学术争论而是直接影响你代码实现的生死线。举个最典型的例子设 $y \mathbf{a}^\top \mathbf{x}$其中 $\mathbf{a}, \mathbf{x} \in \mathbb{R}^n$。若按分子布局以分子为基准$\frac{\partial y}{\partial \mathbf{x}}$ 应与 $\mathbf{x}$ 同构即列向量结果为 $\mathbf{a}$若按分母布局以分母为基准则结果应与 $\mathbf{x}^\top$ 同构即行向量结果为 $\mathbf{a}^\top$。初看只是转置差别但后果极其严重。假设你正在写一个线性层的backward函数输入梯度grad_output是形状为(batch, out_features)的矩阵权重W是(in_features, out_features)。根据链式法则权重梯度应为input.T grad_output。这个.T从哪来正是源于我们统一采用分子布局将损失 $\mathcal{L}$ 视为分子标量将 $\mathbf{W}$ 视为分母矩阵那么 $\frac{\partial \mathcal{L}}{\partial \mathbf{W}}$ 必须与 $\mathbf{W}$ 同构即(in_features, out_features)。而推导过程必然出现 $\frac{\partial \mathcal{L}}{\partial \mathbf{z}} \mathbf{x}^\top$ 这一项其中 $\mathbf{x}^\top$ 的转置正是为了匹配维度——没有这个转置矩阵乘法根本无法进行。提示刘建平笔记全文采用分子布局Numerator Layout这是PyTorch、TensorFlow等主流框架的默认约定。所有公式右侧结果的形状均与求导变量分母一致。务必在开始前确认这一点否则后续所有推导都会“系统性错误”。2.2 陷阱二乘法不可交换导致链式法则必须严格保序标量乘法满足交换律$ab ba$。但矩阵乘法不满足$\mathbf{A}\mathbf{B} \neq \mathbf{B}\mathbf{A}$除非特殊情形。这意味着在对含矩阵乘积的表达式求导时你不能随意调换因子顺序链式法则的应用必须严格遵循运算顺序。考虑 $f(\mathbf{X}) \mathbf{a}^\top \mathbf{X} \mathbf{b}$其中 $\mathbf{a} \in \mathbb{R}^m$, $\mathbf{X} \in \mathbb{R}^{m \times n}$, $\mathbf{b} \in \mathbb{R}^n$。这是一个标量函数。若错误地认为“$\mathbf{a}^\top \mathbf{X}$ 是行向量再乘 $\mathbf{b}$ 是点积”进而尝试先对 $\mathbf{X}$ 求导再处理极易出错。正确做法是将整个表达式视为 $\text{tr}(\mathbf{a}^\top \mathbf{X} \mathbf{b})$因为标量的迹等于自身再利用迹的循环置换性质$\text{tr}(\mathbf{a}^\top \mathbf{X} \mathbf{b}) \text{tr}(\mathbf{b} \mathbf{a}^\top \mathbf{X})$。此时$\mathbf{b} \mathbf{a}^\top$ 是一个 $n \times m$ 矩阵与 $\mathbf{X}$ 同构因此 $\frac{\partial f}{\partial \mathbf{X}} \mathbf{b} \mathbf{a}^\top$。这个推导的关键在于把标量表达式主动改写为迹的形式从而将求导变量 $\mathbf{X}$ “挪”到迹运算的最右侧使其系数矩阵自然成为梯度结果。这背后是一整套基于迹运算的求导技巧而非简单套用乘积法则。笔记中大量公式如 $\frac{\partial}{\partial \mathbf{X}} \text{tr}(\mathbf{A}\mathbf{X}\mathbf{B}) \mathbf{A}^\top \mathbf{B}^\top$都是这一思想的结晶。它规避了直接对矩阵乘积求导的复杂性转而利用迹的优良代数性质将问题降维到“标量对矩阵求导”的标准形式。2.3 陷阱三高阶导数与张量现实工程中必须主动降维理论上矩阵对矩阵求导的结果是一个四阶张量$\frac{\partial \mathbf{Y}}{\partial \mathbf{X}}$ 的每个元素 $\frac{\partial y_{ij}}{\partial x_{kl}}$ 构成一个 $p \times q \times m \times n$ 张量。但在实际工程中我们几乎从不显式构造或操作这个四阶张量。原因很简单它太大且绝大多数应用场景如梯度下降只需要其在特定方向上的“收缩”结果。例如在神经网络反向传播中我们真正需要的从来不是完整的 $\frac{\partial \mathbf{Y}}{\partial \mathbf{X}}$而是给定上游梯度 $\frac{\partial \mathcal{L}}{\partial \mathbf{Y}}$ 后计算 $\frac{\partial \mathcal{L}}{\partial \mathbf{X}} \frac{\partial \mathcal{L}}{\partial \mathbf{Y}} \cdot \frac{\partial \mathbf{Y}}{\partial \mathbf{X}}$。这里的“$\cdot$”并非普通乘法而是张量收缩tensor contraction其具体实现就是矩阵乘法、转置、逐元素乘等基本运算的组合。刘建平笔记中所有“矩阵对矩阵求导”的公式本质上都是这种收缩后的梯度表达式而非原始的四阶张量。这就引出了一个关键实操原则永远以“最终需要的梯度形状”为起点反向设计推导路径。比如已知 $\mathbf{Y} \mathbf{X}\mathbf{W}$上游梯度 $\frac{\partial \mathcal{L}}{\partial \mathbf{Y}}$ 形状为(batch, out)$\mathbf{W}$ 形状为(in, out)那么 $\frac{\partial \mathcal{L}}{\partial \mathbf{X}}$ 必须是(batch, in)。由此倒推$\frac{\partial \mathcal{L}}{\partial \mathbf{X}}$ 必然等于 $\frac{\partial \mathcal{L}}{\partial \mathbf{Y}} \mathbf{W}^\top$。这个结论不需要你推导四阶张量只需维度分析矩阵乘法规则即可锁定。笔记的价值正在于它把大量这类“维度驱动”的推导结果固化为可直接调用的公式省去了每次都要重新做线性代数“拼图”的时间。3. 核心公式拆解从“抄作业”到“懂原理”的四层穿透刘建平笔记的主体是一系列编号公式。但单纯记忆编号毫无意义。真正的掌握是理解每个公式背后的生成逻辑、适用边界、维度约束和典型变体。下面我以四个最具代表性的公式为例进行逐层穿透式解析展示如何把“死记硬背”变成“活学活用”。3.1 公式 (1): $\frac{\partial \mathbf{a}^\top \mathbf{x}}{\partial \mathbf{x}} \mathbf{a}$ —— 最简起点也是最大误区源头表面看这似乎是最简单的公式一个常向量 $\mathbf{a}$ 和变量向量 $\mathbf{x}$ 的内积对 $\mathbf{x}$ 求导结果就是 $\mathbf{a}$。很多初学者看到这里就跳过了。第一层穿透维度验证左侧$\mathbf{a}^\top \mathbf{x}$ 是标量$1 \times 1$$\mathbf{x}$ 是 $n \times 1$ 列向量按分子布局求导结果应为 $n \times 1$ 列向量。右侧$\mathbf{a}$ 必须是 $n \times 1$ 列向量才能匹配。如果 $\mathbf{a}$ 是行向量此公式不成立。→实操心得在代码中永远检查a.shape x.shape。若a是(1, n)必须先a.squeeze()或a.T。第二层穿透推导本质展开内积$\mathbf{a}^\top \mathbf{x} \sum_{i1}^n a_i x_i$。对 $x_j$ 求偏导只有 $ij$ 项非零结果为 $a_j$。因此整个梯度向量就是 $(a_1, a_2, ..., a_n)^\top \mathbf{a}$。→关键洞察这个公式是“线性函数的梯度恒为其线性系数”的向量版。它揭示了求导的本质——找变化率而线性函数的变化率处处相同。第三层穿透常见变体若表达式为 $\mathbf{x}^\top \mathbf{a}$结果仍是 $\mathbf{a}$因标量转置不变。若为 $\mathbf{a}^\top \mathbf{X} \mathbf{b}$则需升维先固定 $\mathbf{X}$视作 $\mathbf{a}^\top (\mathbf{X}\mathbf{b})$再套用本公式得 $\frac{\partial}{\partial (\mathbf{X}\mathbf{b})} \mathbf{a}$再结合链式法则处理 $\mathbf{X}\mathbf{b}$ 对 $\mathbf{X}$ 的导数最终导向公式 (17)。第四层穿透避坑现场我在调试一个自定义注意力层时曾将query key.T的梯度误写为key导致训练崩溃。根源在于混淆了求导对象query是变量key是常量正确梯度应为key公式1但我的代码里key是(seq_len, dim)而query是(batch, seq_len, dim)维度不匹配。修正方案是key需广播或unsqueeze(0)以匹配query的 batch 维度。公式是骨架维度是血肉缺一不可。3.2 公式 (6): $\frac{\partial \mathbf{x}^\top \mathbf{A} \mathbf{x}}{\partial \mathbf{x}} \mathbf{x}^\top (\mathbf{A} \mathbf{A}^\top)$ —— 二次型的灵魂表面看这是二次型求导的标准结果常用于推导岭回归、PCA等目标函数的梯度。第一层穿透对称性破局若 $\mathbf{A}$ 是对称矩阵$\mathbf{A} \mathbf{A}^\top$公式简化为 $2\mathbf{x}^\top \mathbf{A}$。但现实中$\mathbf{A}$ 很少天然对称。公式中明确写出 $(\mathbf{A} \mathbf{A}^\top)$其物理意义是任何矩阵的二次型其梯度只依赖于该矩阵的对称部分。因为 $\mathbf{x}^\top \mathbf{A} \mathbf{x} \mathbf{x}^\top \left( \frac{\mathbf{A} \mathbf{A}^\top}{2} \right) \mathbf{x}$反对称部分贡献为零。第二层穿透推导复现设 $f(\mathbf{x}) \mathbf{x}^\top \mathbf{A} \mathbf{x} \sum_{i,j} x_i a_{ij} x_j$。对 $x_k$ 求偏导$$ \frac{\partial f}{\partial x_k} \sum_j a_{kj} x_j \sum_i x_i a_{ik} (\mathbf{A}\mathbf{x})_k (\mathbf{x}^\top \mathbf{A})_k $$注意$(\mathbf{x}^\top \mathbf{A})_k$ 是标量等于其转置 $(\mathbf{A}^\top \mathbf{x})_k$。因此整个梯度向量为 $\mathbf{A}\mathbf{x} \mathbf{A}^\top \mathbf{x} (\mathbf{A} \mathbf{A}^\top)\mathbf{x}$。由于我们采用分子布局结果应为行向量故写作 $\mathbf{x}^\top (\mathbf{A} \mathbf{A}^\top)$。第三层穿透工程映射在PyTorch中torch.nn.functional.linear的权重梯度计算本质就是此公式的应用。设输出 $\mathbf{y} \mathbf{W}\mathbf{x} \mathbf{b}$损失 $\mathcal{L} \frac{1}{2} |\mathbf{y} - \mathbf{y}{\text{true}}|^2$。则 $\frac{\partial \mathcal{L}}{\partial \mathbf{W}}$ 的推导会经过 $\frac{\partial}{\partial \mathbf{W}} \text{tr}((\mathbf{W}\mathbf{x} \mathbf{b} - \mathbf{y}{\text{true}})^\top (\mathbf{W}\mathbf{x} \mathbf{b} - \mathbf{y}_{\text{true}}))$最终化简为 $\mathbf{x} \mathbf{e}^\top$其中 $\mathbf{e}$ 是误差向量。这正是公式 (6) 在更高维度的投影。第四层穿透参数敏感性我曾在一个推荐系统项目中用此公式推导用户嵌入向量的梯度。初始 $\mathbf{A}$ 是稀疏的交互矩阵直接套用公式导致梯度爆炸。后来发现问题出在 $\mathbf{A} \mathbf{A}^\top$ 放大了稀疏矩阵的数值范围。解决方案是对 $\mathbf{A}$ 进行归一化预处理或在梯度更新时加入更强的 L2 正则项。这说明公式是普适的但其数值稳定性高度依赖于输入矩阵的性质。3.3 公式 (17): $\frac{\partial}{\partial \mathbf{X}} \text{tr}(\mathbf{A}\mathbf{X}\mathbf{B}) \mathbf{A}^\top \mathbf{B}^\top$ —— 迹运算的“万能钥匙”表面看这是迹运算求导的基石公式看似简单却是解锁绝大多数复杂矩阵求导的钥匙。第一层穿透迹的魔法迹trace是方阵对角线元素之和具有三个关键性质$\text{tr}(\mathbf{C}) \text{tr}(\mathbf{C}^\top)$$\text{tr}(\mathbf{C}\mathbf{D}) \text{tr}(\mathbf{D}\mathbf{C})$循环置换$\text{tr}(\mathbf{C} \mathbf{D}) \text{tr}(\mathbf{C}) \text{tr}(\mathbf{D})$。性质2是核心——它允许我们将求导变量 $\mathbf{X}$ “挪”到迹的最右侧从而将问题转化为标准形式。第二层穿透推导还原设 $f(\mathbf{X}) \text{tr}(\mathbf{A}\mathbf{X}\mathbf{B})$。利用循环置换$$ f(\mathbf{X}) \text{tr}(\mathbf{B}\mathbf{A}\mathbf{X}) \text{tr}((\mathbf{A}^\top \mathbf{B}^\top)^\top \mathbf{X}) $$现在表达式变为 $\text{tr}(\mathbf{C}^\top \mathbf{X})$其中 $\mathbf{C} \mathbf{A}^\top \mathbf{B}^\top$。而 $\text{tr}(\mathbf{C}^\top \mathbf{X}) \sum_{i,j} c_{ij} x_{ij}$即所有元素的点积。因此$\frac{\partial f}{\partial x_{ij}} c_{ij}$故 $\frac{\partial f}{\partial \mathbf{X}} \mathbf{C} \mathbf{A}^\top \mathbf{B}^\top$。第三层穿透组合应用几乎所有复杂公式都由它派生。例如公式 (18) $\frac{\partial}{\partial \mathbf{X}} \text{tr}(\mathbf{X}^\top \mathbf{A} \mathbf{X} \mathbf{B})$可先令 $\mathbf{Y} \mathbf{X}^\top \mathbf{A} \mathbf{X}$则 $f \text{tr}(\mathbf{Y} \mathbf{B})$再对 $\mathbf{Y}$ 求导得 $\mathbf{B}^\top$最后用链式法则处理 $\mathbf{Y}$ 对 $\mathbf{X}$ 的导数。整个过程就是将复杂表达式不断“剥洋葱”直至露出最内层的 $\text{tr}(\cdot \mathbf{X} \cdot)$ 结构。第四层穿透框架验证我曾用此公式手推一个自定义归一化层的梯度并用 PyTorch 的torch.autograd.gradcheck进行数值验证。设置 $\mathbf{A} \begin{bmatrix}1 2\3 4\end{bmatrix}, \mathbf{B} \begin{bmatrix}0.5 0\0 2\end{bmatrix}, \mathbf{X} \begin{bmatrix}1 0\0 1\end{bmatrix}$计算理论梯度 $\mathbf{A}^\top \mathbf{B}^\top \begin{bmatrix}0.5 6\1 8\end{bmatrix}$。数值梯度h1e-5结果为 $\begin{bmatrix}0.5000 5.9999\1.0000 7.9999\end{bmatrix}$误差在 $10^{-4}$ 量级完全吻合。亲手验证一次胜过背诵十遍。3.4 公式 (25): $\frac{\partial}{\partial \mathbf{X}} \log |\mathbf{X}| \mathbf{X}^{-\top}$ —— 行列式对数的优雅解表面看这是涉及矩阵行列式的高级公式常用于高斯过程、信息论或流形学习。第一层穿透可逆性前提此公式成立的前提是 $\mathbf{X}$ 可逆。若 $\mathbf{X}$ 奇异$\log|\mathbf{X}|$ 无定义梯度亦无意义。在实操中这意味着你必须确保 $\mathbf{X}$ 始终远离奇异点通常通过添加小扰动如 $\mathbf{X} \epsilon \mathbf{I}$实现。第二层穿透微分视角更本质的理解来自矩阵微分$d\log|\mathbf{X}| \text{tr}(\mathbf{X}^{-1} d\mathbf{X})$。对比标准形式 $df \text{tr}(\mathbf{G}^\top d\mathbf{X})$立即得到 $\mathbf{G} \mathbf{X}^{-\top}$。这个微分形式是所有矩阵求导公式的统一语言它绕开了繁琐的索引展开直击本质。第三层穿透计算代价$\mathbf{X}^{-\top}$ 的计算成本很高$O(n^3)$。在大规模应用中如 $n1000$直接求逆不可行。此时应转向迭代法或低秩近似。例如在变分自编码器VAE中若 $\mathbf{X}$ 是协方差矩阵常用 Cholesky 分解 $\mathbf{X} \mathbf{L}\mathbf{L}^\top$则 $\log|\mathbf{X}| 2\sum_i \log l_{ii}$梯度可直接对 $\mathbf{L}$ 计算避免求逆。第四层穿透数值陷阱在一次金融风控模型中我用此公式计算协方差矩阵的对数行列式梯度。初始数据未中心化导致 $\mathbf{X}$ 条件数极大torch.inverse返回 NaN。排查三天后发现只需在计算前对数据做x x - x.mean(0)问题迎刃而解。数学公式是完美的但数据是粗糙的。工程能力就是在这两者之间架桥。4. 实操全流程从一个真实损失函数推导到 PyTorch 代码落地理论终须落地。下面我以一个在工业界真实使用的损失函数为例完整演示如何运用刘建平笔记中的公式从零开始推导梯度并最终转化为可运行的 PyTorch 代码。这个过程就是笔记从“纸面知识”变成“肌肉记忆”的关键跃迁。4.1 场景设定带结构先验的矩阵分解损失假设我们正在构建一个推荐系统用户-物品交互矩阵 $\mathbf{R} \in \mathbb{R}^{m \times n}$ 稀疏且噪声大。我们采用矩阵分解模型$\hat{\mathbf{R}} \mathbf{U} \mathbf{V}^\top$其中 $\mathbf{U} \in \mathbb{R}^{m \times k}, \mathbf{V} \in \mathbb{R}^{n \times k}$ 是用户和物品的隐因子矩阵。为提升泛化性我们引入一个结构先验用户隐因子应服从一个已知的图拉普拉斯矩阵 $\mathbf{L}_u \in \mathbb{R}^{m \times m}$ 所定义的平滑性约束。具体损失函数为$$ \mathcal{L}(\mathbf{U}, \mathbf{V}) \underbrace{\frac{1}{2} \sum_{(i,j) \in \Omega} (r_{ij} - \mathbf{u}_i^\top \mathbf{v}j)^2}{\text{重建误差}} \underbrace{\frac{\lambda}{2} \text{tr}(\mathbf{U}^\top \mathbf{L}u \mathbf{U})}{\text{图正则项}} $$其中 $\Omega$ 是观测到的交互集合$\mathbf{u}_i$ 是 $\mathbf{U}$ 的第 $i$ 行$\mathbf{v}_j$ 是 $\mathbf{V}$ 的第 $j$ 列$\lambda 0$ 是正则化系数。我们的目标是推导 $\frac{\partial \mathcal{L}}{\partial \mathbf{U}}$ 和 $\frac{\partial \mathcal{L}}{\partial \mathbf{V}}$并用 PyTorch 实现。4.2 推导 $\frac{\partial \mathcal{L}}{\partial \mathbf{U}}$分步拆解与公式调用步骤 1处理重建误差项重建误差项可写为矩阵形式$\mathcal{L}{\text{rec}} \frac{1}{2} |\mathbf{R} - \mathbf{U}\mathbf{V}^\top|{\mathcal{F}}^2$其中 $|\cdot|{\mathcal{F}}$ 是 Frobenius 范数。回忆 Frobenius 范数的平方等于矩阵的迹$|\mathbf{A}|{\mathcal{F}}^2 \text{tr}(\mathbf{A}^\top \mathbf{A})$。因此$$ \mathcal{L}_{\text{rec}} \frac{1}{2} \text{tr}\left( (\mathbf{R} - \mathbf{U}\mathbf{V}^\top)^\top (\mathbf{R} - \mathbf{U}\mathbf{V}^\top) \right) $$展开 $$ \mathcal{L}_{\text{rec}} \frac{1}{2} \text{tr}(\mathbf{R}^\top \mathbf{R}) - \text{tr}(\mathbf{R}^\top \mathbf{U}\mathbf{V}^\top) \frac{1}{2} \text{tr}(\mathbf{V}\mathbf{U}^\top \mathbf{U}\mathbf{V}^\top) $$现在对 $\mathbf{U}$ 求导。第一项不含 $\mathbf{U}$导数为 0。第二项$-\text{tr}(\mathbf{R}^\top \mathbf{U}\mathbf{V}^\top)$符合公式 (17) 形式 $\text{tr}(\mathbf{A}\mathbf{U}\mathbf{B})$其中 $\mathbf{A} \mathbf{R}^\top, \mathbf{B} \mathbf{V}^\top$。应用公式 (17)$\frac{\partial}{\partial \mathbf{U}} \text{tr}(\mathbf{R}^\top \mathbf{U}\mathbf{V}^\top) \mathbf{R} \mathbf{V} \mathbf{V} \mathbf{R}^\top$等等这里需要小心公式 (17) 要求 $\mathbf{A}\mathbf{U}\mathbf{B}$ 中 $\mathbf{U}$ 是中间变量且 $\mathbf{A}, \mathbf{B}$ 维度需匹配。$\mathbf{R}^\top$ 是 $n \times m$$\mathbf{U}$ 是 $m \times k$$\mathbf{V}^\top$ 是 $k \times n$乘积为 $n \times n$迹合法。应用公式$\frac{\partial}{\partial \mathbf{U}} \text{tr}(\mathbf{R}^\top \mathbf{U}\mathbf{V}^\top) (\mathbf{R}^\top)^\top (\mathbf{V}^\top)^\top \mathbf{R} \mathbf{V}$。注意这是分子布局下的结果形状为 $m \times k$与 $\mathbf{U}$ 一致。第三项$\frac{1}{2} \text{tr}(\mathbf{V}\mathbf{U}^\top \mathbf{U}\mathbf{V}^\top) \frac{1}{2} \text{tr}(\mathbf{U}^\top \mathbf{U}\mathbf{V}^\top \mathbf{V})$利用循环置换。现在它变成了 $\text{tr}(\mathbf{U}^\top \mathbf{A} \mathbf{U})$ 的形式其中 $\mathbf{A} \mathbf{V}^\top \mathbf{V}$。这正是公式 (6) 的变体。公式 (6) 给出 $\frac{\partial}{\partial \mathbf{U}} \text{tr}(\mathbf{U}^\top \mathbf{A} \mathbf{U}) \mathbf{U}^\top (\mathbf{A} \mathbf{A}^\top) 2\mathbf

相关新闻

用Java解析抖音无水印视频和背景音乐:从原理到工程实现

用Java解析抖音无水印视频和背景音乐:从原理到工程实现

最近一段时间,隔三差五就有人来问我:用 Java 怎么拿抖音无水印视频和背景音乐?有人是想做个人素材库,有人想把喜欢的 BGM 单独存下来,还有人接了私活要做下载工具。这个问题说难吧,网上相关代码到处都是&am…

2026/10/15 6:44:49 阅读更多 →
RISC-V生态落地地图:从工具链到处理器核的选型与避坑指南

RISC-V生态落地地图:从工具链到处理器核的选型与避坑指南

简介:《RISC-V生态系统图景》是一份面向开发者、投资者、供应商及研究人员的开放指令集架构生态全景文档,系统梳理RISC-V从底层芯片到上层应用的关键模块。内容覆盖应用程序、库、基础设施、运行环境、操作系统、虚拟机、引导程序、单板机、加速器、处理…

2026/10/15 6:44:49 阅读更多 →
Spring Boot驾校预约微信小程序全解析:从数据库设计到部署

Spring Boot驾校预约微信小程序全解析:从数据库设计到部署

1. 项目概述:这个驾校预约小程序到底解决了什么问题先说结论:这是一套典型的“前后端分离 微信小程序端 管理后台”的驾校预约管理系统,技术底座是 Spring Boot,前端载体是微信小程序,交付物包含完整源码、毕业论文、…

2026/10/15 6:44:49 阅读更多 →

最新新闻

ModelArts工业级AI落地:从数据到手机端推理的完整闭环

ModelArts工业级AI落地:从数据到手机端推理的完整闭环

1. 这不是“点几下就能跑通”的玩具项目,而是真实产线级AI落地的最小可行闭环ModelArts 是华为云推出的面向AI开发者的全栈式平台,它不是单纯提供GPU算力的“云服务器替代品”,而是一套把数据准备、模型训练、超参调优、模型评估、服务封装、…

2026/10/15 8:44:53 阅读更多 →
Java+Vue全栈酒店预订系统开发实践

Java+Vue全栈酒店预订系统开发实践

1. 项目概述:酒店预订系统的全栈实现酒店预订系统作为现代旅游行业的核心基础设施,其技术实现涉及前后端协同、数据安全、高并发处理等关键环节。这个基于JavaVue的全栈项目,完整覆盖了从用户端预订到后台管理的全业务流程。我在实际开发中发…

2026/10/15 8:44:53 阅读更多 →
路由反射器RR原理详解:从iBGP全互联到Cluster防环与部署排障

路由反射器RR原理详解:从iBGP全互联到Cluster防环与部署排障

前一阵做网络割接,一台汇聚设备的BGP会话状态怎么都不对,路由表里一会儿缺前缀,一会儿下一跳不可达,排查到凌晨才发现是路由反射器(Route Reflector,RR)上的cluster配置在捣乱。当时盯着日志我就…

2026/10/15 8:44:53 阅读更多 →
天心ERP 9.0 MRP制程生产实操:从计划到车间执行的闭环指南

天心ERP 9.0 MRP制程生产实操:从计划到车间执行的闭环指南

简介:这是一套天心ERP 9.0 Sunlike版本中MRP制程生产系统的完整操作手册,面向企业信息化实施人员、生产计划及车间管理岗位,专门讲解制程生产模块的操作流程与系统逻辑。整个资源包仅含1个PDF文档,体积约17.75MB,页面清…

2026/10/15 8:44:53 阅读更多 →
算法训练三合一:数列求和、贪心算法与输出控制

算法训练三合一:数列求和、贪心算法与输出控制

1. 项目背景与需求解析"数列1修理牛棚按要求输出序列"这个看似奇怪的组合标题,实际上包含了三个典型的算法训练场景。这三个看似不相关的题目,恰恰覆盖了编程初学者需要掌握的几种核心能力:基础数学运算、贪心算法应用和格式化输出…

2026/10/15 8:44:53 阅读更多 →
个人站长AI可见性监测:Python+Playwright自动化采集实战

个人站长AI可见性监测:Python+Playwright自动化采集实战

个人站长最怕的一件事,不是服务器宕机,也不是流量下滑,而是某天你搜自己的品牌词,发现首页全是别人的内容,自己的站点连影子都找不到。更麻烦的是,你根本不知道是哪个环节出了问题——是内容没被收录&#…

2026/10/15 8:43:52 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →