【矩阵微分】在不涉及张量的前提下计算矩阵对向量的导数并写出二阶泰勒展开

本篇内容摘自CMU 16-745最优控制的第10讲 "Nonlinear Trajectory Optimization"。

如何在不涉及张量运算的前提下,计算矩阵对向量的导数并写出二阶泰勒展开

在多维微积分中,计算矩阵对向量的导数和二阶泰勒展开是一项重要的任务。本文将介绍如何在不涉及张量运算的前提下,完成该导数计算。

1. 导数计算的背景和动机

在许多工程问题中,我们需要计算一个矩阵函数对一个向量变量的导数,这些导数在求解优化问题过程中非常重要。但是矩阵对向量的求导结果,是一个三维张量。这导致在不具有张量运算知识的情况下很难进行数学推导和代码编写。

为了避免复杂的张量运算,我们可以利用矩阵的向量化和克罗内克积等技巧,简化计算过程。主要思想是将矩阵对向量的导数 (这是一个张量)转换为向量对向量的导数 (这是一个矩阵)。然后通过"Vec技巧",使得求得的矩阵可以用于泰勒展开式或其他数学推导中,作为张量的代替。

1.1. 克罗内克积(Kronecker Product)

克罗内克积是一种用于计算多维数组(如矩阵)的运算。假设 A ∈ R l × m \mathbf{A} \in \mathbb{R}^{l \times m} A∈Rl×m, B ∈ R n × p \mathbf{B} \in \mathbb{R}^{n \times p} B∈Rn×p,则它们的克罗内克积定义为:

A ⊗ B = [ a 11 B ⋯ a 1 m B ⋮ ⋱ ⋮ a l 1 B ⋯ a l m B ] ∈ R l n × m p . \mathbf{A} \otimes \mathbf{B} = \begin{bmatrix} a_{11} \mathbf{B} & \cdots & a_{1m} \mathbf{B} \\ \vdots & \ddots & \vdots \\ a_{l1} \mathbf{B} & \cdots & a_{lm} \mathbf{B} \end{bmatrix} \in \mathbb{R}^{ln \times mp}. A⊗B= a11B⋮al1B⋯⋱⋯a1mB⋮almB ∈Rln×mp.

1.2. 向量化操作符(Vectorization Operator)

向量化操作符用于将矩阵转换为向量。假设:

A = [ a 1 a 2 ⋯ a m ] ∈ R l × m . \mathbf{A} = \begin{bmatrix} \mathbf{a}_1 & \mathbf{a}_2 & \cdots & \mathbf{a}_m \end{bmatrix} \in \mathbb{R}^{l \times m}. A=[a1a2⋯am]∈Rl×m.

向量化操作符定义为:

vec ( A ) = [ a 1 a 2 ⋮ a m ] ∈ R l m × 1 . \text{vec}(\mathbf{A}) = \begin{bmatrix} \mathbf{a}_1 \\ \mathbf{a}_2 \\ \vdots \\ \mathbf{a}_m \end{bmatrix} \in \mathbb{R}^{lm \times 1}. vec(A)= a1a2⋮am ∈Rlm×1.

2. Vec技巧

Vec技巧是利用向量化和克罗内克积简化矩阵导数计算的一个方法。具体公式如下:
vec ( A B C ) = ( C ⊤ ⊗ A ) vec ( B ) . \text{vec}(\mathbf{A}\mathbf{B}\mathbf{C}) = (\mathbf{C}^{\top} \otimes \mathbf{A}) \text{vec}(\mathbf{B}). vec(ABC)=(C⊤⊗A)vec(B).

对于两个矩阵 A \mathbf{A} A和 B \mathbf{B} B,可以进一步简化为:
vec ( A B ) = ( B ⊤ ⊗ I ) vec ( A ) = ( I ⊗ A ) vec ( B ) . \text{vec}(\mathbf{A}\mathbf{B}) = (\mathbf{B}^{\top} \otimes \mathbf{I}) \text{vec}(\mathbf{A}) = (\mathbf{I} \otimes \mathbf{A}) \text{vec}(\mathbf{B}). vec(AB)=(B⊤⊗I)vec(A)=(I⊗A)vec(B).

引入该技巧后,这使得我们可以通过向量化操作计算矩阵对向量的导数。考虑到记号简明性,在未加说明的情况下,我们将"向量化后的矩阵对向量的导数"来指代"矩阵对向量的导数":
∂ A ( x ) ∂ x = ∂ vec ( A ( x ) ) ∂ x ∈ R l m × n . \frac{\partial \mathbf{A}(\mathbf{x})}{\partial \mathbf{x}} = \frac{\partial \text{vec}(\mathbf{A}(\mathbf{x}))}{\partial \mathbf{x}} \in \mathbb{R}^{lm \times n}. ∂x∂A(x)=∂x∂vec(A(x))∈Rlm×n.

3. 应用于二阶泰勒展开

通过上述技巧,我们可以计算出二阶泰勒展开的结果。设 A = ∂ f ∂ x \mathbf{A} = \frac{\partial \mathbf{f}}{\partial \mathbf{x}} A=∂x∂f,则二阶导数为:
∂ ∂ x ( vec ( I A Δ x ) ) = ( Δ x ⊤ ⊗ I ) ∂ vec ( A ) ∂ x . \frac{\partial}{\partial\mathbf{x}}\left(\text{vec}\left(\mathbf{I}\mathbf{A}\Delta \mathbf{x}\right)\right) = \left(\Delta \mathbf{x}^{\top} \otimes \mathbf{I}\right) \frac{\partial \text{vec}(\mathbf{A})}{\partial \mathbf{x}}. ∂x∂(vec(IAΔx))=(Δx⊤⊗I)∂x∂vec(A).

最终,我们得到二阶泰勒展开式:
f ( x + Δ x ) = f ( x ) + A Δ x + 1 2 ( Δ x ⊤ ⊗ I ) ∂ vec ( A ) ∂ x Δ x . \mathbf{f}(\mathbf{x}+\Delta \mathbf{x}) = \mathbf{f}(\mathbf{x}) + \mathbf{A} \Delta \mathbf{x} + \frac{1}{2} \left(\Delta \mathbf{x}^{\top} \otimes \mathbf{I}\right) \frac{\partial \text{vec}(\mathbf{A})}{\partial \mathbf{x}} \Delta \mathbf{x}. f(x+Δx)=f(x)+AΔx+21(Δx⊤⊗I)∂x∂vec(A)Δx.

这样对于接下来的数学推导或者代码编写都带来了便利。

在某些情况下,我们需要对转置矩阵求导,此时可以使用换位矩阵(commutator matrix) T \mathbf{T} T,满足 T vec ( A ) = vec ( A ⊤ ) \mathbf{T}\text{vec}(\mathbf{A}) = \text{vec}(\mathbf{A}^{\top}) Tvec(A)=vec(A⊤)。公式如下:
∂ ∂ x ( A ⊤ ( x ) B ) = ( B ⊤ ⊗ I ) T ∂ A ∂ x . \frac{\partial }{\partial \mathbf{x}}(\mathbf{A}^{\top}(\mathbf{x}) \mathbf{B}) = (\mathbf{B}^{\top} \otimes \mathbf{I}) \mathbf{T}\frac{\partial \mathbf{A}}{\partial \mathbf{x}}. ∂x∂(A⊤(x)B)=(B⊤⊗I)T∂x∂A.

相关推荐
知乎的哥廷根数学学派7 小时前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
你要飞1 天前
考研线代第三课:向量组
笔记·线性代数·考研·矩阵
aigcapi1 天前
AI 获客系统哪个好?矩阵系统哪个好?2026 客观测评 TOP4
大数据·人工智能·矩阵
一碗姜汤2 天前
【统计基础】卡尔曼滤波,矩阵对迹求导,Joseph Form,条件数
线性代数·矩阵
sunfove2 天前
麦克斯韦方程组 (Maxwell‘s Equations) 的完整推导
线性代数·算法·矩阵
yyy(十一月限定版)2 天前
matlab矩阵的操作
算法·matlab·矩阵
ComputerInBook2 天前
代数学基本概念理解——幺正矩阵(Unitary matrix)(酉矩阵?)
线性代数·矩阵·正交矩阵·幺正矩阵·酉矩阵
AI科技星2 天前
光速飞行器动力学方程的第一性原理推导、验证与范式革命
数据结构·人工智能·线性代数·算法·机器学习·概率论
一碗姜汤2 天前
【统计基础】从线性代数的直观角度理解SVD奇异值分解
线性代数
好奇龙猫2 天前
【大学院-筆記試験練習:线性代数和数据结构(5)】
数据结构·线性代数